神经网络的概念来源于生物学(仿生),并受其启发,但神经网络的发展早已摆脱了仿生物学的思路。 该领域现在研究的热门方向为深度神经网络。
“标准BP算法”并不“标准”,真正使用的是累计BP算法(目标为最小化训练集bp神经网络算法 matlab bp神经网络算法应用_神经网络上的累计误差)。
BP算法是梯度下降法的应用。
梯度下降算法:在参数寻优的过程中需要避免目标函数陷入局部极小。生活中的例子:盲人下山很有可能下到半山上的一个深坑中,这个“坑”就是局部极小。 梯度下降法的每一步只能感觉当前下降最快的方向,这一点很像盲人,没有全局视野,“入坑”难免。
模拟退火法:不是防止“入坑”而是考虑如何“跳出坑”,策略是加入“碰运气”成份(随机扰动)
在梯度下降算法中每次随机地从训练集中取小批量进行训练,这种方法称为随机梯度下降法。

神经元模型

【西瓜书图5.1】所示为神经元模型的一种(M-P神经元模型)。

设激活函数为bp神经网络算法 matlab bp神经网络算法应用_算法_02,则该神经元的数学模型为
bp神经网络算法 matlab bp神经网络算法应用_bp神经网络算法 matlab_03
其中,式(5.1)变为式(5.2)是将阈值bp神经网络算法 matlab bp神经网络算法应用_算法_04作为bp神经网络算法 matlab bp神经网络算法应用_神经元模型_05,对应为固定输入bp神经网络算法 matlab bp神经网络算法应用_神经元模型_06,即将bp神经网络算法 matlab bp神经网络算法应用_算法_07扩一维后公式变简洁了,参考3.1 线性回归中式(5)的推导。

因生物学中的神经元的状态为兴奋与抑制,以1和0表示,故取标记为bp神经网络算法 matlab bp神经网络算法应用_神经元模型_08,对应的神经元输出为符号bp神经网络算法 matlab bp神经网络算法应用_bp神经网络算法 matlab_09函数【西瓜书图5.2(a)】,然而,bp神经网络算法 matlab bp神经网络算法应用_bp神经网络算法 matlab_09函数(也叫bp神经网络算法 matlab bp神经网络算法应用_算法_11函数)的数学性质不好(不连续),通常以bp神经网络算法 matlab bp神经网络算法应用_bp神经网络算法 matlab_12函数逼近它【西瓜书图5.2(b)】,即式(5.1)与式(5.2)中取激活函数为bp神经网络算法 matlab bp神经网络算法应用_机器学习_13

注意调整字母:设数据集bp神经网络算法 matlab bp神经网络算法应用_算法_14,其中,样本bp神经网络算法 matlab bp神经网络算法应用_算法_15,二分类中对应的标记bp神经网络算法 matlab bp神经网络算法应用_算法_16(或bp神经网络算法 matlab bp神经网络算法应用_机器学习_17),这时,由样本bp神经网络算法 matlab bp神经网络算法应用_算法_18在上述神经元中产生的输出值通常不记为bp神经网络算法 matlab bp神经网络算法应用_神经元模型_19,而是记为bp神经网络算法 matlab bp神经网络算法应用_算法_20,因为,bp神经网络算法 matlab bp神经网络算法应用_神经元模型_19已被标记所占用,即标记为bp神经网络算法 matlab bp神经网络算法应用_算法_16(这是二元素的集合),神经元输出值为bp神经网络算法 matlab bp神经网络算法应用_神经网络_23(这是区间)。

另外,回顾3.2 对数几率回归(逻辑回归)【西瓜书式(3.18)(3.19)】就可用这里的神经元模型(【西瓜书图5.1】右上角公式及【西瓜书图5.2(b)】的公式)来表达, 比较二者知:公式是一致的(记bp神经网络算法 matlab bp神经网络算法应用_机器学习_24)。 即实际上对数几率回归是一个激活函数为bp神经网络算法 matlab bp神经网络算法应用_bp神经网络算法 matlab_12的神经元模型。 然而,二者的解释意义反映不同的侧面:一个是从概率角度,一个是从神经元角度。 结合二者就是:神经元的输出可以视为样本为正例的概率。

感知机与多层网络

感知机实际上就是一个神经元【西瓜书图5.3】所示,只不过是将样本输入用一组结点表示(一个属性对应一个结点),形成输入层,而神经元(一个)充当了输出层。

设数据集bp神经网络算法 matlab bp神经网络算法应用_算法_14bp神经网络算法 matlab bp神经网络算法应用_算法_02取阶跃函数,现在我们对感知机进行训练:

