梯度下降法

之前在提到线性回归和逻辑回归的时候,为了极小化损失函数估计参数,我们尝试了求偏导和极大似然估计的方法,接下来介绍一种新方法,梯度下降法。

在微积分中,对多元函数的参数求偏导,把各个参数的偏导写成向量,就是梯度。梯度向量的意义就在于反映了函数变化最快的地方,比如说对于函数f(x,y),在点(x0,y0),沿着梯度向量的方向就是(∂f/∂x0, ∂f/∂y0)T的方向是f(x,y)增加最快的地方。或者说,沿着梯度向量的方向,更加容易找到函数的最大值。反过来说,沿着梯度向量相反的方向,也就是 -(∂f/∂x0, ∂f/∂y0)T的方向,梯度减少最快,也就是更加容易找到函数的最小值。因为我们需要最小化损失函数,所以我们就需要梯度下降法。

梯度下降的直观解释就是假设我们要下山,但是并不知道具体怎么下,于是我们选择分析目前的位置往哪个方向走是最陡的,走了一步之后继续重复分析,力求每一步下山的幅度是最大的,最后我们可能不能下到最低处,但起码也能达到一个局部最优的地方。

接下来再介绍一些相关概念,首先是步长,也叫学习率,就是每一次迭代往负方向移动的距离;特征,也就是线性回归中的predictor,也是自变量,也是输入的数据,有很多叫法,但本质都是一样;假设函数,也就是我们的目标函数,线性回归中的回归函数,包含了自变量和我们需要估计的参数;损失函数,可以评价模型的好坏,像之前用到的均方误差,损失函数越小,证明预测值和真实值之间的差异越小,模型越好。

说完简单的理解,再举一个实际的例子,比如我们现在有一个二元函数求梯度:
$$f(x_1, x_2) = x_1 ^2 +x_1 x_2-3x_2$$
$$\nabla f = (\frac{\partial f}{\partial x_1},\frac{\partial f}{\partial x_2}) = (2x_1+x_2, x_1-3)$$
比如我们设置初始点在(0,0),那么我们就可以代入梯度,知道函数往(0,-3)的方向下降得最快(假设学习率为1),验证一下,一开始我们函数的结果为0,第一次迭代后点在(0,3)(初始点减去梯度),函数结果为-9,确实下降了,所以这个点比初始点更接近最小值。
参考资料:
[1]https://www.cnblogs.com/pinard/p/5970503.html