CS231N_训练神经网络下_更好的优化(7)

一、优化算法

          优化算法有很多中,其中最为简单常见的是SGD(stotastic gradient descent)算法,但该算法也有缺点,即对于高维网络的优化,由于高维的网络会存在很多鞍点,即梯度为零的点,如果学习率不大,就有可能会停留在鞍点而无法再优化,所以一种改进的方法是在随机梯度下降算法的基础上加上了动量(momentum)。

          动量实际上就是以一定的比例累加过去的梯度,用以增加在梯度为零时越过零点的能力。如下:

CS231N_训练神经网络下_更好的优化(7)_第1张图片

CS231N_训练神经网络下_更好的优化(7)_第2张图片

CS231N_训练神经网络下_更好的优化(7)_第3张图片

      对于很窄的极小点区域带动量的方法未必能够越过去,但是对于存在很窄的极小点区域一般是由于数据量不够引起的,rugu如果增加一定的数据量可以避免这类问题。

       另外一类优化训练的方法是计算梯度的平方累加,并在计算每次梯度时候除以平方累加的开根号。这种策略使得梯度在各个方向上做了一定的归一化,即大的梯度除以大的值,小的梯度除以小的值,这类方法代表如AdaGrad。但对于AdaGrad算法,随着时间的增长,它的学习率会不断减小,因为除以的数越来越大。如果优化函数是一个凸函数,这种特征很好,但是大部分的高维深度网络不是凸函数,该算法容易困在一个局部极小值或者鞍点而不动了。一个解决该问题的方法为RMSProp,该方法在原来的平方和基础上加上了衰减,使得学习率不会一直变小。

CS231N_训练神经网络下_更好的优化(7)_第4张图片

CS231N_训练神经网络下_更好的优化(7)_第5张图片

CS231N_训练神经网络下_更好的优化(7)_第6张图片

可以看到其中有一个绿线是AdaGrad算法,但是训练了一会会卡在一个极小的地方,一般在训练网络时不推荐使用该方法。

       以上两种策略都比较不错,那么将两种策略结合就形成了AdamGrad算法,该算法增加的第一动量和第二动量,第一动量如第一种策略,第二动量类似第二种策略。但是有一个问题是对于beta1一般设置为0.9,beta2一般设置为0.99,那么第一步由于开始两个动量设置为0,那么第一步第二动量乘以1-0.99会得到一个很小的值,此时会是一个很大的学习率,可能会将初始化好的权重搞砸。所以该算法在开始的 步骤增加了修正,具体如下图:

CS231N_训练神经网络下_更好的优化(7)_第7张图片

       对于一个新的训练一般就采用Adam算法,其中beta1=0.9,beta2=0.99,learniing_rate=1e-3或5e-4.

CS231N_训练神经网络下_更好的优化(7)_第8张图片

 

你可能感兴趣的:(深度学习)