(1)先任意初始化参数bp神经网络算法 matlab bp神经网络算法应用_神经网络_28(含bp神经网络算法 matlab bp神经网络算法应用_算法_04的),记为bp神经网络算法 matlab bp神经网络算法应用_算法_30

(2)任取一样本bp神经网络算法 matlab bp神经网络算法应用_算法_07,将其输入到感知机(代入式(5.2))得到bp神经网络算法 matlab bp神经网络算法应用_bp神经网络算法 matlab_32,比较bp神经网络算法 matlab bp神经网络算法应用_bp神经网络算法 matlab_32bp神经网络算法 matlab bp神经网络算法应用_算法_34,若不符,则调整参数为bp神经网络算法 matlab bp神经网络算法应用_神经网络_35

(3)再任取一样本bp神经网络算法 matlab bp神经网络算法应用_算法_07,将其输入到感知机(代入式(5.2))得到bp神经网络算法 matlab bp神经网络算法应用_bp神经网络算法 matlab_32,比较bp神经网络算法 matlab bp神经网络算法应用_bp神经网络算法 matlab_32bp神经网络算法 matlab bp神经网络算法应用_算法_34,若不符,则再调整参数为bp神经网络算法 matlab bp神经网络算法应用_机器学习_40

(4)以此类推,直到bp神经网络算法 matlab bp神经网络算法应用_神经网络_28收敛。

上述调整bp神经网络算法 matlab bp神经网络算法应用_神经网络_28的迭代式为【西瓜书式(5.1)(5.2)】,如果是线性可分的问题,则迭代式是收敛的,即经过足够的“时间步”之后,bp神经网络算法 matlab bp神经网络算法应用_神经网络_28会(趋于)保持不变,其数学证明从略。 感知机视为两层(输入层和输出层)神经网络或一层功能层神经网络(输入层不运算),它适用于线性可分情况。

如果不是线性可分的问题,则迭代式不收敛,但可以构造含隐层的网络来解决(【西瓜书p.106】指出只需含足够多结点的单隐层即可)。 只要有隐层即称为多层,有足够多的层则称为深度学习网络。

误差逆传播算法

标准BP算法

【西瓜书图5.7】描述的是只含一个隐层(最简单的情况)的BP网络,除输入结点外,其余每个结点均为一个神经元。 为便于理解下面补充如下描述,一些约定俗成的知识可供读者作神经网络图时参照。

我们先改造样例的表示:设数据集bp神经网络算法 matlab bp神经网络算法应用_机器学习_44,将bp神经网络算法 matlab bp神经网络算法应用_机器学习_45个类别标识bp神经网络算法 matlab bp神经网络算法应用_神经网络_46对应成bp神经网络算法 matlab bp神经网络算法应用_机器学习_45维向量:类1对应为bp神经网络算法 matlab bp神经网络算法应用_神经元模型_48(第1位为1,其余全为0),类2对应为bp神经网络算法 matlab bp神经网络算法应用_bp神经网络算法 matlab_49(第2位为1,其余全为0),bp神经网络算法 matlab bp神经网络算法应用_神经网络_50,类bp神经网络算法 matlab bp神经网络算法应用_机器学习_45对应为bp神经网络算法 matlab bp神经网络算法应用_bp神经网络算法 matlab_52(第bp神经网络算法 matlab bp神经网络算法应用_机器学习_45位为1,其余全为0),这组向量记为:bp神经网络算法 matlab bp神经网络算法应用_算法_54,其中bp神经网络算法 matlab bp神经网络算法应用_神经网络_55表是第bp神经网络算法 matlab bp神经网络算法应用_算法_56行为1其余全为0的“独1”列向量。 这里为明确区别,将标记改为上标表示,即bp神经网络算法 matlab bp神经网络算法应用_神经网络_55表示类别bp神经网络算法 matlab bp神经网络算法应用_算法_56的标识向量,bp神经网络算法 matlab bp神经网络算法应用_神经元模型_59表示样本bp神经网络算法 matlab bp神经网络算法应用_神经元模型_60的标记向量。 在此改造下,数据集变为
bp神经网络算法 matlab bp神经网络算法应用_神经网络_61。 即样本是向量,标记也是向量(且为“独1”向量),对应到神经网络即是:输入是向量,输出也是向量。

再看图形特征:

