1.损失无法降低的原因
图1 训练参数的常见情况
在“众里寻他千百度”-深度学习的本质一文中,讨论了使用传统的梯度下降方法更新机器学习模型的参数.在通常情况下,遇到的情况大多是上图中右上方所展示的结果,横轴表示参数迭代的次数,纵轴表示损失函数的数值,随着迭代次数的增加,损失函数数值不再下降.理论上来说,遇到这种情况可能表示梯度为0,参数更新到了驻点.但实际上,遇到的情况可能并不是这样,如上图右下方所示,横轴仍为参数的更新次数,纵轴为梯度向量的范数.事实表明,此时梯度向量并非很小.
出现这一现象,最有可能的原因如上图左方展示的那样.参数更新时遇到了一个类似于“峡谷”的地方,在来回震荡.
2.梯度下降的改进方案
图2 凸面的实验结果
上图展示了取不同学习速率时,对于同样的凸面损失函数参数更新的效果.其中横轴代表参数b的数值,纵轴表示参数w的数值,通过颜色来表示损失函数的数值大小,蓝色色系表示较小的损失,红色色系表示较大的损失,黄色的“叉”符号表示局部极小点,黑色的点表示参数更新的轨迹.
取学习速率为10的-2次方时,参数更新的效果图如上方左侧所示.此时由于学习速率过大,参数在类似“峡谷”的两端不断地来回震荡.
考虑到上面的情况无法更新到局部极小点,将学习速率改小,改成10的-7次方,参数更新的效果如上图右方所示,参数更新到“平坦”的地方,由于学习速率和梯度都很小,因此参数的更新非常缓慢.
综合以上两种情况,可以总结出解决这一问题的可行方案:当计算的梯度非常大时,应该需要很小的学习速率;当计算的梯度非常小时,应该需要很大的学习速率.这就如同孙子兵法里的“兵无常势,水无常形,能因敌变化而取胜者,谓之神”,因此,需要根据梯度的大小来调整参数更新的步伐.
3.自适应的更新方法
经过上述分析可知,在更新参数时,参数更新的数量不仅和当前的梯度、学习速率有关系,应该也和历史的梯度大小有关系.因此,传统的参数更新方法应该转化为式(1).在式(1)中,表示待更新的参数,i表示深度学习模型的第i个参数,t表示参数更新的次数,g表示更新的梯度分量,表示学习速率,表示学习速率的调整系数,它本质上是关于更新次数的函数,更新次数的变化导致梯度变化,最终导致它的变化.
更新方法的变化本质上归结于,构造的思路不同就衍生出一系列的梯度更新算法.
3.1 Adagrad梯度下降方法
见公式(2),当取历史梯度的均方根(Root Mean Square)时,从概率论的角度来看即为二阶原点矩开根号,梯度的平方求平均再开根号,此时梯度更新方法被称为Adagrad梯度下降方法.易知,当关于梯度的表达式为公式(2)时,梯度较大时,变大,在更新参数时取倒数,参数更新的步伐变小;反之梯度较小时,变小,在更新参数时取倒数,参数更新的步伐变大.可以解决上面出现的问题.
3.2 RMSProp梯度下降方法
图3 Adagrad遇到的问题
上图展示了使用 Adagrad参数更新方法可能遇到的新问题.其中横轴表示参数w1的数值,纵轴表示w2的数值,等高线表示损失函数数值.如上图所示,考虑w1参数更新的情况,一开始“坡度”较为陡峭,参数更新需要较小的学习速率;当参数更新到中间区域时,“坡度”变得平滑,参数更新可能需要较大的学习速率.但是,使用Adagrad这种更新方法,可能对于当前梯度的反应并不是很灵敏,当前梯度较小时,没有立刻变小,仍然以之前积累的历史梯度为主,导致当前梯度仍然很大,反而在红色箭头部分得到了较小的学习速率.由此引出了RMSProp梯度下降方法.
RMSProp梯度下降方法认为的数值取决于两部分梯度信息,一部分为当前梯度的数值,另一部分为历史梯度的信息,通过一个参数来调节两部分信息的重要程度,见公式(3).取值在0至1之间,是一个超参数,如果认为过去梯度的信息比较重要就将设计得大一些,如果认为当前梯度的信息比较重要就将设计得小一些.
3.3 学习速率的Scheduling技术
图4 Adagrad参数更新的效果
利用 Adagrad梯度下降方法对图2中的实验做改进,发现Adagrad梯度下降方法是起作用的,如上图所示.参数经过足够多次数的迭代和更新,确实可以找到局部极小点.但是上图仍然暴露出Adagrad梯度下降方法的不足之处.
考虑参数w的更新情况,在竖直方向上一开始梯度很大,参数更新的学习速率很小,在参数更新至“山谷”处之后,梯度很小.在积累了很多很小的梯度之后变得很大,参数就“飞出了视野之外”.之后梯度又变大了,参数又被修正回来,这个过程反复经历了多次.由此,可以看出,出Adagrad梯度下降方法的不足之处是参数更新的后期非常不稳定,由此引出了学习速率的Scheduling技术.
图5 学习速率的Scheduling技术
上图展示了学习速率的Scheduling技术的两种方案,一种是认为学习速率随着更新的次数不断减小又被称为学习速率的衰减(Learning Rate Decay),另外一种认为学习速率应该随着更新次数先增大后减小(Warm Up).
学习速率的衰减很好理解,因为随着迭代次数的不断增加,参数可能越来越接近局部极小点,所以越到后期越应该减小更新的速度.关学习速率的Warm Up技术一个很好的解释是,前期对于损失函数一无所知,需要试探性地先多收集更多的信息,等收集完足够多的信息之后,越来越接近局部极小点,此时便可以放缓更新参数的步伐.
4.改进后的梯度更新方法
结合“居高临下,势如破竹”-参数的动量更新方法一文中介绍的梯度更新的改进版,融合本文探讨的自适应的梯度更新方法,事实上得到了一个最终版本关于梯度更新方法的改进方案见公式(4)
在公式(4)中,参数的更新由学习速率、动量m和均方根共同决定,学习速率、动量m和均方根均为更新次数t的函数,随着t的变化而变化.其中学习速率本质上决定了参数更新的趋势,动量m决定了参数更新的方向,均方根参数变化的数量级.
更多学习资料请关注我的微信公众号白泽图鉴获取!!!