依照个人口味做了剔除),依据个人口味做了去除)澳门正规网上娱乐

(本文是基于
neuralnetworksanddeeplearning
那本书的第五章Why are deep neural networks hard to
train?

整理而成的读书笔记,依据个人口味做了删除)

(本文是依据
neuralnetworksanddeeplearning
那本书的第二章How the backpropagation algorithm
works
收拾而成的读书笔记,依照个人口味做了剔除)

在头里的笔记中,大家曾经学习了神经互联网最中央的 BP
算法,以及部分更上一层楼的方案(如:引进交叉熵函数)来增加互连网磨炼的进程。但假使仔细思索会发掘,前边例子中的互联网都很「浅」,最多就一八个隐藏层,而一旦网络层数扩展,有诸多难点将不可防止地爆出出来。明日,大家就来认知八个最蛋疼的主题材料:深度神经网络极度难训练。

在上一章的读书中,我们介绍了神经互连网能够用梯度下落法来陶冶,但梯度的计量方法却从不交给。在本章中,我们将学习一种总计神经网络梯度的法子——后向传来算法(backpropagation)。

互联网越深效果越好

近几年的钻探已经申明,网络的层数越深,模型的表明才具就越强。在图像识别中,网络的率先层学会怎么着鉴定识别边缘,第二层在第一层的底子上学会怎么辨别更复杂的造型,如三角形等,然后第三层又持续在第二层的底蕴上学会辨别出更目眩神摇的形状。如此往复,最终互联网便学会辨别出更加高端的语义消息。那也是为啥深度学习近几年能获取突破的,因为吃水神经网络的表明本事实在太强了。

不过,在磨炼深度神经网络的进度中,大家也遇到三个严重的难点:当后边层的互连网飞速磨炼时,前面层的互连网却「僵住」了,参数不再更新;一时候,事情又恰恰相反,前边层的网络陶冶快捷,前边层的网络却未有了。

通过本节的求学,大家将领会那总体背后的深层原因。

backpropagation 算法起源于上个世纪 70 时期,但一直到
Hinton 等人在 一九九〇年见报的那篇知名论文后才初叶境遇关切。BP
算法使得神经网络的教练进度高速升高,由此它是上学神经互连网的重中之重。

未有的梯度

沿袭在此之前 MNIST 的例证,我们先做几组实验,来探视如何是梯度消失。

这几组实验中,大家的网络布局分别如下:

net = network2.Network([784, 30, 10])
net = network2.Network([784, 30, 30, 10])
net = network2.Network([784, 30, 30, 30, 10])
net = network2.Network([784, 30, 30, 30, 30, 10])

那几个网络的唯一差别是,每七个互联网都比前边的多了三个包蕴 叁拾肆个神经元的隐藏层。实验中,其余参数,包涵磨练多少完全一致。在 MNIST
数据集上,得出那多少个试验的正确率分别为:96.三分之二,96.80%,96.三分之一,96.四分之一。

看得出来,第一个网络陶冶的结果比首个好有的,但当隐藏层继续加码时,效果反而下落了。那让大家很好奇,不是说互联网层数越深,效果越可以吗?况且,尽管中间的网络什么都并没有上学到,也总不至于其负功能吧。

为了越发询问背后的原委,我们计划追踪一下网络的参数,确认网络是或不是真正得报到并且接受集操练。

简单的讲起见,我们解析一下一次之个网络 ([784, 30, 30, 10])
中多少个隐藏层的梯度。下图演示了当陶冶开首时,那多个层里面各类神经元的梯度值,为了便利,只选用了前七个神经元:

澳门正规网上娱乐 1

图中神经细胞上的柱状图表示梯度值 \(\partial C/
\partial b\),在 BP
八个公式中,大家知晓:\(\frac{\partial C}{\partial
b_j^{l}}=\delta_j^l \tag{BP3}\) \(\frac{\partial C}{\partial
w_{jk}^{l}}=a_{k}^{l-1}\delta_{j}^{l} \tag{BP4}\)