(1)网络结构

  • 输入层对应于样本bp神经网络算法 matlab bp神经网络算法应用_机器学习_62向量,即输入层的结点数对应于样本bp神经网络算法 matlab bp神经网络算法应用_机器学习_62的属性数bp神经网络算法 matlab bp神经网络算法应用_机器学习_64,每个属性对应一个结点,用属性bp神经网络算法 matlab bp神经网络算法应用_bp神经网络算法 matlab_65标识该结点;
  • 输出层对应于输出向量,即输出层的结点数对应于上述类别向量的维度数bp神经网络算法 matlab bp神经网络算法应用_神经网络_66,用对应的类别标识bp神经网络算法 matlab bp神经网络算法应用_bp神经网络算法 matlab_67代表该结点数;
  • 只有一个隐层,隐层的结点数没有限制,通常大于输入层和输出层结点;
  • 从图形上看,层的编号是从底往上数的,输入层画在最底层。

(2)网络结点

  • 不同层用不同的字母表示:输入层用bp神经网络算法 matlab bp神经网络算法应用_bp神经网络算法 matlab_68,输出层用bp神经网络算法 matlab bp神经网络算法应用_bp神经网络算法 matlab_69,隐层用bp神经网络算法 matlab bp神经网络算法应用_bp神经网络算法 matlab_70
  • 下标表示结点的序号;
  • 下标变量也依层而异:bp神经网络算法 matlab bp神经网络算法应用_神经元模型_71对应到bp神经网络算法 matlab bp神经网络算法应用_神经网络_72

(3)网络连线

  • 同层内没有连线;
  • 邻层间“全连接”,且为有向连接线(从低层指向高层,常省略箭头);
  • 每条连线上都有权重,如,第一层线的权重用字母bp神经网络算法 matlab bp神经网络算法应用_神经网络_73表示,第二层线的权重用字母bp神经网络算法 matlab bp神经网络算法应用_bp神经网络算法 matlab_74表示;
  • 权重字母下标标识连接线的起点与终点,如,bp神经网络算法 matlab bp神经网络算法应用_算法_75表示bp神经网络算法 matlab bp神经网络算法应用_神经网络_76bp神经网络算法 matlab bp神经网络算法应用_bp神经网络算法 matlab_67的有向连线上的权重。

(4)神经元

  • 除输入结点外,每个结点都为一个神经元;
  • 神经元的输入:从有向连线的视角来看,结点的输入为每条入线之和,而每条入线的值为该线的起点值乘以该线的权重。 即每个神经元都有一个加权输入:如,bp神经网络算法 matlab bp神经网络算法应用_bp神经网络算法 matlab_67的加权输入为bp神经网络算法 matlab bp神经网络算法应用_bp神经网络算法 matlab_79,【西瓜书图5.7右上角】记为bp神经网络算法 matlab bp神经网络算法应用_机器学习_80
  • 神经元的阈值:同层的神经元的阈值用同一字母,如,隐层的为bp神经网络算法 matlab bp神经网络算法应用_机器学习_81,输出层的为bp神经网络算法 matlab bp神经网络算法应用_算法_82,阀的下标与该结点的下标一致,如,bp神经网络算法 matlab bp神经网络算法应用_算法_83表示结点bp神经网络算法 matlab bp神经网络算法应用_bp神经网络算法 matlab_67的阈值,bp神经网络算法 matlab bp神经网络算法应用_神经网络_85表示结点bp神经网络算法 matlab bp神经网络算法应用_神经网络_76的阈值;
  • 神经元的输出:神经元依输入(加权和)、阈值经过激活函数产生输出【西瓜书图5.1右上角公式】,所有神经元的激活函数均使用对数几率函数【西瓜书图5.2(b)】。

前述我们知道:样本向量的标记为向量,神经网络的输出(一组神经元的输出)也是向量,那么,这个向量有什么要求?
bp神经网络算法 matlab bp神经网络算法应用_bp神经网络算法 matlab_87

由于所有神经元的激活函数均使用对数几率函数,故bp神经网络算法 matlab bp神经网络算法应用_bp神经网络算法 matlab_88为连续值,训练的目标就是希望以连续型向量bp神经网络算法 matlab bp神经网络算法应用_bp神经网络算法 matlab_89式(5.3)预测离散型的“独1”向量bp神经网络算法 matlab bp神经网络算法应用_神经网络_90,由此构造均方误差bp神经网络算法 matlab bp神经网络算法应用_机器学习_91【西瓜书式(5.4)】。 将bp神经网络算法 matlab bp神经网络算法应用_机器学习_91中的bp神经网络算法 matlab bp神经网络算法应用_神经元模型_93视为“时间步”,希望足够的“时间步”后,bp神经网络算法 matlab bp神经网络算法应用_机器学习_91达到最小值。
注:(1)这里将bp神经网络算法 matlab bp神经网络算法应用_神经网络_90视为样本bp神经网络算法 matlab bp神经网络算法应用_神经网络_96的真值,而不是观察值;(2)前面以分类导出bp神经网络算法 matlab bp神经网络算法应用_神经网络_90为“独1”向量,其实bp神经网络算法 matlab bp神经网络算法应用_神经网络_90推广到了一般情形:bp神经网络算法 matlab bp神经网络算法应用_神经网络_99,参见3.3 线性判别分析LDA中的多分类LDA。

