文章目录
1. 网络结构
前馈神经网络根据输入的 x i x_i xi值,一层层训练出 h j h_j hj, a k a_k ak, o k o_k ok, t k t_k tk值。误差反向传播(BP算法)训练出 b k b_k bk, w j k w_{jk} wjk, b j b_j bj, w i j w_{ij} wij 权重值和偏置项。
2. 激活函数 Activation Fuction
非线性函数作为激活函数能使得整个模型的拟合能力变好。
网络结构图-1中的激活函数 A 采用的是双曲正切 tanh函数。
2.1 tanh
将输出的值压缩到-1~1范围,数据符合0均值。(RNN中使用较多)
tanh
x
=
sinh
x
cosh
x
=
e
x
−
e
−
x
e
x
+
e
−
x
=
e
2
x
−
1
e
2
x
+
1
=
1
−
e
−
2
x
1
+
e
−
2
x
\begin{array}{l} \tanh x=\frac{\sinh x}{\cosh x}=\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}}=\frac{e^{2 x}-1}{e^{2 x}+1}=\frac{1-e^{-2 x}}{1+e^{-2 x}} \end{array}
tanhx=coshxsinhx=ex+e−xex−e−x=e2x+1e2x−1=1+e−2x1−e−2x
d
tanh
x
d
x
=
(
e
2
x
−
1
e
2
x
+
1
)
′
=
(
e
2
x
−
1
)
′
(
e
2
x
+
1
)
−
(
e
2
x
−
1
)
(
e
2
x
+
1
)
′
(
e
2
x
+
1
)
2
=
2
e
2
x
(
e
2
x
+
1
)
−
(
e
2
x
−
1
)
2
e
2
x
(
e
2
x
+
1
)
2
=
4
e
2
x
(
e
2
x
+
1
)
2
=
(
e
2
x
+
1
+
e
2
x
−
1
)
(
e
2
x
+
1
−
e
2
x
+
1
)
(
e
2
x
+
1
)
(
e
2
x
+
1
)
=
(
e
2
x
+
1
+
e
2
x
−
1
)
(
e
2
x
+
1
)
(
e
2
x
+
1
−
e
2
x
+
1
)
(
e
2
x
+
1
)
=
(
1
+
tanh
x
)
(
1
−
tanh
x
)
\begin{array}{l} \frac{d \tanh x}{d x}=\left(\frac{e^{2 x}-1}{e^{2 x}+1}\right)^{\prime}=\frac{\left(e^{2 x}-1\right)^{\prime}\left(e^{2 x}+1\right)-\left(e^{2 x}-1\right)\left(e^{2 x}+1\right)^{\prime}}{\left(e^{2 x}+1\right)^{2}} \\ =\frac{2 e^{2 x}\left(e^{2 x}+1\right)-\left(e^{2 x}-1\right) 2 e^{2 x}}{\left(e^{2 x}+1\right)^{2}}=\frac{4 e^{2 x}}{\left(e^{2 x}+1\right)^{2}} \\ =\frac{\left(e^{2 x}+1+e^{2 x}-1\right)\left(e^{2 x}+1-e^{2 x}+1\right)}{\left(e^{2 x}+1\right)\left(e^{2 x}+1\right)} =\frac{\left(e^{2 x}+1+e^{2 x}-1\right)}{\left(e^{2 x}+1\right)} \frac{\left(e^{2 x}+1-e^{2 x}+1\right)}{\left(e^{2 x}+1\right)} \\ =(1+\tanh x)(1-\tanh x) \end{array}
dxdtanhx=(e2x+1e2x−1)′=(e2x+1)2(e2x−1)′(e2x+1)−(e2x−1)(e2x+1)′=(e2x+1)22e2x(e2x+1)−(e2x−1)2e2x=(e2x+1)24e2x=(e2x+1)(e2x+1)(e2x+1+e2x−1)(e2x+1−e2x+1)=(e2x+1)(e2x+1+e2x−1)(e2x+1)(e2x+1−e2x+1)=(1+tanhx)(1−tanhx)
则
h
=
t
a
n
h
x
h=tanhx
h=tanhx,
h
′
=
(
1
+
h
)
(
1
−
h
)
h^{'}=(1+h)(1-h)
h′=(1+h)(1−h)。导数范围是
(
0
,
1
)
(0,1)
(0,1),易导致梯度消失。
2.2 Sigmoid
将输出值压缩到0-1之间,
f
(
x
)
=
σ
(
x
)
=
1
1
+
e
−
x
f(x)=\sigma(x)=\frac{1}{1+e^{-x}}
f(x)=σ(x)=1+e−x1
d
d
x
σ
(
x
)
=
d
d
x
(
1
1
+
e
−
x
)
=
e
−
x
(
1
+
e
−
x
)
2
=
(
1
+
e
−
x
)
−
1
(
1
+
e
−
x
)
2
=
1
+
e
−
x
(
1
+
e
−
x
)
2
−
(
1
1
+
e
−
x
)
2
=
σ
(
x
)
−
σ
(
x
)
2
\begin{aligned} \frac{d}{d x} \sigma(x) &=\frac{d}{d x}\left(\frac{1}{1+e^{-x}}\right) \\ &=\frac{e^{-x}}{\left(1+e^{-x}\right)^{2}} \\ &=\frac{\left(1+e^{-x}\right)-1}{\left(1+e^{-x}\right)^{2}} \\ &=\frac{1+e^{-x}}{\left(1+e^{-x}\right)^{2}}-\left(\frac{1}{1+e^{-x}}\right)^{2} \\ &=\sigma(x)-\sigma(x)^{2} \\ \end{aligned}
dxdσ(x)=dxd(1+e−x1)=(1+e−x)2e−x=(1+e−x)2(1+e−x)−1=(1+e−x)21+e−x−(1+e−x1)2=σ(x)−σ(x)2
所以有
σ
′
=
σ
(
1
−
σ
)
\sigma^{\prime} =\sigma(1-\sigma)
σ′=σ(1−σ) 。导数输出范围是
[
0
,
0.25
]
[0, 0.25]
[0,0.25],易导致梯度消失。输出为非0均值,破坏数据分布。
缺陷: 在x值趋近
+
∞
,
−
∞
+\infty,-\infty
+∞,−∞ 时,导数接近0,
σ
\sigma
σ 的参数(权值)会长时间得不到更新,此过程叫梯度弥散(梯度消亡)。
梯度消亡解决方法:
① 使用激活函数 ReLU:
f
(
x
)
=
m
a
x
(
0
,
x
)
f(x)=max(0, x)
f(x)=max(0,x),输入大于0,梯度为1,否则为0。
② 使用激活函数 LeakyReLu:
f
(
x
)
=
m
a
x
(
α
x
,
x
)
f(x) = max(\alpha x,x)
f(x)=max(αx,x),输入大于等于0, 梯度为1, 否则为
α
\alpha
α。
2.3 ReLU
y
=
m
a
x
(
0
,
x
)
y=max(0,x)
y=max(0,x)
f
(
x
)
=
{
0
for
x
<
0
x
for
x
≥
0
f(x)=\left\{\begin{array}{ll} 0 & \text { for } x<0 \\ x & \text { for } x \geq 0 \end{array}\right.
f(x)={0x for x<0 for x≥0
输出值均为正数,负半轴导致死神经元,减少计算量。反向传播时,导数是1,不会有放大或缩小的效应,缓解梯度消失。缓解过拟合,在输入小于 0 时,输出值也小于0,神经网络相当于未参与训练,可训练参数减少,缓解过拟合。
2.4 LeakyReLU
nn.LeakyReLU
- negative_slope:负半轴斜率
nn.PReLU
- init:可学习斜率
nn.RReLU
- lower:均匀分布下限
- upper:均匀分布上限
3. softmax
softmax是一种特殊的激活函数,与tanh
,sigmoid
,ReLU
的区别:
- softmax输入是向量,输出是向量,不方便画出显式的函数关系图;输出向量的某元素和整个输入向量均有关;常用于网络输出层的激活函数,归一化类别的预测概率。
- 对于常规激活函数,输入为标量时输出标量,可画出函数关系图;当输入为向量时输出为向量,但输出向量的各个元素之间独立,即输出向量中某位置的元素不依赖于其他位置的输入元素。
- 常规激活函数常用于网络中间层的激活函数,
sigmoid
也可用于输出层将实数变为[0, 1]的预测概率,tanh
也可用于输出层将实数变为[-1, 1]的预测概率。这两种激活函数在输入很大或很小时会出现饱和现象,造成梯度更新缓慢,ReLU
目前得到更多应用。
网络结构图-1 中的softmax
函数使用归一化指数函数。
σ
:
R
K
→
{
z
∈
R
K
∣
z
i
>
0
,
∑
i
=
1
K
z
i
=
1
}
σ
(
z
)
j
=
e
z
j
∑
k
=
1
K
e
z
k
for
j
=
1
,
…
,
K
\begin{array}{l} \sigma: \mathbb{R}^{K} \rightarrow\left\{z \in \mathbb{R}^{K} \mid z_{i}>0, \sum_{i=1}^{K} z_{i}=1\right\} \\ \sigma(\mathbf{z})_{j}=\frac{e^{z_{j}}}{\sum_{k=1}^{K} e^{z_{k}}} \quad \text { for } j=1, \ldots, K \end{array}
σ:RK→{z∈RK∣zi>0,∑i=1Kzi=1}σ(z)j=∑k=1Kezkezj for j=1,…,K
- 设softmax的输入为 a ⃗ = ( a 1 , . . . , a K ) T \vec{a}=(a_1,..., a_K)^T a=(a1,...,aK)T,其中 a i = ∑ j w j i h j + b i a_i=\sum_jw_{ji}h_j+b_i ai=∑jwjihj+bi
- softmax的输出为 o ⃗ = ( o 1 , . . . , o K ) T \vec{o}=(o_1,..., o_K)^T o=(o1,...,oK)T,其中 o i = e a i ∑ k e a k o_i=\frac{e^{a_{i}}}{\sum_{k} e^{a_{k}}} oi=∑keakeai
- 设真实的标签为 t ⃗ = ( 0 , . . . , 0 , 1 , 0 , . . . , 0 ) T \vec{t}=(0,... ,0,1,0,... , 0)^T t=(0,...,0,1,0,...,0)T
softmax 对 a i a_i ai的导数推导: d o j d a i = d e a j ∑ k e a k d a i \frac{\mathrm{d} o_{j}}{d a_{i}}=\frac{d \frac{e^{a_{j}}}{\sum_{k} e^{a_{k}}}}{d a_{i}} daidoj=daid∑keakeaj
- 当
i
=
j
i=j
i=j 时,
d o j d a i = d e a j Σ k e a k d a i = e a j Σ k e a k − e a j e a i ( Σ k e a k ) 2 = e a j ( Σ k e a k − e a i ) ( Σ k e a k ) 2 = e a j ∑ k e a k ∑ k e a k − e a i ∑ k e a k = o j ( 1 − o i ) \frac{\mathrm{d} o_{j}}{d a_{i}}=\frac{d \frac{e^{a_{j}}}{\Sigma_{k} e^{a_{k}}}}{d a_{i}}=\frac{e^{a_{j}} \Sigma_{k} e^{a_{k}}-e^{a_{j}}e^{ a_{i}}}{\left(\Sigma_{k} e^{a_{k}}\right)^{2}}=\frac{e^{a_{j}}\left(\Sigma_{k} e^{a_{k}}-e ^{a_{i}}\right)}{\left(\Sigma_{k} e^{a_{k}}\right)^{2}}=\frac{e^{a_{j}}}{\sum_{k} e^{a_{k}}} \frac{\sum_{k} e^{a_{k}}-e^{ a_{i}}}{\sum_{k} e^{a_{k}}}=o_{j}\left(1-o_{i}\right) daidoj=daidΣkeakeaj=(Σkeak)2eajΣkeak−eajeai=(Σkeak)2eaj(Σkeak−eai)=∑keakeaj∑keak∑keak−eai=oj(1−oi) - 当
i
≠
j
i \neq j
i=j 时,
d o j d a i = d e a j Σ k e a k d a i = 0 ⋅ Σ k e a k − e a j e a i ( Σ k e a k ) 2 = − e a j e a i ( ∑ k e a k ) 2 = − e a j ∑ k e a k e a i ∑ k e a k = − o j o i \frac{\mathrm{d} o_{j}}{d a_{i}}=\frac{d \frac{e^{a_{j}}}{\Sigma_{k} e^{a_{k}}}}{d a_{i}}=\frac{0 \cdot \Sigma_{k} e^{a_{k}} -e^{a_{j}} e^{a_{i}}}{\left(\Sigma_{k} e^{a_{k}}\right)^{2}}=\frac{-e^{a_{j}} e^{a_{i}}}{\left(\sum_{k} e^{a_{k}}\right)^{2}}=\frac{-e^{a_{j}}}{\sum_{k} e^{a_{k}}} \frac{e^{a_{i}}}{\sum_{k} e^{a_{k}}}=-o_{j} o_{i} daidoj=daidΣkeakeaj=(Σkeak)20⋅Σkeak−eajeai=(∑keak)2−eajeai=∑keak−eaj∑keakeai=−ojoi - 综合起来, d o j d a i = o j ( 1 i = j − o i ) \frac{\mathrm{d} o_{j}}{d a_{i}}=o_{j}\left(1_{i =j}-o_{i}\right) daidoj=oj(1i=j−oi)
3.1 Softmax + CrossEntropy
输出层激活函数softmax,损失函数为CrossEntropy时输出层的权值的梯度。
- 设softmax的输入为 a ⃗ = ( a 1 , . . . , a K ) T \vec{a}=(a_1,..., a_K)^T a=(a1,...,aK)T,其中 a i = ∑ j w j i h j + b i a_i=\sum_jw_{ji}h_j+b_i ai=∑jwjihj+bi
- softmax的输出为 o ⃗ = ( o 1 , . . . , o K ) T \vec{o}=(o_1,..., o_K)^T o=(o1,...,oK)T,其中 o i = e a i ∑ k e a k o_i=\frac{e^{a_{i}}}{\sum_{k} e^{a_{k}}} oi=∑keakeai
- 设真实的标签为 t ⃗ = ( 0 , . . . , 0 , 1 , 0 , . . . , 0 ) T \vec{t}=(0,... ,0,1,0,... , 0)^T t=(0,...,0,1,0,...,0)T
- 交叉熵损失函数 L = − ∑ k t k log o k L=-\sum_{k} t_{k} \log o_{k} L=−∑ktklogok ⇒ ∂ L ∂ a l = − ∑ k t k ∂ log o k ∂ a l \Rightarrow \frac{\partial L}{\partial a_{l}}=-\sum_{k} t_{k} \frac{\partial \log o_{k}}{\partial a_{l}} ⇒∂al∂L=−∑ktk∂al∂logok
根据softmax定义,
o
k
=
1
Ω
e
a
k
,
o_{k}=\frac{1}{\Omega} e^{a_{k}},
ok=Ω1eak, 其中
Ω
=
∑
i
e
a
i
⇒
log
o
k
=
a
k
−
log
Ω
\Omega=\sum_{i} e^{a_{i}} \Rightarrow \log o_{k}=a_{k}-\log \Omega
Ω=∑ieai⇒logok=ak−logΩ
则有
∂
log
o
k
∂
a
l
=
1
k
=
l
−
1
Ω
∂
Ω
∂
a
l
,
\frac{\partial \log o_{k}}{\partial a_{l}}=1_{k= l}-\frac{1}{\Omega} \frac{\partial \Omega}{\partial a_{l}},
∂al∂logok=1k=l−Ω1∂al∂Ω, 其中
- ∂ Ω ∂ a l = ∑ i e a i 1 i = l = e a l , ⇒ ∂ log o k ∂ a l = 1 k = l − e a l Ω = 1 k = l − o l \frac{\partial \Omega}{\partial a_{l}}=\sum_{i} e^{a_{i}} 1_{i= l}=e^{a_{l}}, \Rightarrow \frac{\partial \log o_{k}}{\partial a_{l}}=1_{k= l}-\frac{e^{a_{l}}}{\Omega}=1_{k= l}-o_{l} ∂al∂Ω=∑ieai1i=l=eal,⇒∂al∂logok=1k=l−Ωeal=1k=l−ol
- ∂ L ∂ a l = − ∑ k t k ∂ log o k ∂ a l = − ∑ k t k ( 1 k = l − o l ) = ∑ k t k ( o l − 1 k = l ) = ∑ k t k o l − ∑ k t k 1 k = l = o l − t l \frac{\partial L}{\partial a_{l}}=-\sum_{k} t_{k} \frac{\partial \log o_{k}}{\partial a_{l}}=-\sum_{k} t_{k}\left(1_{k= l}-o_{l}\right)=\sum_{k} t_{k}\left(o_{l}-1_{k= l}\right)=\sum_{k} t_{k} o_{l}-\sum_{k} t_{k} 1_{k= l}=o_{l}-t_{l} ∂al∂L=−∑ktk∂al∂logok=−∑ktk(1k=l−ol)=∑ktk(ol−1k=l)=∑ktkol−∑ktk1k=l=ol−tl
- a l = ∑ j w j l h j + b l ⇒ ∂ a l ∂ w p q = ∑ j h j ∂ w j l ∂ w p q = ∑ j h j 1 j = p 1 l = q = h p 1 l = q a_{l}=\sum_{j} w_{j l} h_{j}+b_{l} \Rightarrow \frac{\partial a_{l}}{\partial w_{p q}}=\sum_{j} h_{j} \frac{\partial w_{j l}}{\partial w_{p q}}=\sum_{j} h_{j} 1_{j =p} 1_{l =q}=h_{p} 1_{l =q} al=∑jwjlhj+bl⇒∂wpq∂al=∑jhj∂wpq∂wjl=∑jhj1j=p1l=q=hp1l=q
- ∂ L ∂ w p q = ∑ l ∂ L ∂ a l ∂ a l ∂ w p q = ∑ l ( o l − t l ) h p 1 l q = ( o q − t q ) h p \frac{\partial L}{\partial w_{p q}}=\sum_{l} \frac{\partial L}{\partial a_{l}} \frac{\partial a_{l}}{\partial w_{p q}}=\sum_{l}\left(o_{l}-t_{l}\right) h_{p} 1_{l q}=\left(o_{q}-t_{q}\right) h_{p} ∂wpq∂L=∑l∂al∂L∂wpq∂al=∑l(ol−tl)hp1lq=(oq−tq)hp
根据上图,带入实例中计算
根据
∂
a
l
∂
w
p
q
=
h
p
1
l
=
q
\frac{\partial a_{l}}{\partial w_{p q}}=h_{p} 1_{l =q}
∂wpq∂al=hp1l=q,有
∂
a
l
∂
w
j
k
=
h
j
1
l
=
k
=
{
0
,
l
≠
k
h
j
,
l
=
k
\frac{\partial a_{l}}{\partial w_{j k}}=h_{j} 1_{l= k}=\left\{\begin{array}{l}0, l \neq k \\ h_{j}, l=k\end{array}\right.
∂wjk∂al=hj1l=k={0,l=khj,l=k,
l
l
l层为第
k
k
k层时
在网络层结构中只有相连接的神经元才有非零梯度回传
根据
∂
L
∂
w
p
q
=
h
p
(
o
q
−
t
q
)
\frac{\partial L}{\partial w_{p q}}= h_{p}\left(o_{q}-t_{q}\right)
∂wpq∂L=hp(oq−tq),有
∂
L
∂
w
j
k
=
h
j
(
o
k
−
t
k
)
\frac{\partial L}{\partial w_{jk}}= h_{j}\left(o_{k}-t_{k}\right)
∂wjk∂L=hj(ok−tk)
定义交叉熵误差
δ
k
=
∂
L
∂
a
k
=
o
k
−
t
k
\delta_{k}=\frac{\partial L}{\partial a_{k}}=o_{k}-t_{k}
δk=∂ak∂L=ok−tk ,则有
∂
L
∂
w
j
k
=
h
j
δ
k
\frac{\partial L}{\partial w_{j k}}=h_{j} \delta_{k}
∂wjk∂L=hjδk
根据softmax的输入
a
l
=
∑
l
w
j
l
h
j
+
b
l
a_{l}=\sum_{l} w_{j l} h_{j}+b_{l}
al=∑lwjlhj+bl ,
∂
a
l
∂
b
k
=
1
l
k
=
{
0
,
l
≠
k
1
,
l
=
k
\frac{\partial a_{l}}{\partial b_{k}}=1_{l k}=\left\{\begin{array}{l}0,l \neq k \\ 1,l=k\end{array}\right.
∂bk∂al=1lk={0,l=k1,l=k ,偏置只和该神经元的激励有关
∂
L
∂
b
k
=
∑
l
∂
L
∂
a
l
∂
a
l
∂
b
k
=
∑
l
(
o
l
−
t
l
)
1
l
k
=
o
k
−
t
k
=
δ
k
\frac{\partial L}{\partial b_{k}}=\sum_{l} \frac{\partial L}{\partial a_{l}} \frac{\partial a_{l}}{\partial b_{k}}=\sum_{l}\left(o_{l}-t_{l}\right) \mathbb{1}_{l k}=o_{k}-t_{k}=\delta_{k}
∂bk∂L=∑l∂al∂L∂bk∂al=∑l(ol−tl)1lk=ok−tk=δk
目标损失函数
L
L
L 相对于偏置的梯度等于该神经元的误差
根据上图,带入实例中计算
- z j z_j zj为第一层网络结构的输出,也为激活函数的输入, h j h_j hj为激活函数输出。所以有 z j = ∑ i w i j x i + b j z_j=\sum_i w_{ij}x_i+b_j zj=∑iwijxi+bj,则 ∂ z j ∂ w i j = x i \frac{\partial z_{j}}{\partial w_{ij}}=x_i ∂wij∂zj=xi
- a k a_k ak为第二层网络结构的输出,也为softmax函数的输入有 a k = ∑ j w j k h j + b k a_k=\sum_j w_{jk}h_j+b_k ak=∑jwjkhj+bk,则 ∂ a k ∂ h j = w i j \frac{\partial a_{k}}{\partial h_{j}}=w_{ij} ∂hj∂ak=wij
- 激活函数为双曲正切函数 tanh,故 ∂ h j ∂ z j = ( 1 + h j ) ( 1 − h j ) \frac{\partial h_{j}}{\partial z_{j}}=\left(1+h_j\right)\left(1-h_j\right) ∂zj∂hj=(1+hj)(1−hj)
- ∂ L ∂ w i j = ∂ L ∂ z j ∂ z j ∂ w i j = x i ∂ L ∂ z j = x i ∂ L ∂ h j ∂ h j ∂ z j \frac{\partial L}{\partial w_{i j}}=\frac{\partial L}{\partial z_{j}} \frac{\partial z_{j}}{\partial w_{i j}}=x_{i} \frac{\partial L}{\partial z_{j}}=x_{i} \frac{\partial L}{\partial h_{j}} \frac{\partial h_{j}}{\partial z_{j}} ∂wij∂L=∂zj∂L∂wij∂zj=xi∂zj∂L=xi∂hj∂L∂zj∂hj
- L L L对 h j h_j hj的偏导 和所有与 h j h_j hj相关连接的神经元有关, ∂ L ∂ h j = ∑ k ∂ L ∂ a k ∂ a k ∂ h j = ∑ k δ k ∂ a k ∂ h j = ∑ k δ k w j k \frac{\partial L}{\partial h_{j}}=\sum_{k} \frac{\partial L}{\partial a_{k}} \frac{\partial a_{k}}{\partial h_{j}}=\sum_{k} \delta_{k} \frac{\partial a_{k}}{\partial h_{j}}=\sum_{k} \delta_{k} w_{j k} ∂hj∂L=∑k∂ak∂L∂hj∂ak=∑kδk∂hj∂ak=∑kδkwjk
- ∂ L ∂ w i j = x i ∑ k δ k w j k ( 1 + h j ) ( 1 − h j ) = x i δ j \frac{\partial L}{\partial w_{i j}}=x_{i} \sum_{k} \delta_{k} w_{j k}\left(1+h_{j}\right)\left(1-h_{j}\right)=x_{i} \delta_{j} ∂wij∂L=xi∑kδkwjk(1+hj)(1−hj)=xiδj,定义 δ j = ∑ k δ k w j k ( 1 + h j ) ( 1 − h j ) \delta_{j} = \sum_{k} \delta_{k} w_{j k}\left(1+h_{j}\right)\left(1-h_{j}\right) δj=∑kδkwjk(1+hj)(1−hj)
- 因为 ∂ z j ∂ b j = 1 \frac{\partial z_{j}}{\partial b_{j}}=1 ∂bj∂zj=1,则有 ∂ L ∂ b j = ∂ L ∂ z j ∂ z j ∂ b j = ∂ L ∂ z j = ∂ L ∂ h j ∂ h j ∂ z j \frac{\partial L}{\partial b_{j}}=\frac{\partial L}{\partial z_{j}} \frac{\partial z_{j}}{\partial b_{j}}=\frac{\partial L}{\partial z_{j}}=\frac{\partial L}{\partial h_{j}} \frac{\partial h_{j}}{\partial z_{j}} ∂bj∂L=∂zj∂L∂bj∂zj=∂zj∂L=∂hj∂L∂zj∂hj
- ∂ L ∂ b j = ∑ k δ k w j k ( 1 + h j ) ( 1 − h j ) = δ j \frac{\partial L}{\partial b_{j}}=\sum_{k} \delta_{k} w_{j k}\left(1+h_{j}\right)\left(1-h_{j}\right)=\delta_{j} ∂bj∂L=∑kδkwjk(1+hj)(1−hj)=δj
3.1.1 实例中计算梯度更新
将3.1章节红色部分公式带入网络结构中,计算梯度。
① 对第二层权值0.5 和0.4 进行梯度更新
权值0.5的梯度:
∂
L
∂
w
j
k
=
h
j
(
o
k
−
t
k
)
=
0.84
∗
(
0.57
−
0
)
=
0.4788
\frac{\partial L}{\partial w_{j k}}=h_{j} (o_k-t_k)=0.84*(0.57-0)=0.4788
∂wjk∂L=hj(ok−tk)=0.84∗(0.57−0)=0.4788
权值0.4的梯度:
∂
L
∂
w
j
k
=
h
j
(
o
k
−
t
k
)
=
0.84
∗
(
0.43
−
1
)
=
−
0.4788
\frac{\partial L}{\partial w_{j k}}=h_{j} (o_k-t_k)=0.84*(0.43-1)=-0.4788
∂wjk∂L=hj(ok−tk)=0.84∗(0.43−1)=−0.4788
权值0.5的学习率随机设为0.1, 进行梯度更新;
0.5
−
0.4788
∗
0.1
=
0.45212
0.5 -0.4788*0.1=0.45212
0.5−0.4788∗0.1=0.45212
权值0.4的学习率随机设为0.1, 进行梯度更新;
0.4
−
(
−
0.4788
)
∗
0.1
=
0.44788
0.4 -(-0.4788)*0.1=0.44788
0.4−(−0.4788)∗0.1=0.44788
② 对第一层权值0.1 进行梯度更新
梯度:
∂
L
∂
w
i
j
=
x
i
∑
k
δ
k
w
j
k
(
1
+
h
j
)
(
1
−
h
j
)
=
0.5
∗
[
(
0.57
−
0
)
∗
0.5
+
(
0.43
−
1
)
∗
0.4
)
]
∗
(
1
+
0.84
)
∗
(
1
−
0.84
)
=
0.0084
\frac{\partial L}{\partial w_{i j}}=x_{i} \sum_{k} \delta_{k} w_{j k}\left(1+h_{j}\right)\left(1-h_{j}\right)=0.5*[(0.57-0)*0.5+(0.43-1)*0.4)]*(1+0.84)*(1-0.84)=0.0084
∂wij∂L=xi∑kδkwjk(1+hj)(1−hj)=0.5∗[(0.57−0)∗0.5+(0.43−1)∗0.4)]∗(1+0.84)∗(1−0.84)=0.0084
学习率随机设为0.1, 进行梯度更新;
w
i
j
′
=
0.1
−
0.0084
∗
0.1
=
0.09916
{w_{ij}}^{'}=0.1 -0.0084*0.1=0.09916
wij′=0.1−0.0084∗0.1=0.09916
3.2 softmax + Square Error
输出层激活函数softmax,损失函数为Square Error时输出层的权值的梯度。
-
设softmax的输入为 a ⃗ = ( a 1 , . . . , a K ) T \vec{a}=(a_1,..., a_K)^T a=(a1,...,aK)T,其中 a i = ∑ j w j i h j + b i a_i=\sum_jw_{ji}h_j+b_i ai=∑jwjihj+bi
-
softmax的输出为 o ⃗ = ( o 1 , . . . , o K ) T \vec{o}=(o_1,..., o_K)^T o=(o1,...,oK)T,其中 o i = e a i ∑ k e a k o_i=\frac{e^{a_{i}}}{\sum_{k} e^{a_{k}}} oi=∑keakeai
-
设真实的标签为 t ⃗ = ( 0 , . . . , 0 , 1 , 0 , . . . , 0 ) T \vec{t}=(0,... ,0,1,0,... , 0)^T t=(0,...,0,1,0,...,0)T
-
平方损失函数 L = 1 2 ∑ k ( o k − t k ) 2 L=\frac{1}{2} \sum_{k}\left(o_{k}-t_{k}\right)^{2} L=21∑k(ok−tk)2
- L对输入
a
i
a_i
ai的导数
∂ L ∂ a l = 1 2 ∑ k ∂ ( o k − t k ) 2 ∂ a l = 1 2 ∑ k ∂ ( o k − t k ) 2 ∂ o k d o k d a l = ∑ k ( o k − t k ) d o k d a l = ∑ k ( o k − t k ) o k ( 1 k = l − o l ) \frac{\partial L}{\partial a_{l}}=\frac{1}{2} \sum_{k} \frac{\partial\left(o_{k}-t_{k}\right)^{2}}{\partial a_{l}}=\frac{1}{2} \sum_{k} \frac{\partial\left(o_{k}-t_{k}\right)^{2}}{\partial o_{k}} \frac{\mathrm{d} o_{k}}{d a_{l}}=\sum_{k}\left(o_{k}-t_{k}\right) \frac{\mathrm{d} o_{k}}{d a_{l}}=\sum_{k}\left(o_{k}-t_{k}\right) o_{k}\left(1_{k =l}-o_{l}\right) ∂al∂L=21k∑∂al∂(ok−tk)2=21k∑∂ok∂(ok−tk)2daldok=k∑(ok−tk)daldok=k∑(ok−tk)ok(1k=l−ol)
- L对输入
a
i
a_i
ai的导数
-
a l = ∑ j w j l h j + b l ⇒ ∂ a l ∂ w p q = ∑ j h j ∂ w j l ∂ w p q = ∑ j h j 1 j = p 1 l = q = h p 1 l = q a_l=\sum_jw_{jl}h_j+b_l \Rightarrow \frac{\partial a_{l}}{\partial w_{p q}}=\sum_{j} h_{j} \frac{\partial w_{j l}}{\partial w_{p q}}=\sum_{j} h_{j} 1_{j= p} 1_{l= q}=h_{p} 1_{l= q} al=∑jwjlhj+bl⇒∂wpq∂al=∑jhj∂wpq∂wjl=∑jhj1j=p1l=q=hp1l=q
-
∂ L ∂ w p q = ∑ l ∂ L ∂ a l ∂ a l ∂ w p q = ∑ l ∑ k ( o k − t k ) o k ( 1 k = l − o l ) h p 1 l = q = h p ∑ k ( o k − t k ) o k ( 1 k = p − o q ) \frac{\partial L}{\partial w_{p q}}=\sum_{l} \frac{\partial L}{\partial a_{l}} \frac{\partial a_{l}}{\partial w_{p q}}=\sum_{l} \sum_{k}\left(o_{k}-t_{k}\right) o_{k}\left(1_{k =l}-o_{l}\right) h_{p} 1_{l= q}=h_{p}\sum_{k}\left(o_{k}-t_{k}\right) o_{k}\left(1_{k =p}-o_{q}\right) ∂wpq∂L=∑l∂al∂L∂wpq∂al=∑l∑k(ok−tk)ok(1k=l−ol)hp1l=q=hp∑k(ok−tk)ok(1k=p−oq)
- ∂ L ∂ w j k = h j ∑ l ( o l − t l ) o l ( 1 l = k − o k ) = h j δ k \frac{\partial L}{\partial w_{j k}}=h_{j} \sum_{l}\left(o_{l}-t_{l}\right) o_{l}\left(1_{l =k}-o_{k}\right)=h_{j} \delta_{k} ∂wjk∂L=hj∑l(ol−tl)ol(1l=k−ok)=hjδk,定义平方误差: δ k = ∑ l ( o l − t l ) o l ( 1 l = k − o k ) \delta_{k}= \sum_{l}\left(o_{l}-t_{l}\right) o_{l}\left(1_{l =k}-o_{k}\right) δk=∑l(ol−tl)ol(1l=k−ok)
- 因为 a l = ∑ l w j l h j + b l a_{l}=\sum_{l} w_{j l} h_{j}+b_{l} al=∑lwjlhj+bl, ∂ a l ∂ b k = 1 l = k \frac{\partial a_{l}}{\partial b_{k}}=1_{l =k} ∂bk∂al=1l=k
- ∂ L ∂ b k = ∑ l ∂ L ∂ a l ∂ a l ∂ b k = ∂ L ∂ a k = δ k \frac{\partial L}{\partial b_{k}}=\sum_{l} \frac{\partial L}{\partial a_{l}} \frac{\partial a_{l}}{\partial b_{k}}=\frac{\partial L}{\partial a_{k}}=\delta_{k} ∂bk∂L=∑l∂al∂L∂bk∂al=∂ak∂L=δk
- ∂ L ∂ w i j \frac{\partial L}{\partial w_{ij}} ∂wij∂L, ∂ L ∂ b j \frac{\partial L}{\partial b_{j}} ∂bj∂L不变
- 已知交叉熵误差: δ k = ∂ L ∂ a k = o k − t k \delta_{k}=\frac{\partial L}{\partial a_{k}}=o_k-t_k δk=∂ak∂L=ok−tk,对比平方误差和交叉熵误差,可知交叉熵误差函数的误差简洁直观。
3.2.1 实例中计算梯度更新
将3.2章节红色部分公式带入网络结构中,计算梯度。
① 对第二层权值0.5 和0.4 进行梯度更新
使用交叉熵误差
权值0.5的梯度:
∂
L
∂
w
j
k
=
h
j
(
o
k
−
t
k
)
=
0.84
∗
(
0.57
−
0
)
=
0.4788
\frac{\partial L}{\partial w_{j k}}=h_{j} (o_k-t_k)=0.84*(0.57-0)=0.4788
∂wjk∂L=hj(ok−tk)=0.84∗(0.57−0)=0.4788
权值0.4的梯度:
∂
L
∂
w
j
k
=
h
j
(
o
k
−
t
k
)
=
0.84
∗
(
0.43
−
1
)
=
−
0.4788
\frac{\partial L}{\partial w_{j k}}=h_{j} (o_k-t_k)=0.84*(0.43-1)=-0.4788
∂wjk∂L=hj(ok−tk)=0.84∗(0.43−1)=−0.4788
权值0.5的学习率随机设为0.1, 进行梯度更新;
0.5
−
0.4788
∗
0.1
=
0.45212
0.5 -0.4788*0.1=0.45212
0.5−0.4788∗0.1=0.45212
权值0.4的学习率随机设为0.1, 进行梯度更新;
0.4
−
(
−
0.4788
)
∗
0.1
=
0.44788
0.4 -(-0.4788)*0.1=0.44788
0.4−(−0.4788)∗0.1=0.44788
使用平方误差
平方误差
δ
1
=
∑
l
(
o
l
−
t
l
)
o
l
(
1
l
=
1
−
o
1
)
=
(
0.57
−
0
)
∗
0.57
∗
(
1
−
0.57
)
+
(
0.43
−
1
)
∗
0.43
∗
(
0
−
0.43
)
=
0.25
\delta_{1}= \sum_{l}\left(o_{l}-t_{l}\right) o_{l}\left(1_{l =1}-o_{1}\right)=(0.57-0)*0.57*(1-0.57)+(0.43-1)*0.43*(0-0.43)=0.25
δ1=∑l(ol−tl)ol(1l=1−o1)=(0.57−0)∗0.57∗(1−0.57)+(0.43−1)∗0.43∗(0−0.43)=0.25
权值0.5的梯度:
∂
L
∂
w
j
k
=
h
j
∑
l
(
o
l
−
t
l
)
o
l
(
1
l
=
k
−
o
k
)
=
h
j
δ
k
=
0.84
∗
0.25
=
0.21
\frac{\partial L}{\partial w_{j k}}=h_{j} \sum_{l}\left(o_{l}-t_{l}\right) o_{l}\left(1_{l =k}-o_{k}\right)=h_j\delta_k=0.84*0.25=0.21
∂wjk∂L=hj∑l(ol−tl)ol(1l=k−ok)=hjδk=0.84∗0.25=0.21
权值0.5的学习率随机设为0.1, 进行梯度更新;
0.5
−
0.21
∗
0.1
=
0.479
0.5 -0.21*0.1=0.479
0.5−0.21∗0.1=0.479
平方误差
δ
2
=
∑
l
(
o
l
−
t
l
)
o
l
(
1
l
=
2
−
o
2
)
=
(
0.57
−
0
)
∗
0.57
∗
(
0
−
0.57
)
+
(
0.43
−
1
)
∗
0.43
∗
(
1
−
0.43
)
=
−
0.33
\delta_{2}= \sum_{l}\left(o_{l}-t_{l}\right) o_{l}\left(1_{l =2}-o_{2}\right)=(0.57-0)*0.57*(0-0.57)+(0.43-1)*0.43*(1-0.43)=-0.33
δ2=∑l(ol−tl)ol(1l=2−o2)=(0.57−0)∗0.57∗(0−0.57)+(0.43−1)∗0.43∗(1−0.43)=−0.33
权值0.4 的梯度:
∂
L
∂
w
j
k
=
h
j
∑
l
(
o
l
−
t
l
)
o
l
(
1
l
=
k
−
o
k
)
=
h
j
δ
k
=
0.84
∗
(
−
0.33
)
=
−
0.28
\frac{\partial L}{\partial w_{j k}}=h_{j} \sum_{l}\left(o_{l}-t_{l}\right) o_{l}\left(1_{l =k}-o_{k}\right)=h_j\delta_k=0.84*(-0.33)=-0.28
∂wjk∂L=hj∑l(ol−tl)ol(1l=k−ok)=hjδk=0.84∗(−0.33)=−0.28
权值0.4的学习率随机设为0.1, 进行梯度更新;
0.4
−
(
−
0.28
)
∗
0.1
=
0.428
0.4 -(-0.28)*0.1=0.428
0.4−(−0.28)∗0.1=0.428
② 对第一层权值0.1 进行梯度更新
使用交叉熵误差
梯度:
∂
L
∂
w
i
j
=
x
i
∑
k
δ
k
w
j
k
(
1
+
h
j
)
(
1
−
h
j
)
=
0.5
∗
[
(
0.57
−
0
)
∗
0.5
+
(
0.43
−
1
)
∗
0.4
)
]
∗
(
1
+
0.84
)
∗
(
1
−
0.84
)
=
0.0084
\frac{\partial L}{\partial w_{i j}}=x_{i} \sum_{k} \delta_{k} w_{j k}\left(1+h_{j}\right)\left(1-h_{j}\right)=0.5*[(0.57-0)*0.5+(0.43-1)*0.4)]*(1+0.84)*(1-0.84)=0.0084
∂wij∂L=xi∑kδkwjk(1+hj)(1−hj)=0.5∗[(0.57−0)∗0.5+(0.43−1)∗0.4)]∗(1+0.84)∗(1−0.84)=0.0084
学习率随机设为0.1, 进行梯度更新;
w
i
j
′
=
0.1
−
0.0084
∗
0.1
=
0.09916
{w_{ij}}^{'}=0.1 -0.0084*0.1=0.09916
wij′=0.1−0.0084∗0.1=0.09916
使用平方误差
梯度:
∂
L
∂
w
i
j
=
x
i
∑
k
δ
k
w
j
k
(
1
+
h
j
)
(
1
−
h
j
)
=
0.5
∗
[
δ
1
∗
0.5
+
δ
2
∗
0.4
]
∗
(
1
+
0.84
)
∗
(
1
−
0.84
)
=
0.5
∗
[
0.25
∗
0.5
+
(
−
0.33
)
∗
0.4
]
∗
1.84
∗
0.16
=
−
0.01
\frac{\partial L}{\partial w_{i j}}=x_{i} \sum_{k} \delta_{k} w_{j k}\left(1+h_{j}\right)\left(1-h_{j}\right)=0.5*[\delta_1*0.5+\delta_2*0.4]*(1+0.84)*(1-0.84)=0.5*[0.25*0.5+(-0.33)*0.4]*1.84*0.16=-0.01
∂wij∂L=xi∑kδkwjk(1+hj)(1−hj)=0.5∗[δ1∗0.5+δ2∗0.4]∗(1+0.84)∗(1−0.84)=0.5∗[0.25∗0.5+(−0.33)∗0.4]∗1.84∗0.16=−0.01
学习率随机设为0.1, 进行梯度更新;
w
i
j
′
=
0.1
−
(
−
0.01
)
∗
0.1
=
0.101
{w_{ij}}^{'}=0.1 -(-0.01)*0.1=0.101
wij′=0.1−(−0.01)∗0.1=0.101
4. BP算法
在线书籍《Neural Networks and Deep Learning》地址链接,代码仓库链接
BP算法核心是求解代价函数 C 相对于权重 w 和偏置 b 的偏导,即改变参数 w 和 b 时代价函数 C 的变化程度,揭示改变 w 和 b 如何影响网络的整体行为。
4.1 变量的说明
w
j
k
l
w_{jk}^l
wjkl: 第
l
−
1
l-1
l−1层的第
k
k
k个神经元到第
l
l
l层的第
j
j
j个神经元的权重,
w
w
w的下标记号虽用倒序 ,但利于后续推导。
b
j
l
b_j^l
bjl: 第
l
l
l层第
j
j
j个神经元的偏置;
b
l
b^l
bl: 第
l
l
l层的偏置向量;
a
j
l
a_j^l
ajl: 第
l
l
l层第
j
j
j个神经元的激励(激活);
a
l
a^l
al: 第
l
l
l层的激励向量;
w
l
w^l
wl: 第
l
l
l层的权值矩阵,矩阵第
j
j
j行第
k
k
k列为
w
j
k
l
w_{jk}^l
wjkl
a
j
l
=
σ
(
∑
k
w
j
k
l
a
k
l
−
1
+
b
j
l
)
,
a
l
=
σ
(
w
l
a
l
−
1
+
b
l
)
a_{j}^{l}=\sigma\left(\sum_{k} w_{j k}^{l} a_{k}^{l-1}+b_{j}^{l}\right), \quad a^l=\sigma(w^la^{l-1}+b^l)
ajl=σ(k∑wjklakl−1+bjl),al=σ(wlal−1+bl)
定义中间变量
z
l
z^l
zl:
z
l
≡
w
l
a
l
−
1
+
b
l
z^{l} \equiv w^{l} a^{l-1}+b^{l}
zl≡wlal−1+bl,
z
l
z^l
zl为第
l
l
l 层神经元的加权输入向量,其中
z
j
l
z_j^l
zjl为第
l
l
l层第
j
j
j个神经元的 加权输入。
z
j
l
=
∑
k
w
j
k
l
a
k
l
−
1
+
b
j
l
,
a
l
=
σ
(
z
l
)
z_{j}^{l}=\sum_{k} w_{j k}^{l} a_{k}^{l-1}+b_{j}^{l}, \quad a^{l}=\sigma\left(z^{l}\right)
zjl=k∑wjklakl−1+bjl,al=σ(zl)
平均损失代价函数
C
C
C:
C
=
1
2
n
∑
x
∥
y
(
x
)
−
a
L
(
x
)
∥
2
C=\frac{1}{2 n} \sum_{x}\left\|y(x)-a^{L}(x)\right\|^{2}
C=2n1∑x∥∥y(x)−aL(x)∥∥2
y
=
y
(
x
)
y=y(x)
y=y(x),样本
x
x
x的标签向量(期望输出)
a
L
=
a
L
(
x
)
a^L=a^L(x)
aL=aL(x),样本
x
x
x的网络输出激励向量
n
n
n:样本数量,
L
L
L:网络层数
4.2 代价函数假设与哈达玛积
代价函数表达为神经网络输出的函数(以一个样本为例)
C
=
1
2
∥
y
−
a
L
∥
2
=
1
2
∑
j
(
y
j
−
a
j
L
)
2
C=\frac{1}{2}\left\|y-a^{L}\right\|^{2}=\frac{1}{2} \sum_{j}\left(y_{j}-a_{j}^{L}\right)^{2}
C=21∥∥y−aL∥∥2=21j∑(yj−ajL)2
其中
y
i
y_i
yi 是输入
x
x
x 的标签,属于固定值(常量),
C
C
C 只是网络输出激励
a
a
a 的函数。
哈达玛积:
定义 设
A
,
B
∈
C
m
×
n
A, B \in \mathbb{C}^{m \times n}
A,B∈Cm×n 且
A
=
[
a
i
j
]
,
B
=
[
b
i
j
]
,
A=[a_{i j}], B=\left[b_{i j}\right],
A=[aij],B=[bij], 称
m
⋅
n
m\cdot n
m⋅n矩阵
[
a
11
b
11
a
12
b
12
⋯
a
1
n
b
1
n
a
21
b
21
a
22
b
22
⋯
a
2
n
b
2
n
⋮
⋮
⋮
a
m
1
b
m
1
a
m
2
b
m
2
⋯
a
m
n
b
m
n
]
\left[\begin{array}{cccc} a_{11} b_{11} & a_{12} b_{12} & \cdots & a_{1 n} b_{1 n} \\ a_{21} b_{21} & a_{22} b_{22} & \cdots & a_{2 n} b_{2 n} \\ \vdots & \vdots & & \vdots \\ a_{m 1} b_{m 1} & a_{m 2} b_{m 2} & \cdots & a_{m n} b_{m n} \end{array}\right]
⎣⎢⎢⎢⎡a11b11a21b21⋮am1bm1a12b12a22b22⋮am2bm2⋯⋯⋯a1nb1na2nb2n⋮amnbmn⎦⎥⎥⎥⎤
为矩阵 A 与 B 的哈达玛(Hadamard)积,记作
A
∘
B
A \circ B
A∘B。
若 s 和 t 是两个相同维度的向量,两者的哈达玛积为向量的逐乘。
(
s
⊙
t
)
j
=
s
j
t
j
(s \odot t)_{j}=s_{j} t_{j}
(s⊙t)j=sjtj ,对应元素相乘。如:
[
1
2
]
⊙
[
3
4
]
=
[
1
∗
3
2
∗
4
]
=
[
3
8
]
\left[\begin{array}{l}1 \\ 2\end{array}\right] \odot\left[\begin{array}{l}3 \\ 4\end{array}\right]=\left[\begin{array}{l}1 * 3 \\ 2 * 4\end{array}\right]=\left[\begin{array}{l}3 \\ 8\end{array}\right]
[12]⊙[34]=[1∗32∗4]=[38]
4.3 BP算法四大公式
假设有一个精灵在第
l
l
l 层的
j
j
j 个神经元上捣鬼,在其加权输入上添加一个增量,使得该神经元输出激励变化如下,
δ
(
z
j
l
)
\delta\left(z_{j}^{l}\right)
δ(zjl) 变为
δ
(
z
j
l
+
Δ
z
j
l
)
\delta\left(z_{j}^{l}+\Delta z_{j}^{l}\right)
δ(zjl+Δzjl);通过网络传播,代价函数变化量为:
∂
C
∂
z
j
l
Δ
z
j
l
\frac{\partial C}{\partial z_{j}^{l}} \Delta z_{j}^{l}
∂zjl∂CΔzjl。
定义第
l
l
l 层第
j
j
j 个神经元的误差为:
σ
j
l
≡
∂
C
∂
z
j
l
\sigma_{j}^{l} \equiv \frac{\partial C}{\partial z_{j}^{l}}
σjl≡∂zjl∂C
- 假如该梯度 ∂ C ∂ z j l \frac{\partial C}{\partial z_j^l} ∂zjl∂C 大(可为正数或者负数)
- 好的精灵会让代价 C C C 减少,即会选择与梯度符号相反的增量。相反,如果梯度很小(接近于0),则扰动的增量无论如何取值,对代价函数的改变作用都很小,即该神经元相对于代价函数而言倾向于近似最优。
- 因此,该 梯度可看作该神经元训练误差的表征。即梯度大表明还没训练好,稍微扰动下神经元激励就能造成代价 C C C 的较大变化;梯度小表明训练较好,扰动神经元的激励值对代价 C C C 的改变影响微弱。
BP算法先求出各层神经元的误差,再将误差关联到权重(和偏置)相对于代价 C C C的梯度, ∂ C ∂ w j k l \frac{\partial C}{\partial w_{jk}^l} ∂wjkl∂C和 ∂ C ∂ b j l \frac{\partial C}{\partial b_j^l} ∂bjl∂C。
4.3.1 BP算法四大公式(一)
输出层误差公式 :(第 L 层(最后一层)误差)
δ
j
L
=
∂
C
∂
a
j
L
σ
′
(
z
j
L
)
(
B
P
1
)
\delta_{j}^{L}=\frac{\partial C}{\partial a_{j}^{L}} \sigma^{\prime}\left(z_{j}^{L}\right) \qquad\qquad (BP1)
δjL=∂ajL∂Cσ′(zjL)(BP1)
公式右边第一项代表代价函数
C
C
C 相对于输出层第
j
j
j 个神经元激励
a
a
a 的变化程度;第二项代表 激励 相对于 加权输入 的变化程度。
使用哈达玛积,可以写为矩阵形式:
δ
L
=
∇
a
C
⊙
σ
′
(
z
L
)
(
B
P
1
a
)
\delta^{L}=\nabla_{a} C \odot \sigma^{\prime}\left(z^{L}\right) \qquad\qquad (BP1a)
δL=∇aC⊙σ′(zL)(BP1a)
向量
∇
a
C
\nabla_{a} C
∇aC的
j
j
j 个元素为
∂
C
∂
a
j
L
\frac{\partial C}{\partial a_j^L}
∂ajL∂C
对于平方差损失函数有:
∇
a
C
=
(
a
L
−
y
)
\nabla_{a} C=(a^L-y)
∇aC=(aL−y),
δ
L
=
(
a
L
−
y
)
⊙
σ
′
(
z
L
)
\delta^L=(a^L-y) \odot \sigma^{\prime}\left(z^{L}\right)
δL=(aL−y)⊙σ′(zL)
证明:
- 误差 σ j L \sigma_j^L σjL的定义: δ j L = ∂ C ∂ a j L ∂ a j L ∂ z j L \delta_{j}^{L}=\frac{\partial C}{\partial a_{j}^{L}} \frac{\partial a_{j}^{L}}{\partial z_{j}^{L}} δjL=∂ajL∂C∂zjL∂ajL
- 非线性激活 a j L = σ ( z j L ) a_{j}^{L}=\sigma\left(z_{j}^{L}\right) ajL=σ(zjL)
- 则 δ j L = ∂ C ∂ a j L σ ′ ( z j L ) \delta_{j}^{L}=\frac{\partial C}{\partial a_{j}^{L}} \sigma^{\prime}\left(z_j^{L}\right) δjL=∂ajL∂Cσ′(zjL)
4.3.2 BP算法四大公式(二)
由后一层误差推导本层误差的公式
δ
l
=
(
(
w
l
+
1
)
T
δ
l
+
1
)
⊙
σ
′
(
z
l
)
(
B
P
2
)
\delta^{l}=\left(\left(w^{l+1}\right)^{T} \delta^{l+1}\right) \odot \sigma^{\prime}\left(z^{l}\right) \qquad\qquad (BP2)
δl=((wl+1)Tδl+1)⊙σ′(zl)(BP2)
假设已经知道第
l
+
1
l+1
l+1 层的误差,通过
l
+
1
l+1
l+1 层和
l
l
l 层之间的权值矩阵
w
w
w,将误差进行回传,得到第
l
l
l 层的误差。
结合BP1和BP2,可以得到网络每一层的误差。
证明:
- 根据误差 δ k l + 1 \delta_k^{l+1} δkl+1 定义, δ k l + 1 = ∂ C ∂ z k l + 1 \delta_k^{l+1}=\frac{\partial C}{\partial z_{k}^{l+1}} δkl+1=∂zkl+1∂C
- δ j l = ∂ C ∂ z j l = ∑ k ∂ C ∂ z k l + 1 ∂ z k l + 1 ∂ z j l = ∑ k ∂ z k l + 1 ∂ z j l δ k l + 1 \delta_{j}^{l}=\frac{\partial C}{\partial z_{j}^{l}}=\sum_{k} \frac{\partial C}{\partial z_{k}^{l+1}} \frac{\partial z_{k}^{l+1}}{\partial z_{j}^{l}}=\sum_{k} \frac{\partial z_{k}^{l+1}}{\partial z_{j}^{l}} \delta_{k}^{l+1} δjl=∂zjl∂C=∑k∂zkl+1∂C∂zjl∂zkl+1=∑k∂zjl∂zkl+1δkl+1
- 加权输入 z k l + 1 z_{k}^{l+1} zkl+1 有, z k l + 1 = ∑ j w k j l + 1 a j l + b k l + 1 = ∑ j w k j l + 1 σ ( z j l ) + b k l + 1 z_{k}^{l+1}=\sum_{j} w_{k j}^{l+1} a_{j}^{l}+b_{k}^{l+1}=\sum_{j} w_{k j}^{l+1} \sigma\left(z_{j}^{l}\right)+b_{k}^{l+1} zkl+1=∑jwkjl+1ajl+bkl+1=∑jwkjl+1σ(zjl)+bkl+1
- 则, ∂ z k l + 1 ∂ z j l = w k j l + 1 σ ′ ( z j l ) \frac{\partial z_{k}^{l+1}}{\partial z_{j}^{l}}=w_{k j}^{l+1} \sigma^{\prime}\left(z_{j}^{l}\right) ∂zjl∂zkl+1=wkjl+1σ′(zjl), δ j l = ∑ k w k j l + 1 δ k l + 1 σ ′ ( z j l ) \delta_{j}^{l}=\sum_{k}w_{k j}^{l+1} \delta_{k}^{l+1}\sigma^{\prime}\left(z_{j}^{l}\right) δjl=∑kwkjl+1δkl+1σ′(zjl)
4.3.3 BP算法四大公式(三)
代价函数
C
C
C 相对于网络中任意偏置
b
b
b 梯度(即变化率)的公式
∂
C
∂
b
j
l
=
δ
j
l
(
B
P
3
)
\frac{\partial C}{\partial b_{j}^{l}}=\delta_{j}^{l} \qquad\qquad (BP3)
∂bjl∂C=δjl(BP3)
矩阵可表达为:
∂
C
∂
b
=
δ
\frac{\partial C}{\partial b}=\delta
∂b∂C=δ
证明:
- 加权输入 z j l z_j^l zjl 定义, z j l = ∑ k w j k l a k l − 1 + b j l z_{j}^{l}=\sum_{k} w_{j k}^{l} a_{k}^{l-1}+b_{j}^{l} zjl=∑kwjklakl−1+bjl,有 ∂ z j l ∂ b j l = 1 \frac{\partial z_j^l}{\partial b_{j}^{l}}=1 ∂bjl∂zjl=1
- ∂ C ∂ b j l = ∂ C ∂ z j l ∂ z j l ∂ b j l = ∂ C ∂ z j l = δ j l \frac{\partial C}{\partial b_{j}^{l}}=\frac{\partial C}{\partial z_{j}^{l}} \frac{\partial z_{j}^{l}}{\partial b_{j}^{l}}=\frac{\partial C}{\partial z_{j}^{l}}=\delta_{j}^{l} ∂bjl∂C=∂zjl∂C∂bjl∂zjl=∂zjl∂C=δjl
4.3.4 BP算法四大公式(四)
代价函数
C
C
C 相对于网络中任意权值
w
w
w 梯度(即变化率)的公式
∂
C
∂
w
j
k
l
=
a
k
l
−
1
δ
j
l
(
B
P
4
)
\frac{\partial C}{\partial w_{jk}^{l}}=a_k^{l-1}\delta_{j}^{l} \qquad\qquad (BP4)
∂wjkl∂C=akl−1δjl(BP4)
去掉繁琐的下标,可表达为:
∂
C
∂
w
=
a
i
n
δ
o
u
t
\frac{\partial C}{\partial w}=a_{\mathrm{in}} \delta_{\mathrm{out}}
∂w∂C=ainδout
乘积第一项
a
i
n
a_{in}
ain 表示输入权值
w
w
w 的上层神经元激励;第二项表示权值
w
w
w 输出到下层神经元的误差。
如果
a
i
n
a_{in}
ain 接近于0,权值梯度也会接近于零,此时称该神经元权值学习慢,即梯度下降时更新少。激励值过低的神经元学习慢( learn slowly)。
证明:
- 加权输入 z j l z_j^l zjl 定义, z j l = ∑ k w j k l a k l − 1 + b j l z_{j}^{l}=\sum_{k} w_{j k}^{l} a_{k}^{l-1}+b_{j}^{l} zjl=∑kwjklakl−1+bjl,有 ∂ z j l ∂ w j k l = a k l − 1 \frac{\partial z_{j}^{l}}{\partial w_{j k}^{l}}=a_{k}^{l-1} ∂wjkl∂zjl=akl−1
- ∂ C ∂ w j k l = ∂ C ∂ z j l ∂ z j l ∂ w j k l = δ j l a k l − 1 \frac{\partial C}{\partial w_{j k}^{l}}=\frac{\partial C}{\partial z_{j}^{l}} \frac{\partial z_{j}^{l}}{\partial w_{j k}^{l}}=\delta_{j}^{l} a_{k}^{l-1} ∂wjkl∂C=∂zjl∂C∂wjkl∂zjl=δjlakl−1
对于sigmoid
函数,当输入取值很大或者很小时,其值接近1或者0,其导数则接近于0。
σ
(
z
)
≡
1
1
+
e
−
z
\sigma(z) \equiv \frac{1}{1+e^{-z}}
σ(z)≡1+e−z1 ;导数
σ
′
(
z
j
L
)
≈
0
\sigma^{\prime}\left(z_{j}^{L}\right) \approx 0
σ′(zjL)≈0。
δ j L = ∂ C ∂ a j L σ ′ ( z j L ) ( B P 1 ) \delta_{j}^{L}=\frac{\partial C}{\partial a_{j}^{L}} \sigma^{\prime}\left(z_{j}^{L}\right) \qquad\qquad (BP1) δjL=∂ajL∂Cσ′(zjL)(BP1)
δ l = ( ( w l + 1 ) T δ l + 1 ) ⊙ σ ′ ( z l ) ( B P 2 ) \delta^{l}=\left(\left(w^{l+1}\right)^{T} \delta^{l+1}\right) \odot \sigma^{\prime}\left(z^{l}\right) \qquad\qquad (BP2) δl=((wl+1)Tδl+1)⊙σ′(zl)(BP2)
∂ C ∂ w j k l = a k l − 1 δ j l ( B P 4 ) \frac{\partial C}{\partial w_{jk}^{l}}=a_k^{l-1}\delta_{j}^{l} \qquad\qquad (BP4) ∂wjkl∂C=akl−1δjl(BP4)
某层神经元的加权输入过大(或过小)时,输出激励值很大(接近1,或者很小,即接近0),激励的导数接近0,导致误差小,权值学习慢,即接近饱和状态(saturated),逐渐停止学习。
一个权值学习慢,可能是由于其输入神经元的激励很小,或者其输出神经元接近饱和(其激励很大或者很小)。