本笔记是针对李宏毅教授在b站上的视频《ML Lecture 9-1:Tips for Training DNN》的学习笔记的下半部分。
自适应学习率(Adaptive Learning Rate)
Adagrad(adaptive gradient)
有会变化的学习率,变化的方式是每次的原本学习率除以过去所有更新所用的梯度的平方和的算术平方根,用公式表达如下:
在图上来看,adagrad的含义是:对于梯度一般比较小的参数,我们给它较大的学习率;对于梯度一般比较大的参数,我们给它较小的学习率。
但是也有可能有Adagrad无法处理的问题:因为像logistic regression里面,我们的损失函数是一个凸函数的形状,但是在DL里面,很有可能损失函数是各种形状:
如下图,这样一种”月形“的损失函数上,w1的更新我们需要它在平坦的区域给它较小的学习率,在较陡峭的地方,给它较大的学习率,即它的学习率应该是更加动态变化的,但adagrad的话只能做到单调递减的学习率。
RMSProp算法(均方根传播)考虑了Loss Funtion分布的疏密因素(Loss Funtion函数等高线越稀疏,学习速率越大),按此逻辑设置不同的学习速率。
前面提到,训练不好NN的可能原因有很多,包括局部最优,鞍点和停滞。
不过LeCun说过,局部最优的问题不用太担心,因为一般不会有那么多局部最优,毕竟局部最优是要求所有的损失函数维度在局部最优点都呈现山谷的形状,这个不太常见。
帮助解决最小值和停滞问题的技巧:动量(Momentum)
现实世界中,当一个球从高点滚落到低点,由于惯性,它有能力跨越局部最优的山谷,进而到达更低点,我们能不能借鉴这种思想呢?
梯度下降的一般做法:
加上动量后的梯度下降的做法:我们每一次移动都由当前梯度和上一次的移动共同决定。
而vi实际上就是之前所有梯度的加权。
再从图像上来直观看一下动量的效果:
RMSProp + Momentum = Adam