Backpropagation

Backpropagation

1 Introduction

  撰写本文的目的是清晰,完整而不是简洁。如果您只是想“即插即用”,请随时跳至“公式”部分。如果您熟悉符号表示法和神经网络的基础知识,但想逐步进行推导,只需阅读Derivation部分。不要被本文的篇幅或方程式的数量所吓倒!之所以很长,是因为它甚至包含了最简单的细节。

2 Specification

  我们首先指定网络参数。前馈神经网络(NNs)是由输入层,隐藏层,输出层组成。只有一层输入层和一层输出层,但是隐藏层的数量是无限的。网络是“前馈”的,因为特定层中的节点仅连接到与其直接相连接的下层中的节点。以便输入层中的节点仅激活后续隐藏层中的节点,而后者又仅激活下一个隐藏层中的节点,依此类推,直到输出层。这种安排在图1中很好地说明了。注意,在图1中,特定层的每个节点都连接到后续层的每个节点,但这不是必需的。

  关于本文中一些符号的定义:如果网络某一层有 J ∈ N J \in N JN个节点,那么该层第 j j j 个节点表示为 j t h j^{th} jth,其中 j ∈ { 0 , 1 , . . . , J } j\in\{0,1,...,J\} j{0,1,...,J} 。类似的, i t h i^{th} ith 表示第 I I I 层的第 i i i 个节点, k t h k^{th} kth 表示第 K K K 层第 k k k 个节点。

  由于层与层之间并非总是全连接的。因此,影响第 j j j 层的节点 j t h j^{th} jth 的可能只是来自第 k k k 层一部分节点,也就是第 k k k 层的子集。我们定义从第 k k k 层到第 j j j 层的这部分节点为 K j K_j Kj。同理,我们可以定义从第 j j j 层到第 i i i 层的第 j j j 层节点的子集节点为 J i J_i Ji,反向传播中从第 i i i 层到第 j j j 层的第 j j j 个节点 ( j t h ) (j^{th}) (jth)可以表示为 I j I_j Ij。(注意对 K j , J i , I j K_j,J_i,I_j Kj,Ji,Ij 的理解)。

在这里插入图片描述

图1:神经网络一部分,由三层网络构成

3 Neuron

  如图2,通过通常是非线性的函数将其输入的加权总和经过激活函数,得到输出。这里可以分成两部分:(1)加权求和。(2)激活函数。
x j = ∑ k ∈ K j w k j y k (1) x_j = \sum_{k \in {K_j}}w_{kj}y_k \tag{1} xj=kKjwkjyk(1)
其中 K j K_j Kj是来自第 k k k 层连接到 j t h j^{th} jth 的节点集合。
y j = f ( x j ) (2) y_j = f(x_j) \tag{2} yj=f(xj)(2)

我们考虑以下几种激活函数, f ( ⋅ ) f(·) f(), l i n e a r , t h r e s h o l d , s i g m o i d , G a u s s i a n linear,threshold,sigmoid,Gaussian linear,threshold,sigmoid,Gaussian 分别如下公式(3),(4),(5) ,(6)。

