Backpropagation

来源:互联网 发布:网络打印机搜索不到 编辑:程序博客网 时间:2024/05/29 04:56

Backpropagation

@[深度学习, 向后传播算法]

  • Backpropagation
    • 代价函数相关的两个假设
    • Hadamard product
    • Backpropagation的四个基本等式
    • 证明
    • backpropagation算法

wjkl表示(l1)th层的第k个神经元和第lth层的第j个元素的连接

神经网络权重

enter image description here

bljl层神经元的bias
aijl层神经元的activation

alj=σ(kwljkal1k+blj),(1)

wljk:j 的范围是第l层神经元的个数,k的范围是第(l1)层神经元的个数,这个表示方便将公式表示为矩阵的形式

al=σ(wlal1+bl).(2)

这里al1是第l层的激活神经元

代价函数相关的两个假设

backpropagation的目标就是计算代价函数对wb的偏导

二次代价函数的形式:

C=12nxy(x)aL(x)2,(3)

  • 假设1:代价函数能够被写成C=1nxCx,需要这个假设的原因是backpropagation实际上需要我们计算的是对单个训练样本的偏导(CxwCxb
  • 假设2:代价函数能够被写成神经网络输出的函数
    enter image description here
    例如:二次代价函数能够写成:

C=12yaL2=12j(yjaLj)2,(4)

Hadamard product

[12][34]=[1324]=[38].(5)

Backpropagation的四个基本等式

backpropagation是为了理解在神经网络中改变weights和biases是怎样改变代价函数,最终,意味着计算偏导CwljkCblj

为了计算偏导,我们首先计算中间量,δlj,表示lth层第j个神经元的error

zlj=(kwljkal1k+blj),(6)

δljCzlj.(7)

backpropagation给了一个对每层计算δl的方法

误差在输出层的等式

δLj=CaLjσ(zLj).(BP1)

* C/aLj衡量了以第jth个激活元为函数的变化速率
* σ(zLj)衡量了sigmoid函数对zLj的变化速率
* C/aLj的精确形式取决于代价函数的选择,例如针对二次代价函数而言
* 当σ(zLj)趋近于0或1的时候,σ(zLj)0δLj也会变的很小,可以说输出神经元已经饱和,weight开始停止学习或学习的很慢

C=12j(yjaj)2
CaLj=(ajyj)

δL=aCσ(zL).(BP1a)

二次代价函数的δL
δL=(aLy)σ(zL)

在式子中都有较好的向量形式,因此容易利用Numpy等库进行计算

下一层误差等式,δl+1

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

总结而言:
* 当输出神经元的状态是low-activation或者sturated时,weight将会缓慢的学习
* 这四个公式对任何形式的激活函数都有用

An equation for the rate of change of the cost with respect to any bias in the network:

Cblj=δlj(BP3)

Cb=δ,(BP3a)

An equation for the rate of change of the cost with respect to any weight in the network
Cwljk=al1kδlj.(BP4)

Cw=ainδout,(BP4a)

证明

(BP1)

δLj=CaLjσ(zLj).(BP1)

δLj=CzLj

链式法则
δLj=CaLjaLjzLj

(BP2)

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

δlj=Czlj=kCzl+1kzl+1kzlj=kzl+1kzljδl+1k,()(a)(b)

zl+1k=jwl+1kjalj+bl+1k=jwl+1kjσ(zlj)+bl+1k

(BP3)

Cblj=δlj(BP3)

Cblj=Czljzljblj

zljblj=1

(BP4)

Cwljk=al1kδlj.(BP4)

Cwljk=Czljzljwljk()

zlj=kwljkal1k+blj

backpropagation算法

backpropagation equations 提供了一个计算代价函数梯度的方式

  1. 输入 x :设置相应的 activation a1为输入层
  2. Feedforward: 对每一层l=2,3,...,L计算zl=wlal1+blal=σ(zl)
  3. Output error (输出层误差) : 计算向量δL=aCσ(zL)
  4. Backpropagate the error : 对每一层l=L1,L2,...,2计算δl=((wl+1)Tδl+1)σ(zl)
  5. 输出 : 计算代价函数的梯度,通过 Cwljk=al1kδljCblj=δjl

mini-batch:(随机梯度下降结合backpropagation)
1. 输入一组训练样本
2. 对每个训练样本:设置相应的输入激活元ax,1
- Feedforward: 对每一层l=2,3,...,L计算zx,l=wlax,l1+blax,l=σ(zx,l)
- Output error (输出层误差) : 计算向量δx,L=aCxσ(zx,L)
- Backpropagate the error : 对每一层l=L1,L2,...,2计算δx,l=((wl+1)Tδx,l+1)σ(zx,l)
3. 梯度下降 : 对每一层 l=L,L1,...,2,更新权重weights,根据规则

wlwlηmxδx,l(ax,l1)T
blblηmxδx,l

0 0