您的位置:首页 > 运维架构

Backpropagation

2016-03-01 22:41 363 查看

Backpropagation

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

Backpropagation
代价函数相关的两个假设

Hadamard product

Backpropagation的四个基本等式

证明

backpropagation算法

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





blj第l层神经元的bias

aij第l层神经元的activation

alj=σ(∑kwljkal−1k+blj),(1)

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

al=σ(wlal−1+bl).(2)

这里al−1是第l层的激活神经元

代价函数相关的两个假设

backpropagation的目标就是计算代价函数对w和b的偏导

二次代价函数的形式:

C=12n∑x∥y(x)−aL(x)∥2,(3)

假设1:代价函数能够被写成C=1n∑xCx,需要这个假设的原因是backpropagation实际上需要我们计算的是对单个训练样本的偏导(∂Cx∂w 和 ∂Cx∂b)

假设2:代价函数能够被写成神经网络输出的函数



例如:二次代价函数能够写成:

C=12∥y−aL∥2=12∑j(yj−aLj)2,(4)

Hadamard product

[12]⊙[34]=[1∗32∗4]=[38].(5)

Backpropagation的四个基本等式

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

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

zlj=(∑kwljkal−1k+blj),(6)

δlj≡∂C∂zlj.(7)

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

误差在输出层的等式

δLj=∂C∂aLjσ′(zLj).(BP1)

* ∂C/∂aLj衡量了以第jth个激活元为函数的变化速率

* σ′(zLj)衡量了sigmoid函数对zLj的变化速率

* ∂C/∂aLj的精确形式取决于代价函数的选择,例如针对二次代价函数而言

* 当σ(zLj)趋近于0或1的时候,σ′(zLj)≈0,δLj也会变的很小,可以说输出神经元已经饱和,weight开始停止学习或学习的很慢

C=12∑j(yj−aj)2

∂C∂aLj=(aj−yj)

δL=∇aC⊙σ′(zL).(BP1a)

二次代价函数的δL

δL=(aL−y)⊙σ′(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:

∂C∂blj=δlj(BP3)

∂C∂b=δ,(BP3a)

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

∂C∂wljk=al−1kδlj.(BP4)

∂C∂w=ainδout,(BP4a)

证明

(BP1)

δLj=∂C∂aLjσ′(zLj).(BP1)

δLj=∂C∂zLj

链式法则

δLj=∂C∂aLj∂aLj∂zLj

(BP2)

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

δlj=∂C∂zlj=∑k∂C∂zl+1k∂zl+1k∂zlj=∑k∂zl+1k∂zljδl+1k,(链式法则)(a)(b)

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

(BP3)

∂C∂blj=δlj(BP3)

∂C∂blj=∂C∂zlj∂zlj∂blj

∂zlj∂blj=1

(BP4)

∂C∂wljk=al−1kδlj.(BP4)

∂C∂wljk=∂C∂zlj∂zlj∂wljk(链式法则)

zlj=∑kwljkal−1k+blj

backpropagation算法

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

输入 x :设置相应的 activation a1为输入层

Feedforward: 对每一层l=2,3,...,L计算zl=wlal−1+bl 和 al=σ(zl)

Output error (输出层误差) : 计算向量δL=∇aC⊙σ′(zL)

Backpropagate the error : 对每一层l=L−1,L−2,...,2计算δl=((wl+1)Tδl+1)⊙σ′(zl)

输出 : 计算代价函数的梯度,通过 ∂C∂wljk=al−1kδlj和∂C∂blj=δjl

mini-batch:(随机梯度下降结合backpropagation)

1. 输入一组训练样本

2. 对每个训练样本:设置相应的输入激活元ax,1

- Feedforward: 对每一层l=2,3,...,L计算zx,l=wlax,l−1+bl 和 ax,l=σ(zx,l)

- Output error (输出层误差) : 计算向量δx,L=∇aCx⊙σ′(zx,L)

- Backpropagate the error : 对每一层l=L−1,L−2,...,2计算δx,l=((wl+1)Tδx,l+1)⊙σ′(zx,l)

3. 梯度下降 : 对每一层 l=L,L−1,...,2,更新权重weights,根据规则wl→wl−ηm∑xδx,l(ax,l−1)Tbl→bl−ηm∑xδx,l
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  深度学习