BP算法是迄今为止最为成功的神经网络学习算法,下面主要以多层前馈神经网络为例推导该算法。
1. M-P 神经元模型
图1展示了一个经典的神经元模型。在这个模型中,该神经元收到其他神经元传来的3个输入信号,这些输入信号通过带权重的连接进行传递,神经元接收到的总输入值将与神经元的阈值进行比较,然后通过“激活函数”处理以产生神经元的输出。
图 1 M-P 神经元模型
2. 激活函数
图1中的神经元输出可以表示为:
其中wi表示权重,θ表示阈值。为了方便后续的计算,这里将权重和阈值用一个矩阵Θ表示:
y=f(x) 就是激活函数。理想中的激活函数是图2(a)所示的阶跃函数,但由于不连续、不光滑等性质,因此常使用Sigmoid函数作为激活函数。
图 2 典型的神经元激活函数
存在:
3. 正向传播
图3给出了一个多层前馈神经网络,其中输入层神经元仅接受输入,不进行函数处理,隐层和输出层包含功能神经元。因此,该网络还可以称为“两层网络”或“单隐层网络”。
图 3 一个多层前馈神经网络示意图
其中θ(1)表示隐层神经元的输入权重和阈值,θ(2)表示输出神经元的权重和阈值。a(i)表示第i层神经元的输出,z(i)表示第i层神经元加权后的输入。使用Sigmoid函数作为激活函数,具体过程如下:
可以把上面的 [1; a] 看做是一个完整的 a
这样就完成了一次正向传播,通过输入的特征值x,得到预测的y值。
4. 反向传播,BP算法
我们需要通过给定的训练集 D={(x1,y1),(x2,y2),...,(xm,ym)} 来确定神经网络中的参数,即各功能神经元的权重和阈值Θ。BP是一个迭代学习算法,在迭代的每一轮中采用广义的感知机学习规则对参数进行更新和估计,任意参数θ的更新估计式为:
对训练例 (xk,yk) , 假定神经网络的输出为a(3)=(a1(3) ,a2(3)) , 则网络在该样例上的均方误差为:
通过该误差对神经网络上的参数进行调整。BP算法基于梯度下降策略,以目标的负梯度方向对参数进行调整,对误差Ek,给定的学习率η,有:
可以看到在输出层神经元中,θ(2) 先影响到 z(3), 再影响到输出值 a(3), 最后影响到 Ek,有:
注意,h=0 时,a0(2)=1。输出层的参数θ(2)就可以更新为:
同样,隐层的参数θ(1)更新为:
其中在调整上一层参数时已经被计算了。
此时,图3神经网络上的参数通过BP算法完成一次迭代了,该迭代过程循环进行,直到达到某些停止条件为止。
5. BP算法流程
输入:训练集 D={(x1,y1),(x2,y2),...,(xm,ym)} ,学习率 η
输出:所有神经元权重和阈值确定的多层前馈神经网络
1)在 (0, 1) 范围内随机初始化所有权重和阈值,即参数θ
2)repeat
3) for all (xk,yk) ∈ D do
4) 根据当前参数及正向传播理论,计算当前样本的输出
5) 计算各层神经元的梯度项e
6) 更新各层权重及阈值θ
7) end for
8) until 达到停止条件
以上内容主要参考吴恩达《机器学习》课程以及周志华《机器学习》