Bootstrap

反向传播算法(BP神经网络)

是谁在耳边,说“信号正向传播,误差反向传播” ?

梦回遥远大三的计算智能课,三年前我可想不到居然有朝一日会重新"预习"它......

每一堂课、一本书,当时只道是寻常,如今不经意想起,忽怀念这些瞬间。所谓成长,正是这些乏味却又鲜活的琐碎;所谓时光,正是这些不经意却弥足深刻的只言片语吧。


目录

一. 相关概念

​二. 神经网络通用表示

1. 一个神经元模型

2. 全连接神经网络

三. 前向传播算法

四. 反向传播算法

1. 采用批量梯度下降法获得参数w和b的更新公式

2. 通过链式法则和残差δ的定义求解代价函数的偏导

(1)对于输出层(L层)的权重参数w的偏导

(2)对于隐藏层(l层)的权重参数w的偏导

(3)对输出层和隐藏层的偏置参数b的偏导

(4)公式总结

3.对N个训练样本集用BP算法更新参数的步骤


一. 相关概念

后向传播学习的前馈型神经网络(Back Propagation Feed-forward Neural Network)简称BPNN,不严谨地说BP一般就是BPNN。后向传播是一种学习方法、规则,体现网络的训练过程;前馈型网络是一种结构,体现网络架构。

后向传播\neq反馈型网络。常见学习规则除了后向传播还有梯度下降等。

  • 前(正)向传播网络
  • 后(反)向传播网络:反向传播是指通过比较输出层的实际输出和预期的结果,得到误差,然后通过相关的误差方程式调整最后一个隐含层到输出层之间的网络权重,之后从最后一个隐含层向倒数第二隐含层进行误差反馈,调整它们之间的网络权重,以此类推,直到输人层与第一隐含层之间的网络权重调整为止。
  • 前馈型网络:各神经元从输入层开始单向传播,只接收前一级输入,并输出到下一级,直至输出层。整个网络中无反馈,可用一个有向无环图表示。

  • 反馈型网络:输出层中存在着一个反馈回路到输入层作为输入层的一个输入,也可以自己到自己,可以理解为自控系统方框图中的反馈回路,可用有向循环图或者无向图表示。

​二. 神经网络通用表示

1. 一个神经元模型

上图x1,x2,⋯,xi,⋯,xn​表示神经元的n个输入,w1,w2,⋯,wi,⋯,wn​表示对应输入的权重参数(链接权重),神经元对输入x权重w进行加权求和得到加权输入z,也就是神经元的状态。随后将z传递给激活函数f(⋅),得到激活值,对于单个神经元,也就是其输出值y。其中激活函数f(⋅)可以为多种激活函数,且激活函数均为非线性函数。

2. 全连接神经网络

  • 在第 l 层神经元,用 n_{l} 表示这层神经元的个数,i\in \{1,2,...,n_{l}\}
  • x_{1}...x_{n_{l}}为输入,即\tiny (x_{1}^{(1)},x_{2}^{(1)},...,x_{i}^{(1)},...,x_{n_{l}}^{(1)})^{T}x_{i}表示第 i 个输入。
  • y_{1}...y_{n_{l}}为期望输出,即\tiny (y_{1}^{(l)},y_{2}^{(l)},...,y_{i}^{(l)},...,y_{n_{l}}^{(l)})^{T}y_{i}表示第 i 个期望输出。
  • \tiny z^{(l)}=\left( z_{1}^{(l)}, z_{2}^{(l)}, \cdots,z{_{i}}^{(l)},\cdots, z_{n_{l}}^{(l)}\right) ^{T}表示第 l 层的加权输出或神经元状态,z{_{i}}^{(l)}表示第 l 层的第 i 个神经元的加权输出。
  • a^{(l)}=\left( a_{1}^{(l)}, a_{2}^{(l)}, \cdots,a{_{i}}^{(l)},\cdots, a_{n_{l}}^{(l)}\right) ^{T}表示第 l 层的激活输出(实际输出),a{_{i}}^{(l)}表示第 l 层的第 i 个神经元的激活输出(实际输出)。
  • w{_{ij}}^{(l)}是权重矩阵W^{(l)}中的元素,表示前一层 l-1 层第j个神经元的第i个加权
  • b{^{(l)}=\left( b_{1}^{(l)}, b_{2}^{(l)}, \cdots,b{_{i}}^{(l)},\cdots, b_{n_{l}}^{(l)}\right) ^{T}表示从上一层到当前层 l 层的偏置。b{_{i}}^{(l)}表示当前层第 l 层第i个神经元的偏置。

三. 前向传播算法

第2层第1个加权输出 z{_{1}}^{(2)}=\omega {_{11}}^{(2)}x_{1}+\omega {_{12}}^{(2)}x_{2}+\omega {_{13}}^{(2)}x_{3}+b{_{1}}^{(2)}

第2层第1个激活值    a{_{1}}^{(2)}=f(z{_{1}}^{(2)})

⋯⋯

可总结出,第 l 层神经元的状态及激活值为(z

;