版权声明:本文为博主原创文章,转载请注明原文出处! https://blog.csdn.net/T_27080901/article/details/82512358
反向传播算法大揭秘
注: 该篇博文是我阅读《How the backpropagation algorithm works》一文的笔记,该博文详细介绍了反向传播算法,并给出了反向传播算法四个基本公式中的前两个证明,我顺着作者的思路证明了后面两个,并记录了证明过程,希望能帮助到需要了解反向传播算法数学原理的童鞋。
符号说明
-
wljk
表示
l−1
层的第
k
个神经元到
l
层的第
j
个神经元连接的权重.
-
blj
表示
l
层的第
j
个神经元的偏置,
alj
表示
l
层的第
j
个神经元作用于激活函数以后的取值.
- 对于
alj
的计算,我们可以使用如下公式计算:
alj=σ(∑kwljkal−1k+blj)
,其中,
σ
表示的是激活函数,求和符号表示的是第
l−1
层的所有神经元与
l
层第
j
个神经元连接的加权和.
- 上式使用矩阵表示则有:
al=σ(wlal−1+bl)
,其中,
wl
表示
l
层的权重矩阵,矩阵的第
j
行第
k
列的元素为
wljk
,类似的,
bl
和
al
用列向量表示第
j
层神经元的偏置和激活值.
- 对于
zl=wlal−1+bl
我们称之为
l
层的加权输出.
- 设推导反向传播过程中的代价函数为
C
.
- 我们使用
⊙
表示两个矩阵对应元素的乘积,即
(s⊙t)i,j=si,j⋅ti,j
,称之为Hadamard乘积.
反向传播的四个基本公式
反向传播过程中的四个基本公式:
δL=∇aC⊙σ′(zL)(BP1)
δl=((wl+1)Tδl+1)⊙σ′(zl)(BP2)
∂C∂blj=δlj(BP3)
∂C∂wljk=al−1kδlj(BP4)
反向传播算法
- 输入
x
:输入层的激活值
a1
可以假定就是其输入
x
- 前向传播:对于
l=2,3,⋯,L
,依次通过
zl=wlal−1+bl
和
al=σ(zl)
公式进行计算激活值
- 计算最终输出误差
δL
:通过公式计BP1算误差向量
- 反向误差传播:对于
l=L−1,L−2,⋯,2
,使用公式分BP2别计算每层神经元对应的误差
- 更新权重和增益:根据代价函数的梯度更新权重和增益,如公式BP3和BP4所示
推导过程
下面我们来进行公式的推导
对于公式BP1的推导
设最后一层
L
的第
j
个神经元的误差是
δLj=∂C∂zLj(1)
通过链式法则,我们可以得到
δLj=∂C∂aLj∂aLj∂zLj(2)
将
alj=σ(zLj)
带入可得
δLj=∂C∂aLjσ′(zLj)(3)
公式BP1即是上式的矩阵形式
对于公式BP2的推导
对于
l
层的第
j
个神经元,我们使用链式法则有:
δlj=∂C∂zlj=∑k∂C∂zl+1k∂zl+1k∂zlj=∑k∂zl+1k∂zljδl+1k(4)
此外,我们有
zl+1k=∑jwl+1kjalj+bl+1k=∑jwl+1kjσ(zlj)+bl+1k(5)
对上式微分,得
∂zl+1k∂zlj=wl+1kjσ′(zlj)(6)
带入公式4,可得
δlj=∑kwl+1kjδl+1kσ′(zlj)(7)
对于公式BP3的推导
对于
l
层的第
j
个神经元,我们使用链式法则有:
∂C∂bLj=∂C∂zlj∂zlj∂blj(8)
由于
∂zlk∂blj
恒等于1,所以有
∂C∂bLj=∂C∂zlj=δlj(9)
对于公式BP4的推导
因为
zlj=∑kwljkal−1k+bl+1j
,取导数有
∂zlj∂wljk=al−1k(10)
对于
l
层的第
j
个神经元,我们使用链式法则有:
∂C∂wljk=∂C∂zlj∂zlj∂wljk(11)
将
δlj=∂C∂zlj
和
∂zljk∂wljk=al−1k
带入公式11,得
∂C∂wljk=δljal−1k(12)
终于,推导完毕!