Deep Learning|神经网络原理学习笔记(8) :玩转反向传播——反向传播四个基本方程(1)输出层误差方程与误差的跨层表示

好久没更,说一下反向传播的四个基本方程。
第八篇了,我发现写博客夹带私货的能力倒是强了不少。
今天夹带一个日文歌(搜网易云):
歌手:she Her Her Hers
歌名:Episode 33
Deep Learning|神经网络原理学习笔记(8) :玩转反向传播——反向传播四个基本方程(1)输出层误差方程与误差的跨层表示
❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤分割线

反向传播本质上是表现了权重和偏置的变化如何影响了代价函数。终极意义是计算代价函数的两个偏导:C/ωjkl\partial C/\partial \omega_{jk}^{l}C/bjkl\partial C/\partial b_{jk}^{l}

1 误差δjl\delta_{j}^{l}

1.1 δjl\delta_{j}^{l}的引入

为了计算以上两个偏导数,需要先引入一个中间量δjl\delta_{j}^{l},这个中间量的含义我们暂且定为在第ll层上,第jj个神经元上的误差。反向传播就是在不断计算这个误差,并将误差和两个偏导数的计算相连接。

1.2 δjl\delta_{j}^{l}如何定义

假设现在在神经网络上有个捣蛋鬼,它会在神经网络的计算上捣乱。当输入层有数据输入时,小鬼捣乱会导致一个很小的变化,以第ll层上,第jj个神经元上的为例,这个变化出现在带权输入上,称为:Δzjl\Delta z_{j}^{l}。这个神经元本来的输出是σ(zjl)\sigma (z_{j}^{l}),现在变成了σ(zjl+Δzjl)\sigma (z_{j}^{l}+\Delta z_{j}^{l}),这种变化会不断向后传播,最终代价会产生C/zjlΔzjl\partial C/\partial z_{j}^{l}\Delta z_{j}^{l}增量
Deep Learning|神经网络原理学习笔记(8) :玩转反向传播——反向传播四个基本方程(1)输出层误差方程与误差的跨层表示
因为利用这个改变会对最终的代价产生影响,那么就有一种想法,可以利用这个误差量来减少代价,让这个误差将功补过。
假设C/zjl\partial C/\partial z_{j}^{l}值很大,那么我们让Δzjl\Delta z_{j}^{l}为负的话,就可以让上面所述增量为负值。代价函数加上一个负值,等于减小了代价函数。
这里认为C/zjl\partial C/\partial z_{j}^{l}就是神经元产生误差的度量。
因此,可以认为第ll层上,第jj个神经元上的误差为:
δjl=C/zjl\delta_{j}^{l}=\partial C/\partial z_{j}^{l}

2 反向传播四个方程

这些方程会给我们提供一种计算误差和代价函数梯度的方法。

2.1 方程1:输出层误差方程

根据上面说的δL\delta_{}^{L}的定义,有结合**函数可知,有这样的关系:
Deep Learning|神经网络原理学习笔记(8) :玩转反向传播——反向传播四个基本方程(1)输出层误差方程与误差的跨层表示
Deep Learning|神经网络原理学习笔记(8) :玩转反向传播——反向传播四个基本方程(1)输出层误差方程与误差的跨层表示
上面式子相乘的第一项表示代价随着第jj个输出**值得变化而变化的速度,第二项表示zjlz_{j}^{l}处**函数变化的速度。
上式我们称之为(BP1)式。其中涉及到的量都比较好计算,在给定代价函数的情况下,计算C/zjl\partial C/\partial z_{j}^{l}就很容易。
如果将(BP1)式用矩阵重新写,将写成:
Deep Learning|神经网络原理学习笔记(8) :玩转反向传播——反向传播四个基本方程(1)输出层误差方程与误差的跨层表示
Hadamard乘积的左边部分被定义为一个向量,其中元素为偏导数C/zjL\partial C/\partial z_{j}^{L},这部分也可以看做是代价关于输出**值的梯度。

2.2 方程2:误差的跨层表示

方程2表示为:
Deep Learning|神经网络原理学习笔记(8) :玩转反向传播——反向传播四个基本方程(1)输出层误差方程与误差的跨层表示
其中:(ωl+1)T(\omega ^{l+1})^{T}表示第l+1l+1层权重矩阵的转置。这里就是反向传播的原因了,乘上权重矩阵我们可以认为是正向传播,那么乘上权重矩阵的转置,就可以直觉的看做是沿着网络反向移动误差,再进行Hdamard成绩运算。即利用l+1l+1层的误差反向传递得到ll层带权输入的误差。

2.3 方程1与方程2的作用

通过组合方程1和方程2,我们可以得到任何层的误差δl\delta_{}^{l}。方程1用来计算最后一层的误差,再不断利用方程2得到从最后一层往前每一层的误差,一步一步知道反向转播完整个网络。