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
相关文章推荐
- CUDA搭建
- 稀疏自动编码器 (Sparse Autoencoder)
- 白化(Whitening):PCA vs. ZCA
- softmax回归
- 卷积神经网络初探
- 如何用70行代码实现深度神经网络算法
- 近200篇机器学习&深度学习资料分享(含各种文档,视频,源码等)
- 图像识别和图像搜索
- 卷积神经网络
- 深度学习札记
- 图像智能打标签‘神器’-AlchemyVision API
- ubuntu theano 安装成功,windows theano安装失败
- 【Deep learning vs BPL】思考:complex => simple => rich
- 卷积神经网络知识要点
- 1.linear Regression
- 1.linear Regression
- SURF项目总结 - deepdream
- Deep learning: autoencoders and sparsity
- Windows7+Anaconda+Theano+Pylearn2深度学习环境搭建