f ( z ) = β z (3) f(z) = \beta z \tag{3} f(z)=βz(3)
f ( z ) = { 1 , x ≥ θ 0 , x < θ (4) f(z) = \left\{\begin{array}{cc} 1, & x \geq \theta\\ 0, & x < \theta \end{array}\right. \tag{4} f(z)={1,0,xθx<θ(4)
f ( z ) = 1 1 + e − γ z (5) f(z) = \frac{1}{1+e^{-{\gamma z}}} \tag{5} f(z)=1+eγz1(5)
f ( z ) = e x p { − ( z − u ) 2 σ 2 } (6) f(z) = exp\{-\frac{(z-u)^2}{\sigma^2}\} \tag{6} f(z)=exp{σ2(zu)2}(6)

其中 β , θ , γ , δ , μ \beta,\theta,\gamma,\delta,\mu β,θ,γ,δ,μ 是激活函数 f ( ⋅ ) f(·) f() 的参数用于控制激活函数"shape"。

4 The sigmoid and its Derivative

  在下面介绍的Backpropagation算法中,我们将使用 s i g m o i d sigmoid sigmoid函数作为激活函数。使用 s i g m o i d sigmoid sigmoid的主要原因是 s i g m o i d sigmoid sigmoid 函数有很多好的数学特性。简单起见,我们把公式(5)中的 γ \gamma γ 设置为 1,并对其进行求导。
d f ( z ) d z = 0 ⋅ ( 1 − e − z ) − ( − e − z ) ( 1 + e − z ) 2 = 1 1 + e − z ( e − z 1 + e − z ) = 1 1 + e − z ( 1 − 1 1 + e − z ) = f ( z ) ( 1 − f ( z ) ) (7) \begin{aligned} \frac{df(z)}{dz} &= \frac{0\cdot(1-e^{-z})-(-e^{-z})}{(1+e^{-z})^2} \\ &= \frac{1}{1+e^{-z}}(\frac{e^{-z}}{1+e^{-z}}) \\ &= \frac{1}{1+e^{-z}}(1-\frac{1}{1+e^{-z}}) \\ &=f(z)(1-f(z)) \end{aligned} \tag{7} dzdf(z)=(1+ez)20(1ez)(ez)=1+ez1(1+ezez)=1+ez1(11+ez1)=f(z)(1f(z))(7)
这样简洁的求导结果将简化下面的推导过程。
在这里插入图片描述

图2 多个神经元对来自第 k k k层的输入加权求和,并通过激活函数 f ( ⋅ ) f(\cdot) f() 得到输出 y j y_j yj

5 Interpretation of the Algorithm

  监督学习算法试图通过改变网络参数值来最小化输出 ( o u t p u t ) (output) (output)与目标 ( t a r g e t ) (target) (target)之间的误差。Backprop是一种迭代算法,这意味着我们不会一次更改所有权重,而是逐步更改权重,我们应该改变多少重量?一个自然的答案是:与对误差的影响成正比;权重 w m w_m wm的影响越大,通过改变权重 w m w_m wm导致的误差减少得越大,因此我们的学习算法应该对该权重进行更大的改变。当然,这种影响都不尽相同:更改任何特定的权重通常都会或多或少的影响其他权重,包括我们已更改的权重。

6 Derivation

  在准备推导算法时,我们需要定义一个误差度量。直观上,误差是输出节点的实际激活值( y j y_j yj)与该节点的期望(“目标”)激活( t j t_j tj)之间的差异。总误差是每个输出节点的这些误差的总和。此外,由于我们希望负误差和正误差不会互相抵消,因此我们在求和之前对这些差异求平方。为了下面求导方便,我们在误差项前乘上常量因子 1 2 \frac{1}{2} 21
E : = 1 2 ∑ j = 1 J ( t j − y j ) 2 (8) E:=\frac{1}{2}\sum_{j=1}^{J}(t_j-y_j)^2 \tag{8} E:=21j=1J(tjyj)2(8)

注意:上述公式是假设第 j j j层为输出层时才成立的(误差是在输出层计算)。

  我们希望通过求出损失函数 E E E 对某个连接参数 w k j w_{kj} wkj的微分,以便根据 G r a d i e n t   D e s c e n t Gradient \ Descent Gradient Descent 对该参数进行更新。该过程可以用如下公式表示:
△ w k j = − α ⋅ ∂ E ∂ w k j (9) \bigtriangleup w_{kj} = -\alpha \cdot \frac{\partial E}{\partial w_{kj}} \tag{9} wkj=αwkjE(9) 其中 α \alpha α 是学习率,负号表示权重变化是朝着减少误差的方向。求出梯度后即可根据(10)进行参数更新
w k j = w k j − α ⋅ ∂ E ∂ w k j (10) w_{kj} = w_{kj} -\alpha \cdot \frac{\partial E}{\partial w_{kj}} \tag{10} wkj=wkjαwkjE(10)
据链式求导法则 c h a i n   r u l e chain \ rule chain rule,我们可以得到:
∂ E ∂ w k j = ∂ E ∂ y j ∂ y j ∂ x j ∂ x j ∂ w k j (11) \frac{\partial E}{\partial w_{kj}} = \frac{\partial E}{\partial y_j} \frac{\partial y_j}{\partial x_j} \frac{\partial x_j}{\partial w_{kj}} \tag{11} wkjE=yjExjyjwkjxj(11)

E q .   ( 1 ) Eq.\ (1) Eq. (1) 可以得到:
∂ x j ∂ w k j = y k (12) \frac{\partial x_j}{\partial w_{kj}} = y_k \tag{12} wkjxj=yk(12)
我们使用 s i g m o i d sigmoid sigmoid 函数作为激活函数,因此有:
∂ y j ∂ x j = f ( x j ) ⋅ ( 1 − f ( x j ) ) = y j ( 1 − y j ) (13) \frac{\partial y_j}{\partial x_j} = f(x_j)\cdot(1-f(x_j))=y_j(1-y_j) \tag{13} xjyj=f(xj)(1f(xj))=yj(1yj)(13)

比较麻烦的地方在于求 ∂ E ∂ y j {\frac{\partial E}{\partial y_j}} yjE,我们需要分成两种情况来讨论:

(1)当第 j j j 层是输出层时: 此时可以之间根据 E q .   8 Eq.\ 8 Eq. 8得到:
∂ E ∂ y j = − ( t j − y j ) (14) \frac{\partial E}{\partial y_j} = -(t_j-y_j) \tag{14} yjE=(tjyj)(14)
结合 E q s Eqs Eqs (12),(13),(14)。我们可以得到 E q .   11 Eq. \ 11 Eq. 11的结果如下: ∂ E ∂ w k j = − ( t j − y j ) y j ( 1 − y j ) y k (15) \frac{\partial E}{\partial w_{kj}}=-(t_j-y_j)y_j(1-y_j)y_k \tag{15} wkjE=(tjyj)yj(1yj)yk(15)

(2)当第 j j j 层是隐藏层时:此时我们需要考虑误差是如何通过第 j j j 层传播到下一层,即第 i i i 层的。这里我们需要用到多变量的链式求导法则( m u l t i − v a r i a b l e   c a l c u l u s multi-variable \ calculus multivariable calculus)。为了求出 ∂ E ∂ w k j \frac{\partial E}{\partial w_{kj}} wkjE( E q . 11 Eq. 11 Eq.11),我们只需要求出 ∂ E ∂ y j \frac{\partial E}{\partial y_j} yjE。我们可以把 ∂ E ∂ y j \frac{\partial E}{\partial y_j} yjE通过下一层(第 i i i 层)表示出来:
∂ E ∂ y j = ∑ i ∈ I j ∂ E ∂ y i ∂ y i ∂ x i ∂ x i ∂ y j (16) \frac{\partial E}{\partial y_j} = \sum_{i \in I_j}\frac{\partial E}{\partial y_i}\frac{\partial y_i}{\partial x_i}\frac{\partial x_i}{\partial y_j} \tag{16} yjE=iIjyiExiyiyjxi(16)
其中 I j I_j Ij 表示第 i i i 层中与第 j j j 层的第 j j j 个节点 ( j t h j^{th} jth)相关连的节点。可以看出, ∂ E ∂ y j \frac{\partial E}{\partial y_j} yjE是通过下一层的节点求出的(如果下一层是输出层,则直接根据 E q .   8 Eq. \ 8 Eq. 8求出结果,否则按照上述方式递归进行,直到输出层),这正是Backpropagation的核心所在。
E q .   1 Eq. \ 1 Eq. 1:
∂ x i ∂ y j = w j i (17) \frac{\partial x_i}{\partial y_j} = w_{ji} \tag{17} yjxi=wji(17)

注: w j i w_{ji} wji 表示节点 j j j 到节点 i i i 连边权重。

为了简化表述,我们用 δ j \delta_j δj表示下式:
δ j : = ∂ E ∂ y j ∂ y j ∂ x j (18) \delta_j := \frac{\partial E}{\partial y_j}\frac{\partial y_j}{\partial x_j} \tag{18} δj:=yjExjyj(18)
那么我们可以根据 E q s . Eqs. Eqs.(17),(18) 把 E q .   16 Eq. \ 16 Eq. 16表示如下:
∂ E ∂ y j = ∑ i ∈ I j δ i w j i (19) \frac{\partial E}{\partial y_j} = \sum_{i \in I_j}\delta_i w_{ji} \tag{19} yjE=iIjδiwji(19)
至此,我们已经把 ∂ E ∂ y j \frac{\partial E}{\partial y_j} yjE表示出来,那么我们的目标 ∂ E ∂ w k j \frac{\partial E}{\partial w_{kj}} wkjE,也就是 E q .   11 Eq . \ 11 Eq. 11就可以表示如下:
∂ E ∂ w k j = ∂ E ∂ y j ∂ y j ∂ x j ∂ x j ∂ w k j = ∂ E ∂ y j ⋅ y j ( 1 − y j ) y k = ∑ i ∈ I j ( δ i w j i ) ⋅ y j ( 1 − y j ) y k (20) \begin{aligned} \frac{\partial E}{\partial w_{kj}} &= \frac{\partial E}{\partial y_j} \frac{\partial y_j}{\partial x_j} \frac{\partial x_j}{\partial w_{kj}} \\ &=\frac{\partial E}{\partial y_j}\cdot y_j(1-y_j)y_k \\ &= \sum_{i \in I_j}(\delta_i w_{ji})\cdot y_j(1-y_j)y_k \end{aligned} \tag{20} wkjE=yjExjyjwkjxj=yjEyj(1yj)yk=iIj(δiwji)yj(1yj)yk(20)

注意: E q .   20 Eq. \ 20 Eq. 20 是当第 j j j 层不是输出层时候的表示方式。

我们也可以把第 j j j 层是输出层时(情况1)用 δ j \delta_j δj 表示:
∂ E ∂ w k j = δ j y k (21) \frac{\partial E}{\partial w_{kj}} = \delta_jy_k \tag{21} wkjE=δjyk(21)

7 Summary

对于 ∂ E ∂ w k j \frac{\partial E}{\partial w_{kj}} wkjE,我们的核心问题是求出 ∂ E ∂ y j \frac{\partial E}{\partial y_j} yjE
当第 j j j 层是输出层时
δ j : = − ( t j − y j ) y j ( 1 − y j ) (22) \delta_j:=-(t_j-y_j)y_j(1-y_j) \tag{22} δj:=(tjyj)yj(1yj)(22)

当第 j j j 层不是输出层时:
δ j = ( ∑ i ∈ I j δ i w j i ) y j ( 1 − y j ) (23) \delta_j = (\sum_{i \in I_j}\delta_iw_{ji})y_j(1-y_j) \tag{23} δj=(iIjδiwji)yj(1yj)(23)
注:其中 δ j \delta_j δj 可以看作误差项。

  我从 E q .   23 Eq. \ 23 Eq. 23 我们可以看出,计算隐藏层节点误差项 δ j \delta_j δj时,需要提前计算出下一层节点的误差项 δ i \delta_i δi,这一过程将持续到输出层,输出层误差项可以用 E q .   22 Eq. \ 22 Eq. 22 计算。因此,整个计算过程必须使用反向传播算法( B a c k p o r p a g a t i o n Backporpagation Backporpagation),从输出层开始,到第一个隐藏层结束。正是这种误差项的向后传播,才有反向传播算法的名称。

8 Supplement

下面是关于 c h a i n   r u l e chain \ rule chain rule (链式求导法则)的补充(cite from:Hung-yi Lee)
在这里插入图片描述
其中的 z z z等价于上述的 E E E, s s s 等价于上述的 y j y_j yj,而 x , y x,y x,y 则可以等价于上述的 ∑ i ∈ I j \sum_{i\in I_j} iIj 中的 y i y_i yi

Reference

Latex:link
Latex极简手册:link
Latex换行对齐问题:link
Latex符号表示:link
参考文献:[pdf]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值