机器学习-第五章神经网络读书笔记(周志华)

前言

博主第一次接触机器学习,内容可能有许多原文复现,但是我尽量用自己的话来讲,觉得写得还行的话点个喜欢,谢谢!机器学习-第五章神经网络读书笔记(周志华)

读书笔记第一目的是为了总结,第二是顺便在博客上记录我的学习历程,同时也希望读者能有一点点收获吧~如果不对的地方,还请多多指教!

正文

周志华的机器学习第五章讲的是关于神经网络这一方面,内容上包括了基本神经网络的组成与基本概念,常见的神经网络学习算法以及相关优化问题,在后面简单介绍了几种常见的神经网络例如RBF网络,SOM网络,级联相关网络等,可以作为入门的基础资料进行阅读。

1.神经元模型

本章主要讲的是神经网络,从其组成来看,其最基本的组成成分为神经元,这也就对应了神经网络一词中的“神经“。而网络:顾名思义就是由这些神经元组成的广泛并行互连的网络。

神经网络的提出也是得益出于生物神经网络的思考,模拟生物大脑的网络处理方式。在生物神经网络中,每个神经元之间互连,当神经元接收了外部的输入,其神经元电位处于较高时,神经元会处于“兴奋”状态时会向其他神经元传递化学物质。而人工神经网络正是出于这种思考,我们假设每个神经元电位高于某个“阈值”时会处于兴奋,则对于每个神经元,如图5.1所示,我们可以通过将神经元的输入的线性组合量减去该阈值化作为函数变量的函数来量化是否处于兴奋状态,这个函数我们常常称之为**函数。而这个模型在业界称为"M-P神经元模型"。

机器学习-第五章神经网络读书笔记(周志华)

对于**函数,理想的**函数应当是阶跃函数,因为阶跃函数能够将输入值映射为“0”或者“1”,这两个输出结果很好的对应了“兴奋”与“抑制”状态。但是由于阶跃函数具有不连续,不光滑等不太友好的数学性质,会导致后期最优解问题的棘手,估在神经网络的**函数不采用阶跃函数,而是采用sigmod函数,两者在坐标轴如图5.2所示。

机器学习-第五章神经网络读书笔记(周志华)

将单个神经元以一定的层次结构连接起来就得到神经络,如图5.6所示.

机器学习-第五章神经网络读书笔记(周志华)

2.神经网络的雏形-感知机与多层网络

首先介绍一个非常简单的二层神经网络结构-感知机。

如图5.3所示,图中是一个只有2个输入x1,x2的感知机网络。当然输入不限制,文中只是举例只有2个输入的感知机网络。

感知机的结果非常简洁明了,输入层接收外界信号,输出层接收由输入层接的信号的线性组合,并通过**函数输出结果y。

那么这样一个简单神经网络应该如何训练我们在这里通过用感知机实现“与或非”运算来讲解一个神经网络应当如何训练:

显然输出层的神经元是一个M-P神经元,则对于该神经元的输出我们可以公式化为:机器学习-第五章神经网络读书笔记(周志华)同时为了便于讲解,我们假设**函数f为阶跃函数。

由两个输入变量的与或非的真值表,我们可以通过设定机器学习-第五章神经网络读书笔记(周志华)公式中的权重系数w与阈值θ去匹配真值表的结果。例如:

1."与"(X1,X2):令w1=w2=1,θ=2,即y=f(1*X1+1*X2-2),仅有当x1=x2=1时y=1;

2.“或”(X1,X2):令w1=w2=1,θ=1,即y=f(1*X1+1*X2-1),当 X1或X2为1时,y=1;

同理非也是如此,通过该例子我们可以理解神经网络训练的主要工作。更一般的,给定训练数据集,我们主要就是调整权重wi(i=1,2,...,n)以及阈值θ来拟合我们想要的输出结果。神经网络学习的目的就是根据我们的拟合结果与实际标记的偏差来不断调整权重以及阈值,这里为了便于表示,将阈值θ也作为权重系数中的第N+1维数据,这样我们就可以将权重与阈值的学习统一为权重的学习。

对于上述我们将的根据拟合结果与实际标记的偏差来调整权重以及阈值,我们可以将此策略公式化为:

机器学习-第五章神经网络读书笔记(周志华)

公式(5.2)中的机器学习-第五章神经网络读书笔记(周志华)即为我们拟合的结果,机器学习-第五章神经网络读书笔记(周志华)∈(0,1)为学习率,学习率控制算法每一轮迭代的更新步长,若太大则容易引起振荡,长时间不能收敛,太小则收敛速度同样很慢。公式(5.1)为权重更新公式。

