100个参数 全连接神经网络 全连接神经网络应用_梯度下降法

100个参数 全连接神经网络 全连接神经网络应用_神经网络_02

本文目录


一、人工神经网络

人工神经网络(Artificial Neural Networks,简写为ANNs)也简称为神经网络(NNs)或称作连接模型(Connection Model),它是一种模仿动物神经网络行为特征,进行分布式并行信息处理的算法数学模型。这种网络依靠系统的复杂程度,通过调整内部大量节点之间相互连接的关系,从而达到处理信息的目的。

人工神经网络:是一种应用类似于大脑神经突触联接的结构进行信息处理的数学模型。在工程与学术界也常直接简称为“神经网络”或类神经网络。

100个参数 全连接神经网络 全连接神经网络应用_神经网络_03

二、全连接神经网络

对n-1层和n层而言,n-1层的任意一个节点,都和第n层所有节点有连接。

100个参数 全连接神经网络 全连接神经网络应用_神经网络_04

三、全连接层的前向传播和反向传播

100个参数 全连接神经网络 全连接神经网络应用_100个参数 全连接神经网络_05

根据梯度下降算法,需要反复计算权重的偏导,这在逻辑回归中很容易,但在神经网络中就比较麻烦,下面是权重偏导的计算过程:

  1.训练数据:{(x(1),y(1)), (x(1),y(1)),…, (x(m),y(m))}

  2.将所有权重初始化,设Δi,j(l)是m个训练数据中所有相同位置的权重和,即:

100个参数 全连接神经网络 全连接神经网络应用_梯度下降法_06

  3.开始训练,t = 1 for t to m:

    3.1. set a(1) = x(1)

    3.2. 用前向传播方法计算每一层的神经元输出,即a(l)

    3.3. 计算每一层的误差,需要注意的是输出层和隐藏层的区别:

100个参数 全连接神经网络 全连接神经网络应用_优化算法_07

    3.4. 累加Δi,j(l):

100个参数 全连接神经网络 全连接神经网络应用_神经网络_08

4.求得权重的偏导:

100个参数 全连接神经网络 全连接神经网络应用_全连接神经网络_09

  注意D(l)是一个包含 l 层所有权重偏导的Sl+1×Sl矩阵。

四、神经网络的优化方法

常见的优化方法有梯度下降法(Gradient Descent)、随机梯度下降法(Stochastic Gradient Descent)、Adam方法等等。

I.优化算法

优化算法就是一种能够帮我们最小化或者最大化目标函数(有时候也叫损失函数)的一类算法。而目标函数往往是模型参数和数据的数学组合。例如给定数据X和其对应的标签Y,我们构建的模型是一个线性模型,有了模型后,根据输入x就可以得到预测输出f(x),并且可以计算出预测值和真实值之间的差距,这个就是损失函数。我们的目的是找到合适的W, b时上述的损失函数的值达到最小,损失值越小,则说明我们的模型越接近于真实情况.

通过上面的描述可以知道,模型的内参(W, b)在模型中扮演着非常重要的角色,而这些内参的更新和优化就用到我们所说的优化算法,所以优化算法也层出不穷,而一个好的优化算法往往能够更加高效、更加准确的训练模型的内参。

Ⅱ.优化算法的种类

一般的,根据优化算法在优化过程中使用的导数阶数。可以将优化算法可以分为两大类,一阶优化算法和二阶优化算法。

  • 一阶优化算法 一阶优化算法是指使用参数梯度值来最小化或者最大化损失函数的优化算法。
    最为广泛应用的就是梯度下降法,参数的一阶导能够清晰的告诉我们损失函数在某个特定点上是增加的还是减少的。那什么是梯度呢?简而言之,梯度就是函数输出关于输的偏导数,只不过这里的输入和输出并不是简单的数值,而是向量。梯度与导数的区别就是导数是单个变量的,而梯度是多个变量的。梯度往往采用雅克比矩阵(Jacobian Matrix)进行表达。

