为了搞明白这个没少在网上搜,但是结果不尽人意,最后找到了一篇很好很详细的证明过程,摘抄整理为 latex 如下。

(原文:https://blog.csdn.net/weixin_41718085/article/details/79381863

  1. 更新:为了让看博客的带哥们能直观的看,我编译截图了,放在这里,latex 源码在下面

这个只是为了应付作业总结的,所以没有认真检查过,如果内容、正确性(尤其是这个)和格式上有什么问题请务必在下面评论区中指出。

  1. \documentclass{article}
  2. \usepackage{xeCJK}
  3. \usepackage{amsmath}
  4. \setCJKmainfont{Noto Serif CJK SC}
  5.  
  6. \title{人工神经网络反向传播算法\\链式法则在人工智能中的应用}
  7.  
  8. \begin{document}
  9. \maketitle
  10.  
  11. \section{背景}
  12.  
  13. \subsection{人工神经元}
  14.  
  15. 人工神经元是一个运算,它将输入分别以不同的权重组合相加并做一次偏移操作后进行某个非线性运算得到输出,以数学语言描述即是
  16.  
  17. \[
  18. x^{(j + 1)} = \sigma(b + \sum_i W_i x_i^{(j)})
  19. \]
  20.  
  21. 其中 \(j\) 指神经元所处的层数,本例中 \(x_i^{(j)}\) 是来自第 \(j\)
  22. 层的第 \(i\) 个神经元的输入,\(W_i\)
  23. 是当前神经元所有提供输入的神经元中的第 \(i\) 个的权重,\(b\)
  24. 是偏移值,\(f\)
  25. 被称作激活函数,通常是一个非线性函数,一些经典的激活函数有 Sigmoid,
  26. ReLU, 和反正切函数。
  27.  
  28. \subsection{人工神经网络}
  29.  
  30. 人工神经网络(Artificial Neural Network,后简称
  31. ANN)由若干层人工神经元组成,在本文所考虑的模型中,每一层神经元接受上一层神经元的输入,运算,并将结果输出至下一层。事实上,若将整个网络中每个神经元的参数记为矩阵
  32. \(A\),则整个神经网络可以认为是一个函数 \(f(A, x)\),其中 \(x\)
  33. 是整个网络的输出。
  34.  
  35. 在应用的过程中,我们常常有一组输入 \(x\) 和对应着的期望输出
  36. \(y\)。训练神经网络的过程就是寻找合适的 \(A_0\),使得
  37. \(f(A_0, x) = y\)。为了解决这个问题,数学上我们引入损失函数\(J(y, y^*)\)
  38. 来指示 \(f(A, x)\) 训练的程度,其中 \(y^*\)
  39. 是神经网络的输出。一个典型的损失函数是欧几里得距离的平方,即
  40. \(J_0(y, y^*) = (y - y^*)^T (y - y^*)\)。这样一来,问题便被转化为,寻找
  41. \(A_0\) 使得 \(J(y, f(A_0, x))\) 可以取到最小值。
  42.  
  43. 由于对于给定的训练数据 \(y\) 是定值,为了直观,不妨记
  44. \(J(y, f(A, x)) = h(A, x)\),这样一来我们需要解决的问题便是:
  45.  
  46. 求参数 \(A\) 使得函数 \(h(A, x)\) 可以取到最小值。
  47.  
  48. 这是我们在微积分的学习中经常解决的一类问题,只需要求出
  49. \({\partial h(A, x)} / {\partial A}\) 并令其为 0
  50. 即可。但是事实上,对 \(h\)
  51. 求导函数几乎是不可能的,我们常用的方法是在每次迭代中,求出 \(h\)
  52. 在某个点 \(A_0\)
  53. 处的导数值,并根据这个导数值的正负和绝对值大小适当地调整 \(A\)
  54. 并进入下一轮迭代。这种方法被称作梯度下降法,他有一个显著的缺点就是他只能求得局部最小值(这是显然的),但考虑到通常神经网络的局部最小值已经足够优秀,我们便勉强可以接受这个缺点的存在。然而即便有了梯度下降法的思路,我们也需要一种可以求出导数值的算法,本文将描述的反向传播算法(Back
  55. Propagation Algorithm,常简称 BP 算法)即是一例。
  56.  
  57. \section{推导}
  58.  
  59. \subsection{符号定义}
  60.  
  61. 为了方便推导过程的说明,在这里重新进行符号定义,接下来的推导过程将不会使用背景中使用的符号体系。
  62.  
  63. 符号规约:
  64. \begin{itemize}
  65. \item \(l - 1\) 层的第 \(k\) 个神经元传播给第 \(l\) 层的第 \(j\) 个神经元的值的权重记为 \(W_{jk}^{(l)}\),每一层的所有权重记为矩阵 \(W^{(l)}\),所有的参数笼统地记作 \(W\)
  66. \item \(l\) 层的第 \(j\) 个神经元的偏移值记为 \(b_j^{(l)}\),每层的所有偏移量记为向量 \(b^{(l)}\),所有的偏移笼统地记作 \(b\)
  67. \item \(l\) 层的第 \(j\) 个神经元的输入值记为 \(z_j^{(l)}\),每层的所有输入值记为向量 \(z^{(l)}\)
  68. \item \(l\) 层的第 \(j\) 个神经元的输出值记为 \(x_j^{(l)}\),每层的所有输出值记为向量 \(x^{(l)}\)
  69. \item \(l\) 层的激活函数记为 \(\sigma_l\);(通常来讲每层神经元拥有一样的激活函数)
  70. \item \(l\) 层的神经元个数记为 \(s_l\) - 神经网络共有 \(n\) 层;
  71. \item 损失函数记为 \(J(W, b; y, y_0)\),其中 \(y_0\) 指真值,\(y\) 指网络的输出值;(在一次迭代中,\(y\) \(y_0\) 是常数,因此后面将略去这两个参数)
  72. \item \({\partial J(W, b)}/{\partial z_j^{(l)}}\) 记为 \(\Delta_j^{(l)}\),一层的所有 \(\Delta\) 记作 \(\Delta^{(l)}\)
  73. \item 训练集为 \(T = \{(x_0, y_0), (x_1, y_1), ..., (x_m, y_m)\}\),且 \(|T| = m\)
  74. \item 被应用于矩阵或向量间的 \(*\) 运算指对位乘法。
  75. \end{itemize}
  76. 根据定义,显然有:
  77.  
  78. $$
  79. z_j^{(l+1)} = \left(\sum_{k=0}^{s_{(l-1)}} W_{jk}^{(l)} x_k^{(l - 1)}\right) + b_j^{(l)} \eqno(a)
  80. $$
  81.  
  82. $$
  83. x_j^{(l)} = \sigma_l(z_j^{(l)}) \eqno(b)
  84. $$
  85.  
  86. \subsection{证明目的}
  87.  
  88. 给出一种算法以计算任意神经网络的 \(\partial J / \partial W_{jk}^{(l)}\) \(\partial J / \partial b_{j}^{(l)}\)。出于篇幅的关系,本文仅说明对前者的计算,略去证明过程一致的后者证明部分。
  89.  
  90. \subsection{证明过程}
  91.  
  92. 由链式法则知:
  93.  
  94. $$
  95. {\partial J(W, b) \over \partial W_{jk}^{(l)}} = {\partial J(W, b) \over \partial x_j^{(l+1)}}{\partial x_j^{(l+1)} \over \partial z_j^{(l+1)}}{\partial z_j^{(l+1)} \over \partial W_{jk}^{(l)}} \eqno(0)
  96. $$
  97.  
  98. 将偏差拆分成了三部分,接下来分别对三个部分进行求解。
  99.  
  100. \paragraph{2.3.1. 第一部分}
  101.  
  102. 对于第一部分有
  103.  
  104. $$
  105. \begin{aligned}
  106. {\partial J(W, b) \over \partial x_j^{(l+1)}}
  107. &= \sum_{i = 1}^{s_{l + 2}} {\partial J \over \partial z_i^{(l+2)}} {\partial z_i^{(l+2)} \over \partial x_j^{(l+1)}} \\
  108. &\overset{(a)}= \sum_{i = 1}^{s_{l+2}} {\partial J \over \partial z_i^{(l+2)}} {\partial \over \partial x_j^{(l+1)}} \left(b_j^{(l+1)} + \sum_{k = 0}^{s_{l+1}}{W_{ji}^{(l+1)}x_i^{(l+1)}}\right) \\
  109. &= \sum_{i = 1}^{s_{l+2}} \Delta_i^{(l+2)} W_{ji}^{(l)}
  110. \end{aligned} \eqno(2)
  111. $$
  112.  
  113. \paragraph{2.3.2. 第二部分}
  114.  
  115. 对于第二部分有
  116.  
  117. \[
  118. \begin{aligned}
  119. \partial x_j^{(l+1)} \over \partial z_j^{(l+1)}
  120. &\overset{(b)}= {\partial \over \partial z_j^{(l+1)}} \sigma_{l+1}(z_j^{(l+1)}) \\
  121. &= \sigma_{l+1}'(z_j^{(l+1)})
  122. \end{aligned}
  123. \]
  124.  
  125. 对于激活函数 \(\sigma_l\) 来说,假设存在函数 \(f_l\) 使得
  126. \[
  127. f_l(\sigma_l(x)) = \sigma_l'(x)
  128. \]
  129.  
  130. 则有
  131.  
  132. \[
  133. \begin{aligned}
  134. {\partial x_j^{(l+1)} \over \partial z_j^{(l+1)}} = f^{(l+1)}(x_j^{(l+1)}
  135. \end{aligned} \tag{2}
  136. \]
  137.  
  138. \paragraph{2.3.3. 第三部分}
  139.  
  140. \[
  141. \begin{aligned}
  142. {\partial z_j^{(l+1)} \over \partial W_{jk}^{(l)}}
  143. &\overset{(a)}= {\partial \over \partial W_{jk}^{(l)}} \left( b_j^{(l)} + \sum_{k=0}^{n_{l-1}} W_{jk}^{(l)} x_k^{(l - 1)}\right) \\
  144. &= x_j^{(l)}
  145. \end{aligned} \tag{3}
  146. \]
  147.  
  148. \paragraph{2.3.4. 综合}
  149.  
  150. 综合 \((0)\)\((1)\)\((2)\)\((3)\) 式可得
  151. \[
  152. \begin{aligned}
  153. \left(\sum_{i = 1}^{s_{l+2}} \Delta_i^{(l+2)} W_{ji}^{(l)}\right) f^{(l+1)}(x_j^{(l+1)})x_j^{(l)}
  154. \end{aligned} \tag{4}
  155. \]
  156.  
  157. 又因为
  158. \[
  159. \Delta_j^{(l+1)} = \frac{\partial J(W, b)}{\partial z_j^{(l + 1)}} = {\partial J(W, b) \over \partial x_j^{(l+1)}} {\partial x_j^{(l+1)} \over \partial z_j^{(l+1)}} \overset{(1), (2)}{=} \left(\sum_{i = 1}^{s_{l+2}} \Delta_i^{l+2} W_{ji}^{(l)}\right) f^{(l+1)}(x_j^{(l+1)}) \tag{5}
  160. \]
  161.  
  162. 其中 \( 0 < j < s_{l} + 1 \)\( 0 < l < n \).
  163.  
  164. \paragraph{2.3.5. 向量形式改写}
  165.  
  166. 写作向量形式有
  167.  
  168. \[
  169. \frac{\partial J(W, b)}{\partial W^{(l)}} = \Delta^{(l+1)} \left(x^{(l)}\right)^T \tag{4*}
  170. \]
  171.  
  172. \[
  173. \Delta^{(l)} = \left(W^{(l)}\right)^T \Delta^{(l+1)} * f_l(x^{(l+1)}) \tag{5*}
  174. \]
  175.  
  176. \paragraph{2.3.6. 边界条件}
  177.  
  178. 上文中我们求得了两个递推公式。显然,对于 \((5^*)\) 式来说,由于
  179. \(l = n\) \(l + 1\)
  180. 越界,所以不可以应用于该情况。对于该边界情况应当额外考虑。
  181.  
  182. \[
  183. \begin{aligned}
  184. \Delta_j^{(n)}
  185. &= \frac{\partial J(W, b; y, y_0)}{\partial z_j^{(n)}} \\
  186. &\overset{y = x^{(n)}}= \frac{\partial J(W, b; x^{(n)}, y_0)}{\partial x_i^{(n)}} \frac{\partial x_i^{(n)}}{\partial z_i^{(n)}} \\
  187. &\overset{(2)}= \frac{\partial J(W, b; x^{(n)}, y_0)}{\partial x_i^{(n)}} f^{(n)}(x_j^{(n)})
  188. \end{aligned} \tag{6}
  189. \]
  190.  
  191. 之后的计算与损失函数的具体形式有关,无法一般地给出,但考虑到接下来的运算都是显而易见的,此处略去无伤大雅。
  192.  
  193. \section{结论}
  194.  
  195. 通过一个边界条件和两个递推公式:
  196. \[
  197. \begin{cases}
  198. \Delta_j^{(n)} = \frac{\partial J}{\partial x_i^{(n)}}(W, b; x^{(n)}, y_0) f^{(n)}(x_j^{(n)}) \\
  199. \frac{\partial J}{\partial W^{(l)}}(W, b) = \Delta^{(l+1)} \left(x^{(l)}\right)^T \\
  200. \Delta^{(l)} = \left(W^{(l)}\right)^T \Delta^{(l+1)} * f_l(x^{(l+1)})
  201. \end{cases} \eqno(conclusion)
  202. \]
  203. 可以完成一次传播中对神经网络的求导过程。
  204.  
  205. \end{document}
  1.  

人工神经网络反向传播算法(BP算法)证明推导的更多相关文章

  1. BP人工神经网络-反向传播法

    0 网络计算结果 B(m)=f( ∑n( W(n,m)*X(n) ) + Θ(m) ) %中间层的输出 Y(k)=f( ∑m( V(m,k)*B(m) ) + ф(k) ) %输出层的输出 1 计算误 ...

  2. 神经网络中误差反向传播(back propagation)算法的工作原理

    注意:版权所有,转载需注明出处. 神经网络,从大学时候就知道,后面上课的时候老师也讲过,但是感觉从来没有真正掌握,总是似是而非,比较模糊,好像懂,其实并不懂. 在开始推导之前,需要先做一些准备工作,推 ...

  3. 神经网络反向传播算法&&卷积神经网络

    听一遍课程之后,我并不太明白这个算法的奇妙之处?? 为啥? 神经网络反向传播算法 神经网络的训练依靠反向传播算法,最开始输入层输入特征向量,网络层计算获得输出,输出层发现输出和正确的类号不一样,这时就 ...

  4. 神经网络——反向传播BP算法公式推导

    在神经网络中,当我们的网络层数越来越多时,网络的参数也越来越多,如何对网络进行训练呢?我们需要一种强大的算法,无论网络多复杂,都能够有效的进行训练.在众多的训练算法中,其中最杰出的代表就是BP算法,它 ...

  5. 反向传播(BP)算法

    著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:刘皮皮链接:https://www.zhihu.com/question/24827633/answer/29120394来源 ...

  6. 反向传播(BP)算法理解以及Python实现

    全文参考<机器学习>-周志华中的5.3节-误差逆传播算法:整体思路一致,叙述方式有所不同: 使用如上图所示的三层网络来讲述反向传播算法: 首先需要明确一些概念, 假设数据集\(X=\{x^ ...

  7. 第二节,神经网络中反向传播四个基本公式证明——BackPropagation

    假设一个三层的神经网络结构图如下: 对于一个单独的训练样本x其二次代价函数可以写成: C = 1/2|| y - aL||2 = 1/2∑j(yj - ajL)2 ajL=σ(zjL) zjl = ∑ ...

  8. BP神经网络反向传播之计算过程分解(详细版)

    摘要:本文先从梯度下降法的理论推导开始,说明梯度下降法为什么能够求得函数的局部极小值.通过两个小例子,说明梯度下降法求解极限值实现过程.在通过分解BP神经网络,详细说明梯度下降法在神经网络的运算过程, ...

  9. 神经网络中的反向传播法--bp【转载】

    from: 作者:Charlotte77 出处:http://www.cnblogs.com/charlotte77/ 一文弄懂神经网络中的反向传播法——BackPropagation 最近在看深度学 ...

随机推荐

  1. GeoJSON与GeoBuf互相转换

    GeoJSON格式通常比较大,网页需要较长时间加载,可以使用GeoBuf进行压缩. 使用GeoBuf有很多好处:结构紧凑.文件小.方便编码和解码.能适用各种GeoJSON等等. 使用: 1.安装 ge ...

  2. Promise.then方法的执行顺序例题分析

    1. 当Promise对象作为resolve的参数时 const p = Promise.resolve(); const p1 = Promise.resolve(p); //就是p const p ...

  3. Linux disk 100% busy,谁造成的?

    disk 100% busy,谁造成的? 2016/11/16 vmunix iostat等命令看到的是系统级的统计,比如下例中我们看到/dev/sdb很忙,如果要追查是哪个进程导致的I/O繁忙,应该 ...

  4. am335x system upgrade kernel emmc(十八)

    1      Scope of Document This document describes EMMC hardware design 2      Requiremen 2.1     Func ...

  5. manjaro xfce4 使用super+D快捷键显示桌面(以及使用super+方向键调整窗口)设置无效

    xfce4 有两个地方设置快捷键:Keyboard -> application shortcuts 和 window manager -> keyboard. window manage ...

  6. 生成一张带有logo的二维码图片

    string url = 二维码内容; , , Encoding.UTF8); // 合成活动的LOGO图片 var hasImage = GlobalTools.GetCommonContent(& ...

  7. MovingWallVelocity边界条件【翻译】

    翻译自:CFD-online 帖子地址:http://www.cfd-online.com/Forums/openfoam-solving/59646-movingwallvelocity-bound ...

  8. rsyslog使用简介

    1 把日志打到新的日志文件里面 #### RULES ####ruleset(name="remote"){ action(type="omfile" file ...

  9. IdentityServer4入门四:应用Implicit模式保护网站(下)

    为认证服务端增加数据库支持 我计划使用一个名为Admin的表,放在一个已有的数据库里.所以我需要定义Admin类和在配置里预先加上数据库连接 新增类:Admin.cs public class Adm ...

  10. 可视化图表库--goJS

    GoJS是Northwoods Software的产品.Northwoods Software创立于1995年,专注于交互图控件和类库.旗下四款产品: GoJS:用于在HTML上创建交互图的纯java ...