神经网络反向传播(BP)公式推导

前言(简要)

阅读文本之前,默认您对神经网络的结构有了基本的了解,并且在阅读其他文章后觉得似懂非懂,想弄懂反向传播是如何真正地传导

符号定义

A multi-layer neural network with one hidden layer

上图中展示了一张最基本的多层神经网络(具有一个隐藏层,多层的思想和这个完全相同,文末点睛):
输入层是
x k = x 1 , . . . , x K {x_k}={x_1,...,x_K} xk=x1,...,xK
隐藏层是
h i = h 1 , . . . , h N {h_i}={h_1,...,h_N} hi=h1,...,hN
输出层是
y j = y 1 , . . . , y M {y_j}={y_1,...,y_M} yj=y1,...,yM
为了清楚起见,我们使用k、I、j分别作为输入、隐藏和输出层单元的下标。我们用 u i u_i ui u j ′ u_j^{'} uj分别表示隐藏层单元和输出层单元的净输入。
我们想导出更新方程,用于学习输入层和隐藏层之间的权重 w k i w_{ki} wki和隐藏层和输出层之间的权重 w i j ′ w_{ij}^{'} wij。我们假设所有的计算单元(图中的隐藏层和输出层)都使用 σ ( u ) σ(u) σ(u)作为激活函数。因此,对于隐藏层中的一个单元 h i h_i hi,它的输出定义为
h i = σ ( u i ) = σ ( ∑ k = 1 K w k i x k ) h_i=σ(u_i)=σ(\sum_{k=1}^{K} w_{ki}x_k) hi=σ(ui)=σ(k=1Kwkixk)
类似地,对于输出层中的一个单元 y j y_j yj,它的输出定位为:
y j = σ ( u j ′ ) = σ ( ∑ i = 1 N w i j ′ h i ) y_j=σ(u_j^{'})=σ(\sum_{i=1}^{N} w_{ij}^{'}h_i) yj=σ(uj)=σ(i=1Nwijhi)
损失函数我们使用平方和损失函数
E ( x , t , W , W ′ ) = 1 2 ∑ j = 1 M ( y j − t j ) 2 E(x,t,W,W^{'})=\frac{1}{2}\sum_{j=1}^{M} (y_j-t_j)^2 E(x,t,W,W)=21j=1M(yjtj)2
其中 W = w k i , 是 一 个 K ∗ N 的 权 重 矩 阵 ( 输 入 层 − 隐 藏 层 ) , W ′ = w i j ′ , 一 个 N ∗ M 的 权 重 矩 阵 ( 隐 藏 层 − 输 出 层 ) , t = t 1 , . . . , t M , 是 一 个 M 维 的 向 量 , 即 标 签 W={w_{ki}},是一个K*N的权重矩阵(输入层-隐藏层),W^{'}={w_{ij}^{'}},一个N*M的权重矩阵(隐藏层-输出层),t={t_1,...,t_M},是一个M维的向量,即标签 W=wki,KNW=wij,NMt=t1,...,tM,M

重点强调

我们反向传播的目的是获取 w k i w_{ki} wki w i j ′ {w_{ij}^{'}} wij的更新方程。我们只需要分别求出误差函数E对权重的导数。为了使推导变得简单,我们需要开始计算最右侧层(即输出层)的导数,对于每一层我们将计算分为三个步骤,分别计算输出、净输入和权重的误差导数。该过程如下所示:

推导过程

我们从输出层开始。第一步是计算输出误差的导数:
∂ E ∂ y j = y j − t j \frac{\partial{E}}{\partial{y_j}}=y_j-t_j yjE=yjtj
第二步是计算误差相对于输出层净输入的导数。请注意,当对某个事物进行导数时,我们需要保持其他一切不变。还要注意,这个值非常重要,因为它将在后续计算中多次重复使用。我们使用 E I j ′ EI_j^{'} EIj来表示它,出于简单.
∂ E ∂ u j ′ = ∂ E ∂ y j ∗ ∂ y j ∂ u j ′ = ( y j − t j ) ∗ y j ( 1 − y j ) : = E I j ′ ( 1 ) \frac{\partial{E}}{\partial{u_j^{'}}}=\frac{\partial{E}}{\partial{y_j}}*\frac{\partial{y_j}}{\partial{u_j^{'}}}=(y_j-t_j)*y_j(1-y_j):=EI_j^{'} (1) ujE=yjEujyj=(yjtj)yj(1yj):=EIj(1)
:=是定义的意思
第三步是计算关于输出层和隐藏层之间的权重的误差的导数。
∂ E ∂ w i j ′ = ∂ E ∂ u j ′ ∗ ∂ u j ′ ∂ w i j ′ = E I j ′ ∗ h i \frac{\partial{E}}{\partial{w_{ij}^{'}}}=\frac{\partial{E}}{\partial{u_j^{'}}}*\frac{\partial{u_j^{'}}}{\partial{w_{ij}^{'}}}=EI_j^{'}*h_i wijE=ujEwijuj=EIjhi
到目前为止,我们已经获得了隐藏层和输出层之间的权重更新方程.
w i j n e w = w i j o l d − η ∗ ∂ E ∂ w i j ′ = w i j o l d − η ∗ E I j ′ ∗ h i w_{ij}^{new}=w_{ij}^{old}-η*\frac{\partial{E}}{\partial{w_{ij}^{'}}}=w_{ij}^{old}-η*EI_j^{'}*h_i wijnew=wijoldηwijE=wijoldηEIjhi
其中η > 0是学习率。
我们可以重复同样的三个步骤来获得左边一层(前一层)权重的更新方程,这本质上是反向传播的思想。我们重复第一步,计算关于隐藏层输出的误差导数。请注意,隐藏层的输出与输出层中的所有单元相关。
∂ E ∂ h i = ∑ j = 1 M ∂ E ∂ u j ′ ∂ u j ′ ∂ h i = ∑ j = 1 M E I j ′ ∗ w i j ′ \frac{\partial{E}}{\partial{h_i}}=\sum_{j=1}^{M}\frac{\partial{E}}{\partial{u_{j}^{'}}}\frac{\partial{u_j^{'}}}{\partial{h_i}}=\sum_{j=1}^{M}EI_j^{'}*w_{ij}^{'} hiE=j=1MujEhiuj=j=1MEIjwij
然后我们重复上面的第二步,计算关于隐藏层净输入的误差导数。这个值也很重要,我们称之为 E I i EI_i EIi
∂ E ∂ u i = ∂ E ∂ h i ∗ ∂ h i ∂ u i = ∑ j = 1 M E I j ′ ∗ u i j ′ ∗ h i ∗ ( 1 − h i ) : = E I i ( 2 ) \frac{\partial{E}}{\partial{u_i}}=\frac{\partial{E}}{\partial{h_i}}*\frac{\partial{h_i}}{\partial{u_i}}=\sum_{j=1}^{M}EI_j^{'}*u_{ij}^{'}*h_i*(1-h_i):=EI_i(2) uiE=hiEuihi=j=1MEIjuijhi(1hi):=EIi(2)
接下来,我们重复上面的第三步,计算关于输入层和隐藏层之间的权重的误差导数。
∂ E ∂ w k i = ∂ E ∂ u i ∗ ∂ u i ∂ w k i = E I i ∗ x k \frac{\partial{E}}{\partial{w_{ki}}}=\frac{\partial{E}}{\partial{u_i}}*\frac{\partial{u_i}}{\partial{w_{ki}}}=EI_i*x_k wkiE=uiEwkiui=EIixk
最后,我们可以获得隐藏层和输入层之间的权重更新方程
. w k i n e w = w i j o l d − η ∗ E I i ∗ x k w_{ki}^{new}=w_{ij}^{old}-η*EI_i*x_k wkinew=wijoldηEIixk

点睛

从上面的例子中,我们可以看到,计算一层导数时的中间结果( E I j ′ EI_j^{'} EIj)可以被前一层重用。假设在输入层之前还有另一层,那么还可以重用 E I i EI_i EIi来继续高效地计算导数链。比较等式(1)和(2),我们可以发现在(2)中,因子 ∑ j = 1 M E I j ′ w i j ′ \sum_{j=1}^{M}EI_j^{'}w_{ij}^{'} j=1MEIjwij隐藏层单元 h i h_i hi的“误差”。我们可以将这个术语解释为从右边一层“反向传播”的误差,如果网络有更多的隐藏层,这种传播可能会进一步反向。

参考文献

【1】Xin Rong.word2vec Parameter Learning Explained[J].

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值