一、神经网络的正向及反向传播过程

以一个实例逐渐展开人工神经网络的计算过程为例,图 2-7-1是一个简单的神经网络拓扑图,第一层是输入层,包含两个神经元 ,截距项为;第二层为隐含层,包含两个神经元 ,截距项为 ;第三层为输出层,包含两个输出项 ,每条线上的数字表示神经元之间传递的权重值,记为 ;激活函数默认 Sigmoid 函数。

 图 2-7-1 一个简单的人工神经网络示意

各层的初始数据如下: 输入层: 隐含层: ; 输出层: ; 目标:使输入数据 (即 0.05 和 0.1)通过神经网络传导后,其输出尽可能接近输出(即 0.01 和 0.99)。
(一)前向传播 1. 输入层→隐含层 隐含层的计算过程如图 2-7-2 所示(以 h1为例)。

 图 2-7-2 隐含层的计算过程

首先计算输入层各神经元对隐含层该神经元(以 为例)的输入数据 ,然后计算经过激活函数(以 Sigmoid 函数为例)加工后的数据 。 计算神经元 的输入加权和
计算神经元 h1的输出数据 按此方法,可以计算出神经元 h2 的输出数据
2. 隐含层→输出层 输出层的计算过程如图 2-7-3 所示(以 为例)。

 图 2-7-3 输出层的计算过程

同理,。 至此,一个人工神经网络的前项传播过程就结束了。我们得到的输出值为[0.751 365 07,0.772 928 465],与我们的期望值[0.01,0.99]相差还很远,现在要做的是对误差进行反向传播,更新权值,直至得到符合要求的输出。
(二)反向传播 1. 计算总误差(Square error) 因为有两个输出,所以要分别计算 o1 和 o2 的误差,总误差为两者之和。 2. 隐含层→输出层的权值更新 以权重参数 w5 为例,如果我们想知道 w5 对整体误差产生了多少影响,可以用整体误差对w5 求偏导。就本例来讲,不再展现复杂的目标函数公式(包括正则化),仅就推导过程中的当下函数应用展示迭代过程,公式如下:
为了更清楚地说明这一链式公式,以图 2-7-4 直观演示隐含层到输出层误差是如何进行反向传播的。



图 2-7-4 隐含层到输出层的反向传播
现在逐一计算三项偏导的推导过程: ① 计算 ② 计算 容易推导,Sigmoid 函数的导数形式为 ③ 计算 ④ 三式相乘:
下面归纳这一层反向传播的通用公式: 表示 输出层的误差,即 因此,整体误差 的偏导公式可以写成: 根据梯度下降法, 的更新值为 其中, 为学习速率,在本次计算中暂取 0.5。 按通用公式,可计算出输出层其他三个参数的值为
3. 输入层→隐含层(如果是多个隐含层,则为隐含层→隐含层)的权值更新 其权值更新的方法与输出层的计算思路基本一致,但需要注意的是,在输出层计算总误差对 的偏导时,是从 进行推导的,但是在隐含层之间(或输入层与隐含层)的权值更新时,以 为例,是 ,而 会接受 两个地方传来的误差,所以其误差要逐一向前传导,如图 2-7-5 所示。

 图 2-7-5 输出层总误差的计算

① 计算 则有
② 计算
③ 计算
④ 将三者相乘: 下面归纳这一层反向传播的通用公式。为了简化公式,用 表示隐含层 的误差:
最后,更新 的权值: 按通用公式,可计算出输出层其他三个参数的值为
至此,误差反向传播就完成了,然后把更新的权值加入模型机中再次计算,如此不停迭代,直到达到我们要求的迭代阈值或误差值。在此例中,第一次迭代之后,总误差 Etotal 由0.298 371 109 下降至 0.291 027 924。迭代 10 000 次后,总误差为 0.000 035 085,输出为[0.015 912 196,0.984 065 734],原输入为[0.01,0.99],证明效果是不错的。 需要说明的是: 第一,此例是只有一个隐含层的神经网络,并且各层的神经元数量都为 2,在实际应用中,特征层的提取有时是相当复杂的,比如对图像的识别,对音频或视频的识别等,需要不止一个隐含层才有可能获得满意的模型,其正向传播或反向传播的计算量相当大,对计算机的算力要求也是相当高,采用的激活函数及目标函数也不尽相同,但基本模式及核心原理是一致的。 第二,此例所呈现的输入层神经元 ,映射到大数据集,即表示训练数据的特征变量,样本数据有几个特征变量,就有几个输入层的神经元。 第三,在正向传播计算中,对于多个样本值,不用每输入一个样本就去变换参数,而是输入一批样本(叫作一个 Batch 或 Mini-Batch),需要求得这些样本的梯度平均值后,根据这个平均值改变参数,也就是说,每个样本只进行前向传播和反向传播一次,然后计算梯度平均值,再进行下一轮计算。 第四,神经网络既可以用于回归分析,也可以作为分类工具加以使用。一般来讲,如果做回归分析,其输出层以一个神经元为主,即只需要输出我们所关心的相关值即可。如果做分类分析(人工神经网络的骨干应用层面),以二分类为例,分类如图 2-7-6 所示,设,则记 为 A 类,为 B 类。

 2-7-6 人工神经网络的回归分析

可以将输出层设为一个神经元,将 A 类训练为 1,将 B 类训练为 0。也可设为两个神经元,将 A 类训练为[1,0],B 类训练为[0,1]。如有九分类,在 Matlab 中,多维输出层可以表达为 [1,0,0,0,0,0,0,0,0]→1,[0,1,0,0,0,0,0,0,0]→2,[0,0,1,0,0,0,0,0,0]→3,[0,0,0,1,0,0,0,0,0]→4,[0,0,0,0,1,0,0,0,0]→5,[0,0,0,0,0,1,0,0,0]→6,[0,0,0,0,0,0,1,0,0]→7,[0,0,0,0,0,0,0,1,0]→8,[0,0,0,0,0,0,0,0,1]→9。