修改表 4-2 中的反向传播算法,使用双曲正切 tanh 函数取代 sigmoid 函数作为挤压函数。也就是说,假定单个单元的输出是 o=tanh(w⋅x)。给出输出层权值和隐藏层权值的权更新法则。提示:tanh′(x)=1−tanh2(x)。
修改后的表 4-2:包含两层双曲正切单元的前馈网络的反向传播算法(随机梯度下降版本)¶
BACKPROPAGATION(training_examples, η,nin,nout,nhidden)
training_examples 中每一个训练样例是形式为 <x,t> 的序偶,其中 x 是网络输入值向量,t 是目标输出值。
η 是学习速率(例如 0.05)。nin 是网络输入的数量,nhidden 是隐藏层单元数,nout 是输出单元数。
从单元 i 到单元 j 的输入表示为 xji,单元 i 到单元 j 的权值表示为 wji。
- 创建具有 nin 个输入,nhidden 个隐藏单元,nout 个输出单元的网络
- 初始化所有的网络权值为小的随机值(例如 -0.05 和 0.05 之间的数)
- 在遇到终止条件前:
对于训练样例 training_examples 中的每个 <x,t>:
把输入沿网络前向传播
1. 把实例
输入网络,并计算网络中每个单元 u 的输出
使误差沿网络反向传播
2. 对于网络中的每个输出单元 k,计算它的误差项
δk←(1−ok2)(tk−ok)(4.14) 3. 对于网络中的每个隐藏单元 h,计算它的误差项
δh←(1−oh2)k∈outputs∑wkhδk(4.15) 4. 更新每个网络权值
wji←wji+Δwji 其中
Δwji=ηδjxji(4.16)
其中对于误差项的计算如下:
反向传播法则的推导¶
这里给出反向传播算法的权值调整法则的推导。
我们要解决的问题是推导出上表算法使用的随机梯度下降法则。根据公式(11):
Ed(w)=21(td−od)2(11) ,随机的梯度下降算法迭代处理训练样例,每次处理一个。对于每个训练样例 d,利用关于这个样例的误差
的梯度修改权值。换句话说,对于每一个训练样例d,每个权
被增加
:
Δwji=−η∂wji∂Ed(12) 其中,
是训练样例d的误差,通过对网络中所有输出单元的求和得到:
Ed(w)≡21k∈outputs∑(tk−ok)2 这里,outputs 是网络中输出单元的集合,
是单元k对于训练样例d的目标值,
是给定训练样例d时单元k的输出值。
随机梯度下降法则的推导在概念上是易懂的,但需要留意很多下标和变量。我们将遵循下图中所画出的符号,增加一个下标 j 用来表示网络中第 j 个单元。

具体如下:
xji=单元j的第i个输入 wji=与单元j的第i个输入相关联的权值 netj=i∑wjixji(单元j的输入的加权和) oj=单元j计算出的输出 tj=单元j的目标输出 tanh=双曲正切函数 outputs=网络最后一层的单元的集合 Downstream(j)=单元的直接输入(immediateinputs)中包含的单元j的输出的单元的集合
现在我们导出
∂wji∂Ed 的一个表达式,以便实现公式(12)中所讲的随机梯度下降法则。首先,注意权值
仅能通过
影响网络的其他部分。所以,我们可以使用链式规则得到:
∂wji∂Ed=∂netj∂Ed∂wji∂netj =∂netj∂Edxji(13) 已知等式(13),我们剩下的任务就是为
∂netj∂Ed 导出一个方便的表达式。我们依次考虑两种情况:一种情况是单元 j 是网络中的一个输出单元,另一种情况是 j 是一个内部单元。
情况 1:输出单元的权值训练法则¶
就像
仅能通过
影响网络一样,
仅能通过
影响网络。所以我们可以再次使用链式规则得出:
∂netj∂Ed=∂oj∂Ed∂netj∂oj(14) 首先,仅考虑上式(14)中的第一项:
∂oj∂Ed=∂oj∂21k∈outputs∑(tk−ok)2 除了当k=j时,所有输出单元k的导数
∂oj∂(tk−ok)2 为0.所以我们不必对多个输出单元求和,只需要设k = j。
∂oj∂Ed=∂oj∂21(tj−oj)2 =212(tj−oj)∂oj∂(tj−oj) =−(tj−oj)(15) 接下来考虑公式(14)中的第二项。既然
oj=tanh(netj) ,导数
∂netj∂oj 就是
函数的导数,由提示可知:
tanh′(netj)=1−tanh2(netj) 。所以:
∂netj∂oj=∂netj∂tanh(netj) =1−oj2(16) 把表达式(15)和(16)代入(14),我们得到:
∂netj∂Ed=−(tj−oj)(1−oj2)(17) 然后与公式(12)和(13)合并,我们便推导出了输出单元的随机梯度下降法则:
Δwji=−η∂wji∂Ed=η(tj−oj)(1−oj2)xji(18) 注意,这个训练法则恰恰是修改后的表4-2算法中的公式(4.14)和公式(4.16)的权值更新法则。此外,我们可以发现公式(4.14)中的
与
−∂netk∂Ed 的值相等,所以可以使用
来表示任意单元i的
−∂netj∂Ed 。
情况 2:隐藏单元的权值训练法则¶
对于网络中的内部单元或者说隐藏单元的情况,推导
必须考虑
间接地影响网络输出,从而影响
。由于这个原因,我们发现定义网络中单元j地所有直接下游单元的集合(也就是直接输入中包含单元 j 的输出的所有单元)是有用的。我们用 Downstream(j) 表示这样的单元集合。注意,
只能通过Downstream(j)中的单元影响网络输出(再影响
)。所以可以得出如下推导:
∂netj∂Ed=k∈Downstream(j)∑∂netk∂Ed∂netj∂netk =k∈Downstream(j)∑−δk∂netj∂netk =k∈Downstream(j)∑−δk∂oj∂netk∂netj∂oj =k∈Downstream(j)∑−δkwkj∂netj∂oj =k∈Downstream(j)∑−δkwkj(1−oj2) 重新组织各项并使用
表示
−∂netj∂Ed ,我们得到:
δj=(1−oj2)k∈Downstream(j)∑δkwkj 和
Δwji=ηδjxji 上式就是由公式(4.19)得到的一般法则,用来更新任意有向无环网络结构内部单元的权值。
δr=(1−or2)s∈Downstream(r)∑wsrδs(4.19) 注意,修改后表4-2中的公式(4.15)仅是这个法则当Downstream(j) = outputs时的一个特例。