实际上感知机的学习能力是非常有限的,因为虽然感知机虽然是一个二层神经网络模型,但是只有一层功能神经元,即输出层。感知机只能处理线性可分问题,对于线性不可分的问题的学习中,感知机会一直振荡,不能求得合适的解,也就是权重解。

对于非线性可分的问题,我们需要考虑多层功能神经元的模型,例如图5.5这个简单的两层感知机就能解决“异或”问题。

机器学习-第五章神经网络读书笔记(周志华)

3.多层神经网络学习算法

前面提到的简单二层感知机的学习规则并不适用于多层的神经网络,对于多层神经网络的学习,我们通常通过误差逆传播(error BackPropagation,简称BP)算法进行学习。误差逆传播算法适用于多种神经网络,例如常见的多层前馈神经网络,递归神经网络等。

接下来我们以多层前馈神经网络为例来讲解误差逆传播算法:

机器学习-第五章神经网络读书笔记(周志华)

假设给定训练集机器学习-第五章神经网络读书笔记(周志华),即每个输入样本都由d维属性描述,输出结果由l维实值向量。如图5.7所示,输入层拥有d个输入神经元,每个神经元接收每个样本的单个属性,其中隐层和输出层的神经元都为功能神经元,因此假设隐层的第h个神经元的阈值为机器学习-第五章神经网络读书笔记(周志华),输出层的第j个神经元的阈值为机器学习-第五章神经网络读书笔记(周志华),隐层的第h个神经元与输出层第j个神经元之间的连接权为机器学习-第五章神经网络读书笔记(周志华),隐层的第h个神经元与输入层第i个神经元之间的连接权为机器学习-第五章神经网络读书笔记(周志华)。因此我们可以记:第h个隐层神经元接收到得输入为机器学习-第五章神经网络读书笔记(周志华),第j个输出层神经元接收到得输入为机器学习-第五章神经网络读书笔记(周志华)

对于训练集机器学习-第五章神经网络读书笔记(周志华),我们设定神经网络输出机器学习-第五章神经网络读书笔记(周志华),即:

机器学习-第五章神经网络读书笔记(周志华)

在衡量拟合效果上,我们采用常用得均方误差来描绘实验输出结果与训练集的实际标记之间的偏差:

机器学习-第五章神经网络读书笔记(周志华)

下面我们通过隐层到输出层之间的连接权机器学习-第五章神经网络读书笔记(周志华)来推导:

显然,均方误差Ek越小越好,而我们由误差逆传播算法进行神经网络学习的目的也是通过调整连接权使得均方误差最小。

机器学习-第五章神经网络读书笔记(周志华)

实际上我们可以将该均方误差公式理解为输入变量为机器学习-第五章神经网络读书笔记(周志华),因变量为Ek的函数。因为机器学习-第五章神经网络读书笔记(周志华)首先影响到第j个输出单元的输入值Bj,再影响到输出机器学习-第五章神经网络读书笔记(周志华),最后影响到Ek。因此对于该最优解问题我们可以通过梯度下降法来求解该机器学习-第五章神经网络读书笔记(周志华)

我们假定学习率为机器学习-第五章神经网络读书笔记(周志华),因为要求均方误差Ek最小,因此我们以目标的负梯度方向对参数进行调整。因此我们有:

机器学习-第五章神经网络读书笔记(周志华)

由复合函数求导可得:机器学习-第五章神经网络读书笔记(周志华)

由前面Bj的定义我们可得机器学习-第五章神经网络读书笔记(周志华)

同时**函数sigmod函数有一个很好的数学性质就是:机器学习-第五章神经网络读书笔记(周志华)

于是根据公式5.4和5.3有:

机器学习-第五章神经网络读书笔记(周志华)

则经过这一系列的花间我们可以得到关于连接权Wij的更新公式:机器学习-第五章神经网络读书笔记(周志华)

类似可得机器学习-第五章神经网络读书笔记(周志华)

图5.8给出了BP算法的工作流程,对于每个输入样例BP算法的工作流程如下:

(1)输入层的神经元接收输入样例的属性后,按照一定的连接权将信号往输出层的方向传出,一直到输出层产生输出结果。

(2)根据样本的输出结果与样本实标的误差,也就是输出层的误差,再将误差逆向传播至隐层神经元,最后根据隐层神经元的误差来对连接权和阈值进行调整。

(3)重复步骤1和2,直至满足停止迭代的条件

机器学习-第五章神经网络读书笔记(周志华)

