一.梯度下降算法的推导
在深度网络的训练过程中,为了使损失尽可能的小,经常使用梯度下降算法训练网络,为什么沿着负梯度的方向更新权值就能使损失值越来越小,下面给出梯度下降算法的简要推导。
已知函数f(x),当前x取值
x0
x
0
,令
x1=x0+λn⃗
x
1
=
x
0
+
λ
n
→
,则:
f(x1)=f(x0+λn⃗ )
f
(
x
1
)
=
f
(
x
0
+
λ
n
→
)
=f(x0)+f′(x0)⋅λn⃗ +O(λn⃗ )2
=
f
(
x
0
)
+
f
′
(
x
0
)
⋅
λ
n
→
+
O
(
λ
n
→
)
2
≈f(x0)+f′(x0)⋅λn⃗
≈
f
(
x
0
)
+
f
′
(
x
0
)
⋅
λ
n
→
=f(x0)+λ|f′(x0)|⋅|n⃗ |⋅cos<f′(x0),n⃗ >
=
f
(
x
0
)
+
λ
|
f
′
(
x
0
)
|
⋅
|
n
→
|
⋅
cos
<
f
′
(
x
0
)
,
n
→
>
当
cos<f′(x0),n⃗ >=−1
cos
<
f
′
(
x
0
)
,
n
→
>=
−
1
,即
n⃗
n
→
与
f′(x0)
f
′
(
x
0
)
成
180。
180
。
,即
n⃗
n
→
取负梯度方向时,
f(x1)
f
(
x
1
)
取最小值
min(f(x1))=f(x0)−λ|f′(x0)|⋅|n⃗ |
m
i
n
(
f
(
x
1
)
)
=
f
(
x
0
)
−
λ
|
f
′
(
x
0
)
|
⋅
|
n
→
|
只有当函数为凸函数时梯度下降算法才能保证达到全局最小值,在凹函数中沿着梯度方向可以到达局部最小值,是否能到达全局最小值和初始点
x0
x
0
的取值有关
二.梯度下降算法的分类
梯度下降算法:在全部数据上最小化损失,损失函数的取值是所有训练数据上的损失,每轮迭代计算所有的损失函数非常耗时。
随机梯度下降算法:每一轮迭代中随机选择某一条训练数据上的损失来优化参数,但在某一条数据上损失更小并不代表在全部数据上损失更小,使用随机梯度下降可能无法达到局部最优。
batch梯度下降算法:上面两种方法的折中。每次在一个batch上优化神经网络的参数并不会比单个数据慢太多,也可以大大减少收敛所需的迭代次数,同时使收敛到的结果更加接近梯度下降算法的效果。