优化函数的作用
优化函数是用来最小化损失函数的
损失函数是衡量模型输出与真实值的偏差,这个差值越小,模型训练效果越好
如果损失是一个凸函数,求最小值比较简单,直接求导就好:但是复杂的神经网络一般都不是凸函数,优化函数就是在这种情况下最小化损失函数的
梯度下降
1.批量梯度下降
使用全部数据计算梯度,进而更新参数
因为要遍历整个数据集在更新参数,所以更新参数速度慢。
缺点:不适合大数据集,不能实时更新参数
优点:训练稳定
2.随机梯度下降
每计算一个样本,更新一次参数
因为频繁更新参数,参数方差大,会使目标函数剧烈抖动,一方面能更快的是目标函数跳到局部极小值,一方面会使目标函数在最小值附近上下波动
3。小批量梯度下降
计算一个batch内的样本,更新参数,这个方法参数更新快,方差小,使用内存小,n通常取2的指数
动态优化
1.momentum
引入一阶动量,momentum是各个时刻梯度的指数移动平均值
momentum将过去的时间梯度添加到当前的时间梯度,是一种有助于抑制SGD振荡并加速SGD向最小值收敛的方法。
简单理解是
2.nesterovNAG
现根据当前的动量往前走一步,然后到达下一个点,计算此时的梯度更新
取决于此时的动量和下一个时刻的梯度
3.adagrad
在学习率下除了一个根号下历史梯度平方和,是整体的学习率变化。
能使更新幅度很大的参数的学习率变小,是更新幅度很小的参数学习率也减小
优点是不用再手工的调整学习率。
缺点是随着时间的推移,历史梯度平方和会越来越大,那么 学习率会越来越小,最后趋近于0,最后导致模型的参数虽然还具有较大梯度,但是参数却无法更新。
4.RMSProp
RMSProp算法将这些梯度平方和做指数加权移动平均。使得学习率不一定递减,可能增大,也可能减小
5.Adam
Adam是为每一个参数计算自适应学习率的另一种算法。Adam可以看成RMSprop和Momentum的结合体。
除了像RMSprop一样保存过去时间的梯度平方和的指数加权平均值 ,Adam还像Momentum保存了梯度的指数加权平均值
6.NAdam
Adam+NAG
7.AdamW
Adam+weight decay