梯度下降函数也就是优化函数,在神经网络训练过程最重要的函数。重要程度类似于调校对于汽车的重要性,搭建模型和参数设置等操作=“造好了一辆汽车”,优化函数=“调校”。因为汽车最终的操控性和加速性能等指标很大程度取决于调校,调校的好的汽车操控性非常好,而调校不好的汽车开起来很难受。而优化函数也是一样,很多情况下学习模型是正确的,但是最终训练结果不如人意,往往是因为优化函数的选择错误。
目录
一、优化函数的发展历程。
二、优化函数原理详解
总结:
一、优化函数的发展历程。
优化函数的发展主要经历了下面的过程: BGD->SGD -> SGDM -> NAG ->AdaGrad -> AdaDelta -> Adam -> Nadam。
今天我们主要介绍其中的6种优化函数,其中包括几乎“万能”的Adam,以及被大神们用的出神入化的SGD及其变种。此外,Adam算法对新手最友好了,几乎能解决所有的由优化函数引起的训练问题。
二、优化函数原理详解
1.BGD
BGD,全称是Batch gradient descent,批量梯度下降。其计算损失函数是遍历全部数据集,然后算函数对各个参数的梯度和更新梯度,所以其计算速度慢并且不支持在线学习。
实现:利用现有参数对训练集中的每一个输入生成一个估计输出Y_pred,然后跟实际输出Y统计所有误差,求平均以后得到平均误差,以此来作为更新参数的依据。
2.SGD
SGD,全程是stochastic gradient descent,随机梯度下降。每遍历一个数据就算一次损失函数,然后求取梯度更新参数。速度较快,但收敛性不好,容易在最优点附近振荡,陷入局部最优点。
实现:
每步迭代过程,从训练集中的随机抽取一批容量为m的样本{x1,…,xm},以及相关的输出y,计算梯度和误差并更新参数.
3.SGD +Momentum
SGD加入了惯性,是为了抑制SGD的振荡,即即将陷入局部最优点时,利用其惯性继续往前计算,避免陷入局部最优点。
4.Adagrad
Adagrad加入了二阶动量,即“自适应学习率”优化算法。在训练过程中经常更新的参数A,应该降低其学习速率;而对于偶尔更新的参数B,在针对特定出现的样本数据训练时应增大其学习速率。
Ghis主要代表的是历史数据的梯度,1e-7是一个很小的常量。
5.RMSprop
RMSprop是由AdaGrad改进而来的,因为在遭遇数据量非常大的数据集进行训练时,AdaGrad函数的Ghis项会越来越庞大,导致训练速度变慢以及其他的问题,所以加入decay的存在,该decay是历史数据对Ghis的权重。
6.Adam
Adam可以说是上述4项优化函数的优点的集大成者,存在2个超参数,分别控制一阶动量和二阶动量。
上图中first momentum和second momentum分别是一阶动量和二阶动量。
总结:
Adam对新手最友好,几乎“万能”;但是很多大神仍然用SGD及其变种来就能解决问题,大神些还是牛逼啊
参考文献:
1.深度学习之tensorflow
2.https://mp.weixin.qq.com/s/xm4MuZm-6nKTn2eE3eNOlg