在 感知器的数学表达和训练算法一节中,重点学习了ANN系统中单个单元的训练学习算法,对于有阈值的感知器,它仅能表示线性决策面,即下图中的a)可表示,但是b)无法表示。
对于多层网络来说,它经过反向传播算法后,能够表示种类繁多的非线性曲面,下图描述了语音识别区分上下文中"h_d"的10种元音,输入的参数为F1、F2,它们由频谱中分析得出。可以看出多层网络可以表示高度非线性的决策面。
一、可微阈值单元
多层网络构建的基础单元,如果采用delta法则的线性单元,则经过连接后产生的仍然是线性函数,无法表征非线性函数;如果采用了有阈值的感知器单元,则它的不连续阈值使得它不可微,不可微则不适合梯度下降学习算法。此时我们需要的是一个非线性的可微函数,故使用sigmoid单元,sigmoid函数又称logistic函数,为单调递增函数,将非常大的输入定义域映射到一个小范围的值域(0,1)。
o
=
σ
(
w
→
⋅
x
→
)
o=\sigma(\overrightarrow w \cdot \overrightarrow x)
o=σ(w⋅x) ,
σ
\sigma
σ函数也可以采用其他易于计算的可微函数代替,如双曲正切函数tanh。本文设定
σ
(
y
)
=
1
1
+
e
−
y
\sigma(y)=\frac{1}{1+e^{-y}}
σ(y)=1+e−y1,有时将
e
−
y
e^{-y}
e−y替换为
e
−
k
y
e^{-ky}
e−ky,
k
k
k为常数来调节阈值函数的陡峭性。
d
σ
(
y
)
d
y
=
σ
(
y
)
⋅
(
1
−
σ
(
y
)
)
\frac{\mathrm{d} \sigma(y)}{\mathrm{d} y}=\sigma(y)\cdot(1-\sigma(y))
dydσ(y)=σ(y)⋅(1−σ(y)),sigmoid函数的特点是很容易通过它的输出来表示它的导数。 用sigmoid函数表示的神经元见下图。
二、多层网络的反向传播算法
在多层网络中,网络的误差从单个单元的误差
E
(
w
→
)
≡
1
2
∑
d
∈
D
(
t
d
−
o
d
)
2
E(\overrightarrow w)\equiv \frac{1}{2} \sum_{d\in D}(t_d-o_d)^2
E(w)≡21∑d∈D(td−od)2变为了
E
(
w
→
)
≡
1
2
∑
d
∈
D
∑
k
∈
o
u
t
p
u
t
s
(
t
k
d
−
o
k
d
)
2
E(\overrightarrow w)\equiv \frac{1}{2} \sum_{d\in D}\sum_{k\in outputs}(t_{kd}-o_{kd})^2
E(w)≡21∑d∈D∑k∈outputs(tkd−okd)2,
d
i
n
p
u
t
s
=
(
x
1
d
,
x
2
d
,
⋯
 
,
x
n
d
)
d_{inputs}=(x_{1d},x_{2d},\cdots,x_{nd})
dinputs=(x1d,x2d,⋯,xnd),两个误差的区别在于求和的单元数,具体见下图。
反向传播算法要探索一个网络所有单元的可能权值,和训练单个单元的误差类似,梯度下降算法可用来寻找一个网络权重
w
→
\overrightarrow w
w的假设空间使得
E
(
w
→
)
E(\overrightarrow w)
E(w)最小。
1.反向传播算法推导
在推导算法之前定义以下概念:
- x j i = x_{ji}= xji=单元 j j j的第 i i i个输入(单元 i i i到单元 j j j的输入)
- w j i = w_{ji}= wji=与单元 j j j的第 i i i个输入相关联的权重值
- n e t j = ∑ i w j i x j i net_{j}=\sum_iw_{ji}x_{ji} netj=∑iwjixji (单元 j j j输入的加权和)
- o j = o_j= oj=单元 j j j计算出的输出
- t j = t_j= tj=单元 j j j的目标输出
- σ = \sigma= σ=sigmoid函数
- o u t p u t s = outputs= outputs=网络最后一层的单元的集合
- D o w n s t e a m ( j ) = Downsteam(j)= Downsteam(j)=与单元 j j j直接关联的下一层单元集合(单元 j j j的输出是 D o w n s t e a m ( j ) Downsteam(j) Downsteam(j)集合单元的输入)
在 感知器的数学表达和训练算法一节中,随机梯度算法,每训练一个样例d,采用这个样例对应的误差
E
d
E_d
Ed的梯度修改权值。那么对于网络来说,每一个训练样例d,在多层网络中的单元
j
j
j的每个权值
w
j
i
w_{ji}
wji的变化
Δ
w
j
i
≡
−
η
∂
E
d
∂
w
j
i
\Delta w_{ji}\equiv-\eta \frac{\partial E_d}{\partial w_{ji}}
Δwji≡−η∂wji∂Ed,
E
d
(
w
→
)
≡
1
2
∑
k
∈
o
u
t
p
u
t
s
(
t
k
−
o
k
)
2
E_d(\overrightarrow w)\equiv \frac{1}{2} \sum_{k\in outputs}(t_{k}-o_{k})^2
Ed(w)≡21∑k∈outputs(tk−ok)2。
∂
E
d
∂
w
j
i
=
∂
E
d
∂
n
e
t
j
∂
n
e
t
j
∂
w
j
i
=
∂
E
d
∂
n
e
t
j
∑
i
w
j
i
x
j
i
∂
w
j
i
=
∂
E
d
∂
n
e
t
j
x
j
i
\frac{\partial E_d}{\partial w_{ji}}=\frac{\partial E_d}{\partial net_{j}}\frac{\partial net_j}{\partial w_{ji}}=\frac{\partial E_d}{\partial net_{j}}\frac{\sum_iw_{ji}x_{ji}}{\partial w_{ji}}=\frac{\partial E_d}{\partial net_{j}}x_{ji}
∂wji∂Ed=∂netj∂Ed∂wji∂netj=∂netj∂Ed∂wji∑iwjixji=∂netj∂Edxji,这里采用链式规则,
w
j
i
w_{ji}
wji只能通过
n
e
t
j
net_j
netj影响网络的其他部分,所以误差
E
d
E_d
Ed先对它求偏导。对剩下的
∂
E
d
∂
n
e
t
j
\frac{\partial E_d}{\partial net_{j}}
∂netj∂Ed求偏导分为两种情况。
-
case 1:单元 j j j为网络中最后一层的输出单元
如上图所示,此时 n e t j net_j netj仅能够通过代入sigmoid函数,计算得出 o j o_j oj来影响误差 E d E_d Ed,从而影响整个网络,因此再次利用链式规则得出 ∂ E d ∂ n e t j = ∂ E d ∂ o j ∂ o j ∂ n e t j \frac{\partial E_d}{\partial net_{j}}=\frac{\partial E_d}{\partial o_{j}}\frac{\partial o_j}{\partial net_{j}} ∂netj∂Ed=∂oj∂Ed∂netj∂oj。
(1) ∂ E d ∂ o j \frac{\partial E_d}{\partial o_{j}} ∂oj∂Ed = ∂ ∂ o j 1 2 ∑ k ∈ o u t p u t s ( t k − o k ) 2 =\frac{\partial}{\partial o_{j}}\frac{1}{2}\sum_{k\in outputs}{(t_k-o_k)^2} =∂oj∂21∑k∈outputs(tk−ok)2,对于所有的输出 o u t p u t s outputs outputs,除了 k = j k=j k=j其他的导数都为0,故 ∂ E d ∂ o j = ∂ ∂ o j 1 2 ( t j − o j ) 2 = − ( t j − o j ) \frac{\partial E_d}{\partial o_{j}}=\frac{\partial}{\partial o_{j}}\frac{1}{2}{(t_j-o_j)^2}=-(t_j-o_j) ∂oj∂Ed=∂oj∂21(tj−oj)2=−(tj−oj)
(2) ∂ o j ∂ n e t j \frac{\partial o_j}{\partial net_{j}} ∂netj∂oj = ∂ σ ( n e t j ) ∂ n e t j = σ ( n e t j ) ( 1 − σ ( n e t j ) ) = o j ( 1 − o j ) =\frac{\partial \sigma (net_j)}{\partial net_{j}}= \sigma (net_j)( 1-\sigma (net_j))=o_j(1-o_j) =∂netj∂σ(netj)=σ(netj)(1−σ(netj))=oj(1−oj)
(3)通过(1)和(2)分析可知, ∂ E d ∂ n e t j = − ( t j − o j ) o j ( 1 − o j ) \frac{\partial E_d}{\partial net_{j}}=-(t_j-o_j)o_j(1-o_j) ∂netj∂Ed=−(tj−oj)oj(1−oj), Δ w j i ≡ − η ∂ E d ∂ w j i = − η ∂ E d ∂ n e t j x j i = η ( t j − o j ) o j ( 1 − o j ) x j i \Delta w_{ji}\equiv-\eta \frac{\partial E_d}{\partial w_{ji}}=-\eta\frac{\partial E_d}{\partial net_{j}}x_{ji}=\eta(t_j-o_j)o_j(1-o_j)x_{ji} Δwji≡−η∂wji∂Ed=−η∂netj∂Edxji=η(tj−oj)oj(1−oj)xji,这里可定义 δ j \delta_j δj表示 − ∂ E d ∂ n e t j = ( t j − o j ) o j ( 1 − o j ) -\frac{\partial E_d}{\partial net_{j}}=(t_j-o_j)o_j(1-o_j) −∂netj∂Ed=(tj−oj)oj(1−oj)。 -
case 2:单元 j j j为网络中隐藏层的隐藏单元
如图所示,通过单元 j j j只能通过它所有的直接下游单元的集合影响(直接或者间接影响)网络的输出,从而影响 E d E_d Ed。因此再次利用链式规则得出 ∂ E d ∂ n e t j = ∑ k ∈ D o w n s t r e a m s ( j ) ∂ E d ∂ n e t k ∂ n e t k ∂ n e t j = ∑ k ∈ D o w n s t r e a m s ( j ) − δ k ∂ n e t k ∂ o j ∂ o j ∂ n e t j \frac{\partial E_d}{\partial net_{j}}=\sum_{k\in Downstreams(j)}\frac{\partial E_d}{\partial net_{k}}\frac{\partial net_k}{\partial net_{j}}=\sum_{k\in Downstreams(j)}-\delta_k\frac{\partial net_k}{\partial o_{j}}\frac{\partial o_j}{\partial net_{j}} ∂netj∂Ed=∑k∈Downstreams(j)∂netk∂Ed∂netj∂netk=∑k∈Downstreams(j)−δk∂oj∂netk∂netj∂oj。
(1) ∂ n e t k ∂ o j \frac{\partial net_k}{\partial o_{j}} ∂oj∂netk = ∂ ∑ j w k j x k j ∂ o j = ∑ j ∂ w k j o j ∂ o j = w k j =\frac{\partial \sum_j{w_{kj}x_{kj}}}{\partial o_{j}}=\frac{ \sum_j\partial{w_{kj}o _j}}{\partial o_{j}}=w_{kj} =∂oj∂∑jwkjxkj=∂oj∑j∂wkjoj=wkj
(2) ∂ o j ∂ n e t j \frac{\partial o_j}{\partial net_{j}} ∂netj∂oj = ∂ σ ( n e t j ) ∂ n e t j = σ ( n e t j ) ( 1 − σ ( n e t j ) ) = o j ( 1 − o j ) =\frac{\partial \sigma (net_j)}{\partial net_{j}}= \sigma (net_j)( 1-\sigma (net_j))=o_j(1-o_j) =∂netj∂σ(netj)=σ(netj)(1−σ(netj))=oj(1−oj)
(3)通过(1)和(2)分析可知, ∂ E d ∂ n e t j = ∑ k ∈ D o w n s t r e a m s ( j ) − δ k w k j o j ( 1 − o j ) = o j ( 1 − o j ) ∑ k ∈ D o w n s t r e a m s ( j ) − δ k w k j \frac{\partial E_d}{\partial net_{j}}=\sum_{k\in Downstreams(j)}-\delta_kw_{kj}o_j(1-o_j)=o_j(1-o_j)\sum_{k\in Downstreams(j)}-\delta_kw_{kj} ∂netj∂Ed=∑k∈Downstreams(j)−δkwkjoj(1−oj)=oj(1−oj)∑k∈Downstreams(j)−δkwkj,定义 δ j \delta_j δj表示 − ∂ E d ∂ n e t j -\frac{\partial E_d}{\partial net_{j}} −∂netj∂Ed,则 Δ w j i ≡ − η ∂ E d ∂ w j i = − η ∂ E d ∂ n e t j x j i = η δ j x j i \Delta w_{ji}\equiv-\eta \frac{\partial E_d}{\partial w_{ji}}=-\eta\frac{\partial E_d}{\partial net_{j}}x_{ji}=\eta\delta_jx_{ji} Δwji≡−η∂wji∂Ed=−η∂netj∂Edxji=ηδjxji。
注: 若 D o w n s t e a m ( j ) Downsteam(j) Downsteam(j)为最后一层输出层,则case 2中的 δ k \delta_k δk按照case1的规则去计算;若 D o w n s t e a m ( j ) Downsteam(j) Downsteam(j)为隐藏层,则case 2中的 δ k \delta_k δk仍按照case2的规则去计算,具体见下3.任意深度层次网络的学习算法表示。
2.两层sigmoid单元网络训练算法的表示
对于训练样例集:
- 创建 n i n n_{in} nin个输入、创建 n h i d d e n n_{hidden} nhidden个隐藏单元、创建 n o u t n_{out} nout个输出单元的网络
- 初始化网络中所有的权重值为较小的随机值
- 在遇到终止条件之前:
对于每一个样例 < x → , t → > <\overrightarrow x,\overrightarrow t> <x,t>:
把输入沿着网络前向传播
a、把实例 x → \overrightarrow x x输入网络中,计算网络中每个单元 u u u的输出 o u o_u ou
b、对于网络中的每个输出单元 k k k,计算它的误差项 δ k \delta_k δk,由1.反向传播算法推导的case 1可知 δ k ← ( t k − o k ) o k ( 1 − o k ) \delta_k \leftarrow (t_k-o_k)o_k(1-o_k) δk←(tk−ok)ok(1−ok)
c、对于网络中的每个隐藏单元 h h h,计算它的误差项 δ h \delta_h δh,由1.反向传播算法推导的case 2可知 δ h ← o h ( 1 − o h ) ∑ p ∈ D o w n s t r e a m s ( h ) δ p w p h \delta_h \leftarrow o_h(1-o_h)\sum_{p\in Downstreams(h)}\delta_pw_{ph} δh←oh(1−oh)∑p∈Downstreams(h)δpwph,这里为case 2的特例,即该隐藏单元的下一层不为隐藏单元,而为输出单元。因此 D o w n s t r e a m s ( h ) = o u t p u t s Downstreams(h)=outputs Downstreams(h)=outputs, δ p = δ k \delta_p=\delta_k δp=δk, w p h = w k h w_{ph}=w_{kh} wph=wkh。则 δ k ← o h ( 1 − o h ) ∑ k ∈ o u t p u t s δ k w k h \delta_k \leftarrow o_h(1-o_h)\sum_{k\in outputs}\delta_kw_{kh} δk←oh(1−oh)∑k∈outputsδkwkh
d、更新网络中所有的权值 w j i w_{ji} wji, w j i ← w j i + Δ w j i w_{ji}\leftarrow w_{ji}+\Delta w_{ji} wji←wji+Δwji,其中 Δ w j i = η δ j x j i \Delta w_{ji}=\eta\delta_jx_{ji} Δwji=ηδjxji
注1:发现数学之美
Δ
w
j
i
\Delta w_{ji}
Δwji和 感知器的数学表达和训练算法一文中的一个感知机采用随机梯度算法的
Δ
w
i
\Delta w_{i}
Δwi进行比较会发现很有趣的两个数学现象:
- 对于输出单元来说,其 Δ w j i = η ( t j − o j ) o j ( 1 − o j ) x j i \Delta w_{ji}=\eta (t_j-o_j)o_j(1-o_j)x_{ji} Δwji=η(tj−oj)oj(1−oj)xji,感知器随机梯度算法中 Δ w i = η ( t − o ) x i \Delta w_i=\eta(t-o)x_{i} Δwi=η(t−o)xi,从公式上来看只是乘了一个 o j ( 1 − o j ) o_j(1-o_j) oj(1−oj),有意思的是它恰恰是sigmoid函数的导数,而我们这一节中输出单元和感知器区别就在于,将输出函数由原来的 o = w → ⋅ x → o=\overrightarrow w \cdot \overrightarrow x o=w⋅x变为了 o = σ ( w → ⋅ x → ) o=\sigma(\overrightarrow w \cdot \overrightarrow x) o=σ(w⋅x),正所谓有什么样的因就有什么样的果。
- 对于隐藏单元来说,其 Δ w j i = η o j ( 1 − o j ) ∑ k ∈ o u t p u t s w k j δ k x j i \Delta w_{ji}=\eta o_j(1-o_j)\sum_{k\in outputs}w_{kj}\delta_kx_{ji} Δwji=ηoj(1−oj)∑k∈outputswkjδkxji,和 Δ w i = η ( t − o ) x i \Delta w_i=\eta(t-o)x_{i} Δwi=η(t−o)xi相比,除了有sigmoid函数的导数 o j ( 1 − o j ) o_j(1-o_j) oj(1−oj)的影响外,还有 ∑ k ∈ o u t p u t s w k j δ k \sum_{k\in outputs}w_{kj}\delta_k ∑k∈outputswkjδk的影响。它所代表的的含义是,该单元为隐藏层单元不能直接通过形如 ( t j − o j ) (t_j-o_j) (tj−oj)的方式影响网络误差,只能间接通过下一层(输出层)影响网络误差。对输出层单元集合的权重为 w k j w_{kj} wkj,输出单元集合的直接影响为 δ k \delta_k δk, w k j w_{kj} wkj与 δ k \delta_k δk相乘求和所代表的就是隐藏单元的所有间接影响和, w k j w_{kj} wkj又可叫做隐藏单元 j j j对输出单元 k k k的误差应负责的程度。
注2:增加冲量项
将
Δ
w
j
i
(
n
)
=
η
δ
j
x
j
i
\Delta w_{ji}(n)=\eta\delta_jx_{ji}
Δwji(n)=ηδjxji,变为
Δ
w
j
i
=
η
δ
j
x
j
i
+
α
Δ
w
j
i
(
n
−
1
)
\Delta w_{ji}=\eta\delta_jx_{ji}+\alpha\Delta w_{ji}(n-1)
Δwji=ηδjxji+αΔwji(n−1)。
0
≤
α
<
1
0\leq \alpha<1
0≤α<1称为冲量常数,
α
Δ
w
j
i
(
n
−
1
)
\alpha\Delta w_{ji}(n-1)
αΔwji(n−1)称为冲量项。
α
\alpha
α的作用在于增加冲量,使下一次的迭代的变化值,仍然能够按照上一次迭代的变化方向进行,没有该冲量项很可能
Δ
w
j
i
\Delta w_{ji}
Δwji会在局部误差极小值
E
E
E或误差不变化
E
E
E的区域停止更新,增加以后则可以让
Δ
w
j
i
\Delta w_{ji}
Δwji离开局部误差最小值
E
E
E和误差不变化
E
E
E的区域,同时在梯度不变的区域冲量项也起到增大搜索步长、加快收敛的作用。
3.任意深度层次有向无环网络训练算法的表示
对于训练样例集:
- 创建 n i n n_{in} nin个输入、创建 m m m层 n m h i d d e n n_{m_{hidden}} nmhidden个隐藏单元、创建 n o u t n_{out} nout个输出单元的网络
- 初始化网络中所有的权重值为较小的随机值
- 在遇到终止条件之前:
对于每一个样例 < x → , t → > <\overrightarrow x,\overrightarrow t> <x,t>:
把输入沿着网络前向传播
a、把实例 x → \overrightarrow x x输入网络中,计算网络中每个单元 u u u的输出 o u o_u ou
b、对于网络中的每个输出单元 k k k,计算它的误差项 δ k \delta_k δk,由1.反向传播算法推导的case 1可知 δ k ← ( t k − o k ) o k ( 1 − o k ) \delta_k \leftarrow (t_k-o_k)o_k(1-o_k) δk←(tk−ok)ok(1−ok)
c、对于网络中的输出层的每个隐藏单元 h h h,计算它的误差项 δ h \delta_h δh,由1.反向传播算法推导的case 2可知 δ h ← o h ( 1 − o h ) ∑ p ∈ D o w n s t r e a m s ( h ) δ p w p h \delta_h \leftarrow o_h(1-o_h)\sum_{p\in Downstreams(h)}\delta_pw_{ph} δh←oh(1−oh)∑p∈Downstreams(h)δpwph。第一次计算输出层后倒数第一层的隐藏单元(网络中倒数第二层,即m+1层) δ 第 m + 1 层 h ← o 第 m + 1 层 h ( 1 − o 第 m + 1 层 h ) ∑ p ∈ o u t p u t s δ p w p 第 m + 1 层 h \delta_{第m+1层h} \leftarrow o_{第m+1层h}(1-o_{第m+1层h})\sum_{p\in outputs}\delta_pw_{p{第m+1层h}} δ第m+1层h←o第m+1层h(1−o第m+1层h)∑p∈outputsδpwp第m+1层h,此时 δ p \delta_p δp和 δ k \delta_k δk相同;第二次计算输出单元后倒数第二层(网络中的第三层,即m层) δ 第 m 层 h ← o 第 m 层 h ( 1 − o 第 m 层 h ) ∑ p ∈ 第 m + 1 层 h δ p w p 第 m 层 h \delta_{第m层h} \leftarrow o_{第m层h}(1-o_{第m层h})\sum_{p\in第m+1层h }\delta_pw_{p{第m层h}} δ第m层h←o第m层h(1−o第m层h)∑p∈第m+1层hδpwp第m层h,此时 δ p \delta_p δp和 δ m + 1 层 h \delta_{m+1层h} δm+1层h相同,一直执行c步骤,最后一次计算时隐藏单元变为网络中的输入层的前一层(网络正数第二层)。
d、更新网络中所有的权值 w j i w_{ji} wji, w j i ← w j i + Δ w j i w_{ji}\leftarrow w_{ji}+\Delta w_{ji} wji←wji+Δwji,其中 Δ w j i = η δ j x j i \Delta w_{ji}=\eta\delta_jx_{ji} Δwji=ηδjxji
三、小结
综上所述,可知不管是在二层sigmoid的前馈网络,还是在任意多层的有向无环神经网络中,每个样例输入后,沿着网络中inputs到ouputs的方向,最终得出经过网络的输出值。而在训练神经网络的算法却恰恰相反,它从ouputs到inputs方向逐层计算每层神经单元 j j j的误差项 δ j \delta_{j} δj,从而最终得出所有 Δ w j i \Delta w_{ji} Δwji和 w j i w_{ji} wji。所以该训练法则称为反向传播算法,其算法思想和递归函数类似。