赞
踩
参考资料:推荐系统玩家 之 随机梯度下降(Stochastic gradient descent)求解矩阵分解 - 知乎 (zhihu.com)
什么是梯度?
梯度下降的推导,为什么梯度反方向是函数值局部下降最快的方向?
关于变化率的问题,使用一阶泰勒展开为例:
f
(
θ
)
≈
f
(
θ
0
)
+
(
θ
−
θ
0
)
f
’
(
θ
0
)
(1.0)
f{(\theta)} \approx f{(\theta_{0})} + (\theta - \theta_{0})f’{(\theta_{0})}\tag{1.0}
f(θ)≈f(θ0)+(θ−θ0)f’(θ0)(1.0)
在[θ-θ0]区间上,f(θ)就是黑线部分,f’(θ)就是红线部分,为f(θ)在θ0处的切线。
公式中1.0中(θ-θ0)是一个微小的矢量,其实就类似于Δθ,其大小我们用η来表示,然后单位向量用v表示:
θ
−
θ
0
=
η
∗
v
(1.1)
\theta - \theta_{0} = \eta*v\tag{1.1}
θ−θ0=η∗v(1.1)
f ( θ ) ≈ f ( θ 0 ) + η ∗ v ∗ f ’ ( θ 0 ) (1.2) f{(\theta)} \approx f{(\theta_{0})} + \eta*v*f’{(\theta_{0})}\tag{1.2} f(θ)≈f(θ0)+η∗v∗f’(θ0)(1.2)
我们做梯度下降的目的就是为了最小化损失函数,也就是f(θ),梯度下降是个迭代的过程。也就是说,我们希望每次更新θ的时候,都能让f(θ)的值变小,即有:
f
(
θ
)
−
f
(
θ
0
)
≈
η
∗
v
∗
f
’
(
θ
0
)
<
0
(1.3)
f{(\theta)} - f{(\theta_{0})} \approx \eta*v*f’{(\theta_{0})} < 0\tag{1.3}
f(θ)−f(θ0)≈η∗v∗f’(θ0)<0(1.3)
其中η为标量且为正,简化得到
v
∗
f
’
(
θ
0
)
<
0
(1.4)
v*f’{(\theta_{0})} < 0\tag{1.4}
v∗f’(θ0)<0(1.4)
v和f’(θ)都是向量,因此v和f’(θ)想要小于零必须是异号,即反方向
从这里我们就可以看出,为什么梯度反方向是函数值局部下降最快的方向。在上面我们提到过梯度方向是指函数变化率最大的方向,也就是斜率越来越大的方向,曲线会越来越陡。那么梯度的反方向,就是函数值局部下降最快的方向,斜率是越来越小的,斜率最终会为0。这也就是为什么我们高中求解二元一次方程组的最小值的时候,求导后需要导数等于0。
我们知道v和f’(θ)反方向后,那么可以表达成:(因为v是单位向量,所以除以f’(θ)的模)
v
=
−
f
’
(
θ
0
)
∥
f
’
(
θ
0
)
∥
(1.5)
v = -\frac{f’{(\theta_{0})}}{\|f’{(\theta_{0})}\|}\tag{1.5}
v=−∥f’(θ0)∥f’(θ0)(1.5)
1.5带入1.1中:
θ
=
θ
0
−
η
f
’
(
θ
0
)
∥
f
’
(
θ
0
)
∥
(1.6)
\theta = \theta_{0} - \eta\frac{f’{(\theta_{0})}}{\|f’{(\theta_{0})}\|}\tag{1.6}
θ=θ0−η∥f’(θ0)∥f’(θ0)(1.6)
因为向量的模是标量,所以化简:
θ
=
θ
0
−
η
f
’
(
θ
0
)
(1.7)
\theta = \theta_{0} - \eta{f’(\theta_{0})}\tag{1.7}
θ=θ0−ηf’(θ0)(1.7)
其中,θ0就是当前参数,η就是步长,也就是学习率,f’(θ)就是梯度方向,符号表示梯度的反方向,那么1.7式也就是梯度下降法中参数θ的更新表达式了。
随机梯度下降如何运用于损失函数求解呢?
参考资料:推荐系统玩家 之 反向传播法(BackPropagation) - 知乎 (zhihu.com)
主题:
前向传播:
h 1 = 1 1 + e − h 1 (1.1) h1 = \frac{1}{1+e^{-h1}}\tag{1.1} h1=1+e−h11(1.1)
1.0为h1的输入,1.1为h1的输出,h2的输入输出同理
那么隐藏层到输出层的运算同1.0 1.1一样,先计算输入然后计算输出得到o1和o2
算出的o1和o2与初始设定的o1,o2显然是不会刚好一次就相同的,那么我们就要对误差进行反向传播更新权重w
反向传播:
计算总误差
E
1
t
o
t
a
l
=
∑
1
2
(
目标值
−
计算输出值
)
2
(1.2)
E1_{total} = \sum\frac{1}{2}(目标值-计算输出值)^2\tag{1.2}
E1total=∑21(目标值−计算输出值)2(1.2)
同理计算处o2的误差,那么在输出值只有o1和o2的情况下总误差即:
E
t
o
t
a
l
=
E
2
t
o
t
a
l
+
E
2
t
o
t
a
l
(1.3)
E_{total} = E2_{total} + E2_{total}\tag{1.3}
Etotal=E2total+E2total(1.3)
那么反向传播开始计算,先从输出层到隐藏层,即o1–> h1
梯度反向传播的主要原则就是求导过程中的链式法则(Chain Rule)。那么我们以w5权重为例,我们用整体误差对w5求偏导,其意义就是看w5对整体误差产生了多少影响
∂ E t o t a l ∂ w 5 = ∂ E t o t a l ∂ o 1 输出 ∗ ∂ o 1 输出 ∂ o 1 输入 ∗ ∂ o 1 输入 ∂ w 5 (1.4) \frac{\partial{E_{total}}}{\partial{w_{5}}} = \frac{\partial{E_{total}}}{\partial{o_{1}输出}} * \frac{{\partial{o_{1}输出}}}{{\partial{o_{1}输入}}} * \frac{{\partial{o_{1}输入}}}{\partial{w_{5}}}\tag{1.4} ∂w5∂Etotal=∂o1输出∂Etotal∗∂o1输入∂o1输出∗∂w5∂o1输入(1.4)
对1.4式各个部分求偏导即可求得整体误差对于w5的偏导值。
那么根据梯度下降的参数更新公式得到:(即梯度下降部分1.8)
w
5
+
=
w
5
−
η
∗
∂
E
t
o
t
a
l
∂
w
5
(1.5)
w^+_{5} = w_{5} - \eta*\frac{\partial{E_{total}}}{\partial{w_{5}}}\tag{1.5}
w5+=w5−η∗∂w5∂Etotal(1.5)
同理更新w6 w7 w8
对于隐藏层–>输入层的权重更新:
与输出层–>隐藏层更新参数不同的地方在于h1输出会接收从输出层传来的o1和o2的误差;
∂
E
t
o
t
a
l
∂
w
1
=
∂
E
t
o
t
a
l
∂
h
1
输出
∗
∂
h
1
输出
∂
h
1
输入
∗
∂
h
1
输入
∂
w
1
(1.6)
\frac{\partial{E_{total}}}{\partial{w_{1}}} = \frac{\partial{E_{total}}}{\partial{h_{1}输出}} * \frac{{\partial{h_{1}输出}}}{{\partial{h_{1}输入}}} * \frac{{\partial{h_{1}输入}}}{\partial{w_{1}}}\tag{1.6}
∂w1∂Etotal=∂h1输出∂Etotal∗∂h1输入∂h1输出∗∂w1∂h1输入(1.6)
其中
∂
E
t
o
t
a
l
∂
h
1
输出
=
∂
E
o
1
∂
h
1
输出
+
∂
E
o
2
∂
h
1
输出
(1.7)
\frac{\partial{E_{total}}}{\partial{h_{1}输出}} = \frac{\partial{E_{o1}}}{\partial{h_{1}输出}} + \frac{\partial{E_{o2}}}{\partial{h_{1}输出}}\tag{1.7}
∂h1输出∂Etotal=∂h1输出∂Eo1+∂h1输出∂Eo2(1.7)
同理更新得到w2 w3 w4
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。