本文是笔者在学习机器学习的记录,若有错误欢迎指出修正,谢谢大家的监督了!
一.引言/背景
(引言:梯度下降法的来源)
线性回归模型中,我们核心在于如何让损失函数达到最小化。从高中知识来讲,无非求导寻找到极值点,然后确定最小值而已。下给出
求最小值的公式化推导(比较抽象,与本文关系不大,可以跳过)。
已知:(由于我们是对特定样本(即X,y确定)寻找
的最小,故以参数
为自变量。在吴恩达课程中,常见的为
,
两种表达方式。)
可得:
对其求梯度得:
故其驻点方程为:
为了判断是极大or极小值(你也不想得到一个损失值最大的人工智障对吧),再次对求梯度得到黑塞矩阵:
对于较简单的二维矩阵(即两个label)可能较好应付,但是面对大量label,高维度的矩阵,计算将会是极为困难,甚至难以实现。由此,梯度下降方法孕育而生。
在吴恩达课程中,梯度下降公式为:,本文将同一使用梯度而非偏导表示。
而由上文推导(毕竟numpy库里貌似没有求偏导的函数,所以了解如何进行矩阵偏导运算还是有必要的(但实际上调用一个sklearn的LinearRegression就好了)),实际实现公式为:
(2)学习率的选择
在上式中,被称作学习率,是一项人工选择的参数。

(不熟练使用各种绘图工具,能会意就彳亍了())
如何选择一个合适的学习率则是本文探讨的重点:
学习率较低时,收敛较慢,可能较长时间才能收敛到最低点。
学习率较高时,收敛会快,但是容易振荡甚至不收敛

二.梯度下降法的改进(即如何更好确定学习率)
(1)动量项梯度下降法
动量项梯度下降法核心在于,学习率是与上一次学习率相关的。由此它会保证继续以上一次梯度前进方向继续前进。就好像物理中的动量一样,即使受到重力(梯度),物体还是需要时间()才能停下来,再此期间其仍然不断向上。
更新公式引入了动量项:
其好处在于:消除了病态条件下的振荡。可以这样理解:当我们下降过多去到对面山坡时,按照原本公式我们应该反向下降,但是由于学习率过大,我们方向下降再次过多回到原本山坡。而动量项让我们不再回头,或者强制性减小回头的影响。从而直接翻过这个坡,向另一个局部最低点前进。(既然得不到你那就扭头就走,走的很坚决)
(2)AdaGrad(Adaptive Gradient)算法:
此算法累积了全局的梯度值信息。核心在于:既然振荡原因是学习率过大,那我们走的步数越多学习率越小,就算一开始振荡,走久了也就荡不起来,慢慢的也会回到局部最小值。
其迭代公式为:
其中,g表示迭代的梯度向量。至于加上,则是防止除0或者近0整数
(3)RMSPrap算法:
AdaGrad算法遗留了一个很严重的问题:首先,需要大量的存储空间存储(可解决)。其次,分母大量累计,学习率将会趋于0,造成无法有效梯度下降。既然大量的存储以前的梯度会造成无法下降,那我们为什么不直接去除大部分的梯度,只保留一点梯度,这样你才知道这是改进后的梯度下降呢?由此提出了RMSPrap算法。
其核心答题不变。但是修改了如何累加。此处我们记:
表示到第i次累加的梯度。
而的迭代公式为:
从公式中我们不难理解其原理:我们直接将过去的忘了不就好了吗?
(4)AdaDelta算法:
我们看到,AdaGrad算法最大的问题在于对全局梯度太过于依赖,AdaDelta算法则对AdaGrad算法进行了改进去除了对全局学习率的依赖。
定义:(请问学计算机的一定要取这么奇怪的名字吗?)
迭代公式为:
其中:
与RMSPrap相同。但是其引入了
从而:
(5)Cyclical Learning Rates:
此方法是笔者在逛IEEE时无意间看到的。就文章的实验结果来说,此方法在准确率等并未有较明显提升,而在学习速度上有较小的提升(并未过大)。但文中提出部分思想具有前瞻性,故在此也一并讨论。
原文源自:Cyclical Learning Rates for Training Neural Networks. Leslie N.Smith 2017 IEEE Winter Conference on Applications of Computer Vision.DOI 10.1109/WACV.2017.58
Cyclical Learning Rate,顾名思义可知其学习率时周期性变化的。文中提出了一个很重要的观点:即使学习率过大导致跳出极小值的坑,并非无利的。这个观点与动量项的观点有些不谋而合。由此,其提出了学习率可以在一个周期内进行变化。
而文中指出,周期选择需要以下几点:Maximum bound,Minimum bound,stepsize。而文中指出三角形作为最简单的图像适合作为周期。

而如何确定Max与Min呢?Leslie建议,不妨先跑几轮epoch,从不同学习率的学习效果确定Max与Min。
而对stepsize,Leslie将stepsize设成一个epoch所包含的iteration数量的2-10倍。由此,我们确定了最重要的几个参数。
三 .总结
如果学习方面不在此,以上全部不用看,直接调用sklearn的LinearRegression。如果要自己尝试的话,各个方法各自拥有各自的特点,建议按需索取,可以的话尝试多种方法。
下一篇打算写最近学的正则化,但是发现书上就讲了L1和L2正则化,感觉写出来100字就没了(躺平)。
414

被折叠的 条评论
为什么被折叠?



