Skip to main content

[基础知识] 多层网络的后向传播


1 一个有单隐层的多层神经网络

上图是一个多层神经网络,包含一个输入层{x_k}=\{x_1,…,x_K\}、一个隐层{h_i}=\{h_1,…,h_N\}以及一个输出层{y_j}=\{y_1,…,y_M\}组成。为了清晰表示,我们分别使用k,i,j作为输入层单元、隐层单元以及输出层单元的下标。我们分别使用u_iu_j’分别表示隐层单元和输出层单元的网络输入。

接下来需要推导出学习输入层和隐层之间权重w_{ki}的更新公式,以及隐层和输出层之间权重w’_{ij}的更新公式。假设所有的计算单元(例如,隐层和输出层中的单元)都使用逻辑斯蒂函数\sigma(u)作为链接函数。因此,作为隐层中的一个单元h_i,它的输出定义如下:

h_i=\sigma(u_i)=\sigma(\sum_{k=1}^K w_{ki}x_k) 公式1

同样地,对于输出层中的一个单元y_i,其输出被定义为:

y_j=\sigma(u_j’)=\sigma(\sum_{n=1}^N w_{ij}’h_i) 公式2

在这里,使用平方误差和函数:

E(x,t,W,W’)=\frac{1}{2}\sum_{j=1}^M {(y_j-t_j)}^2 公式3

其中,W=\{w_{ki}\},一个K\times N的权重矩阵(输入-隐层);W’=\{w’_{ij}\},一个N\times M的权重矩阵(隐层-输出),t=\{t_1,…,t_M\},是一个M维向量,表示输出的黄金标准标签。

为了得到w_{ki}w_{ij}’的更新函数,我们只需要分别针对权重得到误差函数E的推导即可。为了直接进行推导,我们直接从最右边的层开始计算推导(即:输出层),然后向左移动。对于每一层,我们将计算分为三步:分别计算误差针对输出、网络输入以及权重的推导。流程如下。

从输出层开始。第一步是计算误差相对于输出的推导:

\frac{\delta E}{\delta y_j}= y_j – t_j 公式4

第二部是计算误差相对于输出层网络输入的推导。注意,当我们针对某些变量进行推导时,需要保证其他变量固定。也请注意:这个值非常重要,因为在接下来的计算中,这个值会被重用很多次。在这里,为了方便表示。将其表示为EI_j’

\frac{\delta E}{\delta u_j’}=\frac{\delta E}{\delta y_j}\cdot \frac{\delta y_j}{\delta u_j’}=(y_j-t_j)\cdot y_j(1-y_j) := EI_j’ 公式5

第三步是计算误差相对于隐层和输出层之间权重的推导:

\frac{\delta E}{\delta w_{ij}’}=\frac{\delta E}{\delta u_j’}\cdot \frac{\delta u_j’}{\delta w_{ij}’}= EI_j’ \cdot h_i 公式6

到这里,我们就已经得到了隐层和输出层之间权重的更新公式:

w_{ij}’^{(new)}=w_{ij}’^{(old)}-\eta \cdot \frac{\delta E}{\delta w_{ij}’}=w_{ij}’^{(old)}-\eta \cdot EI_j’ \cdot h_i 公式7

其中,\eta>0,为学习率。

我们可以重复相同的三步来获得之前层权重的更新公式,这就是后向传播的本质思想。

我们重复第一步,计算出误差针对隐层输出的推导。注意:隐层的输出与输出 层中的所有单元都相关:

\frac{\delta E}{\delta h_i}=\sum_{j=1}^M {\frac{\delta E}{\delta u_j’}\frac{u_j’}{\delta h_i}}=\sum_{j=1}^M {EI_j’ \cdot w_{ij}’} 公式8

然后重复上面的第二部来计算误差相对于隐层网络输入的推导。同样地,这个值也非常重要,我们将其表示为EI_i

\frac{\delta E}{\delta u_i}=\frac{\delta E}{\delta h_i}\cdot \frac{\delta h_i}{\delta u_i}=\sum_{j=1}^M EI_j’\cdot w_{ij}’ \cdot h_i (1-h_i) := EI_i 公式9

接下来,我们重复上面的第三步来计算误差相对于输入层和隐层之间权重的推导。

\frac{\delta E}{\delta w_{ki}}=\frac{\delta E}{\delta u_i}\cdot \frac{\delta u_i}{delta w_{ki}}=EI_i \cdot x_k 公式10

最后,我们可以得到输入层和隐层之间权重的更新公式:

w_{ki}^{(new)}=w_{ki}^{(old)}-\eta \cdot EI_i \cdot x_k 公式11

从上面的示例中,我们可以看到在计算某层中的导数时用到的中间结果(EI_j’)可以被之前的层重用。假设如果在输入层之前还有另外一层,那么EI_i也可以继续被方便地用于计算导数的链。比较公式5和公式9,我们可以发现,在公式9中,因此\sum_{j=1}^M EI_j’ w_{ij}’有点像隐层单元h_i的“误差”。这样我们也许就可以将这个术语解释为从下一层“向后传播”误差,那么如果网络有更多隐层,该传播也就可以向后传得更远。

打赏
微信扫一扫支付
微信logo微信扫一扫, 打赏作者吧~

mickey

记录生活,写给几十年后的自己。

发表评论

电子邮件地址不会被公开。 必填项已用*标注