BP神经网络的介绍

  本文着重讲述经典BP神经网络的数学推导过程,并辅助一个小例子。本文不会介绍机器学习库(比如sklearn, TensorFlow等)的使用。 欲了解卷积神经网络的内容,请参见我的另一篇博客一文搞定卷积神经网络——从原理到应用

  本文难免会有叙述不合理的地方,希望读者可以在评论区反馈。我会及时吸纳大家的意见,并在之后的chat里进行说明。

本文参考了一些资料,在此一并列出。

0. 什么是人工神经网络?

  首先给出一个经典的定义:“神经网络是由具有适应性的简单单元组成的广泛并行互连网络,它的组织能够模拟生物神经系统对真实世界物体所作出的交互反应”[Kohonen, 1988]。

  这种说法虽然很经典,但是对于初学者并不是很友好。比如我在刚开始学习的时候就把人工神经网络想象地很高端,以至于很长一段时间都不能理解为什么神经网络能够起作用。类比最小二乘法线性回归问题,在求解数据拟合直线的时候,我们是采用某种方法让预测值和实际值的“偏差”尽可能小。同理,BP神经网络也做了类似的事情——即通过让“偏差”尽可能小,使得神经网络模型尽可能好地拟合数据集。

1. 神经网络初探

1.1 神经元模型

  神经元模型是模拟生物神经元结构而被设计出来的。典型的神经元结构如下图1所示:
BP神经网络的介绍

【图1 典型神经元结构 (图片来自*)】

  神经元大致可以分为树突、突触、细胞体和轴突。树突为神经元的输入通道,其功能是将其它神经元的动作电位传递至细胞体。其它神经元的动作电位借由位于树突分支上的多个突触传递至树突上。神经细胞可以视为有两种状态的机器,**时为“是”,不**时为“否”。神经细胞的状态取决于从其他神经细胞接收到的信号量,以及突触的性质(抑制或加强)。当信号量超过某个阈值时,细胞体就会被**,产生电脉冲。电脉冲沿着轴突并通过突触传递到其它神经元。(内容来自*“感知机”)

  同理,我们的神经元模型就是为了模拟上述过程,典型的神经元模型如下:

BP神经网络的介绍

【图2 典型神经元模型结构 (摘自周志华老师《机器学习》第97页)】

  这个模型中,每个神经元都接受来自其它神经元的输入信号,每个信号都通过一个带有权重的连接传递,神经元把这些信号加起来得到一个总输入值,然后将总输入值与神经元的阈值进行对比(模拟阈值电位),然后通过一个“**函数”处理得到最终的输出(模拟细胞的**),这个输出又会作为之后神经元的输入一层一层传递下去。

1.2 神经元**函数

  本文主要介绍2种**函数,分别是sigmoidsigmoidsigmoidsigmoidsigmoid sigmoidb[1]=[b1[1]b2[1]]
z[1]=[w[1]11w[1]21w[1]12w[1]22w[1]13w[1]23]a[0]1a[0]2a[0]3+[b[1]1b[1]2]=[w[1]11a[0]1+w[1]12a[0]2+w[1]13a[0]3+b[1]1w[1]21a[0]1+w[1]22a[0]2+w[1]23a[0]3+b[1]2]z[1]=[w11[1]w12[1]w13[1]w21[1]w22[1]w23[1]][a1[0]a2[0]a3[0]]+[b1[1]b2[1]]=[w11[1]a1[0]+w12[1]a2[0]+w13[1]a3[0]+b1[1]w21[1]a1[0]+w22[1]a2[0]+w23[1]a3[0]+b2[1]]z[1]=[w11[1]amp;w12[1]amp;w13[1]w21[1]amp;w22[1]amp;w23[1]][a1[0]a2[0]a3[0]]+[b1[1]b2[1]]=[w11[1]a1[0]+w12[1]a2[0]+w13[1]a3[0]+b1[1]w21[1]a1[0]+w22[1]a2[0]+w23[1]a3[0]+b2[1]]z[1]=[w[1]11w[1]21w[1]12w[1]22w[1]13w[1]23]⋅⎡⎣⎢⎢⎢a[0]1a[0]2a[0]3⎤⎦⎥⎥⎥+[b[1]1b[1]2]=[w[1]11a[0]1+w[1]12a[0]2+w[1]13a[0]3+b[1]1w[1]21a[0]1+w[1]22a[0]2+w[1]23a[0]3+b[1]2]z[1]=[w11[1]w12[1]w13[1]w21[1]w22[1]w23[1]]⋅[a1[0]a2[0]a3[0]]+[b1[1]b2[1]]=[w11[1]a1[0]+w12[1]a2[0]+w13[1]a3[0]+b1[1]w21[1]a1[0]+w22[1]a2[0]+w23[1]a3[0]+b2[1]] z^{[1]}=\left[ \begin{array}{cc} w_{11}^{[1]} & w_{12}^{[1]} & w_{13}^{[1]} \\ w_{21}^{[1]}& w_{22}^{[1]} & w_{23}^{[1]}\end{array}\right]\cdot \left[ \begin{array}{cc} a^{[0]}_1 \\ a^{[0]}_2 \\ a^{[0]}_3 \end{array}\right] +\left[ \begin{array}{cc}b^{[1]}_1 \\ b^{[1]}_2 \end{array}\right]=\left[ \begin{array}{cc} w_{11}^{[1]}a^{[0]}_1+w_{12}^{[1]}a^{[0]}_2+w_{13}^{[1]}a^{[0]}_3+b^{[1]}_1 \\ w^{[1]}_{21}a^{[0]}_1+w_{22}^{[1]}a^{[0]}_2+w_{23}^{[1]}a^{[0]}_3+b^{[1]}_2\end{array}\right]