《Neural Networks for Machine Learning》学习二

来源:互联网 发布:windows pe修复 编辑:程序博客网 时间:2024/05/11 05:01

前言

课程地址:https://www.coursera.org/learn/neural-networks/home/week/1‘’
【Lecture 2】百度云下载地址:链接:http://pan.baidu.com/s/1nvMynhR 密码:ru3y

神经网络架构概览

前馈神经网络(Feed-Forward neural network)

在实际应用中最为常见

——第一层是输入,最后一层是输出

——如果隐单元多于一层,我们称为“深度”神经网络

它们计算了一系列的转换(参数),可改变样本之间的相似度

——每一层的活跃神经元是其下层(below)活跃神经元的非线性函数


循环神经网络(Recurrent Network)

连接图中具有有向环

——意味着沿着箭头,可能回到了最初的出发点

可以有复杂的动态特性,这使得它们很难训练

——寻找有效率的训练方法是当前比较热门的一个研究

它们更具有生物学真实性(biologically realistic)


循环神经网络具有多个隐藏层,而且是具有隐单元->隐单元(hidden->hidden)连接丢失的一个特殊的案例

为序列建模的循环神经网络

循环神经网络是为序列数据建模比较自然(nature)的一种方法

——等价于每一个时间片就具有一个隐藏层的非常深的网络

——除了在每一个时间片使用相同的权重外,还在每个时间片接受输入

在隐藏层具有为长时间序列记忆信息的能力

——就是使用这个潜力(potential)去训练网络比较难


循环神经网络所能做的一个实例

※IIya Sutskever(2011)训练了一个特殊的循环神经网络,可以预测一个序列的下一个字符

※使用来自英文的维基百科中具有五亿(half a billion)字符的一个字符串训练了很久,就可以生成新的text文档

——生成的方法是预测下一个字符的概率分布,然后从这个分布中采样一个字符出来

——下面介绍它生成的一个text文档。请注意它到底知道多少事情

※IIya Sutskever的循环神经网络生成的文档(每个时间点生成一个字符)


对称连接神经网络(Symmetrically connected network)

与循环神经网络类似,但是单元之间的连接是对称的(每个方向具有相同的权重)

——John Hopfield(和其他人)认识到对称神经网络比分析一个循环神经网络更简单

——对于他们所能做的也有很多限制,因为违背了能量函数(energy function)

※比如它们不能模拟循环

具有对称连接的神经网络称为“Hopfield nets”

具有隐层的对称连接神经网络

这些称为“玻尔兹曼机(Boltzmann Machine)”【终于Hinton老爷子在第二节课忍不住把成名作拿出来了】

——比Hopfield nets更具有能力
——比循环神经网络差点

——具有非常“漂亮”的简单地学习方法(难道是吉布斯采样?对比散度?)

第一代神经网络

统计模式识别的标准范例

1.将原始输入向量转换为激活特征向量

——手写案例中使用常识或者经验来定义特征

2.学习如何为激活特征加权重,去获取单独的梯度量(single scalar quantity)

3.如果这个量超过某个阈值,就可以决定输入向量是目标类别的一个正向激励样本,感觉就是说如果大于阈值,就说这个样本是属于这个类别的。

标准感知器结构



感知器历史

