前言:公式理解及推导参考自《机器学习》周志华 P101

BP网络

BP网络一般是指由 误差逆传播(error BackPropagation, BP)算法训练的多层前馈神经网络。

给定训练集 D = { ( x 1 , y 1 ) D=\left\{\left(\boldsymbol{x}_1, \boldsymbol{y}_1\right)\right. D={(x1​,y1​), ( x 2 , y 2 ) , … , ( x m , y m ) } , x i ∈ R d , y i ∈ R l \left.\left(\boldsymbol{x}_2, \boldsymbol{y}_2\right), \ldots,\left(\boldsymbol{x}_m, \boldsymbol{y}_m\right)\right\}, \boldsymbol{x}_i \in \mathbb{R}^d, \boldsymbol{y}_i \in \mathbb{R}^l (x2​,y2​),…,(xm​,ym​)},xi​∈Rd,yi​∈Rl,即输入示例由 d d d 个属性描述,输出 l l l 维实值向量。如下图所示,给出一个拥有 d d d 个输入神经元、 l l l 个输出神经元、 q q q 个隐层神经元的多层前馈网络结构。

对训练例 ( x k , y k ) , k ∈ ( 1 , m ) \left(\boldsymbol{x}_k, \boldsymbol{y}_k\right), k∈(1, m) (xk​,yk​),k∈(1,m),假定神经网终的输出为 y ^ k = ( y ^ 1 k , y ^ 2 k , … , y ^ l k ) \hat{\boldsymbol{y}}_k=\left(\hat{y}_1^k, \hat{y}_2^k, \ldots, \hat{y}_l^k\right) y^​k​=(y^​1k​,y^​2k​,…,y^​lk​),即 y ^ j k = f ( β j − θ j ) \hat{y}_j^k=f\left(\beta_j-\theta_j\right) y^​jk​=f(βj​−θj​)。关于 y ^ j k \hat{y}_j^k y^​jk​ 的表达式来源于 MP 神经元模型,简单来说,当总输入超过阈值则输出一个信号,当总输入低于阈值会输出另一个信号。

网络在 ( x k , y k ) , k ∈ ( 1 , m ) \left(\boldsymbol{x}_k, \boldsymbol{y}_k\right), k∈(1, m) (xk​,yk​),k∈(1,m) 上的均方误差为 E k = 1 2 ∑ j = 1 l ( y ^ j k − y j k ) 2 E_k=\frac{1}{2} \sum_{j=1}^l\left(\hat{y}_j^k-y_j^k\right)^2 Ek​=21​∑j=1l​(y^​jk​−yjk​)2,此处 1/2 是为了后面求导方便。

参数更新式

网络中有 ( d + l + 1 ) q + l (d+l+1) q+l (d+l+1)q+l 个参数需确定:输入层到隐层的 d × q d \times q d×q 个连接权、隐层到输出层的 q × l q \times l q×l 个连接权、 q q q 个隐层神经元的阈值、 l l l 个输出层神 经元的阈值。以隐层到输出层的连接权 w h j w_{hj} whj​ 为例分析参数更新, w h j w_{hj} whj​ 参数更新估计式为:
w h j ′ = w h j + Δ v = w h j − η ∂ E k ∂ w h j w_{hj}'=w_{hj}+ \Delta v = w_{hj}-\eta \frac{\partial E_k}{\partial w_{hj}} whj′​=whj​+Δv=whj​−η∂whj​∂Ek​​
其中, η ∈ ( 0 , 1 ) \eta \in (0, 1) η∈(0,1),成为学习率(learning rate)。
因为每次更新只考虑一个参数,所以 E k E_k Ek​ 可视为关于 w h j w_{hj} whj​ 的一元函数。若 ∂ E k ∂ w h j \frac{\partial E_k}{\partial w_{hj}} ∂whj​∂Ek​​ 为正值,说明 w h j w_{hj} whj​ 越大, E k E_k Ek​ 越大,为使 E k E_k Ek​ 尽可能小,所以应减去这个正的导数;若 ∂ E k ∂ w h j \frac{\partial E_k}{\partial w_{hj}} ∂whj​∂Ek​​ 为负值,说明 w h j w_{hj} whj​ 越大, E k E_k Ek​ 越小,为使 E k E_k Ek​ 尽可能小,所以应减去这个负的导数,增大 w h j w_{hj} whj​。

计算导数–链式法则