100个参数 全连接神经网络 全连接神经网络应用_100个参数 全连接神经网络_10

  • 二阶优化算法顾名思义,二阶优化算法就是采用二阶导数进行优化算法。二阶导数,有时候也被成为海森矩阵(Hessian)。因为二阶导数要求两次导数,尤其是在矩阵中进行求导,运算量会非常的大,所以二阶优化算法被用的比较少。

100个参数 全连接神经网络 全连接神经网络应用_100个参数 全连接神经网络_11

III.各种梯度下降法

1. Gradient Descent

梯度下降法是最重要的一种方法,也是很多其他优化算法的基础。

上面的公式就是梯度下降法的基本形式,其中 是学习率 是损失函数 关于模型参数 的梯度。

因为这里的损失函数是在整个数据集上进行计算得到的均值,所以每更新一次模型参数,就要对整个数据集进行一个计算,可想而知这样非常的慢,并且当数据集变得非常大的时候,如此多的数据没法都load到内存中。

对于凸目标函数,肯定可以找到全局最优;对于非凸目标函数,可以找到局部最优。但是每次更新都对整个数据集进行计算,计算量大。

2. 随机梯度下降法(Stochastic Gradient Descent)

随机梯度下降法和梯度下降法其实是走的两个极端,梯度下降法是每次更新都计算整个数据集的loss,而随机梯度下降法每次更新都只用了一对样本,即上面公式中的一对样本(xi, yi)。由于每个样本都会对模型进行更新,所以模型更新的特别频繁,参数就会变成高方差,损失函数的波动也会有很大强度的变化。有时候,这是好事,因为这样的可以帮助我们探索新的更新方向,找到更加好的局部极值点。但是,由于频繁的更新和波动,会导致模型的损失收敛的非常不稳定。

每次只用一个样本进行更新,计算量小,更新频率高,但是容易导致模型超调不稳定,收敛也不稳定。

100个参数 全连接神经网络 全连接神经网络应用_神经网络_12

3. Mini Batch Gradient Descent

mini batch 梯度下降法是梯度下降法和随机梯度下降法的折衷,即在计算loss的时候,既不是直接计算整个数据集的loss,也不是只计算一个样本的loss,而是计算一个batch的loss,batch的大小自己设定。

每次更新模型时,采用一部分数据进行计算,现在几乎在所有的深度学习应用中,都使用的是mini batch梯度下降法。正是因为使用广泛,所以很多深度学习的库和框架都对这方面的矩阵操作进行了特别优化。

挑战

1、很难选择一个合适学习率,需要我们大量的尝试。太小的学习率会导致模型收敛变得缓慢,导致训练时间变长;太大的学习率会阻碍模型的收敛,使损失函数在最优值附近来回波动甚至是发散。

2、对于所有的参数,均使用相同的学习率。如果有的参数的梯度很大,有的很小,使用相同的学习率显然就不是很合适。

3、在非凸函数的优化过程中,我们往往希望模型能够跳过那些局部极值点,去找一个更好的极值。在实际训练过程中,鞍点也是非常难以解决的问题。

鞍点:一个数在所在行中是最大值,在所在列中是最小值

例如,在某个点处,一个维度的梯度方向是往上的,一个维度的梯度是往下的,那梯度下降法在就很难跳出这个点,因为这个点所有维度的梯度是接近0的。

4. Momentum

带momentum(动量)的梯度下降法也是一种很常用的的优化算法。这种方法因为引入了momentum量,所以能够对梯度下降法起到加速的作用。

打个比方,一个球顺着斜坡往下滚动,会因为地心引力的原因而一直加速,速度越来越快的往坡低滚去。梯度下降法中的Momentum量就和地心引力的作用很类似,能够让梯度下降法沿着下降的方向逐渐扩大幅度。起到对梯度下降法进行加速的作用。

从上述公式(1)可以看出,当当前的梯度方向

的方向相同时,

所以参数的变化幅度会增大,从而加快梯度下降法的幅度;而当方向不同时,会逐步减小当前更新的幅度。这样可以有效的对梯度下降法进行加速,同时提高模型的稳定性。能够更快更稳定的收敛,能够减少模型的波动震荡。