在20世纪60年代早期(1960's)被Frank Roseblatt 变换形式(popularised)

——开始具有好的(powerful)学习算法

——有大量的声明称他们可以学习去干什么

在1969年,Minsky和Papert出版了一本书叫做“Perceptrons”,分析它们能做什么以及他们的限制

——很多人认为这些限制是所有神经网络模型共有的

感知学习过程在如今依旧被广泛使用,即使是那些具有数以百万计特征的巨大特征向量的任务中

二值阈值神经元(决策单位)

McCulloch-Pitts(1943)

——第一次从其他神经元计算输入的加权和(加上一个偏置)【应该就是所谓的wx+b】

——如果加权和超出0,就输出一个1


如何像学习权重一样使用相同的规则去学习偏置

一个阈值等价于具有一个负的偏置(negative bias)【自我感觉训练的时候这个负不负无所谓吧,反正都是自动学习的,不管你怎么初始化】

我们可以通过使用一个小技巧去避免必须为偏置指定一个单独的学习规则

—— 一个偏置完全等价于在输入行的一个额外的激活值为1对应的一个权重【比较拗口,我的理解就是,这样wx就等于wx+b了】

——这样我们就可以学习一个偏置,这时候这个偏置就像一个权重了


感知器收敛过程:训练二值输出神经元作为分类器的情况

在每一个输入向量的尾部增加一个额外值1,“偏置”权重在这个成分上的阈值是负(minus)的,现在我们可以忘掉这个阈值。

可以使用任何策略去保证每一个训练样本都会被丢到网络中训练

——如果输出单元是正确的,就单独留下权重

——如果输出单元是错误的,且输出为0,就将输入向量加到权重向量

——如果输出单元是错误的,且输出为1,就将输入向量从权重向量中减去

这保证了寻找到一组权重,能够为所有的训练样本得到正确的答案(如果有这样的集合存在的话)

感知器的几何角度观点

注意

如果是非数学专业的,这一部分可能比前面难点

——你需要使用很长时间去学习接下来的两部分

如果你没有尝试过在高维空间中思考超平面(hyper-planes),那么现在就是学习的时机。

在14维空间中处理超平面,可视化3D空间以及大声对自己说“十四”,每个人都做~~~【这是闹哪出?o(╯□╰)o】

※记住从13维到14维会比从2维到三维有额外的复杂度。

权重空间

这个空间中对于每一个权重都是一维

空间中的每一个点就是由所有权重合起来代表

假如我们去掉了阈值,那么每一个训练案例就可以被一个通过原点(origin)的超平面所表示

——权重必须在超平面的一侧,以获取正确答案

每一个训练样本都定义了一个平面,比如下图的黑线

——平面过原点,并且垂直于输入向量

——平面的一侧是错误的,因为权重与输入向量向量的内积(数量积scalar product)具有错误的迹象(sign)


可行解(feasible solutions)锥(cone)

【PS】cone应该是翻译成锥吧,看网上dual cone翻译成数学名词“对偶锥”

为了让训练案例都得到正确解,我们需要找到位于所有平面的正确侧的一个点

——可能根本没有这样的点

如果有任何权重对于所有的案例都有正确解,那么它们将位于一个超锥,且顶点在原点

——所以两个好的权重向量的平均也是好的权重向量

※这是一个凸问题(convex)



为什么学习会有效

为什么学习过程会有效?——第一个尝试

思考可行权重向量(feasible weight vector)和当前权重向量(current weight vector)的平方距离

——有用的要求:每次感知器发生错误的时候,学习算法就将当前权重向量朝所有的可行权重向量移动

可能也会有问题:下图的黄点就是可能不会被接近的可行向量


考虑到由一个边缘(margin)规定的可行区域的“丰富的可行(generously feasible)”权重向量至少与定义每一个约束平面(constraint plane)的输入向量长度一样大。

——感知器每一次发生错误,到所有丰富的可行权重向量间平方距离经常减少了至少更新向量的长度(贴一下这句话的原话: the squared distance to all of these generously feasible weight vectors is always decreased by at least the squared length of the update vector)


非正式的收敛证明示意

※感知器每次出错,当前权重向量就会朝着与“丰富可行”区域的每一个权重向量平方距离减少的方向移动

※平方距离减小了至少输入向量的平方长度(原话:The squared distance decreases by at least the squared length of the input vector)

※所以当经过有限(finite)出错以后,权重向量应该会稳定在可行区域(如果这个区域存在的话)

感知器不能做什么

感知器的限制

如果允许手动选择特征并且假设你使用了足够的特征,你几乎可以做任何事情。

——对于二值输入向量,我们可以为每一个指数级的二值向量有一个单独的特征单元,因此我们可以在二值输入向量上做任意的可能的判别工作。

※这种类型的查找表(table look-up)不会发生

一旦手工编码特征被决定,感知器的学习能力将会受到极大限制

二值阈值不能做什么

二值阈值输出单元不能指出两个由一位编码(single bit)的特征相同!

正样本(相同):(1,1)->1;(0,0)->1

负样本(不同):(1,0)->0;(0,1)->0

四个输入输出对给定了四个不平等的(inequalities)推断,是不可能被同时满足的




二值阈值神经元无法做的事情的几何视角

想想一下由一个输入向量组成坐标轴的“数据空间(data-space)”

——每个输入向量是空间中的一个点

——权重向量在数据空间中定义了一个超平面

——权重平面是垂直于权重向量的,是不过原点的,与原点的距离就是阈值的大小


判别循环(wrap-around)变化(translation)的简单模式

※假设我们使用像素作为特征

※一个二值阈值单元是否能判别具有相同像素点数目的不同模式?

——如果模式不循环转变!


关于二值决策无法判别具有相同像素数的模式的证明草图(假设循环转换)

对于模式A,使用所有可能转换的训练案例

——模式A中每个像素会被4种不同的转换所激活

——因此所有的被这些模式的决策单元接受的输入是所有权重总和的四倍

对于模式B,使用所有可能转换的训练案例

——模式B中每个像素被4中不同的转移所激活

——因此所有的被这些模式的决策单元接受的输入是所有权重总和的四倍

但是为了正确判别,模式A的每一个单独案例必须为决策单元提供比模式B的每个案例更多的输入。

——如果样例数目总和是相同的,那么上述情况就不太可能了。

为什么感知器的这种结果是灾难性的(devastating)

模式识别的关键在于识别模式,不论是何种转变(despite transformations like translation)

Mnisky和Papert's 的“组不变性定理(group invariance theorem)”指出在转变形成一个组的时候,感知器学习不能很好学习的(原文:the part of a Perceptron that learns cannot learn to do this if the transformations form a group)。

——具有循环特性的转换就能形成一个组

为了处理这种转换,感知器就需要使用多个特征单元去识别信息子模式(informative sub-patterns)的转变

——所以模式识别比较“狡猾(tricky)”的部分必须使用手动编码特征探测器的方法去解决,而非使用学习过程

具有隐藏单元的学习

没有隐单元的神经网络非常受限于他们所能学习到的模型的输入-输出映射

——更多的线性单元层根本没啥用,因为依旧是线性的

——修正输出为非线性(non-linerities)的并不足以弥补

我们需要多层具有自适应能力和非线性的隐单元。但是我们如何去训练这种网路呢?

——我们需要一种有效率的方法去调整(adapt)所有权重,并仅仅关注最后一个单元层。这很难。

——学习连接到隐单元的权重等价于学习特征。

——这还是比较难的,比因为没有人直截了当地告诉我们隐单元应该干啥



0 0
原创粉丝点击