机器学习(周志华)- 第5章神经网络笔记
神经元模型
“M-P神经元模型”:
在这个模型中,神经元接收到来自n个其他神经元传递过来的输入信号,这些输入信号通过待权重的链接进行传递,神经元接受到的总输入值与神经元的阈值进行比较,然后通过激活函数处理输出。如下图:
理想的激活函数是阶跃函数,将输出值映射为0或1,。但是阶跃函数具有不连续、不光滑等不太好的性质,因此实际常用Sigmod函数作为激活函数。
把许多个这样的神经元按照一定的层次结构连接起来就得到了神经网络。
例如,将若干个$y = f(\sum_i w_i x_i - \theta_j)$互相嵌套带入得到。有效的神经网络算法大多以数据证明为支撑。
感知机与多层模型
简单感知机学习规则
感知机由两层神经元组成,如图。输入层即受到外界输入信号后传递给输出层,输出层是“M-P”神经元模型,亦称“阈值逻辑单元”。
感知机能够容易的实现与、或、非运算。
把阈值$\theta$看做一个固定输入为-1.0的哑节点,连接权重为$w_{n+1}$,这样,权重和阈值的学习就可以统一为权重的学习。感知机学习规则很简单,对训练样例(x,y),若当前感知机的输出为$\hat{y}$,则感知机权重将这样调整,
$$w_i \leftarrow w_i + \Delta w_i$$
$$ \Delta w_i = \eta (y - \hat{y}) x+i$$
其中$\eta \in (0,1)$称为学习率。从上式可以看出,若感知机对训练样例(x,y)预测正确,即 $y = \hat{y}$则感知机不会变化,否则将会根据错误的程度进行权重调整。
需要注意,感知机只有输出神经元进行激活函数处理,即只有一层功能神经元,其学习能力十分有限。
而与或非都是线性可分的问题,可以证明若两类模式是线性可分的,即存在一个线性超平面能将他们分开,则感知机的学习过程一定会收敛而求得适当的权向量$w=(w_1;w_2;\ldots, w_{n+1})$,否则感知机学习过程将会发生震荡,w难以稳定下来,不能求得合适解。
要解决非线性可分功能,需要考虑使用多层功能神经元。
多层前馈神经网络
每层神经元与下一层神经元完全互联,神经元之间不存在同层链接也不存在跨层链接。
即谁曾神经元仅是接受输入,不进行函数处理,隐含层与输出层包含功能神经元。
神经网络的学习过程,就是根据训练函数来调整神经元之间的“连接权”以及每个功能神经元的阈值;换言之,神经网络“学”到的东西,蕴含在连接权和阈值中。
误差逆传播算法(BackPropagation,BP)
预训练多层网络,简单感知机学习规则不够,需要更强大的算法。
BP是迄今最成功的神经网络学习算法,现实任务中使用神经网络大多是使用BP。
BP算法不仅可以用于多层前馈神经网络,还可以用于其他类型,例如“训练递归神经网络”。但常说的“BP网络”一般指BP训练的多层前馈神经网络。
BP算法详解
如上图,对训练例$(\mathbf{x_k},\mathbf{y_k})$,假设神经网络的输出为$\hat{y}_k = (\hat{y}_1,\hat{y}_2,\ldots,\hat{y}_l)$,即
$$\hat{y}_j^k = f(\beta_j-\theta_j)$$
则网络在$(\mathbf{x_k},\mathbf{y_k})$上均方误差:
$$E_k = \frac{1}{2} \sum_{j=1}^l (\hat{y}_j^k-y_j^k)^2 \quad (1)$$
上图的网络一共有下面的参数需要确定:
- 输入层到隐层的d * p个权值
- 隐层到输出层的q * l个权值
- q个隐层神经元阈值
- l个输出层神经元阈值
BP是一个迭代学习算法,在迭代的每一层才赢广义的感知机学习规则对参数进行更新估计,任意参数v的更新公式为:
$$v\rightarrow v+\Delta v \quad (2)$$
下面以隐层到输出层连接权$w_{hj}$为例进行推导。
BP算法基于梯度下降策略,以目标的负梯度方向对参数进行调整。对(1)式的误差$E_k$,给定学习率$\eta$有:
$$\Delta w_{hj} = - \eta \frac{
\partial{E_k}}{\partial{w_{hj}}}$$
注意到$w_{hj}$先影响到到第j个输出层神经元的输入值$\beta_j$,再影响到其输入值$\hat{y}_j^k$,然后到$E_k$,有:
$$\frac{
\partial{E_k}}{\partial{w_{hj}}} = \frac{
\partial{E_k}}{\partial{\hat{y}_j^k}} · \frac{
\partial{\hat{y}_j^k}}{\partial{\beta_j}} · \frac{
\partial{\beta_j}}{\partial{w_{hj}}}$$
(推导过程暂时不写了 )
学习率控制着每一轮迭代中的更新步长,若胎发则容易震荡,太小收敛速度又慢,有时为了调整,几个层之间的学习率可以不相等。
具体步骤
- 先将输入实例提供给输入层神经元,然后逐层将信号前传,直到产生输出层的结果;
- 计算输出层误差,计算输出层神经元梯度项,再将误差逆向传播至隐层神经元
- 最后根据隐层神经元的误差对连接权和阈值进行调整
该迭代过程循环进行,直到达到某些同志条件为止。例如训练误差已经达到一个很小的值。
需要注意的是,BP实验法的目标是最小化训练结D上的累计误差,但我们所说的只是针对一个训练样例的更新连接权值和阈值。
标准BP算法每次只针对翻个样例,参数更新十分频繁,而且对不同样例进行更新可能会出现“抵消”现象,因此为了达到同样的积累误差极小点,标准BP需要进行多次迭代。
累积BP则直接针对累积误差最小化,在读取完整个训练结一遍后才对参数进行更新,更新频率低得多。
但在很多任务中累积误差下降到一定程度后进一步下降会十分缓慢,这时标准BP反而获得较好解。
防止BP过拟合
由于强大的表示能力,BP神经网络容易过拟合,其训练误差持续降低但是测试误差可能上升。有两种策略:
- “早停”:将数据集分为训练集和验证集,训练集用于计算梯度、更新连接权值和阈值,验证集用来估计误差。若训练误差降低但是验证集误差升高则停止训练。
- “正则化”:基本思想是在误差目标函数中增加一个用于描述网络复杂度的部分,例如链接权值和阈值的平方和。训练过程将会偏好比较小的连接权值和阈值,使网络输出更加“光滑”,从而缓解过拟合。
全局最小与局部最小
梯度下降法沿着负梯度下降方向搜索最优解,容易陷入局部最小值。
现实生活中人们通常采用以下策略来“跳出”局部最小值,进一步获得全局最小:
- 以多组不同参数初始化多个神经网络,按标准方法训练后去其中误差最小的解作为最终参数。相当于从多个不同的初始点开始搜索,这样可能陷入不同的局部最小值,从中选出可能获得更接近全局最小的结果。
- 使用模拟退火。模拟退火在每一步都以一定概率接受比当前解更差的结果,从而有助于跳出局部最小。在每部迭代中接受次优解的概率随着时间的推移而逐渐降低,从而保证算法稳定。
- 采用随机梯度下降。与标准梯度下降的精确计算梯度不同,随机梯度下降在计算题都的时候加入了随机因素,因此,即时陷入局部极小点,它计算出来的梯度仍可能不为0,就有机会跳出局部最小继续搜索。
- 遗传算法。
上述大多是启发式,理论上缺乏保证。
其他常见神经网络
RBF网络
径向基函数网络,是一种单隐层前馈神经网络,它使用径向基函数作为隐层神经元激活函数,输出层是对隐层神经元输出的线性组合。
通常采用两步过程来训练RBF网络:
- 第一步,确定神经元中心ci,常用的方式有随机采样、聚类等
- 第二步,利用BP算法来确定参数wi和$\beta_i $
ART网络
自适应谐振网络。SOM网络
自组织映射网络及连相关网络
Elman网络
Boltzmann机
是一种递归神经网络。
深度学习
理论上说,参数越多的模型复杂度越高,容量越大,这意味着能完成更复杂的学习任务。但是一般情形下,复杂模型的训练效率低,容易陷入过拟合,难以收到人们青睐。
随着云计算、大数据时代的到来,计算能力的大幅增加可以降低过拟合的风险,因此,以深度学习为代表的复杂模型收到人们的关注。
典型的深度学习模型就是很深层的神经网络。
提高容量的一个方法就是增加隐层的数目,然而多隐层神经网络难以直接用经典算法进行训练,因为误差在多隐层内逆传播时候往往会发散而不能收敛到稳定状态。
无监督组成训练是多隐层网络训练的有效手段,基本思想是每次训练一层隐节点,训练时候将上一层隐节点的输出作为输入。,成为“预训练”,在预训练全部完成以后,再对整个网络进行微调。
事实上“预训练+微调”做法可以看成将大量参数分组,对每组找到局部看起来较好的设置,然后再基于这些局部较优的结果联合起来全局寻优。这样就利用了模型大量参数所提供的自由度的同时,有效节省了训练开销。
另一种节省训练开销的策略是“权共享”,让一组神经元使用相同的连接权,这个策略在卷积神经网络(CNN)中发挥了重要作用。
换另一个角度理解深度学习,无论是DBN还是DNN,其多层堆叠、每层对上一层输出进行处理的机制,可以看做对输入信号进行逐层加工,从而把初始的、与输出目标之间联系不密切的输入表示为与输出更模切的表示是的原来仅基于最后一层输出映射难以完成的任务成为可能。
换言之,通过多层处理逐渐将初始的低层特征表示转换为高层的特征表示后用简单模型即可完成复杂的分类更学习任务,因此深度学习也可以理解为“特征学习”或者“表示学习”。
课外阅读材料
- 除了MP神经模型还有脉冲盛景园模型等。
- MacKay在贝叶斯框架下提出了自动确定神经网络正则化参数的方法。
- 神经网络是一种难以解释的黑箱模型,但是有一些工作尝试改善神经网络的可解释性,主要途径是从神经网络中抽取易于理解的符号规则。