注意到 w h j w_{h j} whj​ 先影响到第 j j j 个输出层神经元的输入值 β j \beta_j βj​,再影响到其输出值 y ^ j k \hat{y}_j^k y^​jk​,然后影响到 E k E_k Ek​,有:
∂ E k ∂ w h j = ∂ E k ∂ y ^ j k ⋅ ∂ y ^ j k ∂ β j ⋅ ∂ β j ∂ w h j . \frac{\partial E_k}{\partial w_{h j}}=\frac{\partial E_k}{\partial \hat{y}_j^k} \cdot \frac{\partial \hat{y}_j^k}{\partial \beta_j} \cdot \frac{\partial \beta_j}{\partial w_{h j}} . ∂whj​∂Ek​​=∂y^​jk​∂Ek​​⋅∂βj​∂y^​jk​​⋅∂whj​∂βj​​.
根据定义 β j = ∑ h = 1 q w h j b h \beta_j = \sum_{h=1}^q w_{h j} b_h βj​=∑h=1q​whj​bh​ ,有
∂ β j ∂ w h j = b h \frac{\partial \beta_j}{\partial w_{h j}}=b_h ∂whj​∂βj​​=bh​
计算 ∂ E k ∂ y ^ j k ⋅ ∂ y ^ j k ∂ β j \frac{\partial \mathrm{E}_{\mathrm{k}}}{\partial \hat{\mathrm{y}}_{\mathrm{j}}^{\mathrm{k}}} \cdot \frac{\partial \hat{\mathrm{y}}_{\mathrm{j}}^{\mathrm{k}}}{\partial \beta_{\mathrm{j}}} ∂y^​jk​∂Ek​​⋅∂βj​∂y^​jk​​:
= ∂ E k ∂ y ^ j k ⋅ ∂ [ f ( β j − θ j ) ] ∂ β j = ∂ E k ∂ y ^ j k ⋅ f ′ ( β j − θ j ) = ∂ E k ∂ y ^ j k ⋅ f ( β j − θ j ) × [ 1 − f ( β j − θ j ) ] = ∂ E k ∂ y ^ k k ⋅ y ^ j k ( 1 − y ^ j k ) = ∂ [ 1 2 ∑ j = 1 1 ( y ^ j k − y j k ) 2 ] ∂ y ^ j k ⋅ y ^ j k ( 1 − y ^ j k ) = 1 2 × 2 ( y ^ j k − y ^ j k ) × 1 × y ^ j k ( 1 − y ^ j k ) = ( y ^ j k − y ^ j k ) y ^ j k ( 1 − y ^ j k ) =\frac{\partial \mathrm{E}_{\mathrm{k}}}{\partial \hat{\mathbf{y}}_{\mathrm{j}}^{\mathrm{k}}} \cdot \frac{\partial\left[\mathrm{f}\left(\beta_{\mathrm{j}}-\theta_{\mathrm{j}}\right)\right]}{\partial \beta_{\mathrm{j}}}=\frac{\partial \mathrm{E}_{\mathrm{k}}}{\partial \hat{\mathrm{y}}_{\mathrm{j}}^{\mathrm{k}}} \cdot \mathrm{f}^{\prime}\left(\beta_{\mathrm{j}}-\theta_{\mathrm{j}}\right)=\frac{\partial \mathrm{E}_{\mathrm{k}}}{\partial \hat{\mathrm{y}}_{\mathrm{j}}^{\mathrm{k}}} \cdot \mathrm{f}\left(\beta_{\mathrm{j}}-\theta_{\mathrm{j}}\right) \times\left[1-\mathrm{f}\left(\beta_{\mathrm{j}}-\theta_{\mathrm{j}}\right)\right] = \frac{\partial \mathrm{E}_{\mathrm{k}}}{\partial \hat{\mathrm{y}}_{\mathrm{k}}^{\mathrm{k}}} \cdot \hat{\mathrm{y}}_{\mathrm{j}}^{\mathrm{k}}\left(1-\hat{\mathrm{y}}_{\mathrm{j}}^{\mathrm{k}}\right) \\ =\frac{\partial\left[\frac{1}{2} \sum_{\mathrm{j}=1}^1\left(\hat{\mathrm{y}}_{\mathrm{j}}^{\mathrm{k}}-\mathrm{y}_{\mathrm{j}}^{\mathrm{k}}\right)^2\right]}{\partial \hat{\mathrm{y}}_{\mathrm{j}}^{\mathrm{k}}} \cdot \hat{\mathrm{y}}_{\mathrm{j}}^{\mathrm{k}}\left(1-\hat{\mathrm{y}}_{\mathrm{j}}^{\mathrm{k}}\right)=\frac{1}{2} \times 2\left(\hat{y}_{\mathrm{j}}^{\mathrm{k}}-\hat{\mathrm{y}}_{\mathrm{j}}^{\mathrm{k}}\right) \times 1 \times \hat{\mathrm{y}}_{\mathrm{j}}^{\mathrm{k}}\left(1-\hat{\mathrm{y}}_{\mathrm{j}}^{\mathrm{k}}\right)=\left(\hat{\mathrm{y}}_{\mathrm{j}}^{\mathrm{k}}-\hat{\mathrm{y}}_{\mathrm{j}}^{\mathrm{k}}\right) \hat{\mathrm{y}}_{\mathrm{j}}^{\mathrm{k}}\left(1-\hat{\mathrm{y}}_{\mathrm{j}}^{\mathrm{k}}\right) =∂y^​jk​∂Ek​​⋅∂βj​∂[f(βj​−θj​)]​=∂y^​jk​∂Ek​​⋅f′(βj​−θj​)=∂y^​jk​∂Ek​​⋅f(βj​−θj​)×[1−f(βj​−θj​)]=∂y^​kk​∂Ek​​⋅y^​jk​(1−y^​jk​)=∂y^​jk​∂[21​∑j=11​(y^​jk​−yjk​)2]​⋅y^​jk​(1−y^​jk​)=21​×2(y^​jk​−y^​jk​)×1×y^​jk​(1−y^​jk​)=(y^​jk​−y^​jk​)y^​jk​(1−y^​jk​)

