深度学习笔记(二):backpropagation算法

backpropagation算法原理


Backpropagation核心解决的问题: ∂C/∂w 和 ∂C/∂b 的计算, 针对cost函数C

深度学习笔记(二):backpropagation算法

ω243:表示第从第(3-1)层的的第4个神经元到第3层的第2个神经元的权重weight

深度学习笔记(二):backpropagation算法

b32:表示第2层的第3个神经元的偏向bais


正向传播

公式:
αjl=σ(kωjklαkl1+bjl)

分为两步:
1. ωα+b 加权求和
2. 对加权求和整体使用sigmoid函数求出下层的输出值

数据结构

对于每一层(l),定义一个权重矩阵 (weight matrix):ωl,这个权重矩阵包含当前层的所有神经元到前一层的所有神经元的权重

ωjkl:表示第从第l层的的第j个神经元到第l-1层的第k个神经元的权重weight

对于每一层(l),定义一个偏向向量(bais vector):bl

bjl则表示l层的第k个神经元的bais

同理,对于α:l层的神经元向量αl,每个神经元的值αjl

Vector a function: σ(υ)j=σ(υj)
例如:f(x)=x2
f([23])=[f(2)f(3)]=[49]
则,可以由l层的每一个元素的计算公式可以退出该层矩阵运算的公式:

αjl=σ(kωjklαkl1+bjl)=>αl=σ(ωlαl1+bl)

其中kωjklαkl1可以用ωjlαkl1表示,即第l层权重矩阵的第j个行向量与前一层神经元的列向量进行内积的结果,令zl=ωlαl1+bl,则αl=σ(zl)
简单点理解:对于每层正向传播,每层的值(向量形式)就是当前层的权重矩阵与上一层的值(向量)相乘再加上当前层的偏向(向量),然后统一使用sigmoid函数转化


关于Cost函数的两个假设:

二次Cost函数

C=12nx||y(x)αL(x)||2

其中αL(x)表示输出层的真实值所组成的向量,x表示训练实例,n表示输入实例的个数。

  1. 第一个假设是成本函数可以写成单个训练样例x的成本函数Cx的平均值C=1nxCx。二次成本函数就是这种情况,单个训练样例的Cost函数为Cx=12yaL2
  2. 第二个假设是它可以写​​成神经网络输出的函数:
    深度学习笔记(二):backpropagation算法
    二次Cost函数满足这个要求,因为单个训练样例x的二次Cost可写为
    C=12yaL2=12j(yjajL)2
介绍一个后面需要用到的公式

The Hadamard product, s⊙t,向量对应元素相乘:
[12][34]=[1324]=[38]


backpropagation4个重要公式

深度学习笔记(二):backpropagation算法

反向传播是关于如何改变网络中的权重和偏差来改变成本函数,这意味着需要计算偏导数C/ωjklC/bjl。但为了计算这些,我们首先引入一个中间量,δjl,我们称之为在l层的第j个神经元的error。反向传播计算每一层的δjl,然后将δjlC/ωjklC/bjl关联起来。

为了理解错误是如何定义的,想象我们的神经网络中存在一个恶魔:

深度学习笔记(二):backpropagation算法

恶魔对第l层的第j个神经元添加一个变化量Δzjl,该神经元输出就变成σ(zjl+Δzjl)。这种变化通过网络中的后续层传播,最终导致整体Cost的变化CzjlΔzjl(简单的高数知识)。
如果这个恶魔是一个好人,它想要帮我们优化Cost,他会尝试一个更小的Δzjl使得损失函数更小。假设Czjl是一个很大的值(不管正负)。然后恶魔通过选择与Czjl有相反的符号的 Δzjl来降低Cost。相反,如果 Czjl 接近于零,那么恶魔通过干扰加权输入zjl就几乎不能改变Cost,此时,这个神经元已经非常接近最优(再如何优化也不能改变Cost)。所以这里把Czjl 定义为神经元error的度量
于是定义在l层的第j个神经元的error:δlj

BP1

我们定义在输出层(L)的第j个神经元的error的方程为:

(BP1)δjL=CajLσ(zjL)

解释:其中CajL这部分衡量Cost相对于第j个神经元activation的输出的变化率,σ(zjL)这部分衡量activation方程相对于中间变量zjL的变化率

转化为矩阵的表达形式

δL=aCσ(zL)

可以认为 aC表示C相对于输出activation的变化率,根据上面定义的2次Cost方程,输出层的error可以写成:
δL=(aLy)σ(zL)

BP2

因为下一层的error的变化会引起当前层error的变化,当前层(l层)的error变化方程为(error传递公式):

(BP2)δl=((wl+1)Tδl+1)σ(zl)

其中(w1+1)T是第(1+1)th层的权重矩阵wl+1的转置。第(l+1)th层处的error δl+1乘以(l+1)th权重矩阵的转置(wl+1)T时,我们可以直观地认为网络向前传递error。然后σ(zl),可以算出前一层的error。
交替使用可以算出神经网络的所有层的error

BP3

Cost对偏向求偏导:

(BP3)Cbjl=δjl

写成向量形式:
Cb=δ

BP4

Cost对权重求偏导:

(BP4)Cwjkl=akl1δjl

写成矩阵形式:
Cw=ainδout

公式证明参考