[Hinton]Neural Network for Machine Learning-Main types of neural network network architecture

视频学习链接

参考博文

个人学习记录,有参考博文。初学阶段对知识的学习与理解必定会有谬误或误解,希望路过的前辈不吝赐教。

Lecture 2


通过上一章我们知道,感知机的权重总是越来越接近一组好的权重;但在线性神经网络中,输出总是越来越接近目标类

为什么感知机的学习过程不能通用到隐藏层呢?
如上所述的感知机工作过程,当他被应用到更加复杂的网络中时,可能会出现两组不同的解决方案,但有可能会选到其中的较坏的一项。

线性神经元(线性过滤器):学习目的是最小化所有训练案例的错误总和(错误指的是目标输出与实际输出的平方差)
y=\sum_{i}w_{i}x_{i}=W^TX,其中W为权值向量的转置,X为输入向量。

那么,针对这一问题,通过数学分析很容易就能够得到答案,为什么不用数学的方法呢?
数学方法中,直接分析依赖于线性和平方差值的测量;迭代方法虽然效率较为低下但十分简单。BUT!
在科学的角度上讲,希望能够知晓人类大脑的运作机制;在工程的角度讲,我们希望能够有一种多层的、非线性的神经网络算法去高适用的解决问题。

关于迭代,Hinton举了这样一个例子:
每天你都会在餐馆选数样餐品,而营业员仅将你所点的餐品总金额告诉你。当你吃了足够天后就能够猜测出每个餐品的单价。
从随机的价格猜测开始,然后通过加入的新的输入逐渐调整使之更符合答案。
其中,按照上述计算式来讲,X即为输入向量(餐品份数),W即为权值向量(餐品单价)。是一个线性神经元。
计算过程:猜测总价500,单价(50,50,50),数量(2,5,3);实际价格850,单价(150,50,100),数量(2,5,3)
                  差值(Residual error):850-500=300;学习方式delta-rule:\Delta w_{i}=\varepsilon x_{i}(t-y),其中t即target(850),y即ouput(500)。\varepsilon为学习速率,为1/35。
                  此轮计算后W={70,100,80}。注意针对第二个单价的猜测反而是变坏的,即这种算法不一定每次都向着好的方向。

Delta-rule:定义所有训练案例的平方差值E=\frac{\sum_{n\epsilon training}(t^n-y^n)^2}{2}。当误差改变时,权重也会随之变化,\frac{\partial E}{\partial w_{i}}=\frac{1}{2}\sum_{n}\frac{\partial y^n}{\partial w_{i}}\frac{dE^n}{dy^n}=-\sum_{n}x_{i}^n(t^n-y^n)。我们所得到的学习规则是改变的权重\Delta w_i等于负的学习速率乘以误差对权重的偏导数,也就是所有训练案例的预测差值乘以输入向量乘以学习速率,即\Delta w_i=-\varepsilon \frac{\partial E}{\partial w_i}=\sum\varepsilon x_i^n(t^n-y^n)。(?btw虽然课程中说的是平方差,数字式外也写的平方差,但ppt给出的算式中写的确实n次方。不清楚这里的上标的含义。)

迭代程序的实际表现:1、他给出的答案并不一定是最优解。
                                    2、如果给出的学习速率足够低,那么我们可以尽可能地得到一个最优解。
那么我们多久才能得到一个最优解呢?
即使是线性神经元,要得到一个最优解也是十分缓慢的。迭代学习中,如果输入是两个高维的是高度相关的,那么很难判断两者的权重总数是多少。如上例中,假设你每次都点了相同的餐,那他对学习过程是没有效用的。

在线delta-rule和感知机学习规则的关系:在感知机学习中,我们通过输入向量来决定增减权重向量,但只有在犯错的时候才会去做这件事。在delta-rule中,我们通过输入向量的差值和学习速率来决定增减权重向量;但恼人的是,如果学习速率过大,系统将会变得不稳定;如果学习速率太小,我们就会花费很多不必要的时间。


线性神经元的误差曲面