因此,柱状图表示的不外乎是偏向 bias 的梯度外,也可以有个别能够反应权重 weights
的梯度。

是因为权重的初步化是随机的,所以每一种神经元的梯度都有所不相同,可是很显然的一点是,第
2 个隐藏层的梯度总体上比第 1
个隐藏层要大,而梯度越大,学习进程也针锋绝对的越快。

为了商量那是或不是是偶尔(恐怕这两层中前面包车型客车神经元会差别吧),大家决定用二个大局的梯度向量
\(\delta\)
来比较那多少个隐藏层参数的总体梯度情状。我们定义 \(\delta_j^l=\partial C/ \partial
b_j^l\),所以您能够把 \(\delta\)
看作是上海体育场面中全数神经元梯度的向量。大家用向量尺寸 \(||\delta^i||\) 来代表每 i
个隐藏层的上学进度。

当唯有多个隐藏层时(即上海体育场地),\(||\delta^1||=0.07\)、\(||\delta^2||=0.31\),那更是求证了:第二个隐藏层的学习率高于首个隐藏层。

设若有多个隐藏层呢?结果是:\(||\delta^1||=0.012\)、\(||\delta^2||=0.060\)、\(||\delta^3||=0.283\)。一样的,前边的隐藏层学习进程都比前面包车型客车要高级中学一年级些。

有人大概会说,以上的梯度都是在刚开端磨练后某些时刻总计得到的,在网络磨炼进程中,这几个梯度又是还是不是会更加的提高呢?为掌握答那个主题材料,大家总结出事后越多轮学习后的梯度,并绘制成上边包车型大巴曲线图:

澳门正规网上娱乐 2

澳门正规网上娱乐 3

澳门正规网上娱乐 4

同理可得地是,不管隐藏层有些许,前面层的学习进度都比前一层要高 5 到 10
倍,这样一来,第三个隐藏层的上学进程以致唯有最终一层的百分之一,当背后的参数正大踏步陶冶的时候,前边层的参数就着力停滞了。这种情景,就称为梯度消失。梯度消失并不代表互连网已经趋于收敛,因为在施行中,大家特地在练习起先时总结出了梯度,对于七个参数随机开首化的网络,要想在刚发轫时就让互连网趋于收敛,这大致是不容许的,因此大家以为梯度消失并不是互联网未有引起的。

除此以外,随着研讨深切,我们也会发觉,有时候前面层的梯度就算尚未未有,但却变得极大,大概是后边层的数不清倍,导致出现了
NaN,简直「爆炸」了。对于这种状态,大家又叫做梯度爆炸

任凭是梯度消失照旧爆炸,都以大家不愿见到的。上边大家供给进一步斟酌这种现象时有产生的来由,并想方法消除它。

热身:一种基于矩阵的立刻计算神经网络输出的方法

在开首批评 BP
算法以前,大家先想起一种基于矩阵方式的计量神经网络输出的主意。

先是,引进多少个标记表示。

假设 \(w_{jk}^{l}\) 表示从第 l-1
层的第 k 个神经元到第 l 层的第 j 个神经元的权值,如下图所示。

澳门正规网上娱乐 5

假设 \(b_{j}^{l}\) 表示 l 层第 j
个神经元的差错,\(a_{j}^{l}\) 表示 l
层第 j 个神经元的激活层,如下图所示:

澳门正规网上娱乐 6

有了那一个标志,第 l 层的第 j 个神经元的激活层 \(a_{j}^{l}\) 就足以和 l-1
层的激活层关联起来:
\[ a_{j}^l =
\sigma(\sum_{k}{w_{jk}^{l}a_{k}^{l-1}+b_{j}^{l}}) \tag{23}
\]
其中,\(\sigma()\)
是一个激活函数,譬喻 sigmoid 函数之类的。

当今,为了方便书写,大家为每一层定义叁个权值矩阵 \(W^l\),矩阵的各种成分对应上面提到的 \(w_{jk}^{l}\)。类似地,咱们为每一层定义一个不是向量
\(b^l\) 以及多个激活层向量 \(a^l\)。

