目录
前言
本文主要记录了有关机器学习问题中神经网络的部分,介绍了典型的BP算法,思路均来源于周志华老师《机器学习》第五章的内容和谢文睿老师的《机器学习公式详解》。
一、神经元模型
神经网络:由具有适应性的简单单元组成的广泛并行互连的网络,它的组织能够模拟生物神经系统对真实世界物体所做出的交互反应。神经网络中的最基本成分是神经元模型,即定义中的“简单单元”。
一直沿用至今的是“神经元模型”(一个用来模拟生物行为的数学模型):
神经元接受到来自个其他神经元传递过来的输入信号,这些输入信号通过带权重的连接进行传递,神经元接受到的总输入值将与神经元的阈值进行比较(做减法),然后通过“激活函数”(模拟抑制或激活)处理以产生神经元的输出(通常是给下一个神经元)。
在使用单个神经元的问题中,有两种典型的神经元激活函数:
在理想中是用(阶跃)函数,可以将输入值映射为输出值“0”或“1”,分别对应了神经元抑制和神经元兴奋,对应为感知机模型;
但由于阶跃函数不连续、不光滑等性质,实际中用函数做为激活函数,它把可能在较大范围内变化的输入值挤压到输出值范围内,故亦称为“挤压函数”,对应为对数几率回归模型。
二、感知机
2.1 感知机模型
感知机模型——激活函数为(阶跃函数)的神经元:
,
其中,为样本的特征向量,是感知机模型的输入,是感知机模型的参数,为权重,为阈值。
从几何角度来说,给定一个线性可分的数据集(使用感知机模型的前提),感知机的学习目标是求得能够对数据集中的正负样本完全正确划分的超平面,其中即为超平面方程。
维空间的超平面(,其中),拥有以下性质:
①超平面方程不唯一;
②法向量垂直于超平面;
③法向量和位移项确定一个唯一的超平面;
④法向量指向的那一半空间为正空间(点代入后值大于0),另一半为负空间(点代入后值小于0)。
2.2 感知机策略
感知机学习策略:随机初始化,将全体训练样本代入模型找出误分类样本,假设此时误分样本集合为,对任意一个误分类样本来说,当时,模型输出值为,样本真实标记为,反之可类推;综合两种情形可知,以下公式始终成立:,故给定数据集,其损失函数可以定义为:
可以看出,此损失函数非负,如果没有误分类点,损失值为0。且误分类点越少,误分类点离超平面越近,损失函数值就越小。
2.3 感知机学习算法
当误分类样本集合固定时,那么可以求得损失函数的梯度为;
感知机的学习算法采用随机梯度下降法,一次性随机选取一个误分点使其梯度下降对应权重的更新公式为:
,其中
其中被称为学习率,最终解出来的通常不唯一,即权重和阈值不唯一。
可以看出,当感知机对训练样例预测正确,则感知机不发生变化,否则将根据错误的程度进行权重调整。
三、神经网络
3.1 神经网络的特点
像感知机这种单个神经元分类能力有限,如感知机模型只能分类线性可分的数据集,要想解决线性不可分的问题,需考虑使用多层功能神经元。例如对于异或问题:
只需要通过两层感知机就能解决,输入层与输出层之间的一层被称为隐层或隐含层:
更一般的神经网络为层级结构,每层神经元与下一层神经元全互连,神经元之间不存在同层连接,也不存在跨层连接。这种神经网络结构通常被称为“多层前馈神经网络”,结构示意图如下:
将神经网络(记为)看作一个特征加工函数:
对于单输出回归任务:相当于接一个的神经元,如“没有激活函数的神经元”,转化为:,与线性回归模型的表达形式相同,区别在于的来源;
对于分类任务:相当于接一个的神经元,如“激活函数为函数的神经元”,转化为:,与对数似然估计的模型形式相同。
在模型训练过程中,神经网络在优化过程中自动学习提取有用的特征(学习),故机器学习更接近了“自动数据分析”,此时只需要提供足够的数据量即可大大提升学习效果。
根据通用近似定理,只需一个包含足够多神经元的隐层,多层前馈网络就能以任意精度逼近任意复杂度的连续函数。因此,神经网络既能做回归、也能分类、且不需要复杂的特征工程。
但同时,对于具体场景,神经网络模型存在以下问题:
- 需要神经网络做多深?多宽?——实际中采用“试错法”。
- 神经网络结构应该如何设计才最合理?
- 神经网络的输出结果该如何解释?
3.2 误差逆传播(BP)算法
给定训练集,,即输入示例由个属性描述,输出维实值向量。
以下示意图中给出拥有个输入神经元、个输出神经元、个隐层神经元的多层前馈网络结构,表示输入层第个神经元的阈值、表示隐层第个神经元的阈值、表示输入层第个神经元与隐层第个神经元之间的连接权、表示隐层第个神经与输出层第个神经元之间的连接权
假设多层前馈网络中的激活函数全为函数,且当前需要完成的任务为多输出回归任务,则损失函数可以用均方误差(分类任务用交叉熵)。
对某个训练样本,其中,假定其多层前馈网络输出为:,则该单个样本的均方误差为:。
在此网络中,需要确定的参数有权值、阈值,BP是一个迭代学习算法,在每一轮中采用广义的感知机学习规则对参数进行更新估计,即,,仅需推出损失函数关于参数的一阶偏导即可。而一般为极其复杂的非凸函数,故随机梯度下降法不能保证一定能走到全局最小点,更多情况为局部极小值点。
以下以从输入层到隐层的连接权为例来推导:
BP算法基于梯度下降策略,以目标的负梯度为方向对参数进行调整:
由,给定学习率,有,而(根据各个变量之间的相互影响,求导需要逐层并求和),以下进行公式的化简:
由此得到算法中关于的更新公式:,类似的,,,。式中:
对于学习率,控制着算法每一轮迭代中的更新步长,过大易震荡,过小收敛速度会太慢,在整个过程中可做取值调整。
以上算法更新规则基于单个的推导而得,称为“标准算法”,而算法的目标是最小化训练集上的累积误差:,类似可以推导出基于累积误差最小化的更新规则,就得到了“累积误差逆传播算法”。
一般来说, 标准算法只针对单个样例,参数更新非常频繁,且针对不同样例的更新效果存在“抵消”现象,故为了达到同样的累积误差极小点,需要更多次的迭代。而累积 算法直接对累积误差最小化,在读取整个训练集之后才对参数进行更新,频率下降了很多。
但累积误差在很多任务中下降到一定程度后会下降缓慢,此时采用标准 算法可以更快获得优质解,尤其是当训练集非常大时效果明显。
神经网络拥有强大的表达能力,但因此经常遭遇过拟合,其训练集误差持续降低,但测试误差可能上升,存在以下策略:
①“早停”:数据分为训练集和验证集,训练集用于计算梯度、更新连接权和阈值,验证集用来估计误差,若训练集误差降低但测试集误差升高,则停止训练,同时返回有最小验证集误差的连接权和阈值。
②“正则化”:在误差描述函数中加一个用于描述网络复杂度的部分,如连接权与阈值的平方和,则此时误差目标函数改变为:
其中用于对经验误差和网络复杂度进行折中,通常由交叉验证法来估计。
四、全局最小与局部最小
可直接类比一元函数中的极小值和最小值关系:
现实任务中,跳出局部最小从而进一步接近全局最小的策略:
- 以多组不同参数初始化多个神经网络,各自按照标准方法训练之后,取其中误差最小的解作为最终参数,可以更有可能接近全局最小的结果;
- 使用“模拟退火”技术,在每一步都以一定概率接受比当前解更差的结果,有助于跳出局部最小。但迭代过程中,接受“次优解”的概率要随时间推移逐渐减低,保证算法稳定性;
- 使用随机梯度下降,在计算梯度时加入随机因素,则即便陷入局部极小点,计算出的梯度可能也不为零,则有可能跳出局部最小。
总结
以上思路均来源于《机器学习》这本书第五章的内容。仅代表个人的思路和理解,如有错误欢迎指正!