2.1 卷积神经网络-神经网络进阶

2.1 神经网络进阶

  • 多层神经元-神经网络网络

    如下的神经网络,具备一个隐含层,一个输出层函数

    其中输入依旧是x1,x2,x3,1(一个数据的3个维度加一个泛化1)学习

    隐含层有4个神经元,输出层有一个神经元,他们的计算公式和上节课介绍的逻辑斯蒂回归模型同样优化

    image.png

  • 神经网络正向计算3d

    多层的神经网络,须要从低到高,一层一层的计算出最后的结果,固然这些计算是能够并行计算的(经过矩阵乘法)cdn

    image.png

  • 神经网络的训练blog

    在回顾一下上节课讲的神经网络的训练,是用损失函数对每个参数求偏导,在用这个偏导乘以一个学习率α,再用这个结果去更新全部的参数,一步一步的迭代,最终获得一个比较好的神经网络内存

    image.png

  • 神经网络的训练-反向传播it

    在多层神经网络中,咱们如何给每个参数去计算他的偏导数。io

    首先先看h21-h的这一层全部的参数的导数是如何计算的,假设这里仍是使用的sigmiod激活函数,使用平方差的损失函数

    这里的w3存在于h21,h22,h23和h的连线上,X就是h21,h22,h23的输出和+1

    w2存在于h11,h12,h13和h21,h22,h23的各类连线中,也能够说,存在h21,h22,h23的表达式中

    w1同理

    至关于说w1,w2都是以复合函数的形式参与到损失函数的计算中来,对于这种复合函数的求导使用的是链式法则

    image.png

  • 链式法则

    image.png

  • 神经网络训练优化

    上面这种训练的缺点:

    • 每次都在整个数据集上计算Loss和梯度
      • 计算量大
      • 可能内存承载不住
    • 梯度方向肯定的时候,仍然是每次都走一个单位步长
      • 耗时

    优化方案

    • 随机梯度降低

      • 去掉每次使用整个数据集的假设,每次只使用一个样本。这样会有一个问题,就是说一个样本其实并不能反映整个数据集的一个方向,因此会致使他的收敛速度比较慢

        (收敛速度:模型从开始训练到结束训练,开始很是快,后来比较慢,慢慢达到一个稳定的值,当达到一个比较稳定的值,咱们称之为收敛)

    • mini-batch梯度降低

      • 每次使用小部分数据进行训练,这一小部分数据是随机采样出来的,由于是随机的,因此能够表明整个数据集的梯度方向,从而既不会有所有数据集的占内存大,训练慢的肯定,又不会有随机梯度降低不可以反映整个数据集梯度降低方向的问题

    mini-batch这样的梯度降低的其余问题

    • 梯度降低存在震荡的问题,一个样本是不可以反映所有数据集的方向的,mini-batch中的数据虽然是随机采样出来的,可是由于随机采样的数据量不够多,因此仍然会致使梯度降低存在一个震荡的问题,这个震荡的问题在单个样本上反映的更明显,对于mini-batch来讲,size越大越不明显

      image.png

    • 局部极值问题

      一个函数不必定是个凸函数(凸函数:只有一个极小值的函数),不必定只有一个最优解,以下右图。

      这样的一个函数会致使,当我到了一个局部最优解的时候,无论个人梯度计算方向在哪,只要个人learning rate不是那么大,都会致使他往回去学,因此running rate是一个比较重要的参数,若是learning rate设置的过小,会致使整个的参数停在局部极值点的位置

      image.png

    • saddle point

      某一个点的导数为0,若是导数为0,无论α多大,全部参数的更新都是0,致使参数不能获得更新而停在这里,这个无论用mini-batch仍是随机梯度降低都会遇到的问题

      image.png

    上面问题的解决方案

    • 动量梯度降低

      vt能够看作是前t-1步的梯度积累值的均值和当前梯度的和,由于每次计算vt的时候,vt-1都乘以了一个系数,这个系数能够控制以前积累的梯度其的做用的大小。

      image.png

      对于梯度方向来讲,因为他是有方向的,所以当前梯度和积累值的加法,不光体如今大小上,还体如今方向上。若是momentum step和gradient step这两个向量他的方向差距比较大的时候,他们加在一块儿的值就会比较小,这样就能够防止震荡;而当他们两个方向差距比较小(或者和在一块儿)的时候,他们矢量相加的结果抵消的就会比较少,他们的和就会比较大,那么他们加完以后,就会比原来大不少

      这样就能够,在模型刚开始的时候,他的梯度方向是比较稳定的,这个时候因为梯度是有积累的,就可使得个人梯度模型变的很是大

      image.png

    • 动量梯度降低的特色

      image.png

      • 开始训练时,积累动量,加速训练
      • 局部极值附近震荡时,梯度为0 ,因为动量,跳出陷阱
      • 梯度改变方向的时候,动量缓解动荡
相关文章
相关标签/搜索