上式计算 f ′ ( β j − θ j ) \mathrm{f}^{\prime}\left(\beta_{\mathrm{j}}-\theta_{\mathrm{j}}\right) f′(βj​−θj​) 时,涉及 Sigmoid 函数 f ( x ) f(x) f(x) 的导数: f ′ ( x ) = f ( x ) ( 1 − f ( x ) ) f^{\prime}(x)=f(x)(1-f(x)) f′(x)=f(x)(1−f(x))

再令
g j = − ∂ E k ∂ β j = − ∂ E k ∂ y ^ j k ⋅ ∂ y ^ j k ∂ β j g_j=-\frac{\partial \mathrm{E}_{\mathrm{k}}}{\partial \beta_{\mathrm{j}}}=-\frac{\partial \mathrm{E}_{\mathrm{k}}}{\partial \hat{\mathrm{y}}_{\mathrm{j}}^{\mathrm{k}}} \cdot \frac{\partial \hat{\mathrm{y}}_{\mathrm{j}}^{\mathrm{k}}}{\partial \beta_{\mathrm{j}}} gj​=−∂βj​∂Ek​​=−∂y^​jk​∂Ek​​⋅∂βj​∂y^​jk​​
综上,得到关于 w h j w_{hj} whj​ 的更新公式为:
Δ w h j = − η ∂ E k ∂ w h j = − η ∂ E k ∂ y ^ j k ⋅ ∂ y ^ j k ∂ β j ⋅ ∂ β j ∂ w h j = − η ( − g j ) b h = η g j b h \Delta w_{hj} =-\eta \frac{\partial E_k}{\partial w_{hj}}=-\eta \frac{\partial E_k}{\partial \hat{y}_j^k} \cdot \frac{\partial \hat{y}_j^k}{\partial \beta_j} \cdot \frac{\partial \beta_j}{\partial w_{h j}}= -\eta (-g_j) b_h= \eta g_j b_h Δwhj​=−η∂whj​∂Ek​​=−η∂y^​jk​∂Ek​​⋅∂βj​∂y^​jk​​⋅∂whj​∂βj​​=−η(−gj​)bh​=ηgj​bh​
同理可得 θ j \theta_j θj​、 v i h v_{ih} vih​、 γ h \gamma_h γh​ 的更新公式。需注意的是,在计算过程中,确定链式求导公式是关键。


补充 f ( x ) = 1 1 + e − x f(x)=\frac{1}{1+e^{-x}} f(x)=1+e−x1​ 的导数:
f ′ ( x ) = e − x ( 1 + e − x ) 2 = 1 + e − x − 1 ( 1 + e − x ) 2 = 1 1 + e − x − 1 ( 1 + e − x ) 2 = f ( x ) − ( f ( x ) ) 2 = f ( x ) [ 1 − f ( x ) ] f'(x)=\frac{e^{-x}}{(1+e^{-x})^2} = \frac{1+e^{-x}-1}{(1+e^{-x})^2}= {\frac{1}{1+e^{-x}} - \frac{1}{(1+e^{-x})^2}}=f(x)-(f(x))^2=f(x)[1-f(x)] f′(x)=(1+e−x)2e−x​=(1+e−x)21+e−x−1​=1+e−x1​−(1+e−x)21​=f(x)−(f(x))2=f(x)[1−f(x)]


参考文章:

梯度下降的参数更新公式是如何确定的? - 老董的回答 - 知乎

神经网络之反向传播算法(BP)公式推导 - jsfantasy - 博客园 (cnblogs.com)

DATAWHALE - 一个热爱学习的社区 (linklearner.com)

