个人博客文章链接: http://www.huqj.top/article?id=166
BP神经网络,即“反向传播”神经网络,是一种被广泛运用的人工神经网络,它的思想就是通过反向传播不断调整模型权重,最终使得模型输出与预期输出的误差控制在一个小范围内。其中反向传播的算法(BP算法)是核心。
一、模型架构
一个普通的神经网络模型大致如下图:
其中第一层称为“输入层”,最后一层称为“输出层”,其他层都是“隐含层”,每一层由若干个神经元(也就是图中的小圆圈)组成,输入层的神经元数目就是训练数据每个X的维度值,或者说是特征数目,输出层的神经元数目就是数据集的因变量维度。隐含层的数目和每层的神经元个数是随意的,一般根据模型需要调节。相邻层之间通过权重相连,每一层的每个神经元都与下一层的每个神经元相连。
BP神经网络训练的计算过程分为两种:前向传播和反向传播。
前向传播就是从数据数据前向计算出最终结果的过程,这也是模型训练好之后应用的方式。反向传播是一种参数调节方法,它从前向传播计算出的最终结果与实际数据相比计算误差,并根据数学公式逆向推导各个神经元和权重的误差,然后更新权重,重复前向传播的过程。在前向传播的过程中,除了第一层,每个神经元都接受上一层的输入,然后使用一个 激励函数 输出值到下一层。
二、数学原理(以下公式都为矩阵表示形式)
BP神经网络,本质上也是一个参数调优的模型,其中参数就是各个权重。
使用 a 表示每个神经元的输出, z 表示每个神经元的输入, W 表示权重, g(z) 表示神经元的激励函数,则前向传播的计算公式如下:
a(1) = Xi
i 表示是第i组训练数据
z(2) = W(1) * a(1) Add(a0 = 1)
W 是一个 Sl+1 * (Sl + 1) 的矩阵, Sk 表示是第 k 层神经元的数目,这里添加了一个值为1的偏置单元
a(2) = g(z(2))
g是激励函数,在分类问题中,通常使用sigmoid函数
以此类推,即可完成前向传播的过程,直到计算到输出层。
而对于反向传播(BP)的过程,实际就是求代价函数偏导数的过程,神经网络模型的代价函数如下:
为了计算这个代价函数的偏导数,我们定义了两个矩阵变量:δ 和 Δ,分别是二维和三维矩阵,δ 用来存储每个神经元的偏差,Δ 用来存储每个权重的偏差。
反向传播的计算公式如下&#x