5. Nesterov

Nesterov是一位学者,他发现Momentum方法中存在一个问题。当我们把球放在斜坡上,小球会一直往下滚动,并且越滚越快,当球到达坡底时,速度最快。我们的目的是让小球能够停在坡底,可是当小球到达坡底时,由于仍旧有较大的速度,小球会往另一个方向爬坡,并不会稳稳的停在谷底。

具体到梯度下降法,就是Momentum方法在极值附近不能进行提前减速,且在极值附近仍旧以较大的幅度进行改变,有时候可能就直接跳出了这个极值。

为了解决这一问题,Nesterov就提出了 Nestrov Accelerated Gradient(NAG)。

NAG算法简而言之,就是在进行Momentum梯度下降法之前,先做一个预演,看看沿着以前的方向进行更新是否合适,不合适就立马调整方向。也就是说参数更新的方向不再是当前的梯度方向,而是参数未来所要去的真正方向。

能够在对梯度下降法进行加速的同时,提高稳定性,避免越过极值。

6. Adagrad

前面讲了在mini batch梯度下降法中,因为对所有的参数均使用相同的学习率,而当有的参数的梯度很大,有的很小时,显然不合适。另外,对于不同的样本,如果有的样本出现的较为频繁,导致其对应的一些参数更新较为频繁,而有的样本出现的频率很低,导致一些参数更新频率很低时,再采用相同的学习率有时候也不太合适。我们更加希望那些出现更新频率比较低的参数能够有更大的更新幅度。

根据每个参数以前的梯度情况,对不同参数使用不同的学习率,同时动态调整参数学习率

其中

代表第i个参数在第t个迭代中的梯度,

是一个微小量,为了防止分母为0,一般取e-8

在训练过程中,每个不参数都有自己的学习率,并且这个学习率会根据自己以前的梯度平方和而进行衰减。

在训练的过程中不用认为的调整学习率,一般设置好默认的初始学习率就行了.但是随着迭代的进行,第二个公式中的学习率部分会因为分母逐渐变大而变得越来越小,在训练后期模型几乎不再更新参数。

7. AdaDelta

AdaDelta是Adagrad的改进版,目的就是解决Adagrad在训练的后期,学习率变得非常小,降低模型收敛速度。AdaGrad方法是完全累计先前所有梯度的平方和,AdaDelta则是添加一个衰减系数用来减小很久以前的梯度对当前训练的影响,从而避免学习率无限减小的问题。

AdaDelta也可以和Nesterov方法进行结合:

8. Adam

前面我们从最经典的梯度下降法开始,介绍了几个改进版的梯度下降法。 Momentum方法通过添加动量,提高收敛速度; Nesterov方法在进行当前更新前,先进行一次预演,从而找到一个更加适合当前情况的梯度方向和幅度; Adagrad让不同的参数拥有不同的学习率,并且通过引入梯度的平方和作为衰减项,而在训练过程中自动降低学习率; AdaDelta则对Adagrad进行改进,让模型在训练后期也能够有较为适合的学习率。

既然不同的参数可以有不同的学习率,那么不同的参数是不是也可以有不同的Momentum呢?

Adam方法就是根据上述思想而提出的,对于每个参数,其不仅仅有自己的学习率,还有自己的Momentum量,这样在训练的过程中,每个参数的更新都更加具有独立性,提升了模型训练速度和训练的稳定性。

Adam(Adaptive Moment Estimation):

一般的,设置为0.9, 设置0.999

五、Batch-Normalization

BN的操作:

100个参数 全连接神经网络 全连接神经网络应用_全连接神经网络_13

显然,这是将数据标准化处理,使得其符合正态分布。

标准化之后的分布满足期望为0,方差为1。比较一下标准化公式和第三步的公式:

100个参数 全连接神经网络 全连接神经网络应用_梯度下降法_14

多了一个ε,这里的ε是一个很小的数,避免由分母等于0带来的系统错误,所以其实两个公式是等价的。