在实际训练中,bp神经网络算法 matlab bp神经网络算法应用_神经元模型_93亦可为样本的编号,当样本足够多时,依样本的次序对bp神经网络算法 matlab bp神经网络算法应用_机器学习_91进行训练,直至收敛到最小值即可。 然而,通常样本数小于训练所需的“时间步”数,这就要重复使用样本了。

bp神经网络算法 matlab bp神经网络算法应用_bp神经网络算法 matlab_102

bp神经网络算法 matlab bp神经网络算法应用_神经元模型_103训练bp神经网络算法 matlab bp神经网络算法应用_机器学习_91的基本思路即为误差逆向传播(BP算法),要点为:

(1)用梯度下降法寻找目标bp神经网络算法 matlab bp神经网络算法应用_机器学习_91的负梯度方向(下降最快的方向),即【西瓜书式(5.6)】,参见【西瓜书第B.4节梯度下降法】,其中bp神经网络算法 matlab bp神经网络算法应用_机器学习_106为学习率,它控制更新的步长:步子太大可能会越过最优点,步子太小则收敛速度太慢;

(2)利用偏导数的链式法则,将上述梯度化为沿“逆向路径”的偏导数。

(3)利用对数几率函数求导的良好性质,得到更新公式【西瓜书式(5.11)bp神经网络算法 matlab bp神经网络算法应用_神经网络_107(5.14)】。

我们重点推导【西瓜书式(5.10)】:
bp神经网络算法 matlab bp神经网络算法应用_bp神经网络算法 matlab_108

综上,得到“标准BP算法”【西瓜书图5.8】。

神经网络的输入为数字特征,然而,有时数据集(如,【西瓜书表4.3】中,“色泽”bp神经网络算法 matlab bp神经网络算法应用_神经网络_109)包含有非数字特征,需要进行数字化。 我们将这种“数据字典式”的特征改造为“判断式”(1表示是,0表示不是),即以(1,0,0)、(0,1,0)、(0,0,1)分别表示这三种色泽,这样,特征“色泽”由一维扩展成了三维,实现了数字化。 相应地增加输入层的结点数 。

累计BP算法

其实,“标准BP算法”并不“标准”,因为,训练的真正目标应是最小化训练集bp神经网络算法 matlab bp神经网络算法应用_神经网络_110上的累计误差,即目标函数为
bp神经网络算法 matlab bp神经网络算法应用_神经元模型_111
对网络训练时,每一时间步用全体bp神经网络算法 matlab bp神经网络算法应用_神经网络_110数据(批量),这显然与“标准BP算法”每一时间步使用bp神经网络算法 matlab bp神经网络算法应用_神经网络_110中一个样本(编号为bp神经网络算法 matlab bp神经网络算法应用_神经元模型_93的)不同。 即“标准BP算法”是一个变通做法。

这里,我们推导和讨论累计BP算法。

【西瓜书式(5.7)】与bp神经网络算法 matlab bp神经网络算法应用_神经元模型_93有关,为不丢失这个特点,可将【西瓜书式(5.10)】中的bp神经网络算法 matlab bp神经网络算法应用_机器学习_116改记为bp神经网络算法 matlab bp神经网络算法应用_算法_117bp神经网络算法 matlab bp神经网络算法应用_神经元模型_93为样本编号,不是指数。另外,这里涉及样本编号标识bp神经网络算法 matlab bp神经网络算法应用_神经元模型_93、网络结点编号标识,如bp神经网络算法 matlab bp神经网络算法应用_算法_56,其实,还有参数训练的轮次标识,这个通常省略),这样就有:
bp神经网络算法 matlab bp神经网络算法应用_神经元模型_121

用同样方法去推导bp神经网络算法 matlab bp神经网络算法应用_机器学习_122。 由此即可得到相关的迭代更新公式。 公式中的bp神经网络算法 matlab bp神经网络算法应用_神经网络_123表示使用完训练集中的全部数据之后,才做一次参数更新,称为“一轮”(epoch),算法需要一轮一轮地使用训练集,直至参数迭代式收敛。

