一、 神经网络的定义
神经网络的命名有 神经网络(Neural Networks )、人工神经网络(Artificial Neural Networks )、人工神经系统(Artificial Neural Systems)、神经计算机(Neural Computers)、自适应系统(Adaptive Systems)、 自适应网(Adaptive Networks)和 联结主义(Connectionisms)等。
生物神经系统:每个神经元通过轴突与其他相邻的神经元相连, 当神经元受到刺激而“兴奋” 时, 就会向相连的神经云传递神经脉冲, 从而改变这些神经元内的电位;如果神经元的电位超过一个“阈值” , 那么它就会被激活, 即“兴奋” 起来, 再向其它相连的神经元传递神经脉冲。
“神经网络是由具有适应性的简单单元组成的广泛并行互联的网络, 它的组织能够模拟生物神经系统对真实世界物体所作出的反应。” [Kohonen, 1988]
机器学习中的神经网络通常是指“神经网络学习” ,或者说是机器学习与神经网络两个学科的交叉部分。
二、 M-P神经元模型
最基本的信息处理单元: M-P神经元模型
输入:来自其他 个神经云传递过来的输入信号
处理:输入信号通过带权重的连接进行传递, 神经元接受到总输入值将与神经元的阈值进行比较
输出:通过激活函数的处理以得到输出
激活函数(Activation Function) : 对神经元所获得的网络输入的进行变换, 也称为激励函数、 活化函数: o=f(net) 。 常用的激活函数有:
1、线性函数(Linear Function)
f(net) =knet+c
线性函数只能进行线性变化,不适合用来处理非线性问题。
2、 非线性斜面函数(Ramp Function)
γ为大于0的常数,被称为饱和值,是神经元的最大输出。
3、 阈值函数(Threshold Function)
α、 β、 γ均为非负数, θ为阈值二值形式:
4、 逻辑斯蒂函数(Logistic Function)
f(net) =a+b/(1+exp(-dnet)) a, b, d为常数。 它的饱和值为a和a+b。
a=0, b=1, d=1时, 简化为最简单的形式:f(net) = 1/(1+exp(-net))
逻辑斯蒂函数形如S, 也叫S形函数;将较大范围变化的输入值挤压到(0,1) 的输出值范围内, 因此也叫挤压函数;有较好的增益控制能力, 也叫增益控制函数。
三、 单层感知机
1. 定义: 单层感知机只拥有一层M-P神经元, 即只包含输入层和输出层, 输入层接受外界输入信号后传递给输出层, 输出层是M-P神经元, 进行激活处理。比如, 下图所示的M-P神经元模型, 就是一个最简单的单层感知机, 输出层只有一个神经元。
2. 单层感知机的学习规则:
3. 单层感知机的学习能力:
1)尽管单层感知机能够非常容易地实现逻辑与、或、非运算,但其学习能力还是非常有限。
2)事实上,逻辑与、或、非运算问题都是线性可分的问题。可以证明[Minsky and Papert, 1969],若二分类问题是线性可分的,即存在一个线性超平面能将它们分开,则感知机的学习过程一定会收敛,否则感知机的学习过程将会发生振荡,甚至不能解决异或这样简单的非线性可分问题。
3)要解决非线性可分问题,就需要使用多层功能神经元。比如两层感知机,输入层与输出层之间的一层神经元,被称为隐含层,隐含层和输出层神经元都是拥有激活函数的功能神经元。
四、 多层前馈神经网络
- 多层前馈神经网络的学习:
多层前馈神经网络的表达能力比单层感知机要强得多。要学习多层前馈神经网络,单层感知机的学习规则是远远不够的,需要更强大的学习算法。误差逆传播(Error Back Propagation,简称BP)算法就是其中最杰出的代表,它是迄今最成功的神经网络学习算法。
现实任务中使用神经网络时,大多是在使用BP算法进行训练。需要指出的是, BP算法不仅可用于多层前馈神经网络,还可用于其他类型的神经网络,比如递归神经网络。但通常说BP网络的时候一般是指用BP算法训练的多层前馈神经网络。
2. BP算法
3. BP算法的基本过程:
BP算法的基本工作过程大致可以分为三个阶段:
1)信号的前向传播阶段:在这个阶段,要求计算出隐含层和输出层中每一神经元的网络净输入和网络输出。
2)误差的逆向传播阶段:在这个阶段,要求计算出输出层和隐含层中每一神经元的误差。
3)权值和阈值的更新阶段:在这个阶段,要求更新所有连接权的权值和所有M-P神经元的阈值。
4. BP算法可能面临的问题:
1)结构学习问题:
多层前馈神经网络包括:输入层、输出层、一个或多个隐含层。输入层神经元的个数由输入的数据维度(连续属性)和编码方法(离散属性)确定;输出层神经元的个数由待分类的类别数目和编码方法确定,比如4类问题的二进制编码需要2个神经元。
[Hornik et al. , 1989]证明:只需要一个包含足够多神经元的隐含层,多层前馈神经网络就能以任意精度逼近任意复杂度的连续函数。
如何确定隐含层神经元的个数仍然是个悬而未决问题。实际应用中通常是根据经验来确定或者靠“试
错法”来调整。
2)初始化问题:
在BP算法中,连接权和偏置在网络学习之前,都需要将其初始化为不同的小随机数。“不同”保证网络可以学习;“小随机数”可以防止其值过大而提前进入饱和状态,达到局部极小值。
解决办法:重新初始化。
3)步长设置问题:
BP网络的收敛是基于无穷小的修改量,学习率控
制着算法每一轮迭代中的更新步长。
步长太小,收敛速度就会过慢
步长太大,又可能会导致网络的不稳定、甚至瘫痪
自适应步长,让步长随着网络的训练而不断变化
4)权值与阈值的更新问题:
基本的BP算法采用的是样例更新,即每处理一个训练样例就更新一次权值与阈值。样例更新的缺陷:参数更新频繁, 不同样例可能抵消, 需要迭代的次数较多。另外,训练样例的输入顺序对训练结果有较大影响,它更“偏爱”较后输入的样例。而给训练样例安排一个适当的顺序,又是非常困难的。
解决的办法就是采用周期更新,即每处理一遍所有的训练样例才更新一次权值与阈值。但在很多实际任务中,周期更新的累计误差下降到一定程度后,进一步下降会非常缓慢,这时样例更新往往会获得较好的解,尤其当训练集非常大时效果更明显。
5)过拟合问题:
神经网络由于强大的表示能力,经常遭遇过拟合。具体表现为:训练误差持续降低,但测试误差却可能上升。
缓解过拟合的策略包括早停和正则化。早停就是在训练过程中, 若训练误差降低, 但验证误差升高, 则停止训练;正则化就是在误差目标函数中增加一项描述网络复杂程度的部分,比如连接权值与阈值的平方和。
五、深层神经网络
1. 深层神经网络的定义
随着云计算、 大数据时代的到来, 计算能力的大幅提高可缓解训练低效性, 训练数据的大幅增加则可降低过拟合风险,因此,以深度学习(deep learning)为代表的复杂模型开始受到人们的关注。
典型的深度学习模型就是很深层的神经网络:包含2个以上隐含层的神经网络。
1)模型复杂度
增加隐含层神经元的数目 (模型宽度)
增加隐含层的数目(模型深度)
从增加模型复杂度的角度来看, 增加隐含层的数目比增加隐含层神经元的数目更有效。 这是因为增加隐含层的数目不仅增加了拥有激活函数的神经元数目, 还增加了激活函数嵌套的层数。
2)深层模型的难点问题
多隐含层网络难以直接用经典算法(例如标准的BP算法) 进行训练, 因为误差在多隐含层内逆传播时, 往往会发散, 而不能收敛到稳定状态。
2. 深层神经网络的学习
1)预训练+微调
预训练:无监督逐层训练是多隐含层网络训练的有效训练手段, 每次训练一层隐含层结点, 训练时将上一层隐含层结点的输出作为输入, 而本层隐含层结点的输出作为下一层隐含层结点的输入, 这称为“预训练” 。
微调:预训练全部完成后, 再对整个网络进行微调训练。微调一般使用BP算法。
例子:深度信念网络(DBN) [Hintonet al. , 2006] 。
结构:每一层都是一个受限Boltzmann机。
训练:无监督预训练+BP算法微调。
分析:预训练+微调的做法可以视为将大量参数进行分组,对每组先找到局部看起来比较好的设置, 然后再基于这些局部较优的结果联合起来进行全局寻优。
2) 权共享
一组神经元共享相同的连接权值。
例子:卷积神经网络(CNN) [LeCun and Bengio, 1995;LeCun et al. , 1998]。
结构: CNN复合多个卷积层和采样层对输入信号进行加工, 然后在连接层实现与输出目标之间的映射。
训练: BP算法。
分析:在训练中, 无论是卷积层还是采样层, 其每一组神经元(即图下中的每个平面) 都共享相同的连接权, 从而大幅减少了需要训练的参数数目;另外, 在CNN中通常将Sigmoid 激活函数替换为修正的线性函数f(x) = max (0,x) 。
3. 深度学习的理解
深度学习通过多层处理, 逐渐将初始的低层特征表示转化为高层特征表示后, 用“简单模型” 即可完成复杂的分类
学习等任务。 由此可将深度学习理解为进行“特征学习”(feature learning) 或“表示学习” (representation learning)。
非深度学习技术用于解决现实任务时, 描述样本的特征通常需由人类专家来手工设计, 这称为“特征工程” (feature engineering)。 众所周知, 特征的好坏对模型的泛化性能有至关重要的影响, 要人类专家手工设计出好特征并非易事;而特征学习则通过深度学习技术自动产生好特征, 这使得机器学习向“全自动数据分析” 又前进了一步。