而最后一步是BN的精髓:γ和β是可学习的。

我们获得一个关于y轴对称的分布真的是最符合神经网络训练的吗?没有任何理由能证明这点。事实上,γ和β为输出的线性调整参数,可以让分布曲线压缩或延长一点,左移或右移一点。由于γ和β是可训练的,那么意味着神经网络会随着训练过程自己挑选一个最适合的分布

BN的优点:

  1. 加速收敛。减少epoch轮数,因为不必训练神经网络去适应数据的分布。同时,完美地使用了激活函数对数据的“修剪”,减少梯度弥散。同时,学习率也可以大一点。
  2. 准确率更高。这也是得亏于对激活函数的完美使用,切得更准,垂直度更高。

BN的缺点:

  1. BN特别依赖Batch Size;当Batch size很小的时候,BN的效果就非常不理想了。并且大多数情况下,Batch size大不了,因为GPU的显存不够。
  2. BN对处理序列化数据的网络比如RNN是不太适用的
  3. BN只在训练的时候用,inference的时候不会用到,因为inference的输入不是批量输入。这也不一定是BN的缺点,但这是BN的特点。

六、Layer-Normalization

LN的操作

LN的操作是对同一层网络的输出做一个标准化。注意,同一层的输出是单个图片的输出,比如对于一个batch为20的神经网络训练,会有20个均值和方差被得出,每个均值和方差都是由单个图片的所有channel之间做一个标准化。

这么操作,就使得LN不受batch size的影响。同时,LN可以很好地用到序列型网络如RNN中。同时,LR在训练过程和inference过程都会有,这就是和BN很大的差别了。

MLP中的LN

是一层中隐层节点的数量,H 是MLP的层数,我们可以计算LN的归一化统计量

100个参数 全连接神经网络 全连接神经网络应用_优化算法_15

注意上面统计量的计算是和样本数量没有关系的,它的数量只取决于隐层节点的数量,所以只要隐层节点的数量足够多,我们就能保证LN的归一化统计量足够具有代表性。通过

可以得到归一化后的值

100个参数 全连接神经网络 全连接神经网络应用_神经网络_16

其中

是一个很小的小数,防止除以0(论文中忽略了这个参数)。

在LN中我们也需要一组参数来保证归一化操作不会破坏之前的信息,在LN中这组参数叫做增益(gain) g 和偏置(bias)b(等同于BN中的

)。假设激活函数为 f,最终LN的输出为:

100个参数 全连接神经网络 全连接神经网络应用_全连接神经网络_17

合并公式(2),(3)并忽略参数l, 我们有:

100个参数 全连接神经网络 全连接神经网络应用_梯度下降法_18

RNN中的LN

在RNN中,我们可以非常简单的在每个时间片中使用LN,而且在任何时间片我们都能保证归一化统计量统计的是 H个节点的信息。对于RNN时刻t时的节点,其输入是t-1时刻的隐层状态

和t时刻的输入数据

, 可以表示为:

100个参数 全连接神经网络 全连接神经网络应用_100个参数 全连接神经网络_19

接着我们便可以在

上采取和1.1节中完全相同的归一化过程:

100个参数 全连接神经网络 全连接神经网络应用_100个参数 全连接神经网络_20

七、Dropout

作用

解决过拟合

概念

Dropout可以作为训练深度神经网络的一种trick供选择。在每个训练批次中,通过忽略一半的特征检测器(让一半的隐层节点值为0),可以明显地减少过拟合现象。这种方式可以减少特征检测器(隐层节点)间的相互作用,检测器相互作用是指某些检测器依赖其他检测器才能发挥作用。

Dropout说的简单一点就是:我们在前向传播的时候,让某个神经元的激活值以一定的概率p停止工作,这样可以使模型泛化性更强,因为它不会太依赖某些局部的特征。

100个参数 全连接神经网络 全连接神经网络应用_梯度下降法_21

Dropout具体工作流程

假设我们要训练这样一个神经网络,如图所示。

100个参数 全连接神经网络 全连接神经网络应用_全连接神经网络_22

