神经网络的发展,最早可以追溯到感知机模型,我们不妨理解为当前的神经网络模型,都是从感知机进化而来的,因此,在正式学习神经网络之前,认识一下它的“祖先”还是很有必要的。
上图就是对感知机的完整诠释,这个名字有点误导,因为它根本上就是做决策用的。
举个例子:
你正在考虑今天要不要出去看电影,你主要考虑的有三个因素p1 、p2和p3。其中p1是你女朋友想不想去,p2是电影好不好看,p3是今天工作多不多,每一个因素对应于一个权重wi,有的人看重女朋友,有的人看重电影的质量…
你把每一项pi和对应的wi相乘,然后累加求和得到一个结果,如果这个值大于设定的阈值,那么你就决定去看电影,如果小于等于设定的阈值,那么就不去看,这就是感知机做决策的例子。
根据上面的叙述,我们大概知道,感知机的决策过程主要分两步,一是计算输入乘以权重的累加和,二是判断累加和与阈值之间的大小关系。我们可以把两个步骤合并在一起,把阈值b与累加和相加,再用 s i g n ( x ) sign(x) sign(x)函数得到输入结果。
我们先计算累加和与bias项的和: z = ∑ i = 1 m w i x i + b z=\sum_{i=1}^{m} w_{i} x_{i}+b z=i=1∑mwixi+b 得到中间结果 z z z之后,我们可以再用激活函数 s i g n ( x ) sign(x) sign(x),得到最终的决策值:
sign ( z ) = { − 1 z < 0 1 z ≥ 0 \operatorname{sign}(z)=\left\{\begin{array}{ll}{-1} & {z<0} \\ {1} & {z \geq 0}\end{array}\right. sign(z)={−11z<0z≥0
不知道大家有没有和我一样的感受,看了感知机的原理之后,就想到了逻辑回归模型,因为二者的相似处实在太多,想想逻辑回归也是计算特征值的加权和,然后喂给了 S i g m o i d Sigmoid Sigmoid激活函数,得到最终的输出结果。
从函数的判别模型角度来看,感知机和逻辑回归还是挺相似的,那么逻辑回归模型,是否也可以像感知机一样,理解为只含有一个神经元的神经网络模型呢?同理,由LogisicRegression拓展到多分类任务的SoftmaxRegression,是否也是一种特殊的神经网络呢?
这个只是我目前的学习思考,之后学习的更深之后,再来解答此问题,不容否认的是,逻辑回归和神经网络之间一定是有着某种特别的联系的。
上述的感知机模型,只能用于线性的二分类任务,无法用于复杂的非线性多分类任务,于是在此基础上进行一些扩展,得到了现在我们熟知的神经网络,主要有三点扩展:
深度神经网络,也被叫做多层神经网络,偶尔也会被叫做多层感知机模型(Multi-Layer perceptron , MLP),我们只需要知道它们指的都是同一个东西即可,这里我们统称为DNN.
深度神经网络的架构图如下:
层与层之间是全连接的,即第(l-1)层的任意一个神经元一定与第l层的任意一个神经元相连接。DNN的结构看起来是很复杂,但是我们单独抽出某一个神经元以及它上一层中的所有神经元,就会发现它其实就是和感知机(还是说逻辑回归?)一样,首先是计算加权和,再加上偏置项b,最终将这个未激活值送到激活函数σ进行激活。
w 42 3 : w_{42}^3: w423: 表示第(3-1)层的第2个神经元到第3层的第4个神经元之间的连接的权重;
z 4 3 : z_4^3: z43: 表示第3层的第4个神经元的未经激活函数激活之前的值,其中 z 4 3 = w 41 3 ⋅ a 1 2 + w 42 3 ⋅ a 2 2 + w 43 3 ⋅ a 3 2 + b 4 3 z_{4}^{3}=w_{41}^{3} \cdot a_{1}^{2}+w_{42}^{3} \cdot a_{2}^{2}+w_{43}^{3} \cdot a_{3}^{2}+b_{4}^{3} z43=w413⋅a12+w423⋅a22+w433⋅a32+b43 a 3 4 : a_3^4: a34: 表示第3层的第4个神经元的激活值(输出值),其中
a 4 3 = σ ( z 4 3 ) a_{4}^{3}=\sigma\left(z_{4}^{3}\right) a43=σ(z43) b 4 3 : b_{4}^{3}: b43: 表示第3层的第4个神经元所对应的偏置项,注意哦,每一层的每一个神经元都对应着一个b,我们把每一个神经元看成是一个感知机模型,所以每个模型对应的bias项是不一样的;
【引申一个问题】为什么要在未激活值的计算中加上bias项呢?这里引用知乎上的回答。
回答一:我们可以把问题先简化,为什么线性模型要加 bias?答案很简单,不加 bias 你的分类线(面)就必须过原点,这显然是不灵活的。有了bias我们就可以上下左右移动我们的线了,神经网络是一样的道理。
回答二:Bias的好处在于:可以使得神经网络Fit的范围得到左右的调整。
没有bias项时,我们用不同的w来拟合数据,w越大,sigmoid函数越陡峭,分类效果越好!!可观察上图。但是如果要判断图中绿色点的类别呢?按照sigmoid函数的输出,绿色点的激活值小于0.5,应该判为蓝色类,这个时候,让sigmoid函数变得更陡也没办法解决了。
这个时候,如果加入一个bias项呢?我们观察函数图像:
w系数不需要学的很大,就可以提高学习的准确率,网络就能够非常灵活的拟合样本点的分布,并准确判断绿点所属的集合。
简单来说,加上bias项能够更加灵活的fit数据样本点的分布!
假设一个神经网络共有三层,第一层(输入层)共有三个神经元x1,x2,x3,第二层也是有三个神经元,第三层为输出层,只有1个神经元。如下图所示:
那么第二层的三个神经元的输出分别为: a 1 2 = σ ( z 1 2 ) = σ ( w 11 2 x 1 + w 12 2 x 2 + w 13 2 x 3 + b 1 2 ) a 2 2 = σ ( z 2 2 ) = σ ( w 21 2 x 1 + w 22 2 x 2 + w 23 2 x 3 + b 2 2 ) a 3 2 = σ ( z 3 2 ) = σ ( w 31 2 x 1 + w 32 2 x 2 + w 33 2 x 3 + b 3 2 ) \begin{aligned} a_{1}^{2} &=\sigma\left(z_{1}^{2}\right)=\sigma\left(w_{11}^{2} x_{1}+w_{12}^{2} x_{2}+w_{13}^{2} x_{3}+b_{1}^{2}\right) \\\\ a_{2}^{2} &=\sigma\left(z_{2}^{2}\right)=\sigma\left(w_{21}^{2} x_{1}+w_{22}^{2} x_{2}+w_{23}^{2} x_{3}+b_{2}^{2}\right) \\\\ a_{3}^{2} &=\sigma\left(z_{3}^{2}\right)=\sigma\left(w_{31}^{2} x_{1}+w_{32}^{2} x_{2}+w_{33}^{2} x_{3}+b_{3}^{2}\right) \end{aligned} a12a22a32=σ(z12)=σ(w112x1+w122x2+w132x3+b12)=σ(z22)=σ(w212x1+w222x2+w232x3+b22)=σ(z32)=σ(w312x1+w322x2+w332x3+b32) 第三层的神经元输出为: a 1 3 = σ ( z 1 3 ) = σ ( w 11 3 a 1 2 + w 12 3 a 2 2 + w 13 3 a 3 2 + b 1 3 ) a_{1}^{3}=\sigma\left(z_{1}^{3}\right)=\sigma\left(w_{11}^{3} a_{1}^{2}+w_{12}^{3} a_{2}^{2}+w_{13}^{3} a_{3}^{2}+b_{1}^{3}\right) a13=σ(z13)=σ(w113a12+w123a22+w133a32+b13) 将上述例子一般化,假设第 ( l − 1 ) (l-1) (l−1)层共有m个神经元,那么对于第l层的第j个神经元的输出值 a j l a_j^l ajl为: a j l = σ ( z j l ) = σ ( ∑ k = 1 m w j k l a k l − 1 + b j l ) a_j^l = \sigma(z_j^l) = \sigma(\sum\limits_{k=1}^mw_{jk}^la_k^{l-1} + b_j^l) ajl=σ(zjl)=σ(k=1∑mwjklakl−1+bjl)
【矩阵法表示】上面这个式子,给出了单个神经元的输出值用代数法如何计算,我们下面来推导更加简洁的矩阵法表示.(最终结果如下:)
a l = σ ( z l ) = σ ( W l a l − 1 + b l ) a^{l}=\sigma\left(z^{l}\right)=\sigma\left(W^{l} a^{l-1}+b^{l}\right) al=σ(zl)=σ(Wlal−1+bl) 假设第 ( l − 1 ) (l-1) (l−1)层共有m个神经元,而第 l l l层共有n个神经元,则第l层的权重系数w组成了一个n×m的矩阵 W l W^l Wl: ( w 11 l w 12 l … w 1 m l w 21 l w 22 l … w 2 m l . . . . . . … . . . w n 1 l w n 2 l … w n m l ) \left( \begin{array}{llll}{w_{11}^{l}} & {w_{12}^{l}} & {\dots} & {w_{1m}^{l}} \\ \\{w_{21}^{l}} & {w_{22}^{l}} & {\dots} & {w_{2m}^{l}}\\\\{...} & {...} & {\dots} & {...} \\\\ {w_{n1}^{l}} & {w_{n2}^{l}} & {\dots} & {w_{nm}^{l}}\end{array}\right) ⎝⎜⎜⎜⎜⎜⎜⎜⎜⎛w11lw21l...wn1lw12lw22l...wn2l…………w1mlw2ml...wnml⎠⎟⎟⎟⎟⎟⎟⎟⎟⎞ 第 ( l − 1 ) (l-1) (l−1)层的输出 a a a组成了一个m×1的向量 a l − 1 a^{l-1} al−1: ( a 1 l − 1 a 2 l − 1 . . . a m l − 1 ) \left( \begin{array}{llll}{a_{1}^{l-1}}\\ \\{a_{2}^{l-1}}\\\\{...}\\\\ {a_{m}^{l-1}}\end{array}\right) ⎝⎜⎜⎜⎜⎜⎜⎜⎜⎛a1l−1a2l−1...aml−1⎠⎟⎟⎟⎟⎟⎟⎟⎟⎞ 第 l l l层的偏置向量 b b b组成了一个n×1的向量 b l b^{l} bl: ( b 1 l b 2 l . . . b n l ) \left( \begin{array}{llll}{b_{1}^{l}}\\ \\{b_{2}^{l}}\\\\{...}\\\\ {b_{n}^{l}}\end{array}\right) ⎝⎜⎜⎜⎜⎜⎜⎜⎜⎛b1lb2l...bnl⎠⎟⎟⎟⎟⎟⎟⎟⎟⎞ 整个过程可以用矩阵和向量进行表示:
( a 1 l a 2 l . . . a n l ) = σ ( ( w 11 l w 12 l … w 1 m l w 21 l w 22 l … w 2 m l . . . . . . … . . . w n 1 l w n 2 l … w n m l ) ( a 1 l − 1 a 2 l − 1 . . . a m l − 1 ) + ( b 1 l b 2 l . . . b n l ) ) \left( \begin{array}{llll}{a_{1}^{l}}\\ \\{a_{2}^{l}}\\\\{...}\\\\ {a_{n}^{l}}\end{array}\right) = \sigma\left(\left( \begin{array}{llll}{w_{11}^{l}} & {w_{12}^{l}} & {\dots} & {w_{1m}^{l}} \\ {w_{21}^{l}} & {w_{22}^{l}} & {\dots} & {w_{2m}^{l}}\\{...} & {...} & {\dots} & {...} \\ {w_{n1}^{l}} & {w_{n2}^{l}} & {\dots} & {w_{nm}^{l}}\end{array}\right)\left( \begin{array}{llll}{a_{1}^{l-1}}\\ \\{a_{2}^{l-1}}\\\\{...}\\\\ {a_{m}^{l-1}}\end{array}\right)+\left( \begin{array}{llll}{b_{1}^{l}}\\ \\{b_{2}^{l}}\\\\{...}\\\\ {b_{n}^{l}}\end{array}\right)\right) ⎝⎜⎜⎜⎜⎜⎜⎜⎜⎛a1la2l...anl⎠⎟⎟⎟⎟⎟⎟⎟⎟⎞=σ⎝⎜⎜⎜⎜⎜⎜⎜⎜⎛⎝⎜⎜⎛w11lw21l...wn1lw12lw22l...wn2l…………w1mlw2ml...wnml⎠⎟⎟⎞⎝⎜⎜⎜⎜⎜⎜⎜⎜⎛a1l−1a2l−1...aml−1⎠⎟⎟⎟⎟⎟⎟⎟⎟⎞+⎝⎜⎜⎜⎜⎜⎜⎜⎜⎛b1lb2l...bnl⎠⎟⎟⎟⎟⎟⎟⎟⎟⎞⎠⎟⎟⎟⎟⎟⎟⎟⎟⎞ 用矩阵的形式表达,即为:
a l = σ ( z l ) = σ ( W l a l − 1 + b l ) a^{l}=\sigma\left(z^{l}\right)=\sigma\left(W^{l} a^{l-1}+b^{l}\right) al=σ(zl)=σ(Wlal−1+bl)
DNN的前向传播算法也就是利用我们的若干个权重系数矩阵 W W W,偏置向量 b b b来和输入值向量 x x x进行一系列线性运算和激活运算,从输入层开始,一层层的向后计算,一直到运算到输出层,得到输出结果为止。
首先我们要明白反向传播算法的定义:
对DNN的损失函数用梯度下降法进行迭代优化求极小值的过程即为我们的反向传播算法。
(此处之后的内容为 2019/6/25 更新 )
为了使数学推导过程更加清晰简洁,我们定义符号表达如下:
根据神经网络的前向传播,有:
对于 l = 1 l=1 l=1,即输入层,有:
z 1 = a 1 = x z^1 = a^1=x z1=a1=x
对于 l = 2 , 3 , 4 , . . . , L l=2,3,4,...,L l=2,3,4,...,L,有:
z j l = ∑ k = 1 k = n l − 1 w j k l a k l − 1 + b j l z_{j}^{l}=\sum_{k=1}^{k=n^{l-1}} w_{j k}^{l} a_{k}^{l-1}+b_{j}^{l} zjl=k=1∑k=nl−1wjklakl−1+bjl
a j l = σ ( z j l ) a_{j}^{l}=\sigma\left(z_{j}^{l}\right)\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\; ajl=σ(zjl)
向量化表达为:
z l = w l a l − 1 + b l a l = σ ( z l ) \begin{aligned} z^{l} &=w^{l} a^{l-1}+b^{l} \\\\ a^{l} &=\sigma\left(z^{l}\right)\end{aligned} zlal=wlal−1+bl=σ(zl)
详细的矩阵表达为:
( a 1 l a 2 l . . . a n l ) = σ ( ( w 11 l w 12 l … w 1 m l w 21 l w 22 l … w 2 m l . . . . . . … . . . w n 1 l w n 2 l … w n m l ) ( a 1 l − 1 a 2 l − 1 . . . a m l − 1 ) + ( b 1 l b 2 l . . . b n l ) ) \left( \begin{array}{llll}{a_{1}^{l}}\\ \\{a_{2}^{l}}\\\\{...}\\\\ {a_{n}^{l}}\end{array}\right) = \sigma\left(\left( \begin{array}{llll}{w_{11}^{l}} & {w_{12}^{l}} & {\dots} & {w_{1m}^{l}} \\ {w_{21}^{l}} & {w_{22}^{l}} & {\dots} & {w_{2m}^{l}}\\{...} & {...} & {\dots} & {...} \\ {w_{n1}^{l}} & {w_{n2}^{l}} & {\dots} & {w_{nm}^{l}}\end{array}\right)\left( \begin{array}{llll}{a_{1}^{l-1}}\\ \\{a_{2}^{l-1}}\\\\{...}\\\\ {a_{m}^{l-1}}\end{array}\right)+\left( \begin{array}{llll}{b_{1}^{l}}\\ \\{b_{2}^{l}}\\\\{...}\\\\ {b_{n}^{l}}\end{array}\right)\right) ⎝⎜⎜⎜⎜⎜⎜⎜⎜⎛a1la2l...anl⎠⎟⎟⎟⎟⎟⎟⎟⎟⎞=σ⎝⎜⎜⎜⎜⎜⎜⎜⎜⎛⎝⎜⎜⎛w11lw21l...wn1lw12lw22l...wn2l…………w1mlw2ml...wnml⎠⎟⎟⎞⎝⎜⎜⎜⎜⎜⎜⎜⎜⎛a1l−1a2l−1...aml−1⎠⎟⎟⎟⎟⎟⎟⎟⎟⎞+⎝⎜⎜⎜⎜⎜⎜⎜⎜⎛b1lb2l...bnl⎠⎟⎟⎟⎟⎟⎟⎟⎟⎞⎠⎟⎟⎟⎟⎟⎟⎟⎟⎞
证明:
取输出层的某一个神经元 a j L a_j^L ajL为例,根据链式法则:
δ j L = ∂ C ∂ z j L = ∂ C ∂ a j L ⋅ ∂ a j L ∂ z j L \delta_{j}^{L}=\frac{\partial C}{\partial z_{j}^{L}}=\frac{\partial C}{\partial a_{j}^{L}} \cdot\frac{\partial a_{j}^{L}}{\partial z_{j}^{L}} δjL=∂zjL∂C=∂ajL∂C⋅∂zjL∂ajL
取 σ ′ ( z j L ) = ∂ a j L ∂ z j L \sigma^{\prime}\left(z_{j}^{L}\right)=\frac{\partial a_{j}^{L}}{\partial z_{j}^{L}} σ′(zjL)=∂zjL∂ajL,可以得到:
δ j L = ∂ C ∂ a j L σ ′ ( z j L ) \delta_{j}^{L}=\frac{\partial C}{\partial a_{j}^{L}} \sigma^{\prime}\left(z_{j}^{L}\right) δjL=∂ajL∂Cσ′(zjL)
如果把输出层的所有神经元写成向量的形式,将 [ ∂ C ∂ a 1 L , ∂ C ∂ a 2 L , … , ∂ C ∂ a m L ] T \left[\frac{\partial C}{\partial a_{1}^{L}}, \frac{\partial C}{\partial a_{2}^{L}}, \ldots, \frac{\partial C}{\partial a_{m}^{L}}\right]^{T} [∂a1L∂C,∂a2L∂C,…,∂amL∂C]T记为 ∇ a C \nabla_{a} C ∇aC,将 [ σ ′ ( z 1 L ) , σ ′ ( z 1 L ) , … , σ ′ ( z m L ) ] T [\sigma^{\prime}(z_1^L),\sigma^{\prime}(z_1^L),\ldots,\sigma^{\prime}(z_m^L)]^T [σ′(z1L),σ′(z1L),…,σ′(zmL)]T记为 σ ′ ( z j L ) \sigma^{\prime}\left(z_{j}^{L}\right) σ′(zjL),即可得到:
δ L = ∂ C ∂ z L = ∇ a C ⊙ σ ′ ( z L ) \delta^{L}=\frac{\partial C}{\partial z^L}=\nabla_{a} C \odot \sigma^{\prime}\left(z^{L}\right) δL=∂zL∂C=∇aC⊙σ′(zL)
证明:
反向传播是从后往前计算的,因此我们在求解 δ l \delta^l δl的时候, δ l + 1 \delta ^{l+1} δl+1是作为已知量看待。于是根据链式法则可得:
δ j l = ∂ C ∂ z j l = ∑ k = 1 n l + 1 ∂ C ∂ z k l + 1 ∂ z k l + 1 ∂ z j l = ∑ k = 1 n l + 1 ∂ z k l + 1 ∂ z j l δ k l + 1 \begin{aligned} \delta_{j}^{l} &=\frac{\partial C}{\partial z_{j}^{l}} \\ &=\sum_{k=1}^{n^{l+1}} \frac{\partial C}{\partial z_{k}^{l+1}} \frac{\partial z_{k}^{l+1}}{\partial z_{j}^{l}} \\ &=\sum_{k=1}^{n^{l+1}} \frac{\partial z_{k}^{l+1}}{\partial z_{j}^{l}} \delta_{k}^{l+1} \end{aligned} δjl=∂zjl∂C=k=1∑nl+1∂zkl+1∂C∂zjl∂zkl+1=k=1∑nl+1∂zjl∂zkl+1δkl+1
如下图所示,其中 n l + 1 n^{l+1} nl+1指的是 l + 1 l+1 l+1层神经元的个数。
另外,我们将 z k l + 1 z_k^{l+1} zkl+1展开可得:
z k l + 1 = ∑ j n l w k j l + 1 a j l + b k l + 1 = ∑ j n l w k j l + 1 σ ( z j l ) + b k l + 1 z_{k}^{l+1}=\sum_{j}^{n^l} w_{k j}^{l+1} a_{j}^{l}+b_{k}^{l+1}=\sum_{j}^{n^l} w_{k j}^{l+1} \sigma\left(z_{j}^{l}\right)+b_{k}^{l+1} zkl+1=j∑nlwkjl+1ajl+bkl+1=j∑nlwkjl+1σ(zjl)+bkl+1
于是,计算 ∂ z k l + 1 ∂ z j l \frac{\partial z_{k}^{l+1}}{\partial z_{j}^{l}} ∂zjl∂zkl+1的值为:
∂ z k l + 1 ∂ z j l = w k j l + 1 ⋅ σ ′ ( z j l ) \frac{\partial z_k^{l+1}}{\partial z_j^l}= w_{kj}^{l+1} \cdot \sigma^{\prime}(z_j^l) ∂zjl∂zkl+1=wkjl+1⋅σ′(zjl)
如下图所示
代入到上面的 δ j l = ∑ k n l + 1 ∂ z k l + 1 ∂ z j l δ k l + 1 \delta _j^l = \sum_{k}^{n^{l+1}}\frac{\partial z_{k}^{l+1}}{\partial z_{j}^{l}} \delta_{k}^{l+1} δjl=∑knl+1∂zjl∂zkl+1δkl+1,可以得到:
δ j l = ∑ k n l + 1 w k j l + 1 δ k l + 1 σ ′ ( z j l ) \delta_{j}^{l}=\sum_{k}^{n^{l+1}} w_{k j}^{l+1} \delta_{k}^{l+1} \sigma^{\prime}\left(z_{j}^{l}\right) δjl=k∑nl+1wkjl+1δkl+1σ′(zjl)
如下图所示
上式向量化表达为:
δ j l = [ w 1 j l + 1 , w 2 j l + 1 , … , w n l + 1 j l + 1 ] [ δ 1 l + 1 δ 2 l + 1 ⋯ δ n l + 1 l + 1 ] σ ′ ( z j l ) \delta_j^l=[w_{1j}^{l+1},w_{2j}^{l+1},\ldots,w_{{n^{l+1}}j}^{l+1}]\left[\begin{array}{c}{\delta_{1}^{l+1}} \\{\delta_{2}^{l+1}}\\ {\cdots} \\ {\delta_{n^{l+1}}^{l+1}}\end{array}\right]\sigma^{\prime}\left(z_{j}^{l}\right) δjl=[w1jl+1,w2jl+1,…,wnl+1jl+1]⎣⎢⎢⎡δ1l+1δ2l+1⋯δnl+1l+1⎦⎥⎥⎤σ′(zjl)
用矩阵形式详细表达为:
( δ 1 l δ 2 l . . . δ n l l ) = ( w 11 l w 12 l … w 1 n l l w 21 l w 22 l … w 2 n l l . . . . . . … . . . w n l + 1 1 l w n l + 1 2 l … w n l + 1 n l l ) T ⋅ ( δ 1 l + 1 δ 2 l + 1 . . . δ n l + 1 l + 1 ) ⊙ σ ′ ( z 1 l z 2 l . . . z n l ) \left( \begin{array}{llll}{\delta_{1}^{l}}\\ \\{\delta_{2}^{l}}\\\\{...}\\\\ {\delta_{n^{l}}^{l}}\end{array}\right) = \left( \begin{array}{llll}{w_{11}^{l}} & {w_{12}^{l}} & {\dots} & {w_{1n^l}^{l}} \\ {w_{21}^{l}} & {w_{22}^{l}} & {\dots} & {w_{2n^l}^{l}}\\{...} & {...} & {\dots} & {...} \\ {w_{n^{l+1}1}^{l}} & {w_{n^{l+1}2}^{l}} & {\dots} & {w_{n^{l+1}n^l}^{l}}\end{array}\right)^T \cdot \left( \begin{array}{llll}{\delta_{1}^{l+1}}\\ \\{\delta_{2}^{l+1}}\\\\{...}\\\\ {\delta_{n^{l+1}}^{l+1}}\end{array}\right)\odot\sigma^\prime\left( \begin{array}{llll}{z_{1}^{l}}\\ \\{z_{2}^{l}}\\\\{...}\\\\ {z_{n}^{l}}\end{array}\right) ⎝⎜⎜⎜⎜⎜⎜⎜⎜⎛δ1lδ2l...δnll⎠⎟⎟⎟⎟⎟⎟⎟⎟⎞=⎝⎜⎜⎛w11lw21l...wnl+11lw12lw22l...wnl+12l…………w1nllw2nll...wnl+1nll⎠⎟⎟⎞T⋅⎝⎜⎜⎜⎜⎜⎜⎜⎜⎛δ1l+1δ2l+1...δnl+1l+1⎠⎟⎟⎟⎟⎟⎟⎟⎟⎞⊙σ′⎝⎜⎜⎜⎜⎜⎜⎜⎜⎛z1lz2l...znl⎠⎟⎟⎟⎟⎟⎟⎟⎟⎞
即可得到:
δ l = ( ( w l + 1 ) T δ l + 1 ) ⊙ σ ′ ( z l ) \delta^{l}=\left(\left(w^{l+1}\right)^{T} \delta^{l+1}\right) \odot \sigma^{\prime}\left(z^{l}\right) δl=((wl+1)Tδl+1)⊙σ′(zl)
证明:
取第 l l l层的某一个神经元的偏置项 b j l b_j^l bjl为例,根据链式法则:
∂ C ∂ b j l = ∂ C ∂ z j l ∂ z j l ∂ b j l = δ j l ⋅ ∂ ( ∑ k = 1 n l − 1 w j k l a k l − 1 + b j l ) ∂ b j l = δ j l \begin{aligned} \frac{\partial C}{\partial b_{j}^{l}} &=\frac{\partial C}{\partial z_{j}^{l}} \frac{\partial z_{j}^{l}}{\partial b_{j}^{l}} \\ &=\delta_{j}^{l}\cdot\frac{\partial \left(\sum_{k=1}^{n^{l-1}} w_{j k}^{l} a_{k}^{l-1}+b_{j}^{l} \right)}{\partial b_j^l}\\&=\delta_j^l\end{aligned} ∂bjl∂C=∂zjl∂C∂bjl∂zjl=δjl⋅∂bjl∂(∑k=1nl−1wjklakl−1+bjl)=δjl
于是,推广之后可得:
∂ C ∂ b l = [ ∂ C b 1 l , ∂ C b 2 l , … , ∂ C b n l l ] T = [ δ 1 l , δ 1 l , … , δ n l l ] T = δ l \frac{\partial C}{\partial b^l}=[\frac{\partial C}{b_1^l},\frac{\partial C}{b_2^l},\ldots,\frac{\partial C}{b_{n^l}^l}]^T =[\delta_1^l,\delta_1^l,\ldots,\delta_{n^l}^l]^T=\delta^l ∂bl∂C=[b1l∂C,b2l∂C,…,bnll∂C]T=[δ1l,δ1l,…,δnll]T=δl
证明:
取第 l − 1 l-1 l−1层到第 l l l层的某一条神经元权重 w j k l w_{jk}^l wjkl为例,根据链式法则:
∂ C ∂ w j k l = ∂ C ∂ z j l ∂ z j l ∂ w j k l = δ j l ⋅ ∂ ( ∑ k = 1 n l − 1 w j k l a k l − 1 + b j l ) ∂ w j k l = δ j l ⋅ a k l − 1 \begin{aligned} \frac{\partial C}{\partial w_{j k}^ l} &=\frac{\partial C}{\partial z_{j}^{l}} \frac{\partial z_{j}^{l}}{\partial w_{j k} ^l} \\ &=\delta_{j}^{l}\cdot\frac{\partial \left(\sum_{k=1}^{n^{l-1}} w_{j k}^{l} a_{k}^{l-1}+b_{j}^{l} \right)}{\partial w_{jk}^l}\\&=\delta_j^l \cdot a_k^{l-1}\end{aligned} ∂wjkl∂C=∂zjl∂C∂wjkl∂zjl=δjl⋅∂wjkl∂(∑k=1nl−1wjklakl−1+bjl)=δjl⋅akl−1
已知矩阵 W l W^l Wl具体为:
W l = ( w 11 l w 12 l … w 1 , n l − 1 l w 21 l w 22 l … w 2 , n l − 1 l . . . . . . … . . . w n l , 1 l w n l , 2 l … w n l , n l − 1 l ) W^l= \left( \begin{array}{llll}{w_{11}^{l}} & {w_{12}^{l}} & {\dots} & {w_{1,n^{l-1}}^{l}} \\\\ {w_{21}^{l}} & {w_{22}^{l}} & {\dots} & {w_{2,n^{l-1}}^{l}}\\\\{...} & {...} & {\dots} & {...} \\\\ {w_{n^{l},1}^{l}} & {w_{n^{l},2}^{l}} & {\dots} & {w_{n^{l},n^{l-1}}^{l}}\end{array}\right) Wl=⎝⎜⎜⎜⎜⎜⎜⎜⎜⎛w11lw21l...wnl,1lw12lw22l...wnl,2l…………w1,nl−1lw2,nl−1l...wnl,nl−1l⎠⎟⎟⎟⎟⎟⎟⎟⎟⎞
因此:
∂ C ∂ W l = ( δ 1 l a 1 l − 1 δ 1 l a 2 l − 1 … δ 1 l a n l − 1 l − 1 δ 2 l a 1 l − 1 δ 2 l a 2 l − 1 … δ 2 l a n l − 1 l − 1 . . . . . . … . . . δ n l l a 1 l − 1 δ n l l a 2 l − 1 … δ n l l a n l − 1 l − 1 ) \frac{\partial C}{\partial W^l}= \left( \begin{array}{llll}{\delta_1^{l}a_1^{l-1}} & {\delta_1^{l}a_2^{l-1}} & {\dots} & {\delta_1^{l}a_{n^{l-1}}^{l-1}} \\\\ {\delta_2^{l}a_1^{l-1}} & {\delta_2^{l}a_2^{l-1}} & {\dots} & {\delta_{2}^{l}a_{n^{l-1}}^{l-1}}\\\\{...} & {...} & {\dots} & {...} \\\\ {\delta_{n^l}^{l}a_1^{l-1}} & {\delta_{n^l}^{l}a_2^{l-1}} & {\dots} & {\delta_{n^l}^{l}a_{n^{l-1}}^{l-1}}\end{array}\right) ∂Wl∂C=⎝⎜⎜⎜⎜⎜⎜⎜⎜⎛δ1la1l−1δ2la1l−1...δnlla1l−1δ1la2l−1δ2la2l−1...δnlla2l−1…………δ1lanl−1l−1δ2lanl−1l−1...δnllanl−1l−1⎠⎟⎟⎟⎟⎟⎟⎟⎟⎞
= ( δ 1 l δ 2 l . . . δ n l l ) ⋅ ( a 1 l − 1 , a 2 l − 1 , … , a n l − 1 l − 1 ) =\left( \begin{array}{llll}{\delta_{1}^{l}}\\ \\{\delta_{2}^{l}}\\\\{...}\\\\ {\delta_{n^{l}}^{l}}\end{array}\right) \cdot \left(a_1^{l-1},a_2^{l-1},\ldots,a_{n^{l-1}}^{l-1}\right) =⎝⎜⎜⎜⎜⎜⎜⎜⎜⎛δ1lδ2l...δnll⎠⎟⎟⎟⎟⎟⎟⎟⎟⎞⋅(a1l−1,a2l−1,…,anl−1l−1)
= δ l ⋅ ( a l − 1 ) T =\delta^l\cdot \left(a^{l-1}\right)^T\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\; =δl⋅(al−1)T
一图看懂神经网络训练流程:
具体分为以下6个步骤:
刘建平Pinard 《深度神经网络(DNN)模型与前向传播算法》
刘建平Pinard 《深度神经网络(DNN)反向传播算法(BP)》
2019/6/25更新的内容,主要参考梯度下降与反向传播(含过程推导及证明)