梯度下降
以下资料来自:
- 李宏毅老师《机器学习》2020春季-Gradient
- 3Blue1Brown《深度学习 Deep Learning》
结合自己的学习笔记整理而成
在李宏毅老师的课程中,任何机器学习都可以分为三步走,类似将大象放进冰箱的问题:
- 选取模型
- 评价模型的好坏
- 优化模型直至最优解
那么梯度下降(Gradient Descent) 的概念,在step3会起到非常重要的作用。下面就从易到难,逐步理解梯度下降的思想。
单变量
假设有一堆散点,我们要依据其拟合一条直线(过原点),那么问题的参数就只有一次项系数w,最终评价模型的方式就是其他点与w的偏差,评价的方式有很多,也就是step2的工作,我们这里不详细讲述。
假设我们采用了SE(平方误差):
上标n表示你的第n个样本,y-hat表示真实值,那么这个Loss(损失函数) 就可以评价你的模型参数w选取的好坏,这里L是w的函数,所以我们想要将L最小化。
这里先不讲梯度下降,我们来看一下面对的问题:
上面的式子中只有未知数w,其他都是常数,将其展开,无非就是w的一元二次多项式,我们甚至可以直接利用小学二年级学的知识,求出其最小值。
问题结束了吗?没有。单变量比较容易,但是多变量函数直接求最值恐怕就没有那么容易了,所以下面我们换一种角度看问题,我们尝试将L(w)进行可视化,如下图:
图中可以看到L(w)与w的关系,假设我们不计算最值,而是让电脑随便找一个w,然后通过某种算法让其逐步找到能使L(w)最小的w,也就是图中的最低谷,这就是梯度下降。
注意:这里的L(w)的图像与我们假设的问题不完全相同。
具体方法其实图中已经讲清楚了,就是我们随机找一个w,然后计算其梯度(在一元函数中就是斜率),根据斜率,决定其变化的方向,如果斜率为负,说明向右改变w才能使L更小,于是重复以上步骤,最终可以找到L的最小是对应的w。
注意:这里可能会只找到Local Minima(局部最小值)而没有找到Global Minima(全局最小值)。
到这里,梯度下降的概念已经在单变量的情况已经清楚了,接下来看2个变量。
2个变量
依旧可以使用数学方法计算二元多次函数的最值,但是数学方法对高维的可拓展性比较差,但机器学习不会,这也是机器学习的优点之一。
对于一元函数,不论损失函数如何设计,只会影响次数的高低,最终依旧是一个平面(二维空间)就可以可视化的形式:
推广到二元函数,可视化后就是一个三维空间;换言之,只要是二元,那么不论其形式如何,最终都是与下图类似的形式:
我们要想找到最小值,那么在移动的时候就需要按照L(w,b)的梯度的反方向进行移动,移动的距离就是我们所知的学习率,最终一步步移动到最小值。这样的逻辑比起计算多元函数的最值,更适合机器操作。
于是,我们就可以拓展到高维,虽然已经无法可视化,但是不难类比,结果依旧可以转变为如下问题:
找一个多元函数的最值,其对应的点的坐标就是我们要找的最优参数。
多个参数
所以,在高维空间(多个参数)的情况也可以使用同样的思想,找梯度,按照梯度下降的方向,更新参数,最终找到最小值,这便是梯度下降。
反向传播
现在已经明白了如何使用梯度下降的方法更新模型参数从而找到使损失函数最小的参数,那么如何寻找梯度,这就是我们要将的下一个问题:
反向传播(Back Propagation)
耳熟能详的BP神经网络中的BP就指Back Propagation。
接下来就可以利用反向传播寻找梯度。