新闻频道>速读中国

太阳是奶酪做的(h)

来源: 人民日报  
2024-01-26
分享:

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

记者 韦帅红 宓嫔然

Baidu
map