大家好,这里是七七,由于各种比赛的缘故,使用了很多人工神经网络模型。但是很多的原理都不是很明白,就导致了不能灵活地运用┭┮﹏┭┮。为此,去看了些人工神经网络原理书,写下此专题。
在进入正文之前要先说明,本文不是面向小白的(时间不够写那么多基础知识),建议在了解人工智能所需要用到的神经元、函数、梯度、矩阵的基础知识后,再来阅读此篇(这几部分基础知识真的很重要)。
一、MCP模型和感知器
MCP模型
最初的神经网络雏形,实在1943年,美国的科学家提出的MCP模型,这种模型就是模拟了人类的神经元,一个胞体,前面有很多树突输入,每个输入都有相应的权值;胞体也有自己的输出,在输入*权值之和大于某个临界值时,胞体的输出是一种形态(如1),否则就是另一种形态(如0)。至于是那种形态,取决于激活函数的设定,这里采用的是单位阶跃函数。这种就是基本型MCP模型。
之后对于这种模型进行了增强,推出了增强型MCP模型,规定
- 输出变量可以为任意实数
- 输入既可以表示同一神经网络中其他神经元的输出,也可以是神经网络的外部输入
- 激活函数可以为其他的函数形式(如分段线性函数、整流线性函数、软整流函数、S形函数等)
感知器
人工神经网络一般分为两个阶段,第一个是学习阶段或训练阶段,第二个是运行阶段。学习阶段主要任务是找到合适的决策函数和参数,运行阶段的任务就是通过训练得到的模型来进行识别或预测。
在训练阶段会选择一些数据作为训练集。假设训练集中有两类数据,如果在模式空间中存在一个超平面,可以分开这两类数据,那么就说这两种数据是线性可分的,否则就是非线性可分的。
1958年,美国心理学家提出了名为Perceptron(感知器)的人工神经网络架构及其训练算法,通过数学证明,得出了这样的结论:对于线性可分的二类识别问题,其训练算法是收敛的。
感知器的架构其实就是单个MCP模型神经元。
这个算法其实和bp神经网络算法很相似,可以看下边的例子,再次不过多做解释
由于说单个的感知器只能解决线性可分的二分类模式问题,为了能够处理多类别处理问题,我们可以把多个感知器并联,就形成了单层感知器。
二、多层感知器(MLP)
一般来说,一个MLP包含了一个输入层、一个输出层以及若干个隐层。相邻层的神经元之间以单项全互联方式进行连接。
要注意的是,输入神经元并不是真的神经元,它没有激活函数,也没有输入,只有输出。当我们说一个L层MLP时,是指输出层加上若干隐层后一共有L层,输入层是不计入其中的。
数学上可以证明,对于一个L(L>=2)层MLP,如果不限制各隐层神经元的个数,也不限制激活函数的形式,那么只要权值和阈值取值得当,则输出函数可以无限逼近任意一个N元函数。
MLP的训练学习通常是使用监督学习方法,即每一个作为输入的训练样本矢量都带有一个已知的我们所期待的输出矢量,也就是其标签。实际输出与标签的差异为其训练误差,当平均训练误差低于我们设定的某个值时,就说明模型训练成功。
当然,也可能即使训练了很多次,还是没能满足要求,这就说明模型设计上存在缺陷,或者初始的权值和阈值选取不合适,此时应该种植训练,修改初始值或模型再训练。
一般来说,再训练结束后应该还有一个测试阶段,用于测试模型的准确性,满足要求了才会使用,否则就需要修改模型。
BP算法
核心思想就是通过输出值与期望值的差距,通过求输出结果y 与每个神经元路径上权值w的偏导数,进行反馈,并沿梯度下降,从而达到反馈的效果。
此算法的案例在下文已经讲过,本文我们来探讨一些细节内容。
- bp算法要求激活函数是处处可导的,还需要有大量的数据且两个相同的样本标签必须相同。
- 初始值应该取绝对值较小的不同的随机值。
- 由于计算机的计算方式在本质上只能是离散的,所以在计算机上无法实现严格意义上的梯度下降算法,当BP算法的学习率η趋于0时,BP算法才能时梯度算法。
- 由于是梯度算法,所以可能最终结果为局部最优解,要避免这种情况,可以配合模拟退火算法、遗传算法、噪声注入算法等来使用。
- 学习率的选取也有讲究,建议越靠近输入层η越大,越靠近输出层η越小;训练初期η取较大值,后期取较小值等等。
- 容量可以理解为神经元与隐含层的数量,容量越大,越容易发生过拟合。因此如果发生过拟合,可尝试减小容量。
- 若误差容限设置的过小,收敛便会很困难,很可能导致过度训练,使得MLP过于在意一些无关紧要的细枝末节,导致效果较差。