机器学习:神经网络(上)
1、 基本概念
在机器学习中,神经网络一般指的是“神经网络学习”,是机器学习与神经网络两个学科的交叉部分。所谓神经网络,目前用得最广泛的一个定义是“神经网络是由具有适应性的简单单元组成的广泛并行互连的网络,它的组织能够模拟生物神经系统对真实世界物体所做出的交互反应”。神经网络其实就是一个函数近似器。只是需要用神经网络拟合的这个函数关系一般很难用显式的表达表示出来。
神经元模型
神经网络中最基本的单元是神经元模型(neuron)。在生物神经网络的原始机制中,每个神经元通常都有多个树突(dendrite),一个轴突(axon)和一个细胞体(cell body),树突短而多分支,轴突长而只有一个;在功能上,树突用于传入其它神经元传递的神经冲动,而轴突用于将神经冲动传出到其它神经元,当树突或细胞体传入的神经冲动使得神经元兴奋时,该神经元就会通过轴突向其它神经元传递兴奋。一直沿用至今的“M-P神经元模型”正是对这一结构进行了抽象,也称“阈值逻辑单元“,其中树突对应于输入部分,每个神经元收到n个其他神经元传递过来的输入信号,这些信号通过带权重的连接传递给细胞体,这些权重又称为连接权(connection weight)。
激活函数
与线性分类十分相似,神经元模型最理想的激活函数也是阶跃函数,即将神经元输入值与阈值的差值映射为输出值1或0,若差值大于零输出1,对应兴奋;若差值小于零则输出0,对应抑制。但阶跃函数不连续,不光滑,故在M-P神经元模型中,也采用Sigmoid函数来近似, Sigmoid函数将较大范围内变化的输入值挤压到 (0,1) 输出值范围内,所以也称为挤压函数(squashing function)。
将多个神经元按一定的层次结构连接起来,就得到了神经网络。
2、 感知机与多层网络
线性可分问题
感知机(Perceptron)是由两层神经元组成的一个简单模型,但只有输出层是M-P神经元,即只有输出层神经元进行激活函数处理,也称为功能神经元(functional neuron);输入层只是接受外界信号(样本属性)并传递给输出层(输入层的神经元个数等于样本的属性数目),而没有激活函数。
感知机能很容易地实现逻辑与、或、非运算:
感知机权重的学习规则如下:对于训练样本(x,y),当该样本进入感知机学习后,会产生一个输出值,若该输出值与样本的真实标记不一致,则感知机会对权重进行调整,若激活函数为阶跃函数,则调整的方法为(基于梯度下降法):
其中 η ∈ ( 0 , 1 ) ,η∈(0,1) 称为学 习 率 (learning rate)。
若感知机对训绕样例(x,y) 预测正确,则感知机不发生变化,否则将根据错误的程度进行权重调整.
非线性可分问题
要解决非线性可分问题,需考虑使用多层功能神经元。输出层与输入层之间的一层神经元,被称为隐层或隐含层,隐含层和输出层神经元都是拥有激活函数的功能神经元。
常见的神经网络,每层神经元与下一层神经元全互连,神经元之间不存在同层连接,也不存在跨层连接。这样的神经网络结构通常称为“多层前馈神经网络”(这里的“前馈”指的是网络拓扑结构中不存在环或回路,而不是指该网络只能向前传播而不能向后传播),其中输入层神经网络接收外界输入,隐层与输出层神经元对信号进行加工,最终结果由输出层神经元输出。神经网络的学习过程,就是根据训练数据来调整神经元之间的“连接权”以及每个功能神经元的阈值。
一般说到神经网络的层数是这样计算的,输入层不算,从隐藏层开始一直到输出层,一共有几层就代表着这是一个几层的神经网络。
3、误差逆传播算法
误差逆传播(BP)算法是训练多层网络学习算法最杰出的代表。BP算法不仅可用于多层前馈神经网络,还可用于其他类型的神经网络。
给定训练集,输入示例由d个属性描述,输出l维实值向量。图5.7给出了一个拥有d个输入神经元、ll 个输出神经元、qq 个隐层神经元的多层前馈网络结构。
算法思想
一般而言,只需包含一个足够多神经元的隐层,就能以任意精度逼近任意复杂度的连续函数,故下面以训练单隐层的前馈神经网络为例,介绍BP神经网络的算法思想。
基本流程
BP算法的基本流程如下所示:
BP算法的更新规则是基于每个样本的预测值与真实类标的均方误差来进行权值调节,即BP算法每次更新只针对于单个样例。需要注意的是:BP算法的最终目标是要最小化整个训练集D上的累积误差,即:
如果基于累积误差最小化的更新规则,则得到了累积误差逆传播算法(accumulated error backpropagation),即每次读取全部的数据集一遍,进行一轮学习,从而基于当前的累积误差进行权值调整,因此参数更新的频率相比标准BP算法低了很多,但在很多任务中,累计误差下降到一定程度之后,进一步下降会非常缓慢,这时标准BP往往会更快获得更好的解,尤其是在训练集D非常大时更明显。
BP算法过拟合
有两种策略BP常用来缓解BP网络的过拟合。
- 第一种策略是“早停”:将数据分为训练集和验证集,训练集用来计算梯度、更新连接权和验证集,训练集用来计算梯度、更新连接权和阈值,验证集用来估计误差,若训练集误差降低但验证集误差升高,则停止训练,同时返回具有最小验证集误差的连接权和阈值。
- 第二种策略是“正则化”,其基本思想是在误差目标函数中增加一个用于描述网络复杂度的部分,例如连接权与阈值的平方和。
4、 全局最小与局部最小
学习的过程实质上就是一个寻找最优参数的过程,例如BP算法试图通过梯度下降来寻找使得累积经验误差最小的权值与阈值,在谈到最优时,一般会提到局部极小(local minimum)和全局最小(global minimum)。
局部极小解:参数空间中的某个点,其邻域点的误差函数值均不小于该点的误差函数值。
全局最小解:参数空间中的某个点,所有其他点的误差函数值均不小于该点的误差函数值。
梯度下降法的主要思想就是沿着负梯度方向去搜索最优解,负梯度方向是函数值下降最快的方向,若迭代到某处的梯度为0,则表示达到一个局部最小,参数更新停止。因此在现实任务中,通常使用以下策略尽可能地去接近全局最小。
现实任务中,跳出局部最小从而进一步接近全局最小的策略:
- (1)以多组不同参数初始化多个神经网络,各自按照标准方法训练之后,取其中误差最小的解作为最终参数,可以更有可能接近全局最小的结果;
- (2)使用“模拟退火”技术,在每一步都以一定概率接受比当前解更差的结果,有助于跳出局部最小。但迭代过程中,接受“次优解”的概率要随时间推移逐渐减低,保证算法稳定性;
- (3)使用随机梯度下降,在计算梯度时加入随机因素,则即便陷入局部极小点,计算出的梯度可能也不为零,则有可能跳出局部最小。
5、参考文献
《机器学习》周志华