误差逆传播算法公式理解及推导相关推荐

  1. 《机器学习与数据挖掘》实验五 编程实现误差逆传播算法(BP算法)

    前言: 摘要:本文对机器学习实验五 标准BP算法的代码进行实现,如果不了解的BP算法的话,可以自行上网搜索BP算法的详解. 实验题目:编程实现误差逆传播算法(BP算法) 实验目的:掌握误差逆传播算法( ...

  2. BP算法误差逆传播参数更新公式推导

    BP算法误差逆传播参数更新公式推导

  3. 人工智能知识全面讲解:多层神经网络与误差逆传播算法

    7.3.1 从单层到多层神经网络 明斯基教授曾表示,单层神经网络无法解决异或问题,但是当增加一个计 算层以后,两层神经网络不仅可以解决异或问题,而且具有非常好的非线性分 类效果.只是两层神经网络的计算 ...

  4. BP(BackPropagation)误差逆传播算法

    上篇文章介绍了多层前馈神经网络,那么这种网络是怎样训练生成的呢,BP算法就是其中一种生成多层神经网络的算法 ,又称为反向传播算法,下面来了解一下BP算法. 举例: 下图中是根据一个手写数字辨识的神经网 ...

  5. bp算法运行太慢_神经网络,BP算法的理解与推导

    原创,转载请注明出处. (常规字母代表标量,粗体字母代表向量,大写粗体字母代表矩阵) 这里假设你已经知道了神经网络的基本概念,并且最好看过BP算法. 可能你没有看懂,或者你跟我一样被各种公式搞晕了.尤 ...

  6. 卡尔曼滤波的理解、推导和应用

    卡尔曼滤波的理解.推导和应用 1. 卡尔曼滤波简介 2. 卡尔曼滤波原理 3. 卡尔曼滤波的公式 3.1. 五个公式 3.2. 公式作用 4. 卡尔曼滤波的公式推导 4.1. 符号说明 4.2. 概念 ...

  7. matlab pq变换,PQ变换与DQ变换的理解与推导详解.doc

    p-q变换与d-q变换的理解与推导 120变换和空间向量 120坐标系是一个静止的复数坐标系.120分量首先由莱昂(Lyon)提出,所以亦成为莱昂分量.下面以电流为例说明120变换...为三相电流瞬时 ...

  8. matlab pq变换,PQ变换与DQ变换的理解与推导

    . . 页脚 一. p-q 变换与d-q 变换的理解与推导 1. 120变换和空间向量 120坐标系是一个静止的复数坐标系.120分量首先由莱昂(Lyon )提出,所以亦成为莱昂分量.下面以电流为例说 ...

  9. 【 MATLAB 】适合初学者的 chirp 理解与推导

    作为一个菜鸟,当我看到网络上有关chirp的介绍,复杂地让意志不坚定者想要放弃.为什么要花费一番力气学习chirp,对于个人而言,当然能用到,chirp在雷达上还是有一席之地的.就连我手上的那个宽带接 ...

最新文章

  1. 【React系列】状态(State)和生命周期
  2. python文件操作2:在指定目录下查找指定后缀名的文件
  3. Mysql生成连续时间段记录
  4. mac 或linux上 pip 不支持ssl的问题
  5. 【已解决】java.lang.NullPointerException at line 15, Solution.r
  6. [转] 多线程 《深入浅出 Java Concurrency》目录
  7. thinkphp 模板显示display和assign的用法
  8. 小知识---批量修改文件名后缀
  9. oracle 查询字段去空格,ORACLE 所有表的所有字段去空格方法
  10. 朗文当代高级英语辞典android,朗文当代高级英语辞典下载
  11. 极大似然估计法(Maximum likelihood estimation, MLE)
  12. 所罗门王的宝藏 思维
  13. 于的繁体字有几种写法_在繁体字中,“于”、“於”这两个字如何正确使用?...
  14. 自学英语最有效的方法
  15. unity3d新手入门必备教程
  16. 使用Navicat自带的导出与使用查询方式的导出区别
  17. 【福利倒计时】春风十里不如程序猿的专属福利,拿了这份,2018值了~
  18. 技术前沿与经典文章8:智能家居发展白皮书——全屋智能解决方案
  19. css 五彩斑斓的黑,b站老陈打码。
  20. Mac 远程连接 Windows 桌面工具 Parallels Client 使用教程

热门文章

  1. Nginx 配置支持PHP
  2. python request大批量发送请求调用接口时,报错:[WinError 10048] 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。
  3. 王玫泰山医学院计算机,计算机专业PBL对提高团队协作能力的研究.pdf
  4. jenkins安装及常见错误排查
  5. 【advertisement(guanggao)】customize development(dingzhihuakaifa)
  6. round函数python逗号后不要了吗_Python 中关于 round 函数的小坑
  7. 这篇文章的目的是介绍一些少有人知的Linux命令,它们一定会高效地帮你管理你的桌面/服务器...
  8. python字符串拼接带空格_使用Python连接字符串和空格
  9. 学会“放弃与妥协”,学会“自我牺牲”,学会“善待痛苦”
  10. Javascript百炼成仙——笔记