【Day 8】梯度下降法(Gradient Descent) --- Tip 1

之前在机器学习基本功(二) --- Regression中有简单提到梯度下降法(Gradient Descent),为了要到最好的funciton,也就是要解一个最佳化的问题,式子会列成 https://chart.googleapis.com/chart?cht=tx&chl=%5Ctheta%5E*%20%3D%20arg%20%5C%20min%20L(%5Ctheta),我们的目标是要找一组参数 https://chart.googleapis.com/chart?cht=tx&chl=%5Ctheta 来让Loss越小越好。
今天开始要教大家一些小技巧,接下来我会详细说明怎麽把梯度下降法做得更好,我们先来复习之前讲的梯度下降法的步骤,首先先随机选取一组参数,接着去计算每个参数对Loss的偏微分,算完乘以learning rate https://chart.googleapis.com/chart?cht=tx&chl=%5Ceta,再用原本的参数减去该数值来得到新的参数。

Tip 1:小心调整你的Learning rate

从图中我们可以看到,当你Learning rate比较小,你的Loss就会下降的很慢,但如果Learning rate比较大,你的Loss就有可能会卡住而到不了最低点,而如果Learning rate太大,你的Loss就甚至可能会变大。因此我们在做梯度下降法的时候应该把参数变化对Loss变化的图画出来,根据前几次update参数的情况来确定你的Loss是稳定下降的。

通常Learning rate会随着参数更新而越来越小,因为刚开始的起点通常离最低点是比较远的,所以你的步伐要踏大步一点,才会比较快走到接近最低点的地方,经过几次的参数更新以後,已经比较接近最低点了,就应该减少你的Learning rate让他可以收敛在最低点的地方。因此最好的状况是,每一个不同的参数都给它不同的Learning rate,而我觉得最简单、最容易实作的应该是Adagrad。

Adagrad

  • 每一个参数的Learning rate都除上之前算出来的微分值的平方平均数(Root mean square)。

经过推导後可以看到 https://chart.googleapis.com/chart?cht=tx&chl=%5Csigma%5Et 可以写成图中的式子。

最後得出更新参数的式子。

矛盾

有一个矛盾的地方是分母 https://chart.googleapis.com/chart?cht=tx&chl=g%5Et 表示Gradient越大,踏的步伐就越大,但分子 https://chart.googleapis.com/chart?cht=tx&chl=%5Csqrt%7B%5Csum_%7Bi%3D0%7D%5Et(g%5Ei)%5E2%7D 表示Gradient越大,踏的步伐就越小。

那会这样写,比较直观的解释是要去看它跟前面几次的Gradient比起来是不是有反差出现。

只考虑一个参数的时候,如果算出来的微分越大,就会离原点越远,而我踏出去的步伐是跟微分的大小成正比,那它可能就是最好的步伐。

那考虑很多参数的时候我们就必须要考虑二次微分,最好的步伐就会不只是要正比於一次微分,它还同时要和二次微分的大小成反比。
从图中可以看到 a 跟 c 如果只考虑微分值是不够的,必须也要考虑 a 的一次微分值除掉二次微分,以及 c 的一次微分值除掉二次微分,才能真正显示这些点跟最低点的距离。

回到Adagrad的式子,可以发现它是用过去所有微分值的平方和开根号来去代表二次微分,节省做二次微分的运算时间,可以想像成是在一次微分里面做sampling,再把它的平方和开根号得出结果。


参考资料

李宏毅老师 - ML Lecture 3-1


<<:  Day21 测试写起乃 - Webmock

>>:  你怎麽看登录档清理这回事--用WiseRegCleaner解释给你看

Proxmox VE 虚拟机防火墙管理 (一)

在网路防护方面,Proxmox VE 提供了相当良好的防火墙管理功能,并且可以适用於节点实体机、客...

[day20]谈购物流程设计

本来想除了管理功能外全部都在Line介面里面解决,但做了一阵子觉得越想越不对劲,重新考量了一下思路,...

尚气与十环传奇

尚气与十环传奇在线观看 漫威影业荣誉出品史诗冒险《尚气与十环传奇》,结合前所未见的震撼性动作、令人惊...

[day22] 快速产生测试资料

功能测试时很常需要删掉坏掉的资料库纪录,这时就需要重置测资,但每次都开管理工具来做太麻烦了,写个小工...

DAY27 Aidea专案实作-AOI瑕疵检测(2/4)

那我们要开始着手处理我们的资料集了,今天会先做资料前处理的部分,其实不管是机器学习或是深度学习,只要...