在机器学习中,梯度下降是十分常见的一种方法。在很多机器学习算法中,对于参数的学习调整,采用的方法都是梯度下降。可以说,梯度下降是每一个学习Machine Learning 的人必须彻底掌握的方法。只有理解了梯度下降,才能初步对于机器学习有所了解。
接下来,这篇博客将从头到尾详细讲述一遍梯度下降。首先必须说明的是,这篇博客是参照Andrew Ng讲解的《Machine Learning》课程中关于梯度下降的部分,不愿意看我博客的可以直接去看视频。
代价函数
在学习梯度下降之前,我们首先要知道什么是代价函数。假设我们的模型是
hθ(x)=θ0+θ1x
,其中,
θ0
和
θ1
就是所谓的“参数”,
x
就是我们的输入,也就是我们的训练集或测试集的特征。所谓的“学习”,就是要找到合适的
梯度下降
知道了我们的目标(使代价函数尽可能小)后,我们应该考虑的就是如何找到最合适的参数
θ0
,
θ1
;梯度下降就是一种让我们找到最合适的参数的方法。
可以设想,整个“学习”的过程是这样的:
- 初始化参数 θ0 , θ1
- 调整 θ0 , θ1 的值,使得 L 减小
- 重复步骤2直至
L 的大小达到我们的要求
我们可以使用梯度下降来实现步骤2
如图所示
图像的z轴就是代价函数的值,我们的目标就是找到“最低”的那个点。想象一下我们在这片“山岭”的任意位置,如何才能走到最低的点?显然只要往“下”走就可以了,那么如何才能最快走到最低的点呢?这时候我们想起来微积分中梯度的概念,显然梯度方向下降最快。于是我们可以给出参数
θ0
,
θ1
的更新公式:
最后需要说明一下 α 这个参数,我们称 α 为学习率,也叫“步长”,想象一下,如果步长太小,我们很容易就能走到山岭的“谷底”,但是这片山岭有很多“谷底”,我们走到的那个不一定是最低点。这种现象就是我们常说的“陷入局部最优”;如果步长过大,我们可能在谷底附近徘徊多次,也就是所谓的“收敛速度慢”,甚至无法收敛。因此我们必须要找到一个合适的 α ,这也是这里唯一需要手动调整的参数。