对基于梯度优化的理解:
y
_
p
r
e
d
=
r
e
l
u
(
d
o
t
(
W
,
X
)
+
b
)
y\_ pred=relu(dot(W,X)+b)
y_pred=relu(dot(W,X)+b)
训练过程
- 抽取训练样本x和相应目标y组成数据批量
- 在x上运行网络(前向传播),得到预测值y_pred
- 计算网络在这批数据上的损失,用于衡量y_pred和y之间的距离
- 更新网络的所有权重,使网络在这批数据上的损失略微下降
训练的过程就是得到合适的W和b,使得y_pred与y之间的距离非常小。但是如何更新网络权重W???
考虑一个权重 w i w_{i} wi,初始值为0.3,前向传播后得到损失为0.5;将 w i w_{i} wi变为0.35,重新进行前向传播,损失增大到0.6;如果将 w i w_{i} wi变为0.25,损失减小到0.4,这说明 w i w_{i} wi减小有助于损失最小化。
对于网络中大量的权重,采用这一方法:计算损失(loss_function)相对于权重(W)的梯度,向梯度的反方向改变权重,从而使网络损失减小。
一元函数举例:
w
0
w_{0}
w0左侧:损失函数相对于
w
w
w的导数为负
,为使损失函数最小,则
w
w
w沿正方向
移动;
w
0
w_{0}
w0右侧:损失函数相对于
w
w
w的导数为正
,为使损失函数最小,则
w
w
w沿负方向
移动;
同样的,在多元函数上,导数可以推广到梯度上。
y
_
p
r
e
d
=
d
o
t
(
W
,
X
)
y\_pred=dot(W,X)
y_pred=dot(W,X)
l
o
s
s
_
v
a
l
u
e
=
l
o
s
s
(
y
_
p
r
e
d
,
y
)
loss\_value=loss(y\_pred,y)
loss_value=loss(y_pred,y)
输入数据
X
X
X和
y
y
y保持不变,讨论
W
W
W的变化如何影响
l
o
s
s
_
v
a
l
u
e
loss\_value
loss_value。可以将
l
o
s
s
_
v
a
l
u
e
loss\_value
loss_value看作
W
W
W的函数,
l
o
s
s
_
v
a
l
u
e
=
f
(
W
)
loss\_value=f(W)
loss_value=f(W),对于
f
(
W
)
f(W)
f(W),将
W
W
W向梯度的反方向移动来减小
f
(
W
)
f(W)
f(W),即减小
l
o
s
s
_
v
a
l
u
e
loss\_value
loss_value。
函数的最小值是导数为0的点对应的函数值, l o s s _ v a l u e loss\_value loss_value最小值为梯度(对W的梯度)为0的点对应的值,如上图,即 l o s s _ v a l u e ( w ′ ) loss\_value(w') loss_value(w′)
上述训练过程修改为:
- 抽取训练样本x和相应目标y组成数据批量
- 在x上运行网络(前向传播),得到预测值y_pred
- 计算网络在这批数据上的损失,用于衡量y_pred和y之间的距离
- 计算 l o s s loss loss相对于 W W W的梯度(一次反向传播)
- 将 W W W沿着梯度的反方向移动一点,比如: W − = s t e p ∗ g r a d i e n t W-=step*gradient W−=step∗gradient,从而使这批数据损失减小
- 重复4,5,直到梯度为0
上述描述的方法为梯度下降,首先初始化参数 W W W,然后迭代更新这些参数使损失函数不断变小,梯度下降法可以分为三种:
-
批量梯度下降法(Batch Gradient Descent, BGD):每次使用全部数据计算梯度去更新参数
-
随机梯度下降法(Stochastic Gradient Descent, SGD):每次迭代仅选择一个训练样本去计算代价函数的梯度,然后更新参数
-
小批量梯度下降法(Mini-Batch Gradient Descent, MBGD):每次迭代中仅使用m个训练样本去计算代价函数的梯度
参考链接:三种类型的梯度下降算法 ;梯度下降法的总结