BP神经网络是1986年由Rumelhart和McClelland为首的科学家提出的概念,是一种按照误差逆向传播算法训练的多层前馈神经网络,是目前应用最广泛的神经网络(摘自百度百科)。
结构与原理
神经网络由三部分组成,分别是输入层、隐藏层和输出层,三层指的是三类而不是三个,其中输入层与输出层只有一层,而隐藏层则可以是多层的。每一层都有一定数量的神经元,不同层之间的神经元用线连接起来,每条线都有一定的权重,除了权重,没层还可能会有对应的偏置。
BP神经网络的学习过程由信号的正向传播和误差的反向传播两个过程组成。正向传播时,输入样本由输入层传入,经过隐藏层处理后,传入输出层,输出层计算输出预测的结果,正向传播过程到此结束。当预测的结果与期望存在误差时,则会将误差进行反向传播,通过计算出的误差来反向依次调整隐藏层到输出层的权重和偏置、输入层到隐藏侧的权重和偏置。如此循环两个过程,直至满足停止条件,如权重的更新低于某个域值,预测的错误率低于某个域值,达到一定的迭代次数等。
如图第一层为输入层,最后一层为输出层,第的2到层都为隐藏层,图中只画了一层隐藏层。其中的+1,为偏置。、...为输入单个样本的输入。表示从第层的第个神经元指向第层的第个神经元的线的权重。表示第层第个神经元的偏置。表示第层神经元到第层的第个神经元的加权和。表示第层的第个神经元的加权和经过激活函数计算后得到该神经元的输出值。除了输入层,其他层的神经元都会有一个前一层神经元的加权和做为激活函数的输入,然后得到输出。
1.正向传播
对于第层的第个神经元,它的输入为:
假设为激活函数,则第层的第个神经元,它的输出为:
而对于整个第层权重矩阵为:
, , 为第层神经元数量,为第层神经元数量。第列即为第层的第个神经元到第层各神经元的连线的权重。
第层偏置矩阵为:
第层神经元的输入矩阵即为:
第层的输出矩阵即可表示为:
若是多个样本,则、为多列,每一列代表一个样本。
当为2时,,即样本的值。
2.反向传播
对于单个样本,假设样本正向传播的输出为:
定义单个样本的误差为:
其中L是损失函数,具体是什么根据需要选择,如平方损失函数、交叉熵损失函数等。
反向传播的目的为了让的值尽可能的小。而对于一个样本输出值是由输出层的输入决定的,而则是受隐藏层到输出层的神经元的线权重和偏置影响的。所以通过调整权重和偏置就可以先影响输出层的输入,再影响到输出,最后影响到。由于梯度表示函数在某一点处沿着梯度的方向增长最快,沿着梯度的方向可以取得函数的最大值。而我们要求的是函数的最小值,所以要沿着与梯度相反的方向调整参数来最小化。问题就转化为了对误差函数求和的偏导。
根据链式法则,对于单个样本从隐藏层层第个神经元到输出层(层)第个神经元的线权重的偏导为:
同理偏置的偏导为:
由此整个隐藏层层到输出层的神经元的偏置矩阵的偏导为:
线权重矩阵的偏导为:
若是多个样本, 则 、、为多列,每一列代表一个样本。
对于单个样本从隐藏层第个神经元到隐藏层层第个神经元的线权重的偏导为:
偏置的偏导为:
由此整个隐藏层层到隐藏层层的偏置矩阵的偏导为:
线权重矩阵的偏导为:
若是多个样本, 则 、为多列,每一列代表一个样本。当为2时,,即样本的值,此时即为输入层到隐藏层的线权重矩阵的偏导。
设学习率为,则权重矩阵与偏置矩阵的更新公式为:
如此从输出层到输入层的一次反向传播就完成了对权重与偏置的更新。然后重复上面的两个过程直至达到迭代终止条件,如权重的更新量低于某个域值,预测值的误差低于某个域值、达到最大迭代次数等。
公式中的与要根据具体选择的函数展开求导,如损失函数常见的有平方损失函数、交叉熵损失函数等。激活函数常见的有Sigmoid、Tanh、ReLU等。