另外,也可以每轮并不使用训练集的全量数据,而仅从训练集中随机地取固定大小的小批量数据进行训练,在训练集非常大时常这样做。

正则化

为避免过拟合问题,常将式(5.5)进行正则化,得到目标函数【西瓜书式(5.17)】,进一步可将其第二项改为在一轮中的平均值(bp神经网络算法 matlab bp神经网络算法应用_神经元模型_124)。

bp神经网络算法 matlab bp神经网络算法应用_机器学习_125

比较式(5.8)与式(5.5),知bp神经网络算法 matlab bp神经网络算法应用_bp神经网络算法 matlab_126的地位等同于bp神经网络算法 matlab bp神经网络算法应用_神经网络_127的地位,如是可以将前述“标准BP算法”改造为正则化的“标准BP算法”:

(1)对应于【西瓜书式(5.4)】的bp神经网络算法 matlab bp神经网络算法应用_神经网络_127, 为二次式的求导方便,将bp神经网络算法 matlab bp神经网络算法应用_bp神经网络算法 matlab_126的式子配上bp神经网络算法 matlab bp神经网络算法应用_机器学习_130,则
bp神经网络算法 matlab bp神经网络算法应用_机器学习_131
其中,bp神经网络算法 matlab bp神经网络算法应用_bp神经网络算法 matlab_132为超参数,bp神经网络算法 matlab bp神经网络算法应用_神经网络_133是针对所有bp神经网络算法 matlab bp神经网络算法应用_bp神经网络算法 matlab_134权重,即为bp神经网络算法 matlab bp神经网络算法应用_算法_135,其中bp神经网络算法 matlab bp神经网络算法应用_神经元模型_136表示bp神经网络算法 matlab bp神经网络算法应用_算法_04并入了bp神经网络算法 matlab bp神经网络算法应用_bp神经网络算法 matlab_134

(2)将梯度下降从应用于bp神经网络算法 matlab bp神经网络算法应用_机器学习_91改为应用于bp神经网络算法 matlab bp神经网络算法应用_bp神经网络算法 matlab_126,类似地得到各网络参数的迭代更新公式。

(3)用上述迭代更新公式取代BP算法【西瓜书图5.8】中对应的迭代式,其中,除学习率bp神经网络算法 matlab bp神经网络算法应用_bp神经网络算法 matlab_141外,新增超参数bp神经网络算法 matlab bp神经网络算法应用_bp神经网络算法 matlab_132

为确定超参数bp神经网络算法 matlab bp神经网络算法应用_bp神经网络算法 matlab_132,取若干不同的bp神经网络算法 matlab bp神经网络算法应用_bp神经网络算法 matlab_132值,视为不同的模型,记为bp神经网络算法 matlab bp神经网络算法应用_神经元模型_145,使用第2章的评估方法(如,交叉验证法),对各bp神经网络算法 matlab bp神经网络算法应用_神经元模型_145进行性能评估,从而找出最优的bp神经网络算法 matlab bp神经网络算法应用_机器学习_147,则bp神经网络算法 matlab bp神经网络算法应用_bp神经网络算法 matlab_148网络即为所求。

“跳出”局部极小

在参数寻优的过程中需要避免目标函数陷入局部极小。

生活中的例子:盲人下山很有可能下到半山上的一个深坑中,这个“坑”就是局部极小。 梯度下降法的每一步只能感觉当前下降最快的方向,这一点很像盲人,没有全局视野,“入坑”难免,因此,不是防止“入坑”而是考虑如何“跳出坑”,策略是加入“碰运气”成份(随机扰动):

  • 让多个盲人各自从不同的点下山(即不同的随机起点),有一人到达山脚即可。 这就是对参数进行不同的初始化,依每个初始化训练出不同的神经网络模型实例(不同的盲人),然后比较各自的最优目标函数值,找到最小者(到达山脚的盲人);
  • 每一步以一定的概率接受比当前更差的结果,即盲人本来是下山,但在每一步以一定的概率“上山”(在下山过程中偶尔“斜上”走一步),不时地改变一下路径,借用冶炼中的术语“退火法”,叫它为“模拟退火法”;
  • 在计算梯度时,加入随机因素,在大方向的指引下,每步都被“干扰”地走偏,曲折地前行。 如,在梯度下降算法中每次随机地从训练集中取小批量进行训练,这种方法称为随机梯度下降法。

本文为原创,您可以:

  • 点赞(支持博主)
  • 收藏(待以后看)
  • 转发(他考研或学习,正需要)
  • 评论(或讨论)
  • 引用(支持原创)
  • 不侵权