一文搞懂梯度下降法
程序员老宋 2024-08-16 10:01:03 阅读 67
文章目录
梯度是什么东东?怎么个下降法潜在的问题陷入局部最小遭遇鞍点学习率的选择
梯度下降法,堪称训练神经网络的黑魔法。掌握该魔法,要先搞懂
梯度的概念。
梯度是什么东东?
梯度是一个多维向量。对于多元函数
f
(
x
1
,
x
2
,
.
.
.
,
x
n
)
f(x_1,x_2,...,x_n)
f(x1,x2,...,xn)上的某一点
(
x
1
,
x
2
,
.
.
.
,
x
n
,
y
)
(x_1,x_2,...,x_n,y)
(x1,x2,...,xn,y),其梯度被定义为:
⟨
∂
f
∂
x
1
,
∂
f
∂
x
2
,
.
.
.
,
∂
f
∂
x
n
⟩
\left \langle \frac{\partial f}{\partial x_1}, \frac{\partial f}{\partial x_2},...,\frac{\partial f}{\partial x_n} \right \rangle
⟨∂x1∂f,∂x2∂f,...,∂xn∂f⟩,也就是说,函数的梯度作为一个向量,其分量等于各个自变量对应的偏导数。
梯度的方向和大小,具有直观的几何意义。可以证明(本文不证):,某点的梯度方向,总是指向函数值“变化率”最大的方向,而梯度的大小等于该“变化率”。
一元函数的变化率,就是该函数的导数;而刻画多元函数的“变化率”,则需要引入方向导数的概念。
对于一元函数,自变量只有增大和减小两个变化方向,而对于多元函数,自变量可以有任意多个变化方向。不妨以二元函数
f
(
x
,
y
)
=
x
2
+
y
2
f(x,y)=x^2+y^2
f(x,y)=x2+y2 为例。如下图:
该图出自 geogebra 方向导数。访问该网址可以查看动态效果。
图中的点
P
0
(
1
,
1
,
2
)
P_0(1,1,2)
P0(1,1,2),在
x
O
y
xOy
xOy 平面上的投影为点
P
(
1
,
1
)
P(1,1)
P(1,1)。红色的箭头所示的单位向量
u
u
u,表示
P
0
P_0
P0 点处函数
f
f
f 的一个自变量变化方向。设黑色的切线和
x
O
y
xOy
xOy 平面的夹角为
θ
\theta
θ,和一元函数类似,
t
a
n
(
θ
)
tan(\theta)
tan(θ) 等于函数
f
f
f 在
P
0
P_0
P0 处沿着方向
u
u
u 的方向导数,用符号表示为
f
u
′
(
1
,
1
)
f_u^{'}(1,1)
fu′(1,1)。
拖动图中的手柄,可以调整红色箭头
u
u
u 的方向。显然,
u
u
u 可以在
x
O
y
xOy
xOy 平面中 360 度旋转,对应地,
P
0
P_0
P0 点处方向导数
f
u
′
(
1
,
1
)
f_u^{'}(1,1)
fu′(1,1) 也会变化;当方向导数取到最大值时,
u
u
u 的方向就是
P
0
P_0
P0 处变化率最大的方向,也就是
P
0
P_0
P0 处的梯度方向。
怎么个下降法
顾名思义,梯度下降法就是沿着梯度的反方向进行下降,直到找到函数的局部最小值或者全局最小值。
想象一下你在山上,站在某个点。如果你沿着不同的方向走,你会发现高度的变化率是不同的,也就是山的陡峭程度是不同的,而沿着梯度指向的方向,是最陡峭的。那么,每次沿着梯度的反方向迈出一小步,就能以最快的速度下山。
怎么判断你已经到了山谷呢?很简单,你只管沿着梯度的方向走,只要高度下再下降了,也就是梯度变成了 0 时,你就到了山谷。
显然,每一步迈出的距离大小,会影响下山的速度。这个步长,称之为学习率,记为
η
\eta
η。
梯度下降法用于训练神经网络时,目标是最小化损失函数。什么叫损失函数这里先不用管,只要知道它是一个多元函数即可。
一个神经网络可以有成千上万的参数,对应地,损失函数可以有成千上万的自变量。
运行梯度下降法时,首先需要随机地初始化这些自变量,然后沿着梯度反方向迭代若干轮。
一般地,对于损失函数
f
(
x
1
,
x
2
,
.
.
.
,
x
n
)
f(x_1,x_2,...,x_n)
f(x1,x2,...,xn),梯度下降法每次迭代,更新参数(自变量)的方式为:
x
i
←
x
i
−
η
∂
f
∂
x
i
(式1)
x_i \leftarrow x_i - \eta \frac{\partial f}{\partial x_i} \tag{式1}
xi←xi−η∂xi∂f(式1)
这个式子,就是训练神经网络时的魔法所在。
你可能会好奇,一个拥有成千上万个自变量的函数,怎么对其求出每一个偏导数呢?这就要用到大名鼎鼎的误差逆传播算法了,这里也先跳过。
潜在的问题
陷入局部最小
梯度下降法可能会陷入局部最小值,而不是全局最小值。比如:如果初始位置位于局部最小值的附近,那么梯度下降法可能会很快找到该局部最小值然后停止,而不是全局最小值。
遭遇鞍点
如上图所示,鞍点处的梯度为 0,但既不是极小值,也不是极大值。遭遇鞍点时,梯度下降法会终止。
学习率的选择
从式 1 可以看到,学习率
η
\eta
η 的选择至关重要。
如果学习率设置得太小,那么梯度下降法就会非常缓慢地收敛,浪费计算资源。
如果学习率设置得太大,那么梯度下降法可能会在最小值附近来回震荡,无法收敛。
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。