各个相关学科对神经网络的定义多种多样,本章节采用目前使用的最广泛的一种解释——神经网络是由具有适应性的简单单元组成的广泛并行互连的网络,他的组织能够模拟生物神经系统对真实世界物体所做出的的交互反应。
神经网络中最基本的成分是神经元模型,即上述定义中的“简单单元”。
在生物神经网络中,每个神经元与其他神经元相连,当它“兴奋”时,就会向相连的神经元发送化学物质,从而改变这些神经元内的电位;如果某神经元的电位超过了一个“阈值”,那么他就会被激活,即“兴奋”起来,想其他神经元发送化学物质。
M-P神经元模型:一个沿用至今的模型,是将前言部分中关于神经元的描述抽象为如图所示的简单模型。
在此模型中,神经元接收到来自n个其他神经元传递过来的输入信号,这些输入信号通过带权重的连接进行传递,神经元接收到的总输入值将与神经元的阈值进行比较,然后通过“激活函数”处理以产生神经元的输出。
理想激活函数:阶跃函数。
但是阶跃函数不连续、不光滑等,常用Sigmoid函数作为激活函数。
Sigmoid函数:把可能在较大范围内变化的输入值挤压到(0,1)输出值范围内,有时也称为“挤压函数”。
把许多个这样的神经元按一定的层次结构连接起来,就得到了神经网络。
事实上,从计算机科学的角度看,我们可以先不考虑神经网络是否真的模拟了生物神经网络,只需将一个神经网络视为包含了许多参数的数学模型,这个模型是若干个函数相互(嵌套)代入而得。有效的神经网络学习算法大多以数学证明为支撑。
如图所示,输入层接收外界输入信号后传递给输出层,输出层是M-P神经元,也称为“阈值逻辑单元”。
感知机能容易实现逻辑与、或、非运算。
感知机的学习规则:
对训练样例(x,y),若当前感知机的输出为 y ^ \hat y y^,则感知机权重进行调整:
w i ← w i + △ w i w_i ← w_i + △w_i wi←wi+△wi
△ w i = η ( y − y ^ ) x i △w_i = η(y - \hat y)x_i △wi=η(y−y^)xi
其中,η∈(0,1)称为学习率。
从上述公式可以看出,若感知机对训练样例(x,y)预测正确,即 y = y ^ y = \hat y y=y^,则感知机不发生变化,否则进行权重调整。
需注意,感知机只有输出层神经元进行激活函数处理,即只拥有一层功能神经元,其学习能力非常有限。实际上,与或非问题都是线性可分问题,。两类模型是线性可分的,则感知机的学习过程一定会收敛,而求得适当的前向量w;否则感知机学习过程将会发生震荡,w难以稳定下来,不能求得合适解。
要解决非线性可分问题,需考虑使用多层功能神经元。输入层与输出层之间的一层神经元被称为隐层或隐含层,隐含层和输出层神经元都是拥有激活函数的功能神经元。
常见的神经网络是形如图所示的层级结构,没层神经元与下一层神经元完全互连,神经元之间不存在同层连接,也不存在跨层连接。这样的神经网络结果通常成为“多层前馈神经网络”。
神经网络的学习过程,就是根据训练数据来调整神经元之间的连接权,以及每个功能神经元的阈值。
训练多层网络,简单感知机学习规则显然不再有效,需要更强大的学习算法。
误差逆传播算法:
简称BP算法,训练算法中的杰出代表,是迄今为止最成功的神经网络学习算法。
BP算法不仅可训练前馈神经网络,也可用于其他类型的神经网络,但是通常说BP网络,是指用BP算法训练的多层前馈神经网络。
内容:
公式及其定义:
给定数据集D = {(x1,y1),(x2,y2),……,(xm,ym)}, x i ∈ R d , y i ∈ R l x_i∈R^d,y_i∈R^l xi∈Rd,yi∈Rl,即输入示例由d个属性描述,输出l维实值向量。
为便于讨论,图中给出了一个拥有d个输入神经元、l个输出神经元、q个隐藏层神经元的多层前馈神经网络,其中
输出层第j个神经元的阈值用 θ j θ_j θj表示,
隐藏层第h个神经元的阈值用 γ h γ_h γh表示。
输入层第i个神经元与隐层第h个神经元之间的连接权为 v h j v_{hj} vhj
隐层第h个神经元与输出层第j个神经元之间的连接权为 w h j w_{hj} whj。
记
隐层第h个神经元接收到的输入为 α h = ∑ i = 1 d v i h x i α_h=\sum_{i=1}^dv_{ih}x_i αh=∑i=1dvihxi
输出层第j个神经元接收到的输入为 β j = ∑ h = 1 q w h j b h β_j=\sum_{h=1}^qw_{hj}b_h βj=∑h=1qwhjbh,其中 b h b_h bh为隐层第h个神经元的输出。假设隐层和输出层神经元都是使用Sigmoid函数。
对训练例 ( x k , y k ) (x_k,y_k) (xk,yk),假定神经网络的输出为 y ^ k = ( y ^ 1 k , y ^ 2 k , … , y ^ l k ) \hat y_k=(\hat y_1^k,\hat y_2^k,…,\hat y_l^k) y^k=(y^1k,y^2k,…,y^lk),即
y ^ j k = f ( β j − θ j ) \hat y_j^k = f(β_j - θ_j) y^jk=f(βj−θj) (这里的f代表激活函数,公式含义:对第k个训练样例,输出层第j个神经元的输出=激活函数(这个神经元接收到的输入 - 阈值))
则网络在 ( x k , y k ) (x_k,y_k) (xk,yk)上的均方误差为
E k = 1 2 ∑ j = 1 l ( y ^ j k − y j k ) 2 E_k = \frac 1 2 \sum_{j=1}^l (\hat y_j^k - y_j^k)^2 Ek=21∑j=1l(y^jk−yjk)2 (网络在第k个样本的均方误差Ek=1/2(输出层的第j个输出值-第j个真实值)
BP算法是一个迭代算法,在迭代的每一轮中采用广义感知机的学习规则对参数进行更新估计,任意参数v的更新估计式为
v ← v + △ v v← v + △v v←v+△v
下面以BP网络图中隐层到输出层的连接权 w h j w_{hj} whj为例,进行推导:
BP算法基于梯度下降策略,以目标的负梯度方向对参数进行调整。对上述公式均方误差Ek,给定学习率η,有
△ w h j = − η ∂ E k ∂ w h j △w_{hj}=-η\frac{∂E_k}{∂w_{hj}} △whj=−η∂whj∂Ek
根据链式求导法则:
∂ E k ∂ w h j = ∂ E k ∂ y ^ j k ⋅ ∂ y ^ j k ∂ β j ⋅ ∂ β j ∂ w h j \frac{∂E_k}{∂w_{hj}}=\frac{∂E_k}{∂\hat y_j^k}·\frac{∂\hat y_j^k}{∂β_j}·\frac{∂β_j}{∂w_{hj}} ∂whj∂Ek=∂y^jk∂Ek⋅∂βj∂y^jk⋅∂whj∂βj
由Bj的定义 β j = ∑ h = 1 q w h j b h β_j=\sum_{h=1}^qw_{hj}b_h βj=∑h=1qwhjbh可知,
∂ β j ∂ w h j = b h \frac{∂β_j}{∂w_{hj}}=b_h ∂whj∂βj=bh
Sigmoid函数一个很好的性质:
f ′ ( x ) = f ( x ) ( 1 − f ( x ) ) f'(x)=f(x)(1-f(x)) f′(x)=f(x)(1−f(x))
综合 y ^ k \hat y_k y^k和Ek可得,
g j = − ∂ E k ∂ y ^ j k ⋅ ∂ y ^ j k ∂ β j g_j=-\frac{∂E_k}{∂\hat y_j^k}·\frac{∂\hat y_j^k}{∂β_j} gj=−∂y^jk∂Ek⋅∂βj∂y^jk
= − ( y ^ j k − y j k ) f ′ ( β j − θ j ) = -(\hat y_j^k-y_j^k)f'(β_j - θ_j) =−(y^jk−yjk)f′(βj−θj)
= ( y j k − y ^ j k ) [ f ( β j − θ j ) ( 1 − f ( β j − θ j ) ) ] =( y_j^k-\hat y_j^k) [f(β_j - θ_j)(1-f(β_j - θ_j))] =(yjk−y^jk)[f(βj−θj)(1−f(βj−θj))]
= y ^ j k ( 1 − y ^ j k ) ( y j k − y ^ j k ) = \hat y_j^k(1-\hat y_j^k)( y_j^k-\hat y_j^k) =y^jk(1−y^jk)(yjk−y^jk)
将gj和 ∂ β j ∂ w h j \frac{∂β_j}{∂w_{hj}} ∂whj∂βj代入 ∂ E k ∂ w h j \frac{∂E_k}{∂w_{hj}} ∂whj∂Ek得:
∂ E k ∂ w h j = ∂ E k ∂ y ^ j k ⋅ ∂ y ^ j k ∂ β j ⋅ ∂ β j ∂ w h j \frac{∂E_k}{∂w_{hj}}=\frac{∂E_k}{∂\hat y_j^k}·\frac{∂\hat y_j^k}{∂β_j}·\frac{∂β_j}{∂w_{hj}} ∂whj∂Ek=∂y^jk∂Ek⋅∂βj∂y^jk⋅∂whj∂βj = − g j b h =-g_jb_h =−gjbh
结果代入 △ w h j △w_{hj} △whj得
△ w h j = η g j b h △w_{hj}=ηg_jb_h △whj=ηgjbh
类似,可以得到
△ θ j = − η g j △θ_{j}=-ηg_j △θj=−ηgj
△ v i h = η e h x i △v_{ih}=ηe_hx_i △vih=ηehxi
△ γ h = − η e h △γ_h=-ηe_h △γh=−ηeh
其中,
e h = − ∂ E k ∂ b h ∂ b h ∂ α h e_h = -\frac {∂E_k}{∂b_h}\frac {∂b_h}{∂α_h} eh=−∂bh∂Ek∂αh∂bh
= − ∑ j = 1 l ∂ E k ∂ β j ∂ β j ∂ b h f ′ ( α h − γ h ) = - \sum _{j=1}^l \frac {∂E_k}{∂β_j}\frac {∂β_j}{∂b_h}f'(α_h-γ_h) =−∑j=1l∂βj∂Ek∂bh∂βjf′(αh−γh)
= ∑ j = 1 l w h j g j f ′ ( α h − γ h ) =\sum _{j=1}^l w_{hj}g_jf'(α_h-γ_h) =∑j=1lwhjgjf′(αh−γh)
= b h ( 1 − b h ) ∑ j = 1 l w h j g j =b_h(1-b_h)\sum _{j=1}^l w_{hj}g_j =bh(1−bh)∑j=1lwhjgj
e h 和 g j e_h和g_j eh和gj类似都是偏导的中间结果(隐层和输出层神经元的梯度项), b h 和 x i b_h和x_i bh和xi类似都对应他们这一层各自(x是隐层的,b是输出层的)的输入。
学习率η∈(0,1),控制算法每一轮的迭代更新步长,每一层的η可能不相同。
算法过程:
输入:训练集D = {(xk,yk)}k∈(1,m)
学习率η。
过程:
1:在(0,1)范围内随机初始化网络中所有连接权和阈值
2:repeat
3: for all(xk,yk)∈ D do
4: 根据当前参数和神经网络输出公式y_hat计算当前样本的输出y_hat;
5: 根据输出层梯度项公式计算gj;
6: 根据隐含层神经元梯度项公式计算eh;
7: 根据连接权与阈值公式更新w_hj,v_ih、θ_j,γ_h
8: end for
9:until达到停止条件
输出:连接权与阈值确定的多层前馈神经网络
需注意的是,BP目标是最小化训练集D 上的累计误差 E = 1 m ∑ k = 1 m E k E = \frac 1m \sum_{k=1}^mE_k E=m1∑k=1mEk
优缺点:
上述BP算法我们称为“标准BP算法”,每次仅针对一个训练样本进行更新其权重和阈值。另有累计误差逆传播算法,类似标准BP算法推导基于累计误差最小化的更新规则。
标准BP算法每次更新只针对单个样例,参数更新得非常频繁,而且对不同样例进行更新的效果可能出现“抵消”现象。
累计误差逆传播算法读取整个训练集D后才对参数进行更新,参数更新频率低得多。
BP算法 | 标准BP算法 | 累计误差逆传播算法 |
更新 | 每次仅针对一个训练样本进行更新其权重和阈值。 | 读取整个训练集D后才对参数进行更新 |
更新频率 | 高 | 低 |
某些任务中,积累误差下降到一定的程度后 | 相比累计误差会更快得到较好的解,训练集D非常大时更明显 | 进一步下降会非常缓慢 |
如何设置神经元的个数 | 试错法调整 |
BP神经网络经常遭遇过拟合,两种缓解策略:
若用E表示神经网络在训练集上的误差,视为关于w和阈值θ的函数,此时神经网络的训练过程就是一个参数最优化过程。
我们常提到全局最小和局部极小。
局部极小:就是参数空间内梯度为0的点,其误差函数值小于邻点的误差函数值的点。(对比一元线性函数理解,就是找到极小值点就是f’(x)=0,且f(x)是左右邻域内最小的点,x就是极小值点)局部极小点可以有多个。
全局最小:就是参数空间内所有点的误差均不小于该地点的误差函数值。(对比一元线性函数就是寻找f(x)的最小值点)全局最小点只能有一个。
我们在参数寻优过程中是希望找到全局最小。使用最广泛的方法是梯度搜索方法(最优化理论课程中的一部分,需要的可以自己了解)。
现实任务中会遇见陷入局部极小,为跳出局部极小,寻找全局最小,有以下几种策略:
上述用于跳出局部极小技术大多是启发式,理论上尚缺乏保障。
径向基函数网络(RBF网络),一种单隐层前馈神经网络,使用径向基函数作为隐层神经元激活函数,而输出层则是对隐层神经元输出的线性组合。假定输入为d维向量x,输出为实值,则RBF网络可表示为
φ ( x ) = ∑ i = 1 q w i ρ ( x , c i ) φ(x)=\sum_{i=1}^qw_iρ(x,c_i) φ(x)=∑i=1qwiρ(x,ci)
其中,q为隐层神经元个数,ci和wi分别是第i个隐层神经元岁对应的中心和权重, ρ ( x , c i ) ρ(x,c_i) ρ(x,ci)是径向基函数。
通常采用两步郭晨过来训练RBF网络:
第一步:确定神经元中心ci,常用方式包括随机采样、聚类等
第二步:利用BP算法等来确定参数wi和βi。
自适应谐振理论(ART)网络,是竞争型学习的重要代表。
竞争型学习是神经网络中一种常用的无监督学习策略,再试用该策略时,网络的输出神经元相互竞争,每一时刻仅有一个竞争获胜的神经元被激活,其他神经元的状态被抑制,这种机制也称为“胜者通吃”原则。
ART网络有比较层、识别层、识别阈值和重置模块构成。
其中,比较层负责接受输入样本,并将其传递给识别层神经元。识别层每个神经元对应一个模式类,神经元数目可在训练过程中动态增长以增加新的模式类。
在接收到比较层的输入信号后,识别层神经元之间相互竞争,以产生获胜神经元。竞争的最简单方式是,计算输入向量于每个识别层神经元所定影的模式类的代表向量之间的距离,距离小者获胜。获胜神经元将想其他识别层神经元发送信号,抑制其激活。若输入向量与获胜神经元所对应的代表向量之间的相似度大于识别阈值,则将当前输入样本将被鬼诶诶该代表向量所属类别,同时,网络连接权将更新,使得以后接收到相似输入项本时,该模式类会计算出更大的相似度,从而使该获胜神经元有更大可能获胜;若相似度不大于识别阈值,则重置模块将在识别层增设一个新的神经元,其代表向量就设置为当前输入向量。
显然,识别阈值对ART网络的性能有重要影响,阈值较高,输入样本将会被分为较多、较为精细的模式类,而如果阈值较低,则会产生比较少、比较粗略的模式类。
ART比较好的缓解了竞争型学习中的“可塑性-稳定性窘境”。*可塑性是指神经网络要有学习新知识的能力,稳定性是指神经网络在学习新知识时要保持对就知识的记忆。*这就使得ART网络具有一个很重要的优点:可进行增量学习或在线学习。
自组织映射网络(SOM网络),是一种竞争学习型的无监督神经网络。能将高维输入数据映射到低维空间(通常为二维),同时保持输入数据在高维空间的拓扑结构。
SOM训练目标:为每个输出层神经元找到合适的权向量,以达到保持拓扑结构的目的。
训练过程:
在接受到一个样本后,每个输出层神经元后计算该样本与自身携带的权向量之间的距离。距离最近的神经元成为竞争获胜者,称为最佳匹配单元。然后最佳匹配单元机器临近神经元的权向量将被调整,以使得这些权向量与当前输入样本的距离缩小。这个过程不断迭代,直至收敛。
级联相关网络是结构自适应网络的重要代表。(自适应网络结构:将网络结构也当做学习目标之一,并希望在训练过程中,找到最符合数据特点的网络结构。)
主要成分:级联和相关
级联:指建立层次链接的层次结构。在开始训练师网络只有输出层和输入层,处于最小拓扑结构;随着训练的进行,新的隐层神经元逐渐加入,从而创建起层级结构。当新的隐层神经元加入时,其输入端连接权值是冻结固定的。
相关:指通过最大化新神经元的输出与网络误差之间的相关性来训练相关的参数。
与一般前馈神经网络相比,级联相关网络无需设置网络层数、隐层神经元数目,且训练速度较快,但其在数据较小时容易陷入过拟合。
最常用的递归神经网络之一。(递归神经网络,允许网络中出现环形结构,从而可让一些神经元的输出反馈回来作为输入信号。)Elman网络结构与多层前馈网络很相似,但隐层神经元的输出被反馈回来,与下一时刻输入层神经元提供的信号一起,作为隐层神经元下一时刻的输入。
一种“基于能量的模型”。(神经网络中,有一类模型是为网络状态定义一个“能量”,能量最小化时,网络达到理想状态,而网络的训练就是在最小化这个能量函数)
其神经元分为两层:显层和隐层。显层用于表示数据的输入输出,隐层则被理解为数据的内在表达。
典型的深度学习模型就是很深层的神经网络。显然,对神经网络模型,提高容量的一个简单办法是增加隐层的数目。然而,多隐层神经网络难以直接用经典算法(如BP算法)进行训练,因为误差在多隐层内逆传播时,往往会“发散”而不能收敛到稳定状态。
无监督逐层训练,是多隐层神经网络训练的有效手段。
基本思想为:
1、预训练:每次训练一层隐结点,训练时将上一层引接点的输出作为有效手段,而本层引接点的输出作为下一层隐结点的输入。
2、微调训练。在预训练全部完成后,再对整个网络进行“微调”训练。
可将其理解为,将大量参数分组,每组先找到局部看起来比较好的设置,在基于这些局部最优解的结果联合起来,进行全局寻优。在利用了模型大量参数所提供的自由度的同时,有效的节省了训练开销。
“权共享”是另一种节省训练开销的策略。让一组神经元使用相同的连接权(该方法在卷积神经网络CNN发挥了重要作用)。
卷积神经网络是深度学习的重要内容,后续在深度学习中进行详细讲解。
本章中,讲述了M-P神经元模型,其为使用最为广泛的模型。在神经元的基础上,我们有感知机和多层网络,对于多层网络,经典训练算法就是BP算法,BP算法中涉及很多数学公式,需要自己进行详细推导,能够更好理解其思想。在神经网络的训练过程中,要对参数进行求解,可能会陷入局部极小,通过本章中讲述的策略,尽可能跳出局部极小,找到全局最小。后续讲解了其他常见神经网络,对其他常见神经网络,我们在这里仅讲述大致概念,等遇到了再进行详细讲述。神经网络的参数越多,理论上能够无限逼近我们想要的连续函数,随着科技的发展,计算能力大幅度提升,深度学习逐渐火热,本章大致讲解了深度学习的两种节省训练开销的策略,后续,我们会开设深度学习专栏,对深度学习进行详细讲述。