误差曲面在一个水平轴为各个权值,垂直轴与误差相对应的空间中。在这个平面中,水平面上的点对应于权重,高度对应训练案例的权重误差。
对于一个线性神经元来说,他的误差曲面是一个二次的碗状。如果取水平截面就会得到一个椭圆,取垂直截面就会得到一个抛物线。

多层次、非线性的神经网络中误差曲面都会更加的复杂。只要权值不过大,他们就还会是一个光滑曲面,并且可能会有许多局部最小值。

我们可以利用这个误差曲面,得到我们所做的事情的按delta-rule的梯度下降的一个图像。该规则的作用就是计算误差对权重的导数。如果你按这个导数的比例改变权重,那就相当于在误差面上做最陡的下降。

如上图,这就是一个简单的批处理学习所展示的图像,我们可以得到训练案例的所有梯度(左图)。我们也可以在线学习,在每个训练案例之后按照梯度的比例来改变权重(右图)。
如果我们从一个红点开始训练,在第一个训练方式,也就是delta-rule来计算梯度的话,会让我们垂直移动。如果是第二个训练方式,我们就会从垂直一条线移动到垂直另一条线移动,最终曲折地走向最终解。

为什么学习非常缓慢?

从上图我们可以发现,椭圆面被拉得很长。这种情况说明训练案例所对应的线几乎平行,我们看他们的梯度时就会发现他有一个糟糕的性质——梯度在我们不需要的方向上(红色箭头方向)很大,根据规则我们需要向着梯度方向沿椭圆长轴移动,这就花费了很长时间。这与我们所谋求的相反。


逻辑神经元

逻辑神经元通过输入给出一个真值输出,且其函数图象是光滑非线性的。

其中,我们可以得知:\frac{\partial z}{\partial w_i}=x_i\frac{\partial z}{\partial x_i}=w_i。outputy=\frac{1}{1+e^{-z}}\frac{dy}{dz}=y(1-y)
由此我们根据链式求导法则,得\frac{\partial y}{\partial w_i}=\frac{\partial z}{\partial w_i}\frac{dy}{dz}=x_iy(1-y)。最终我们得到了逻辑神经网络的学习规则:\frac{\partial E}{\partial w_i}=\sum_n\frac{\partial y^n}{\partial w_i}\frac{\partial E}{\partial y^n}=-\sum_nx_i^ny^n(1-y^n)(t^n-y^n),其中头尾两项与Delta-rule相同 ,多出来的中间两项实际上是逻辑神经元图像的斜率。


反馈算法

扰动学习(Learning by perturbing weight):从生物学角度讲,他的思想来自于进化论。通过随机的改变权值,去观察它带来的影响是否有利。若是,则留下这个改变。
属于一种强化学习。且是一种效率低下的方法,我们有可能会需要大量的尝试扰动(且该扰动所带来的变化需要大量训练案例的支持)才能够确定一个有利的改变。且该种方式最终的学习结果常常不尽如人意。

针对扰动学习,我们可以提升他的效率。平行的随机扰动所有权值,然后将性能的变化与权值联系起来。但实际上并无帮助,原因是我们需要大量的训练案例以保证能够在所有权值都变化引起的噪音中获取所需要的变化。
更进一步地,我们可以随机地扰动隐藏单元的活动,而不是直接干扰权重。一旦你知道如何对训练案例进行隐藏单元的扰动,那就可以高效的、有目的的去改变权值;但因为神经元的数量比权重少很多,所以你能够随意探索的也就变少了。他虽然在效率上有了提升,但仍旧不如反向传播算法。