然后,大家将公式 (23) 表示成矩阵的款式:
\[ a^l=\sigma(W^la^{l-1}+b^l) \tag{25}
\]
小心,这里我们对 \(\sigma()\)
函数做了点延伸,当输入参数是向量时,\(\sigma()\)
会各个效率到向量的每一个成分上(elementwise)。

在 (25) 式中,不常为了书写的方便人民群众,大家会用 \(z^l\) 来表示 \(W^la^{l-1}+b^l\)。下文中,\(z^l\) 将会反复出现。

梯度消失的原故

这一节,我们来查究一下:为啥网络的梯度会熄灭?或许说,为何深度神经网络的梯度会如此不平稳。

简轻易单起见,大家来剖判一个只有二个神经元的互连网:

澳门正规网上娱乐 7

\(b\) 和 \(w\) 表示参数,\(C\) 是代价函数,激活函数选取sigmoid,每层互连网的输出为 \(a_j=\sigma(z_j)\),\(z_j=w_ja_{j-1}+b_j\)。

上边,大家供给出 \(\partial C/\partial
b_1\),看看是何许来头促成那几个值极小。

依附 BP 的公式能够生产:

澳门正规网上娱乐 8

以此公式看起来有一点比较复杂,不急,大家来看看它是怎么来的。由于网络特别归纳(只有一条链),所以大家打算从另叁个更形象的角度来生产这些姿势(BP
也是一点一滴能够生产该姿势的)。

假诺有二个增量 \(\Delta b_1\)
出现,由于 \(a_1=\sigma(z_1)=\sigma(w_1a_0+b_1)\),可以推出:

