优化算法
在看线性模型的时候,我们寻找的是误差函数梯度为0 的点,更直接点的说法二次函数一阶导数为0的点。不过这只是我们在线性模型里看到的,实际上一阶导数为0 的点,可能是平面、鞍点、局部最小点、全局最小点。局部和全局都差不多了。鞍点和平面肯定是不能要的。
以后再配图吧,先记笔记
随机梯度下降
损失函数
L
(
θ
)
L(\theta)
L(θ) 、梯度
∇
L
(
θ
)
\nabla L(\theta)
∇L(θ) 、参数
θ
\theta
θ 、学习率
η
\eta
η
θ
i
=
θ
i
−
1
−
η
∇
L
(
θ
i
−
1
)
\theta^i = \theta^{i-1} - \eta \nabla L(\theta^{i-1})
θi=θi−1−η∇L(θi−1)
我们的目标
θ
∗
=
a
r
g
θ
m
i
n
L
(
θ
)
\theta ^ * = arg_{\theta} min L(\theta)
θ∗=argθminL(θ)
希望更新参数后
L
(
θ
0
)
>
L
(
θ
1
)
>
L
(
θ
2
)
.
.
.
.
.
.
L(\theta_0) > L(\theta_1) > L(\theta_2) ......
L(θ0)>L(θ1)>L(θ2)......
这个可以用泰勒级数来证明
使用随机梯度下降,也就是每次取一定量的数据集来计算梯度,而不是全部的数据集,这也有利于跳出局部极小点和鞍点
动量法
梯度下降法的学习率其实不好把握,大了不收敛,小了原地爬
对梯度下降法做一个修改
v
i
=
γ
v
i
−
1
+
η
∇
L
(
θ
)
v_i = \gamma v_{i-1} + \eta \nabla L(\theta)
vi=γvi−1+η∇L(θ)
θ
i
=
θ
i
−
1
−
v
i
\theta_i = \theta_{i-1} - v_i
θi=θi−1−vi
当前速度
v
i
v_i
vi 动量参数
γ
\gamma
γ是一个小于1 的正数,学习率
η
\eta
η
上述公式相当于在每次更新参数的时候,都会将之前的速度考虑进来,每个参数在各个方向上的移动幅度不仅仅取决于当前速度,还取决于过去的各个梯度在各个方向上的是否一致
如果一个梯度一直沿着一个方向进行更新,那么每次更新的幅度就越来越大,这个理解思路和随机梯度下降一样
如果一个梯度在一个方向上不断变化,那么 它梯度更新幅度就会被衰减,设想一下,损失函数,在某个参数下呈现近似平面,这个参数更不更新无所谓了。
v
0
=
0
v_0 = 0
v0=0
v
1
=
γ
v
0
+
η
g
=
η
g
v_1 = \gamma v_0 + \eta g = \eta g
v1=γv0+ηg=ηg
v
2
=
γ
v
1
+
η
g
=
(
1
+
γ
)
η
g
v_2 = \gamma v_1 + \eta g = (1 + \gamma ) \eta g
v2=γv1+ηg=(1+γ)ηg
.
.
.
.
.
.
......
......
v
+
∞
=
(
1
+
γ
+
γ
2
+
γ
3
+
.
.
.
.
)
=
1
1
−
γ
η
g
v_{+\infty} = (1 + \gamma + \gamma^2 + \gamma^3 + ....) = \frac{1}{1 - \gamma} \eta g
v+∞=(1+γ+γ2+γ3+....)=1−γ1ηg 麦克劳林展开,最后动量也会达到一个峰值
所以
γ
\gamma
γ要小于0,这里
γ
\gamma
γ是一个衰减系数。
Adagrad
上面说到的梯度下降,动量法,里面的学习率 η \eta η是固定的学习率进行参数更新。但是呢,不同的参数梯度可能不一样,所以需要不同的学习率。(过两天再写吧)