随机梯度下降SGD算法理解 | 您所在的位置:网站首页 › 随机梯度下降损失函数怎么算 › 随机梯度下降SGD算法理解 |
随机梯度下降算法(Stochastic gradient descent,SGD)在神经网络模型训练中,是一种很常见的优化算法。这种算法是基于梯度下降算法产生的,所以要理解随机梯度下降算法,必须要对梯度下降算法有一个全面的理解。 梯度下降:这个算法我在之前的博文Logistic Regression的数学推导过程以及Python实现 中有详细的说明介绍,这里我们再来简单回顾一下梯度下降算法:假设在逻辑斯蒂回归中,预测函数为
h
θ
(
x
)
=
θ
0
+
θ
1
x
1
+
θ
2
x
2
+
.
.
.
+
θ
n
x
n
{h_\theta }(x) = {\theta _0} + {\theta _1}{x_1} + {\theta _2}{x_2} + ... + {\theta _n}{x_n}
hθ(x)=θ0+θ1x1+θ2x2+...+θnxn,我们用平方损失函数可以得到这个函数的损失函数:
J
(
θ
)
=
1
2
∑
i
=
1
m
(
h
θ
(
x
)
−
y
)
2
J(\theta ) = \frac{1}{2}\sum\limits_{i = 1}^m {{{({h_\theta }(x) - y)}^2}}
J(θ)=21i=1∑m(hθ(x)−y)2 我们的目标就是最小化函数的损失函数,我们就对每一个
θ
i
{\theta _i}
θi 超参数求偏导,就可以得到当前这一轮的梯度,然后损失函数向梯度的反方向进行更新,不断这样进行迭代更新,就可以得到超参数的全局最优解。运用链式求导方法,数学过程可以表示成:
∂
∂
θ
j
J
(
θ
)
=
∂
∂
θ
j
1
2
(
h
θ
(
x
)
−
y
)
2
=
(
h
θ
(
x
)
−
y
)
⋅
∂
∂
θ
j
(
h
θ
(
x
)
−
y
)
=
(
h
θ
(
x
)
−
y
)
⋅
∂
∂
θ
j
(
∑
i
=
0
n
θ
i
x
i
−
y
)
=
(
h
θ
(
x
)
−
y
)
x
j
\frac{\partial }{{\partial {\theta _j}}}J(\theta ) = \frac{\partial }{{\partial {\theta _j}}}\frac{1}{2}{({h_\theta }(x) - y)^2} = ({h_\theta }(x) - y) \cdot \frac{\partial }{{\partial {\theta _j}}}({h_\theta }(x) - y) \\= ({h_\theta }(x) - y) \cdot \frac{\partial }{{\partial {\theta _j}}}(\sum\limits_{i = 0}^n {{\theta _i}{x_i}} - y) = ({h_\theta }(x) - y){x_j}
∂θj∂J(θ)=∂θj∂21(hθ(x)−y)2=(hθ(x)−y)⋅∂θj∂(hθ(x)−y)=(hθ(x)−y)⋅∂θj∂(i=0∑nθixi−y)=(hθ(x)−y)xj 这是每一轮迭代的梯度,我们加上
l
e
a
r
n
i
n
g
learning
learning
r
a
t
e
rate
rate
α
\alpha
α,就可以得到完整的梯度下降的公式:
θ
j
:
=
θ
j
−
α
(
h
θ
(
x
)
−
y
)
x
j
{\theta _j}: = {\theta _j} - \alpha ({h_\theta }(x) - y){x_j}
θj:=θj−α(hθ(x)−y)xj 这个过程就像是在一个山脉中寻找一个最低的山谷,我们用学习率为
α
\alpha
α 的步长一步步地向山谷的大致方向移动,我们每一步只能向山谷的方向靠近,每一步都在进步,整个过程可以参考下面的动图(图片来自知乎-量子位): |
CopyRight 2018-2019 实验室设备网 版权所有 |