\(\Delta a_1 \approx \frac{\partial
\sigma((w_1\ a_0+b_1)}{\partial b_1} \Delta
b_1=\sigma'(z_1)\Delta b_1\)(注意 \(\Delta a_1\) 不是导数,而是由 \(\Delta b_1\) 引起的增量,所以是斜率乘以
\(\Delta b_1\))。

然后一发的,\(\Delta a_1\)
又会唤起 \(z_2\) 的变化,根据 \(z_2=w_2 a_1+b_2\) 能够吸收:

\(\Delta z_2 \approx \frac{\partial
z_2}{\partial a_1}\Delta a_1=w_2 \Delta a_1\)。

将之前 \(\Delta a_1\)
的公式代入上式就足以拿走:

\(\Delta z_2 \approx \sigma'(z_1)w_2
\Delta b_1\)。

可以旁观,这几个姿势和大家最开端的架子已经很相像了。之后,大家依葫芦画瓢不断将来总计,就足以获取
\(C\) 的增量:

\(\Delta C \approx \sigma'(z_1)w_2
\sigma'(z_2) \ldots \sigma'(z_4) \frac{\partial C}{\partial
a_4} \Delta b_1 \tag{120}\)

除以 \(\Delta b_1\)
后,就足以获得最起始的等式:

\(\frac{\partial C}{\partial b_1} =
\sigma'(z_1) w_2 \sigma'(z_2) \ldots\sigma'(z_4)
\frac{\partial C}{\partial a_4}.\tag{121}\)

代价函数的多个前提即使

BP 算法的对象是要总括偏导数 \(\partial
C\)/\(\partial w\) 和 \(\partial C\)/\(\partial b\),要让 BP
算法起效果,我们须要八个前提假若:

  1. 代价函数能够表示成 \(C=\frac{1}{n}\sum_{x}{C_x}\),其中
    \(C_x\) 是各类练习样本 x
    的代价函数。
  2. 代价函数用神经网络的出口作为函数的输入:

澳门正规网上娱乐 9

干什么梯度会消亡

有了地点这一个姿势做铺垫,你是否已经猜出了梯度消失的缘故。没有错,就跟 \(0.9^n \approx 0\) 道理同样。

率先,大家回看一下 \(\sigma'()\)
函数的图像:

澳门正规网上娱乐 10

其一函数最大值才 54%。加上大家的参数 \(W\) 是基于均值为 0,标准差为 1
的高斯布满开始化的,即 \(|w_j|<1\) ,所以\(|w_j
\sigma'(z_j)<1/4|\)。那些项累乘起来,最终的结果就能够更为小。再小心看下边那幅图,由于分裂隐藏层的导数累乘的数额差异,由此相应的梯度也就有了音量之分。

澳门正规网上娱乐 11

如上的推理即便不是很规范,但它曾经足足申明难题的发源。

梯度爆炸的难题这里就不再赘述了,原理和梯度消失同样,当每一类的值都大于 1
时,累乘起来就能够变得比一点都不小。

记念在在此之前的学学笔记的最终,小编一度提议二个主题素材:即使交叉熵函数化解了网络学习进程降低的标题,但它针对的只是最终一层,对于眼下的隐藏层,学习进程还是或者下滑。作者以前之所以避而不见这一个标题,是因为以前针对的网络层数都异常少,而本文中也已经展现地址出并解析了难题的根源。

BP 算法背后的多个主导公式

BP 算法本质上是为了总括出 \(\partial
C\) / \(\partial
w_{jk}^{l}\) 和 \(\partial
C\) / \(\partial
b_{j}^{l}\)。为了总计那三个导数,我们引进三当中档变量 \(\delta_{j}^{l}\),这么些个中变量表示第 l
层第 j 个神经元的误差。BP
算法会计算出那一个误差,然后用它来测算\(\partial C\) / \(\partial w_{jk}^{l}\) 和 \(\partial C\) / \(\partial b_{j}^{l}\)。

\(\delta_{j}^{l}\) 被定义为:
\[ \delta _{j}^{l}=\frac{\partial
C}{\partial z_{j}^{l}} \tag{29} \]
本条定义来源于那样一个真情:代价函数 \(C\) 能够作为是有关 \(z\) 的函数,而 \(z\) 是 \(W\) 和 \(b\)
的线性组合(考虑到代价函数的多少个前提固然,\(C\) 是有关互联网出口 \(a\) 的函数,而 \(a\) 又是 \(z\) 的函数,所以 \(C\) 也得以作为是 \(z\)
的函数)。其实,大家也得以将它定义为:\(\delta_{j}^{l}=\frac{\partial C}{\partial
a_{j}^{l}}\)(\(a\)
是神经网络某一层的输出),但这么会招致随后的测算十一分复杂,所以,大家仍旧封存原来的定义。

BP 算法基于 4 个基本公式,这么些公式会告知大家怎么着总结 \(\delta^{l}\) 和代价函数的梯度。

复杂网络中的梯度一样不安静

上面的事例中大家只是用了三个简易的例子来解释原因,在更复杂的网络中,我们还能够用类似的办法解释梯度的不安宁现象。

举个例子,对于下面这几个纷纷的互联网:

澳门正规网上娱乐 12

咱俩得以依据 BP 公式推出:
\[ \begin{eqnarray} \delta^l =
\Sigma'(z^l) (w^{l+1})^T \Sigma'(z^{l+1}) (w^{l+2})^T \ldots
\Sigma'(z^L) \nabla_a C \tag{124}\end{eqnarray} \]
这里面,\(\Sigma'(z^l)\)
是对角矩阵,矩阵对角线上的因素由 \(\sigma'(z)\) 的值构成。\(\nabla_a C\) 则是由 \(C\) 对 输出层求偏导后得来的向量。

其一姿势固然非常多,但款式上依然是同样的,最终矩阵相乘的群集效应依然会导致梯度消失或许爆炸。

输出层固有误差 \(\delta^{L}\)的总计公式

\[ \delta_{j}^{L}=\frac{\partial
C}{\partial z_{j}^{L}}=\frac{\partial C}{\partial
a_{j}^{L}}\sigma'(z_{j}^{L}) \tag{BP1} \]

其一公式是最直接的,只须要领悟 \(a^{L}=\sigma(z^{L})\),然后依据链式法则就能够获得。

为了更加好地选拔矩阵运算,咱们改造一下上面式子的花样:
\[ \delta^{L}=\nabla_a C \odot
\sigma'(z^L). \tag{BP1a} \]
其中,\(\odot\) 表示 elementwise
运算,而 \(\nabla_a C\) 可以看成是
\(\partial C / \partial
a_{j}^{L}\) 组成的向量。

比如,若是 \(C=\frac{1}{2}\sum_{j}{(y_j –
a_{j}^{L})}^2\),则 \(\partial C /
\partial a_{j}^{L}=\begin{bmatrix} \partial C / \partial a_0^l
\\ \partial C / \partial a_1^l \\ \vdots \\ \partial C /
\partial a_n^l \end{bmatrix}=(a_{j}^{L}-y_j)=\begin{bmatrix}
a_0^l-y_0 \\ a_1^l-y_1 \\ \vdots \\ a_n^l-y_l
\end{bmatrix}\),那么公式(BP1)能够象征成:\(\delta^{L}=(a_{L}-y) \odot
\sigma'(z^L)\)。

纵深学习的别样障碍

固然这一章中大家只是提到梯度不牢固的标题,但事实上,有无数探讨显示:深度学习同样存在大多别的的拦Land Rover。

比方:激活函数的选项会潜移默化网络的上学(参见诗歌:Understanding the
difficulty of training deep feedforward neural
networks
)。

又比方:参数的开始化也会影响互联网的教练(参见杂谈:On the importance of
initialization and momentum in deep
learning
)。

足见,关于深度神经互联网的教练障碍,近来依旧贰个繁杂的标题,须求更进一步的商讨。在下一章中,大家将承接学习有个别深度学习的情势,那么些点子在某种程度上,能够征服深度神经网络的这一个学习障碍。

\(\delta^L\)与\(\delta^{L+1}\)的总括公式

\[ \delta^L=((w^{l+1})^T\delta^{l+1})
\odot \sigma'(z^l) \tag{BP2} \]

近些日子公式 (BP1) 能够让我们计算出终极输出层 \(\delta^L\) 的值,而 (BP2)
那几个公式能够依据最终一层的测量误差,稳步向前传递总计前边输出层的 \(\delta^L\) 值。

参考

bias 的导数计算公式

\[ \frac{\partial C}{\partial
b_j^{l}}=\delta_j^l \tag{BP3} \]

其一公式评释,第 l 层偏差 bias 的导数和第 l 层的抽样误差值相等。

权重 W 的导数总括公式

\[ \frac{\partial C}{\partial
w_{jk}^{l}}=a_{k}^{l-1}\delta_{j}^{l} \tag{BP4} \]

同理,那几个公式揭表露权重 W
的导数和标称误差以及网络出口之间的涉及。用一种更简明的办法意味着为:
\[ \frac{\partial C}{\partial w} =
a_{in}\delta_{out} \tag{32} \]
其中,\(a_{in}\) 是权重 \(W\) 的输入,而 \(\delta_{out}\) 是权重 \(W\) 对应的 \(z\) 的误差。用一幅图表示如下:

澳门正规网上娱乐 13

公式 (32) 一个很好的机能是:当 \(a_{in}
\approx 0\) 时,梯度公式的值会比一点都不大,换句话说,当权重 \(W\) 的输入 \(a_{in}\),约等于上一层激活层的出口接近 0
时,那么这么些激活层对网络的震慑就变得十分的小,\(W\) 的求学也会变得相当的慢。

有的启示(insights)

依靠地点四个公式,可以发掘,当最后输出层的导数 \(\sigma'(z^L)\)
变的非常的小时(即网络本人已经周边收敛),权重 \(W\) 和偏差 \(b\) 会慢慢甘休学习(因为固有误差 \(\delta\) 渐渐趋向 0)。

自然,不单单是最终一层会潜移默化学习进度,依照公式 (BP2),在那之中间层的导数
\(\sigma'(z^l)\) 也开始趋于 0
时,那么上一层的标称误差 \(\delta^l\)
也会趋于 0,从而产生上一层权重 \(W\)
和偏差 \(b\) 的学习也会起来结束。

总之,当 \(W\) 的输入 \(a\) 变的十分的小照旧输出层 \(\sigma(z^l)\)
收敛时,网络权值的训练将会变得比一点也不快。

亟待注意的少数是,这八个公式的推理适用于任何激活函数。因而,我们一同能够用其它函数来代表
\(sigmoid()\)。比方,大家得以设计二个函数
\(\sigma()\),这个函数的导数 \(\sigma'()\) 恒久为正,且 \(\sigma()\) 函数值永久不会接近0,那么就能够幸免下边提到的上学结束的难点。

最终,总计一下 BP 的 4 个大旨公式:

澳门正规网上娱乐 14

个体对于标称误差以及 BP 的知晓

依靠测量误差 \(\delta\)
的概念,简单开采,它实质上正是代价函数关于参数 \(W\) 和 \(b\)
的直接导数,这点跟第一章中对梯度的定义是一模一样的。当 \(\delta\)
越大时,证明互连网还远未有未有,即网络的「标称误差」还相当的大,因而必要学习越多,反之,则表明网络的「零值误差」十分的小,学习能够告一段落了。

互联网中每一层的固有误差都急需注重前一层的相对误差进行测算,那几个历程实际上是一个导数的附加进程,能够感到地感觉,整个神经互连网其实是由三个个函数复合在共同产生的,由此,导数的乘除其实便是链式法则的不唯有使用,前边层神经元的导数须求前边层神经元导数不断叠合,这几个进程就整合了后向传播算法。

公式求证

BP1

公式 (BP1) 的表达是极度简约的,然而要求习贯向量或矩阵的 elementwise
的求导格局。

咱俩假如 \(C=f(\sigma(z^L))=f(\sigma(z_0^L),
\sigma(z_1^L), \cdots, \sigma(z_n^L))\),根据定义 \(\delta_j^L=\frac{\partial C}{\partial
z_j^L}\),由于 \(z_j^L\)
只跟 \(a_j^L\)
相关,于是大家用链式法则能够赢得(能够画个互联网图支持掌握):
\[ \delta_j^L=\frac{\partial
f}{\partial \sigma(z_j^L)}\frac{\partial \sigma(z_j^L)}{\partial
z_j^L}=\frac{\partial C}{\partial a_j^L}\frac{\partial
a_j^L}{\partial z_j^L} \tag{38} \]
其中,\(a_j^L=\sigma(z_j^L)\),大家也足以将它表示成另一种样式:
\[ \delta_j^L=\frac{\partial
C}{\partial a_j^L}\sigma'(z_j^L) \tag{39} \]
上式便是 BP1 的款型了。

BP2

BP2 要求用到后一层总计出来的 \(\delta^{l+1}\),由此,我们先根据 BP1
得出:\(\delta_k^{l+1}=\frac{\partial
C}{\partial z_k^{l+1}}\)。

由 \(\delta_k^{l}=\frac{\partial
C}{\partial z_k^l}\) 和 \(C=f(\sigma(z_0^L), \sigma(z_1^L), \cdots,
\sigma(z_n^L))\) 能够获得:
\[ \begin{eqnarray} \delta_j^{l} & = &
\frac{\partial C}{\partial z_0^{l+1}}\frac{\partial
z_0^{l+1}}{\partial z_j^{l}}+\cdots+\frac{\partial C}{\partial
z_n^{l+1}}\frac{\partial z_n^{l+1}}{\partial z_j^{l}} \notag \\
& = & \sum_k{\frac{\partial C}{\partial z_k^{l+1}}\frac{\partial
z_k^{l+1}}{\partial z_j^j}} \notag \\ & = & \sum_k
\delta_k^{l+1}\frac{\partial z_k^{l+1}}{\partial z_j^{l}}
\tag{42} \end{eqnarray} \]

咱俩还要更进一步寻觅 \(z_k^{l+1}\) 和
\(z_k^{l}\)
之间的关系。依据前向传来,能够拿走:
\[
z_k^{l+1}=\sum_j{w_{kj}^{l+1}a_j^l+b_k^{l+1}}=\sum_j{w_{kj}^{l+1}\sigma(z_j^l)+b_k^{l+1}}
\tag{43} \]
随之能够获得:
\[ \frac{\partial z_k^{l+1}}{\partial
z_j^l}=w_{kj}^{l+1}\sigma'(z_j^l) \tag{44} \]

将式 (44) 代入 (42) 得:
\[
\delta_j^l=\sum_k{w_{kj}^{l+1}\sigma'(z_j^l)\delta_k^{l+1}}=\sigma'(z_j^l)\sum_k{w_{kj}^{l+1}\delta_k^{l+1}}
\tag{45} \]
代表成矩阵的形式便是:
\[ \delta^L=((w^{l+1})^T\delta^{l+1})
\odot \sigma'(z^l) \]
即 BP2 的公式,注意矩阵的转置运算。

BP3

\[ z_j^l=\sum_k{W_{jk}^l
a_k^{l-1}}+b_j^l \]

\[ \frac{\partial z_j^l}{\partial
b_j^l}=1 \]

\[ \frac{\partial C}{\partial
b_j^l}=\frac{\partial C}{\partial z_j^l}\frac{\partial
z_j^l}{\partial b_j^l}=\frac{\partial C}{\partial
z_j^l}=\delta_j^l \]

BP4

表达进程同 BP3:
\[ z_j^l=\sum_k{W_{jk}^l
a_k^{l-1}}+b_j^l \]

\[ \frac{\partial z_j^l}{\partial
W_{jk}^l}=a_k^{l-1} \]

\[ \frac{\partial C}{\partial
W_{jk}^l}=\frac{\partial C}{\partial z_j^l}\frac{\partial
z_j^l}{\partial W_{jk}^l}=\frac{\partial C}{\partial
z_j^l}a_k^{l-1}=\delta_j^la_k^{l-1} \]

后向传来算法(BP)

  1. Input x: Set the corresponding activation class=”math inline”>\(a^1\) for the input layer.
  2. Feedforward: For each l = 2, 3, …, L compute class=”math inline”>\(z^l=w^la^{l-1}+b^l\) and class=”math inline”>\(a^l=\sigma(z^l)\).
  3. Output error \(\delta^L\):
    Compute the vector class=”math inline”>\(\delta^L=\nabla_a C \odot
    \sigma'(z^L)\).
  4. Backpropagate the error: For each l = L-1, L-2, …, 2 compute
    \(\delta^l=((W^{l+1})^T \delta^{l+1})
    \odot \sigma'(z^l)\).
  5. Output: The gradient of the cost function is given by class=”math inline”>\(\frac{\partial C}{\partial
    w_{jk}^l}=a_k^{l-1}\delta_j^{l}\) and class=”math inline”>\(\frac{\partial C}{\partial
    b_j^l}=\delta_j^l\).

上述算法是对准二个磨练样本进行的,实操中,日常是用随便梯度降低算法,用多少个样本进行陶冶,由此大家将算法略微修改如下:

  1. Input a set of training examples
  2. For each training example x: Set the corresponding input
    activation \(a^{x, 1}\), and
    perform the following steps:
  • Feedforward: For each l = 2, 3, …, L compute class=”math inline”>\(z^{x, l}=w^la^{x, l-1}+b^l\) and
    \(a^{x, l}=\sigma(z^{x,l})\).
  • Output error \(\delta^{x,
    L}\): Compute the vector class=”math inline”>\(\delta^{x, L}=\nabla_a C_x \odot
    \sigma'(z^{x,L})\).
  • Backpropagate the error: For each l = L-1, L-2, …, 2 compute
    \(\delta^{x,l}=((W^{l+1})^T
    \delta^{x,l+1}) \odot \sigma'(z^{x,l})\).
  1. Gradient descent: For each l = L, L-1, …, 2 update the weights
    according to the rule \(W^l
    \rightarrow W^l-\frac{\eta}{m} \sum_x
    \delta^{x,l}(a^{x,l-1})^T\), and the biases according to
    the rule \(b^l \rightarrow b^l –
    \frac{\eta}{m} \sum_x{\delta^{x,l}}\).

参考