赞
踩
学习花费:2个到12点的晚上
李宏毅-反向传播
更新参数的过程为:
设有损失函数 L ( θ ) L(\theta) L(θ), θ 是 参 数 向 量 \theta是参数向量 θ是参数向量, θ = { w 1 , . . . , w n , b 1 , . . . , b n } \theta=\{w_1,...,w_n,b_1,...,b_n\} θ={w1,...,wn,b1,...,bn}
目的是要求loss最小,则求
∇
L
(
θ
)
\nabla L(\theta)
∇L(θ),等价于:
∂
L
/
∂
θ
=
[
∂
L
/
∂
w
1
,
.
.
.
,
∂
L
/
∂
b
n
]
\partial L/\partial\theta = [\partial L/\partial w_1,...,\partial L/\partial b_n]
∂L/∂θ=[∂L/∂w1,...,∂L/∂bn]
随机初始参数 θ 0 \theta^0 θ0,更新得到的参数 θ 1 = θ 0 − η ∇ L ( θ 0 ) \theta^1 = \theta^0 - \eta \nabla L(\theta_0) θ1=θ0−η∇L(θ0)
当有数百万个参数时,结合求导的链式法则,按照网络结构的流向,必定是十分繁琐
因此,引入反向传播
梯度下降的一种高效率计算方式,分为:
对每个样本都有一个函数 C ( θ ) C(\theta) C(θ)计算损失,可以表示为: l o s s x n = C θ n ( y p r e d , y ) loss_{x^n} = C^n_\theta(y_{pred},y) lossxn=Cθn(ypred,y),
而 y p r e d = s i g m o i d ( Z l a y e r n ( i n p u t 1 x l a y e r n ∗ w 1 + i n p u t 2 x l a y e r n ∗ w 2 ) + b l a y e r n ) y_{pred} = sigmoid(Z^{{layer}_n}(input^{x^{layer_n}}_1*w_1+input^{x^{layer_n}}_2*w_2)+b^{layer_n}) ypred=sigmoid(Zlayern(input1xlayern∗w1+input2xlayern∗w2)+blayern)。
大概的层次关系可以表示为:
求 ∇ C ( θ ) \nabla C(\theta) ∇C(θ)(即单个样本损失的梯度),如求 ∂ C / ∂ w 1 \partial C/\partial w_1 ∂C/∂w1,就得采用链式法则,网络越深。链越长。
前向: ∂ z / ∂ w \partial z/\partial w ∂z/∂w
后向: ∂ C / ∂ z \partial C/\partial z ∂C/∂z
通过前向,可以知道:
目前按照图二, ∂ C / ∂ z \partial C/\partial z ∂C/∂z,还未知,我们细化后面一层,得到:图中下面的偏导公式。
公式 a = σ ( Z ) a = \sigma(Z) a=σ(Z)是激活函数 s i g m o i d ( Z ) sigmoid(Z) sigmoid(Z)
图六:反向(二-1),解决 ∂ C / ∂ a \partial C / \partial a ∂C/∂a的其中一部分
剩下❓处未知
这里是C由自变量 Z ′ Z' Z′和 Z ′ ′ Z'' Z′′函数组成
综上可表示为:
两项偏导可如图一样,如求 ∂ C / ∂ Z ′ \partial C/\partial Z' ∂C/∂Z′:
此时情况同图四,以求 ∂ C / ∂ Z ′ \partial C/\partial Z' ∂C/∂Z′为例:
(1) 看链式情况:---->
Z ′ Z' Z′ — a ′ = s i g m a ( z ′ ) a' = sigma(z') a′=sigma(z′) —(1) Z a = w 5 a ′ + . . . . Z_a=w_5a'+.... Za=w5a′+....---- C = C θ ( Z a ) C = C_\theta(Z_a) C=Cθ(Za)
—(2) Z b = w 6 a ′ + . . . . Z_b = w_6a'+.... Zb=w6a′+....---- C = C θ ( Z b ) C = C_\theta(Z_b) C=Cθ(Zb)
(2) 所以可以求偏导:
KaTeX parse error: No such environment: equation at position 8: \begin{̲e̲q̲u̲a̲t̲i̲o̲n̲}̲\begin{split} …
(3) 这也可以看出,激活函数,在反向的时候,类似一个缩放器
(4) 这样就又回到了图四的情况,以此类推;即看下一层,直到输出层。
从输出层开始依次计算
依照图八方式,即可求出所有偏导
目的是求损失函数 C = C θ ( y p r e d , y ) C=C_\theta(y_{pred},y) C=Cθ(ypred,y)对各参数 θ = { w 1 , . . . . , b n } \theta=\{w_1,....,b_n\} θ={w1,....,bn}的偏导,
继而可以使用 θ n e w = θ o l d − η ∇ C θ \theta_{new} = \theta_{old}-\eta\nabla C_{\theta} θnew=θold−η∇Cθ来更新参数
而,对于每个样本来说,损失函数对参数的偏导,由图中两部分组成:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。