深度神经网络常用优化算法
MINI-BRATCH
这个就是把一个大训练集分成几个小训练集去训练
主要原因,,,,是因为训练集太大,显存塞不下
这样的话,loss会有一定波动,就是有时上升,有时下降,但总体趋势是下降的
最后精度上升到一个值后,训练很多次都没有上升,训练完成
动量梯度下降:
简单来说就是在训练一整个训练集的时候
w = w - dw_change
b同理
dw_change 是这么得出来的
以下dw_change简写为dw_c
dw_c1 = a * dw_c0 + (1 - a) * dw1
dw_c2 = a * dw_c1 + (1 - a) * dw2
实际上就是削弱了一个训练集对w的影响
其实这个东西更像一个求平均值的过程,因为有求了这个平均值所以,我们loss上下摆动的幅度会变小
而且我们想最优解移动的步伐会加大(因为累加了之前的数嘛)
这样就加速了训练
红点是最优解
蓝色是用普通的梯度下降
红色是用动量梯度下降法
但是有一个问题,就是在做指数加权平均时,在训练刚开始的阶段,由于我们的训练样本对w,b的影响较小,使得训练变慢
这个时候可以暂时先不用指数加权平均,之后再用,比如训练了200个样本之后
也可以熬过前面这训练刚开始的阶段
我一般选择熬过这一阶段,因为另一个方法写起来太复杂了
RMS_Prob
s_dw = b * s_dw + (1 - b) * dw * dw
w = w - a * (dw/更号(s_dw))
对于b也是这样的
那么对于某一步而言,如果这一步在某一维(wi)上波动较大
那么dw变大 -> s_dw变大
dw/更号(s_dw) 变小
减小了这一步在wi这一维上的波动
同理, 如果这一步在某一维上的波动过小
那RMS_Prop也能提高在这一维上的波动
总的来说,RMS_Prob会让loss的下降在一定的,我们可以接受的范围内波动
从而使训练的方向更多的指向最优解,加速训练过程
Adam优化算法:
可以看见,我的动量梯度下降是优化的分子,RMS_Prob是优化的分母
两个加起来就是Adam了
这里就不做详细描述了
也就是说Adam有4个超参数
learning_rate, a1(动量梯度下降), a2, b(RMS_Prob)