反向传播算法(backpropagation):我们不知道隐藏单元应该做什么,因为没有人告诉我们隐藏单元的状态,但我们可以计算出在一个特定的训练案例中改变隐藏活动时误差的变化有多快,即误差是如何随着一个隐藏单元的激活值改变而改变的。所以我们不使用隐藏单元的活动作为期望状态,而是使用隐藏活动的误差导数。因为每个隐藏单元的活动可以印象到很多输出单元,并且对误差有这不同的影响。这些影响必须结合起来。这样我们就可以有效率的在同一时间计算出所有隐藏活动的误差导数。
,其中j为输出层的多个输出,i为隐藏层序号。
(?感觉像是类似前面提到的通过总价猜测单价地思想。通过改变靠后的输出y_i来推测前面隐藏层中所发生地改变。)
参考了其他博文稍微有点了解了。以下是参考博文原文:所以从反方向考虑,不去寻找合适的激活值去训练隐藏单元,而是使用误差导数去分配给每个隐藏单元激活值,告诉他们怎么逼近。而且因为一个隐藏单元的改变会改变之后所有单元的激活值,所以在误差导数回传的时候要对所有的隐藏单元同时考虑。将所有输出层的误差导数传递到下一层的和他有链接关系的神经元上。

bp导数的计算

如图所示,我们可以反向求导计算出误差对权值(链接隐藏层与输出层之间的)的偏导,根据这个计算方法我们可以得知每一个链接的权重。最后我们就能够得知在改变权重时误差将如何进行变化。
Bp是一个高效计算对于单个训练样本的情况下误差关于每个权重的求偏导的方法,但是这不是一个学习算法,所以需要指定其他的东西去得到一个合适的学习方法。
为了得到一个完整的具体的学习过程,我们需要做一些其他关于如何运用误差导数的工作:
1、优化问题,如何在每个独立的样本上使用误差导数去查找一个好的权重集合?(!!URL
2、泛化问题,如何确保学到的权重对于非训练集的样本一样适用,即可用于预测。(URL)

在使用权重导师的一些问题:
更新权值的频率问题:
     1、在线方式(Online):每训练一个案例后便计算导数对权重做一次改变。这种方式曲折但是朝着正确方向的。
     2、更明智的方式是批训练方式(Full Batch):将所有该批次的训练案例完成后再更改。但如果初始是一个非常糟糕的权值,我们只需要一小部分就能够纠正。也就是说在极端情况下会浪费资源。
     3、所以,我们提出了小批量训练方式(Mini-batch):即在训练一小部分案例后进行更改。
更新的步长问题:
     1、使用一个固定的学习速率。
     2、适应计算的学习速率。如果我们取得了良好的进展那么就适当地提高学习速率,否则就适当地降低学习速率。
     3、每个连接都有一个对应的适当学习速率。这样可以使一些权重的更新快些,有些权重更新的慢些。
     4、不要使用梯度方向的下降。如上所述地一个狭长的椭圆,在那种情况下梯度的方向反而不是我们希望的方向,我们希望的是直指中心的方向。
大型网络下的过拟合问题:
训练案例中包含着从输入到输出的映射规律信息,但同时也包含着两种噪音。
     1、目标值可能是不可靠的,这通常不会影响最终的效果。
     2、采样误差。当你选择一个小的训练集时,如果该训练集内部有一些特别的样本被我们选择了,而这些样本都是消极样本,就会让神经网络偏离好的方向。
当我们拟合模型的时候,无法知道这个规律是正确的,还是来自于采样错误而导致的错误的规律。
模型要做的就是1、拟合不同的规律;
                         2、如果模型很有可调控性,那么他就可以很好的拟合采样错误。那么就会是该模型不能很好的一般化(或者说没有良好的适用性)。

一个过拟合的例子:6个黑点表示数据,我们可以通过绿色线对这6个数据进行拟合,它符合6个数据的走势。此外,我们用红线来表示有6个自由度的多项式拟合数据方式,很明显这种方式通过了全部6个数据代表的黑点.。但我们所需要的模型是经济且精准的。

减少过拟合的方式:
    1、Weight-decay:尽量保持小权值(零权值),以使模型更加简单。
    2、Weight-sharing:通过保持多个权重的值完全相同实现。
    3、Early stopping:预先设置一个假测试并记忆该值,当学习过程中实际值低于设定值便停止。
    4、Model averaging:取多个相似的模型,在期望部分求平均,可以减少错误。
    5、Bayesian fitting of neural nets:一个模型平均的理想模型。
    6、Dropout:训练时使一些隐藏单元失效。
    7、Generative pre-training (超纲题)


Lecture 4

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值