梯度下降的理解
损失函数
L
(
W
⃗
)
L(\vec{W})
L(W)其实就是把参数向量
θ
⃗
\vec{\theta}
θ当作自变量,每一个样本的预测值
H
i
(
W
⃗
)
H_i(\vec{W})
Hi(W)和真实值
Y
i
Y_i
Yi之间差作为因变量。求出关于参数
θ
⃗
\vec{\theta}
θ取什么值时,使得损失函数最小化。这些参数构造就得到了模型。
W
⃗
=
[
θ
1
,
θ
2
,
.
.
.
,
θ
j
,
.
.
.
,
θ
p
]
\vec{W}=[\theta^1,\theta^2,...,\theta^j,...,\theta^p]
W=[θ1,θ2,...,θj,...,θp]
根据函数导数的定义,
L
(
W
⃗
)
L(\vec{W})
L(W)在对每个参数求偏导为0时,即
∂
L
(
θ
n
1
)
∂
θ
n
1
=
0
,
∂
L
(
θ
n
2
)
∂
θ
n
2
=
0
,
.
.
.
,
∂
L
(
θ
n
p
)
∂
θ
n
p
=
0
\frac{\partial L(\theta^1_n)}{\partial \theta^1_n}=0,\frac{\partial L(\theta^2_n)}{\partial \theta^2_n}=0,...,\frac{\partial L(\theta^p_n)}{\partial \theta^p_n}=0
∂θn1∂L(θn1)=0,∂θn2∂L(θn2)=0,...,∂θnp∂L(θnp)=0可以得到最小值。
假设损失函数为
L
(
W
⃗
)
=
(
H
1
(
W
⃗
)
−
Y
1
)
2
+
(
H
2
(
W
⃗
)
−
Y
2
)
2
+
.
.
.
+
(
H
m
(
W
⃗
)
−
Y
m
)
2
L(\vec{W})=(H_1(\vec{W})-Y_1)^{2} +(H2(\vec{W})-Y_2)^2+...+(Hm(\vec{W})-Y_m)^2
L(W)=(H1(W)−Y1)2+(H2(W)−Y2)2+...+(Hm(W)−Ym)2
梯度下降一般是设置一个初始的参数向量
W
0
⃗
\vec{W_0}
W0
W
0
⃗
=
[
θ
0
1
,
θ
0
2
,
.
.
.
,
θ
0
j
,
.
.
.
,
θ
0
p
]
\vec{W_0}=[\theta^1_0,\theta^2_0,...,\theta^j_0,...,\theta^p_0]
W0=[θ01,θ02,...,θ0j,...,θ0p]
参数 W 0 ⃗ \vec{W_0} W0一步步更新,使得最终的每一个参数 ∂ L ( θ n j ) ∂ θ n j = 0 \frac{\partial L(\theta^j_n)}{\partial \theta^j_n}=0 ∂θnj∂L(θnj)=0
权重参数
θ
j
\theta^j
θj更新的式子
θ
1
j
=
θ
0
j
−
α
∂
L
(
θ
0
j
)
∂
θ
0
j
\theta^j_1=\theta^j_0-\alpha \frac{\partial L(\theta^j_0)}{\partial \theta^j_0}
θ1j=θ0j−α∂θ0j∂L(θ0j)
⋯
\cdots
⋯
θ
k
j
=
θ
k
−
1
j
−
α
∂
L
(
θ
k
−
1
j
)
∂
θ
k
−
1
j
\theta^j_k=\theta^j_{k-1}-\alpha \frac{\partial L(\theta^j_{k-1})}{\partial \theta^j_{k-1}}
θkj=θk−1j−α∂θk−1j∂L(θk−1j)
∗
∗
E
q
1
∗
∗
**Eq1**
∗∗Eq1∗∗
⋯
\cdots
⋯
θ
n
j
=
θ
n
−
1
j
−
α
∂
L
(
θ
n
−
1
j
)
∂
θ
n
−
1
j
\theta^j_n=\theta^j_{n-1}-\alpha \frac{\partial L(\theta^j_{n-1})}{\partial \theta^j_{n-1}}
θnj=θn−1j−α∂θn−1j∂L(θn−1j)
那为什么这么更新呢
可以理解为,要使得
L
(
W
⃗
)
L(\vec{W})
L(W)达到极小值,那么每一个参数
∂
L
(
θ
k
j
)
∂
θ
k
j
\frac{\partial L(\theta^j_k)}{\partial \theta^j_k}
∂θkj∂L(θkj)都是在不断的逼近到0,即
∂
L
(
θ
k
j
)
∂
θ
k
j
⟶
0
\frac{\partial L(\theta^j_k)}{\partial \theta^j_k}\longrightarrow 0
∂θkj∂L(θkj)⟶0
L
(
W
⃗
)
L(\vec{W})
L(W)在对参数
θ
k
j
\theta^j_k
θkj求偏导为0时等价于
θ
k
j
\theta^j_k
θkj对步长
α
\alpha
α的变化率为0。即
θ
k
j
\theta^j_k
θkj相对于步长
α
\alpha
α的变化不再变化时。
可以根据极限的定义来看这一步
∂
L
(
θ
k
j
)
∂
θ
k
j
=
L
(
θ
k
j
)
−
L
(
θ
k
+
1
j
)
θ
k
j
−
θ
k
+
1
j
=
θ
k
j
−
θ
k
+
1
j
α
E
q
2
\frac{\partial L(\theta^j_k)}{\partial \theta^j_k}=\frac{L(\theta^j_k)-L(\theta^j_{k+1})}{\theta^j_k-\theta^j_{k+1}}=\frac{\theta^j_k-\theta^j_{k+1}}{\alpha} \ \ \ Eq2
∂θkj∂L(θkj)=θkj−θk+1jL(θkj)−L(θk+1j)=αθkj−θk+1j Eq2
α
\alpha
α就是步长,学习率learning rate。由Eq2可知,
α
\alpha
α与
L
(
θ
k
j
)
−
L
(
θ
k
+
1
j
)
L(\theta^j_k)-L(\theta^j_{k+1})
L(θkj)−L(θk+1j)同号,
α
\alpha
α取正数,决定了下一步更新的函数值会下降,此时参数会沿着极小值不断更新。(参考下图理解,把x轴换成
θ
\theta
θ轴思考)
总体来说
θ
\theta
θ从两边向内收,分为两种情况:
- 斜率为负时, θ \theta θ往右更新,即 θ k j − θ k + 1 j < 0 \theta^j_k-\theta^j_{k+1}<0 θkj−θk+1j<0, L ( θ k j ) − L ( θ k + 1 j ) > 0 L(\theta^j_k)-L(\theta^j_{k+1})>0 L(θkj)−L(θk+1j)>0
- 斜率为正时,
θ
\theta
θ往左更新,即
θ
k
j
−
θ
k
+
1
j
>
0
\theta^j_k-\theta^j_{k+1}>0
θkj−θk+1j>0,
L
(
θ
k
j
)
−
L
(
θ
k
+
1
j
)
>
0
L(\theta^j_k)-L(\theta^j_{k+1})>0
L(θkj)−L(θk+1j)>0
故Eq1成立。
当 α < 0 \alpha<0 α<0时, L ( θ k j ) − L ( θ k + 1 j ) < 0 L(\theta^j_k)-L(\theta^j_{k+1})<0 L(θkj)−L(θk+1j)<0。函数值会增大,参数会往函数极大值的方向更新, θ \theta θ整体往两边跑(此时变成梯度上升🤣)。