5.3 BP算法


一句话: BP算法是基于梯度下降算法的迭代算法,用来优化模型参数, 作用相当于梯度下降算法


感知器:
感知器使用特征向量来表示前馈神经网络,它是一种二元分类器,把矩阵上的x{f{x}}(实数值向量) 映射到输出 f(x)f(x)上(一个二元的值)
f(x)={1 if wx+b>00 else f(x)=left{egin{array}{ll}{1} & { ext { if } w cdot x+b>0} \ {0} & { ext { else }}end{array} ight.
                         在这里插入图片描述

感知器

误差逆传播算法 (error BackPropagation,简称 BP)

符号表示

给定训练集 D ,上图神经网络含有
dd 个输入神经元
ll 个输出神经元
qq 个隐层神经元
θjθ_j 表示输出层第 jj 个神经元的阈值
γhgamma_h 表示隐层第 hh 个神经元的阈值
whjw_{hj} 表示隐层第 hh 个神经元与输出层第 jj 个神经元的连接权
vihv_{ih} 表示输入层第 ii 个神经元与隐层第 hh 个神经元的连接权

隐层第 hh 个神经元接收输入为 α=i=1dvihxialpha =sum_{i=1}^dv_{ih}x_i
输出层第 jj 个神经元接收输入为 βj=h=1qwhjbheta_j=sum_{h=1}^qw_{hj}b_h, 其中bhb_h为第 hh 个神经元的输出
ff 为 sigmoid 函数

神经网络的输出 y^=(y^1k,y^2k,...,y^lk){f{hat{y}}}=(hat{y}^k_1, hat{y}^k_2, ..., hat{y}^k_l),即
y^jk=f(βjθj)(5.3) hat{y}^k_j=f(eta_j- heta_j) ag{5.3}
其中 θj为阈值。

网络在(xk,yk)上的均方误差为
Ek=12j=1l(y^jkyjk)2(5.4) E_k=frac12sum_{j=1}^l(hat{y}_j^k-y_j^k)^2 ag{5.4}
BP是一个迭代学习算法,它基于梯度下降策略,以目标的负梯度方向对参数进行调整.对式 (5.4) 的误差 Ek ,给定学习率 η ,有
Δwhj=ηEkwhj=ηEky^jky^jkβjβjwhj(5.5) egin{aligned} Delta w_{hj} &= -ηfrac{partial E_k}{partial w_{hj}}\ &= -η frac{partial E_k}{partial hat{y}^k_j }cdot frac{partial hat{y}^k_j}{partial eta _j }cdotfrac{partial eta _j}{partial w_{hj}} ag{5.5} end{aligned}
sigmoid函数有一个很好的性质:
f(x)=f(x)(1f(x))(5.6) f'(x)=f(x)cdot (1-f(x)) ag{5.6}
于是根据式(5.4)和(5.3),令
gj=Eky^jky^jkβj=(yjk^yjk)f(βjθj)=y^jk(1y^jk)(yjky^jk)(5.7) egin{aligned} g_j&=- frac{partial E_k}{partial hat{y}^k_j }cdot frac{partial hat{y}^k_j}{partial eta _j } \&= -(hat{y_j^k}-y_j^k)f'(eta _j- heta_j)\&=hat{y}_j^k(1-hat{y}_j^k)(y_j^k-hat{y}_j^k) ag{5.7} end{aligned}
根据 βj 的定义,显然有
βjwhj=bh(5.8) frac{partial eta_j}{partial w_{hj}}=b_h ag{5.8}
将式(5.7),(5.8)带入式(5.5),得到:
Δwhj=ngjbh(5.9) Delta w_{hj}=ng_jb_h ag{5.9}
类似可得
Δθj=ηgj(5.10) Delta heta_j=-ηg_j ag{5.10}
Δvih=ηehxi(5.11) \ Delta v_{ih}=ηe_hx_i ag{5.11}
Δγh=ηeh(5.12) Delta gamma_h =-ηe_h ag{5.12}
下图给出了 BP 算法的工作流程。对每个训练样例, BP 算法执行以下操作:先将输入实例提供给输入层神经元,然后逐层将信号前传,直到产生输出层的结果;然后计算输出层的误差(第4-5行),再将误差逆向传播至隐层神经元(第6行),最后根据隐层神经元的误差来对连接权和阈值进行调整(第7行)。该迭代过程循环进行,直到达到某些停止条件为止。


输入:训练集 D={(xk,yk)}k=1m_{k=1}^m
   学习率 η
过程:
1:在 (0,1) 范围内随机初始化网络中所有连接权和阈值
2:repeat
3: for all (xk,yk) in D do
4:  根据当前参数和式(5.3)计算当前样本的输出 y^khat{y}_k
5:  计算输出层神经元的梯度项 gjg_j
6:  计算隐层神经元的梯度项 ehe_h
7:  跟新连接权 whj,vihw_{hj},v_{ih} 与阈值 θj,γh heta_j,gamma_h
8: end for
9:until 达到停止条件
输出:连接权与阈值确定的多层前馈神经网络



以下为吴恩达课程中的表述:

训练神经网络:
1. 参数的随机初始化
2. 利用正向传播方法计算所有的 h(x)
3. 编写计算代价函数 J 的代码
4. 利用反向传播方法计算所有偏导数
5. 利用数值检验方法检验这些偏导数
6. 使用优化算法来最小化代价函数

参考:周志华《机器学习》
   吴恩达《机器学习》

原文地址:https://www.cnblogs.com/larkiisready/p/11681630.html