显然,我们上述的BP算法都是针对单个样本机器学习-第五章神经网络读书笔记(周志华),但是更一般来讲,针对一个神经网络的学习算法来讲,我们更加追求的应该是针对整个样本集。整个训练集D上的累计均方误差最小,即:

机器学习-第五章神经网络读书笔记(周志华)

相对于前面所述的“标准BP算法”,直接针对累计最小化的算法我们称为累积BP算法。这两种算法各有千秋,并不是说标准BP算法不能实现累积均方误差最小,标准BP算法同样也可以实现累积均方误差最小,只是需要多整个样本集进行多轮迭代调整,因为参数的更新频繁,对于不同样例的更新可能会出现抵消效果。而累积BP算法是直接读取整个训练集D后进行参数更新的,因此参数更新的频率很低,但是在很多任务钟,累积误差在下降到一定程度后继续下降的话很缓慢,这也是累积误差一个受限的地方。


3.过拟合与全局最小,局部最小问题

由于BP学习算法强大的学习能力,因此在这个过程中常常会遇到过拟合问题。体现在虽然训练集的误差是持续降低的,但是验证集的误差是在提升的,严重影响了泛化能力。

通常来说有两种策略来防止过拟合问题:

(1)早停策略:

将样本集分为训练集和测试集,在训练的过程中通过计算训练集的误差以及测试集的误差,理想情况是两者的误差都在减小,假若出现了训练集的误差在减小 而测试集的误差在增大的话则停止训练,同时返回具有最小测试集误差的连接权和阈值。

(2)正则化策略:

正则化是对学习过程中的目标函数进行调整,在目标函数中引入连接权与阈值的平方和一项,训练过程中会比较偏好较小的连接权与阈值,从而使得网络输出更加光滑,对于过拟合问题有所缓解。

误差目标函数修改为:机器学习-第五章神经网络读书笔记(周志华)

其中λ∈(0,1)用于对经验误差与网络复杂度这两项进行这种,通常通过交叉验证法来估计。


在这里另外提一下关于全局最小与局部最小问题。

例如我们前面所说的,均方误差函数实际上就是关于连接权重以及阈值的函数。我们实际上就是在寻找一组参数使得均方误差最小。

显然,无论是全局最小还是局部最小,对应的参数点在参数空间中的梯度都为0.不失一般性,全局最小值一定是局部最小值,而局部最小是不一定是全局最小值。

在BP学习算法中,我们要找的应当是全局最小问题,即参数空间内梯度为0,并且其误差函数值比参数空间中所有的误差函数值都要小。

对于最优解问题,我们可以有许多方法,例如基于梯度下降法和随机梯度法和模拟退火技术以及遗传方法等等。

具体问题我们要具体分析,例如我们的目标函数是一个凸函数,那我们可以选择通过基于梯度的负方向确定搜索方向,直至梯度为0的点就是我们要求的解,因为是凸函数,那么显然当前点即为全局最小的解。

但是如果不是一个凸函数呢? 梯度下降法是否还适用于寻找全局最小的解呢?显然是不太适合的,因为一般来说,在参数空间中,对于目标函数的局部最小解是有多个的,而梯度下降法只能够随机解出其中一个梯度为0的局部最小解,而该局部最小解又不一定是全局最小,所以梯度下降法是不适用于这种情况的,我们的寻优会陷入局部最小的局面。

下面我想介绍一下几种常见的逼近全局最小的算法:

(1)以多组不同参数值初始化多个神经网络,取出其中误差最小的解作为最终参数,不过这也有一定的随机成分,我们很大可能的能获得全局最小解。

(2)使用模拟退火技术,模拟退火在每一步都以一定的概率接收比当前解更差的结果,从而有助于跳出局部极小。

(3)使用随机梯度下降,与标准梯度下降法精确计算梯度不同,随机梯度下降法在计算梯度时加入了随机因素。

单独以模拟退火技术来讲解逼近全局最小思想:

模拟退火其实就是在寻找极值的基础上,加入了随机因素。在进行迭代更新可行解时,以一定概率接受一个比当前解要差的解,因此这样是有可能能避免陷入局部最优解,达到全局最优解。

以下图为例,假定我们从A点出发,模拟退火算法会搜索到局部最优解B,但是不是就此结束,当该算法过程中按一定的概率接受了右边的移动,就有可能能够跳出这个局部最优解B,也许经过几次这样的移动后就能达到全局最优解D。

机器学习-第五章神经网络读书笔记(周志华)

具体算法实现可以参考: https://blog.csdn.net/AI_BigData_wh/article/details/77943787?locationNum=2&fps=1