输入是x输出是y,正常的流程是:我们首先把x通过网络前向传播,然后把误差反向传播以决定如何更新参数让网络进行学习。使用Drop out之后,过程变成如下:

(1)首先随机(临时)删掉网络中一半的隐藏神经元,输入输出神经元保持不变(图中虚线为部分临时被删除的神经元)

100个参数 全连接神经网络 全连接神经网络应用_全连接神经网络_23

(2) 然后把输入x通过修改后的网络前向传播,然后把得到的损失结果通过修改的网络反向传播。一小批训练样本执行完这个过程后,在没有被删除的神经元上按照随机梯度下降法更新对应的参数(w,b)

(3)然后继续重复这一过程:

  • 恢复被删掉的神经元(此时被删除的神经元保持原样,而没有被删除的神经元已经有所更新)
  • 从隐藏层神经元中随机选择一个一半大小的子集临时删除掉(备份被删除神经元的参数)。
  • 对一小批训练样本,先前向传播然后反向传播损失并根据随机梯度下降法更新参数(w,b) (没有被删除的那一部分参数得到更新,删除的神经元参数保持被删除前的结果)。 不断重复这一过程。

Dropout在神经网络中的使用

(1)在训练模型阶段

无可避免的,在训练网络的每个单元都要添加一道概率流程。

100个参数 全连接神经网络 全连接神经网络应用_神经网络_24

对应的公式变化如下:

  • 没有Dropout的网络计算公式:

100个参数 全连接神经网络 全连接神经网络应用_全连接神经网络_25

  • 采用Dropout的网络计算公式:

100个参数 全连接神经网络 全连接神经网络应用_梯度下降法_26

上面公式中Bernoulli函数是为了生成概率r向量,也就是随机生成一个0、1的向量。

代码层面实现让某个神经元以概率p停止工作,其实就是让它的激活函数值以概率p变为0。比如我们某一层网络神经元的个数为1000个,其激活函数输出值为y1、y2、y3、......、y1000,我们dropout比率选择0.4,那么这一层神经元经过dropout后,1000个神经元中会有大约400个的值被置为0。

注意: 经过上面屏蔽掉某些神经元,使其激活值为0以后,我们还需要对向量y1…y1000进行缩放,也就是乘以1/(1-p)。如果你在训练的时候,经过置0后,没有对y1…y1000进行缩放(rescale),那么在测试的时候,就需要对权重进行缩放,操作如下。

(2)在测试模型阶段

100个参数 全连接神经网络 全连接神经网络应用_梯度下降法_27

预测模型的时候,每一个神经单元的权重参数要乘以概率p。

测试阶段Dropout公式:

100个参数 全连接神经网络 全连接神经网络应用_优化算法_28

为什么Dropout可以解决过拟合?

(1)取平均的作用:dropout掉不同的隐藏神经元就类似训练了不同的网络,整个dropout过程就相当于对很多个不同的神经网络取平均。

(2)减少神经元之间复杂的共适应关系: 因为dropout程序导致两个神经元不一定每次都在一个dropout网络中出现。这样权值的更新不再依赖于有固定关系的隐含节点的共同作用,阻止了某些特征仅仅在其它特定特征下才有效果的情况 。迫使网络去学习更加鲁棒的特征 ,这些特征在其它的神经元的随机子集中也存在。换句话说假如我们的神经网络是在做出某种预测,它不应该对一些特定的线索片段太过敏感,即使丢失特定的线索,它也应该可以从众多其它线索中学习一些共同的特征。

参考:

神经网络中的各种优化方法_网络_autocyz

100个参数 全连接神经网络 全连接神经网络应用_优化算法_29

ML(5)--神经网络2(BP反向传播) - 我是8位的

100个参数 全连接神经网络 全连接神经网络应用_全连接神经网络_30

一文弄懂神经网络中的反向传播法

100个参数 全连接神经网络 全连接神经网络应用_优化算法_31

[Deep Learning] 神经网络基础

100个参数 全连接神经网络 全连接神经网络应用_神经网络_32