神经网络中的BP算法(原理和推导)
神经网络中的BP算法(原理和推导)
2018年02月08日 00:43:31阅读数:83BP算法介绍
BP算法(Background Propagation Alogorithm), 即误差逆传播算法,是训练多层前馈神经网络的一种最经典的算法,通过BP算法可以学得网络的权重和阈值,且具有可靠的收敛性。
网络结构
首先对所用的符号和变量做约定,这里采用《机器学习》中的命名
训练集:D={(x1,y1),(x2,y2),...,(xm,ym)},xi∈Rd,yi∈RlD={(x1,y1),(x2,y2),...,(xm,ym)},xi∈Rd,yi∈Rl
即输入的x有d个属性,输出y有l个属性,均以向量表示
输入层到隐层的权重以υihυih表示,隐层到输出层的权重以ωhjωhj表示
隐层神经元输入和输出层神经元输入如图所示
基本思想
通过前向传播确定误差,再利用反向传播减少误差
优化基于梯度下降法(gradient decenet)进行,对参数的更新方式为(其中ηη为学习率)
ω=ω−η∂Ek∂ωhjω=ω−η∂Ek∂ωhj
- 将输入确定为常量1,网络的阈值学习可以等效为权重的学习,本文仅作权重的讨论
前向传播过程:
将输入值传入神经网络,逐层将信号前传,计算输出层的结果yˆy^
计算输出值yˆ和y^和yjyj的误差,通常采用均方误差(mse)
Ek=12Σlj=1(yˆkj−ykj)2Ek=12Σj=1l(y^jk−yjk)2
反向传播过程:
输入层神经元
根据优化策略,减小输出误差需要计算误差关于其输入权的梯度,即∂Ek∂ωhj∂Ek∂ωhj
利用求导的链式法则(Chain Rule),可以将其展开为
∂Ek∂ωhj∂Ek∂ωhj = ∂Ek∂yˆkj⋅∂yˆkj∂βj⋅∂βj∂ωhj∂Ek∂y^jk·∂y^jk∂βj·∂βj∂ωhj
这个表达式初看上去有点复杂,我们可以一步一步来计算它。
第一项∂Ek∂yˆkj∂Ek∂y^jk
这一项是误差对输出求偏导,由上文提到的均方误差公式可以直接求导计算,结果为−(yˆkj−ykj)−(y^jk−yjk)
第二项∂yˆkj∂βj∂y^jk∂βj
这一项是输出对输入求偏导,即对输出层的激励函数求偏导,在这里选用sigmoid函数作为激励函数
sigmoid函数:11+e−z11+e−z 具有非常优秀的性质,其中包括导数可用自身表示,f′(x)=f(x)(1−f(x))f′(x)=f(x)(1−f(x))
因此,该项导数可直接写出,为=yˆkj(1−yˆ)=y^jk(1−y^)
第三项∂βj∂ωhj∂βj∂ωhj
这一项是输入对权重求偏导,由图中βjβj的定义直接计算,结果为bhbh
综上,输出层神经元的误差为
δωhj=−(yˆkj−ykj)yˆkj(1−yˆ)bhδωhj=−(y^jk−yjk)y^jk(1−y^)bh
隐层神经元
对于隐层神经元,输入权梯度为
∂Ek∂bh⋅∂bh∂αh∂Ek∂bh·∂bh∂αh
同样地,激活函数也为sigmoid,可以快速写出第二项导数
第一项继续运用链式法则,先求误差对输入的偏导∂Ek∂βj∂Ek∂βj,再求输入对隐层神经元的偏导∂βj∂bh∂βj∂bh,方法同上
需要注意的是,隐层神经元不能直接确定对误差的影响,因此对所有输出神经元都需要考虑输入
(在输出层时只考虑一个待求神经元的输入)
最终求得的导数
δωih=−(yˆkj−ykj)yˆkj(1−yˆ)Σlj=1ωhjbh(1−bh)xiδωih=−(y^jk−yjk)y^jk(1−y^)Σj=1lωhjbh(1−bh)xi
BP算法遇到的问题
BP算法的精髓在于逐层反向更新权重,基于梯度下降的学习使它具有可靠的学习能力,但也同时会被梯度下降算法固有的缺陷所影响,包括
- 在累积误差下降到一定程度后可能出现梯度消失现象
- 可能收敛至局部最优解
- 过于复杂的网络结构可能导致训练结果过拟合
问题1和2涉及到梯度下降法的优化问题,解决的方法有
- 多次设定参数初始值和学习率
- 使用不同的优化版梯度下降算法(SGD,ADAM等)
- 运用模拟退火技术
问题3解决方法有
- 人工早停,弱测试集误差增高则停止训练
- 对网络复杂度增加正则项
- 神经网络中的BP算法(原理和推导)
- Coursera deeplearning.ai 深度学习笔记1-3-Shallow Neural Networks-浅层神经网络原理推导与代码实现
- 神经网络中BP算法的原理与用Python实现源码
- 从神经网络到BP算法(纯理论推导)
- Coursera deeplearning.ai 深度学习笔记1-4-Deep Neural Networks-深度神经网络原理推导与代码实现
- 竞争神经网络原理
- 【笔记】神经网络中的一些基本原理和公式
- 神经网络-并行BP算法
- 全连接神经网络的前向和反向传播推导
- 深度学习原理——从神经网络开始
- 神经网络——BP算法
- 实现神经网络番外:利用Excel实现神经网络和BP算法
- 机器学习之深入理解神经网络理论基础、BP算法及其Python实现
- Machine Learning第五讲[神经网络: 学习] --(一)代价函数和BP算法
- Machine Learning第五讲[神经网络: 学习] --(二)实践中的BP算法
- Python tensorflow实战3.神经网络 - 理解到底什么是神经网络,编程原理
- 基于反向传播的多层神经网络训练原理(翻译)
- 基于微软案例数据挖掘之Microsoft 神经网络分析算法原理篇
- 神经网络中 BP 算法的原理与 PYTHON 实现源码解析
- 人工神经网络(ANN)及BP算法