在微积分中,对多元函数的参数求偏导,把各个参数的偏导写成向量,就是梯度。梯度向量的意义就在于反映了函数变化最快的地方,比如说对于函数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
−
3
x
2
f(x_1, x_2) = x_1 ^2 +x_1 x_2-3x_2
f(x1,x2)=x12+x1x2−3x2
∇
f
=
(
∂
f
∂
x
1
,
∂
f
∂
x
2
)
=
(
2
x
1
+
x
2
,
x
1
−
3
)
\nabla f = (\frac{\partial f}{\partial x_1},\frac{\partial f}{\partial x_2}) = (2x_1+x_2, x_1-3)
∇f=(∂x1∂f,∂x2∂f)=(2x1+x2,x1−3)
比如我们设置初始点在(0,0),那么我们就可以代入梯度,知道函数往(0,-3)的方向下降得最快(假设学习率为1),验证一下,一开始我们函数的结果为0,第一次迭代后点在(0,3)(初始点减去梯度),函数结果为-9,确实下降了,所以这个点比初始点更接近最小值。
想浏览更多关于数学、机器学习、深度学习的内容,可浏览本人博客