我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的、自己不知道的东西。
已经有人记了笔记(很用心,强烈推荐):
https://github.com/Sakura-gh/ML-notes
本节对应笔记:
本节内容综述
- 首先复习:
Gradient是Loss的等高线的法线方向; - 接下来是关于梯度下降的技巧,一是“小心地调正学习率”,有没有方法自动地调学习率呢?
Adaptive Learning Rates是一个基础的方法。但还不够好。 - 一个更复杂的、典型的方法是
Adagrad,介绍了其简单的推导与公式的理解。 - Stochastic Gradient Descent;
- Feature Scaling;
- Gradient Descent为何有效?以及本身存在局部最优的算法。
小细节
Tuning your learning rate carefully & Adagrad
Adagrad就是将不同参数的learning rate分开考虑的一种算法,对于某个参数,迭代到后面速度会越来越慢,当然这只是adaptive算法中最基础的。
在 Adagrad 里存在“矛盾”?
解释一:与相互构成“比”的关系,用于表示一种反差,如下图。
解释二:李宏毅老师解释,“gradient越大,离最低点越远这件事情在有多个参数的情况下是不一定成立的”。如下图(c比a里最低点更近,但是其梯度更大)。
类似牛顿法思想,最合适的方法是将二次微分作为分母。但是求二次微分可能计算量更大,因此,使用 Adagrad 求近似。
Stochastic Gradient Descent
对于:
正常的Gradient Descent:
Stochastic Gradient Descent:
- Pick an example
- Loss for only one example
显然,后者迭代次数更多,更加灵活,带来效果更好。
Feature Scaling
特征缩放:
- 当特征的分布范围很不一样时,最好将这些不同feature的归为相同范围。
如下图,显然做了 feature scaling 后,方向更加正确。
feature scaling 方法有很多:
- 比如标准化
Gradient Descent为何有效
考虑泰勒展开,在数学上可以推导出,最优的下降方向就是求梯度。不考虑二阶及以上梯度,因为这样带来的时间效率得不偿失。
此外,Gradient Descent有可能陷入局部最优。
李老师用帝国时代和我的世界举例,非常生动。很优秀,名不虚传。