引入
神经网络(neural networks)是由具有适应性的简单单元组成的广泛并行互连的网络,它的组织能够模拟生物神经系统所作出的交互反应。我们在机器学习中谈论神经网络时指的是“神经网络学习”,或者说,是机器学习与神经网络这两个学科领域的交叉部分。
目录
5.1 神经元模型
5.2 激活函数
5.3 感知机与多层网络
5.3.1 感知机(线性可分)
5.3.2 多层网络
5.4 误差逆传播算法
5.4.1 梯度下降法
5.4.2 误差逆传播的参数更新过程
第一步:更新隐层到输出层的权值
第二步:更新输入层到隐层的权值以减小误差
5.5 全局最小与局部最小(待更)
5.6其他常见神经网络(待更)可先参考神经网络基础
1. 神经网络中最基本的成分是神经元(neuron)模型。
2. 生物神经网络:每个神经元与其他神经元相连,当它“兴奋”时,就会向相连的神经元发送化学物质,从而改变这些神经元内的电位;如果某神经元的电位超过了一个“阈值”(threshold),那么它就会被激活,即“兴奋”起来,向其他神经元发送化学物质。
3. M-P神经元模型
在这个模型中,神经元接收到来自 n 个其他神经元传递过来的输入信号,这些输入信号通过带权重的连接进行传递,神经元接收到的总输入值将与神经元的阈值进行比较,然后通过“激活函数”(activation function)处理以产生神经元的输出。
理想中的激活函数是图5.2(a)所示的阶跃函数,它将输入值映射为输出值“0”或“1”。“1”对应于神经元兴奋,“0”对应于神经元抑制。
然而,阶跃函数具有不连续、不光滑等不太好的性质,因此实际常用Sigmoid函数作为激活函数。
典型的Sigmoid函数如图5.2(b)所示,它把可能在较大范围内变化的输入值挤压到(0,1)输出值范围内,因此有时也称为“挤压函数”。
把许多个这样的神经元按一定的层次结构连接起来,就得到了神经网络。从计算机科学的角度看,我们可以将一个神经网络视为包含了许多参数的数学模型——这个模型是若干个函数,相互嵌套代入而得。例如
1. 感知机(Perceptron)由两层神经元组成。(PS感知机没有隐层,只有输入层和输出层。)
如图5.3所示,输入层接受外界输入信号后传递给输出层,输出层是M-P神经元,亦称“阈值逻辑单元”(threshold logic unit)。
2. 感知机能容易地实现逻辑与、或、非运算。
3. 需注意的是,感知机只有输出层神经元进行激活函数处理,即只拥有一层功能神经元(functional neuron),其学习能力非常有限。
事实上,上述与、或、非问题都是线性可分(linearly separable)的问题。
可以证明,若两类模式是线性可分的,即存在一个线性超平面能将它们分开,如下图中(a)(b)(c),则感知机的学习过程一定会收敛而求得适当的权向量w=(w1;w2;…;wn+1);否则感知机学习过程将会发生振荡,w难以稳定下来,不能求得合适的解,例如感知机不能解决下图中(d)所示的异或这样简单的非线性可分问题。
更一般地,给定训练数据集,权重wi(i=1,2,…,n)以及阈值可以通过学习得到。阈值可以看作一个固定输入为-1.0的“哑结点”所对应的连接权重wn+1,这样,权重和阈值的学习就可统一为权重的学习。
几乎所有的机器学习算法最后都归结为求一个目标函数的极值,即最优化问题,例如对于有监督学习,我们要找到一个最佳的映射函数f(x),使得对训练样本的损失函数最小化(最小化经验风险或结构风险)。感知机也是如此,其具体算法可参照此篇博客机器学习——感知机。
要解决非线性可分问题,需考虑使用多层功能神经元。例如下图5.5中这个简单的两层感知机就能解决异或问题。
在图5.5(a)中,输出层与输入层之间的一层神经元,被称为隐层或隐含层(hidden layer),隐含层和输出层神经元都是拥有激活函数的功能神经元。
更一般的,常见的神经网络是形如图5.6所示的层级结构,每层神经元与下一层神经元全都互连,神经元之间不存在同层连接,也不存在跨层连接。这样的神经网络结构通常称为“多层前馈神经网络”(multi-layer feedforword neural networks).
其中输入层神经元接收外界输入,隐层与输出层神经元对信号进行加工,最终结果由输出层神经元输出。换言之,输入层神经元只是接受输入,并不进行函数处理,隐层与输出层包含功能神经元。
为避免歧义,我们将5.5(a)称为单隐层网络。只需包含隐层,即可称之为多层网络。
神经网络的学习过程,就是根据训练数据来调整神经元之间的“连接权”(connect weight)以及每个功能神经元的阈值。
多层网络的学习能力比单层感知机强很多,欲训练多层网络需要更强大的学习算法。误差逆传播(error BackPropagation,简称BP)算法是其中最杰出的代表。
现实任务中使用神经网络时,大多是在使用BP算法进行训练。
BP算法不仅可用于多层前馈神经网络,还可用于其他类型的神经网络(如训练递归神经网络),不过一般说“BP网络”时,一般是指用BP算法训练的多层前馈神经网络。
BP是一个迭代学习算法,在迭代的每一轮中采用广义的感知机学习规则对参数进行更新估计。
它的学习规则是使用最速下降法(梯度下降法),通过反向传播来不断调整网络的权值和阈值,使网络的误差平方和最小。
函数在某一点的梯度是,在该方向单位步长上升最快的向量。梯度下降法是利用待优化变量,沿着负梯度方向不断迭代寻找最优值。
梯度下降法算法流程(具体证明过程见最优化方法书上)
BP算法基于梯度下降策略,以目标的负梯度方向对参数进行调整。所谓逆向传播其实是链式求导。假设隐层和输出层神经元都使用Sigmoid函数。
综上
误差逆传播算法如下:
如果类似地推导出基于累积误差最小化的更新规则,就得到了累积误差逆传播(accumulated error backpropagation)算法。
累计BP算法和标准BP算法对比
1.累积BP算法
(1)优点
累积BP算法直接针对累积误差最小化,它在读取整个训练集D一遍后才对参数进行更新, 其参数更新的频率低得多。
(2)缺点
但在很多任务中,累积误差下降到一定程度之后,进一步下降会非常缓慢。
2.标准BP算法
(1)优点
一般来说,标准B P 算法每次更新只针对单个样例,参数更新得非常频 繁,而且对不同样例进行更新的效果可能出现“抵消”现象.因此,为了达到同 样的累积误差极小点,标准B P 算法往往需进行更多次数的迭代.
(2)缺点
但在很多任务中,累积误差下降到一定程度之后,进一步下降会非常缓慢,这时标准BP往往会更快获得较好的解,尤其是在训练集D非常大时更明显.
其他
1.读取训练集一遍称为进行了 “一轮" (one round, 亦称one epoch)学习.
2.标准BP算法和累积BP算法的区别类似于随机梯 度下降(stochastic gradient descent,简称SGD)与标准梯度下降之间的区别.
5.6.1 RBF网络
5.6.2ART网络
5.6.3SOM网络
5.6.4级联相关网络
5.6.5Elman网络
5.6.6Boltzmann机