神经网络是由具有适应性的简单单元组成的广泛并行互联的网络,它的组织能够模拟生物神经系统对真实世界物体所做出的的交互反应。
一个神经元会接收到来自其他n个神经元传递过来的输入信号,这些输入信号通过带权重的连接进行传递,神经元接收到的总输入值将与神经元的阈值进行比较,然后通过激活函数处理以产生神经元的输出。
我们可以将一个神经网络视为包含了许多参数的数学模型,这个模型是若干个函数相互嵌套代入而得。有效的神经网络学习算法大多数以数学证明为支撑。
感知机由两层神经元组成,输入层接受外界输入信号后传递给输出层,输出层是M-P神经元(阈值逻辑单元threshold logic unit)。感知机能容易的实现逻辑与、或、非运算。
对于给定的训练集,权重wi以及阈值θ可通过学习得到。其中阈值θ可看作一个固定输入为-1的哑结点所对应的连接权重wn+1,这样阈值的学习也可以看作是权重的学习了。
由于感知机只有输出层神经元进行激活函数处理,即只拥有一层功能神经元,在处理线性可分问题(如逻辑与、非、或运算)上效果很好,但在非线性可分问题(逻辑异或)上无法求得合适解。
多层(多层功能神经元)网络可以解决非线性可分问题(用线性超平面无法划分的问题)。即在输入输出层之外再加入中间层,这个中间层也叫隐含层。隐含层可以是一到多层,当隐含层很多时,这时的神经网络就是深度神经网络。隐含层和输出层都是拥有激活函数的功能神经元。
神经网络的学习过程就是根据训练数据来调整神经元之间的连接权以及每个功能神经元的阈值,也就是说,神经网络学到的东西蕴涵在连接权与阈值中。
*多层网络学习算法的目标是通过调整网络中的权重和阈值使得神经网络模型的泛化误差最小。*对于多层网络的训练,需要用到更加强大的算法,比如误差逆传播算法(BP算法)。
BP算法的目标:是要最小化训练集 D 上的累计误差。对每个训练样例,BP算法执行以下操作:先将输入示例提供给输入层神经元,然后逐层将信号前传,直到产生输出层的结果;然后计算输出层的误差,再将误差逆向传播至隐层神经元;最后根据隐层神经元的误差来对连接权和阈值进行调整。该循环重复进行直到达到停止条件(比如训练误差小于一定的值)。
累计误差逆传播算法:由于标准BP算法每次仅针对一个训练样例更新连接权和阈值,如果类似的推导出基于累计误差最小化的更新规则,就得到了累计误差逆传播。
如何设置隐含层神经元的个数仍是个未决问题,实际应用中通常靠“试错法”(trial-by-error)调整。
若用E表示神经网络在训练集上的误差,则他显然是关于连接权ω和阈值θ的函数。因此,神经网络的训练过程可看做一个参数寻优过程,即在参数空间中,寻找一组最优参数使得E最小。
参数空间内梯度为0的点,只要其误差函数值小于邻点的误差函数值,就是局部极小点;可能存在多个局部极小值,但只有一个全局极小值。
基于梯度的搜索是使用最广泛的参数寻优方法,我们从某些初始解出发,迭代寻找最优参数值。每次迭代中,我们先计算误差函数在当前点的梯度,然后根据梯度来确定搜索方向。如果误差函数仅有一个局部极小,那么此时找到的局部极小就是全局最小;但是如果有多个局部极小,我们就需要跳出局部极小,进一步接近全局最小。
RBF(Radial Basis Function,径向基函数)网络是一种单隐层前馈神经网络。它的特点是:单隐层前馈神经网络结构;使用径向基函数作为隐层的激活函数,而输出层则是对隐层神经元输出的线性组合。
具体训练过程:第一步,确定神经元中心,常用的包括随机采样、聚类等;第二步,利用BP算法来确定参数。
ART(Adaptive Resonance Theory,自适应协振理论)网络是一种竞争型学习网络(神经网络中一种常用的无监督学习策略,在使用该策略时,网络的输出神经元相互竞争,每一时刻只有一个竞争获胜的神经元被激活)。它的特点是:两层的神经网络结构,分别是比较层(输入)和识别层(输出);无监督的学习方式;竞争型的神经网络,即同时只有一个识别层结点被激活;识别层的神经元数量可以动态增加。
ART网络训练过程:对输入的数据向量,找到与每个识别层神经元所对应的模式类代表向量的距离最小的神经元。如果这个距离小于阈值,则将这个数据归入该神经元所属的类中,并重新计算这个神经元的代表向量,否则重置模块并在识别层上增设一个新的神经元,其代表向量就设为当前输入向量。
SOM(Self-Organizing Map,自组织映射)网络也是一种竞争学习型的无监督神经网络,它能将高维输入数据映射到低维空间(通常为二维),同时保持 输入数据在高维空间的拓扑结构。它的特点是:两层的神经网络结构,分别是输入层和输出层(输出层以矩阵方式排列在二维空间中);无监督的学习方式;竞争型的神经网络,即同时只有一个识别层结点被激活;
训练过程如下:对每个训练样本,找到距离训练样本最近的输出神经元,我们称为最佳匹配单元;调整最佳匹配单元及其附近神经元的权向量,使得权向量与当前输入样本的距离缩小;不断迭代直到收敛。
级联相关网络是一种结构自适应网络,其不像一般的神经网络,它还将网络结构也当作学习的目标之一,并希望能在训练过程中找到最符合数据特点的网络结构。和前馈神经网络相比,级联相关网络无需设置网络层数、隐层神经元数目,所以训练速度较快,但在数据较小时容易陷入过拟合。
训练过程如下:刚开始训练时,只有输入和输出层,处于最小拓扑结构;随着训练的进行,逐渐加入新的隐层神经元;其是通过最大化新神经元的输出与网络误差之间的相关性(correlation)来训练相关参数。
递归神经(recurrent neural networks)网络允许网络中出现环形结构,从而可让一些神经元的输出反馈回来作为输入信号。这样的结构使得网络状态不仅与自身状态相关,还跟前一刻的状态相关,从而能处理与时间有关的动态变化。
Elman网络是最常用的一个递归神经网络,其使用隐层神经元的输出与下一刻的神经元输入一起作为下一刻的输入。它使用Sigmoid激活函数,并使用BP算法进行训练。
Boltzmann机是一种“基于能量的模型”,其为网络状态定义一个“能量”,当能量最小化时网络达到理想状态。它的特点是:两层结构,显层与隐层,显层即代表输入也代表输出,隐层则被理解为数据的内部表达;神经元是布尔型
训练过程(对比散度 Contrastive Divergence 算法)如下:通过输入层算出隐层分布,再通过隐层分布重新算出输入层的新分布;并利用新分布与旧分布之间的差别调整连接权重。
理论上来说,参数越多的模型复杂度越高,容量越大,这意味着它能完成更复杂的学习任务。但同样的,复杂模型的缺点是训练慢,且易陷入过拟合。
提高容量可以通过增加隐层的数目,隐层多了,相应的神经元连接权、阈值等参数就会更多;提高模型复杂度也可以通过单纯增加隐层神经元数目来实现。但从增加模型复杂度角度看,增加隐层数目比增加隐层神经元数目更有效,因为这不仅增加了拥有激活函数的神经元数目,还增加了激活函数嵌套的层数。
困难:多层神经网络(深度学习)难以直接使用BP算法进行训练,因为误差在多隐层内传播时,往往会“发散”而不能收敛到稳定状态。
深度学习采用无监督逐层训练(unsupervised layer-wise training)来训练模型,其基本思想是每次用无监督方法训练一层隐结点,并用本层结点的输出作为下一层隐结点的输入,这称为“预训练”;在预训练全部完成后,再对整个网络进行“微调”训练。