5.3 BP算法

mac2026-02-28  7


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


感知器: 感知器使用特征向量来表示前馈神经网络,它是一种二元分类器,把矩阵上的x{\bf{x}}x(实数值向量) 映射到输出 f(x)f(x)f(x)上(一个二元的值)f(x)={1 if w⋅x+b>00 else f(x)=\left\{\begin{array}{ll}{1} & {\text { if } w \cdot x+b>0} \\ {0} & {\text { else }}\end{array}\right.f(x)={10 if wx+b>0 else                          

感知器

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

符号表示:

给定训练集 D ,上图神经网络含有ddd 个输入神经元lll 个输出神经元qqq 个隐层神经元θjθ_jθj 表示输出层第 jjj 个神经元的阈值γh\gamma_hγh 表示隐层第 hhh 个神经元的阈值whjw_{hj}whj 表示隐层第 hhh 个神经元与输出层第 jjj 个神经元的连接权vihv_{ih}vih 表示输入层第 iii 个神经元与隐层第 hhh 个神经元的连接权

隐层第 hhh 个神经元接收输入为 α=∑i=1dvihxi\alpha =\sum_{i=1}^dv_{ih}x_iα=i=1dvihxi 输出层第 jjj 个神经元接收输入为 βj=∑h=1qwhjbh\beta_j=\sum_{h=1}^qw_{hj}b_hβj=h=1qwhjbh, 其中bhb_hbh为第 hhh 个神经元的输出fff 为 sigmoid 函数

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

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


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


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

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

最新回复(0)