机器学习第5章——神经网络
5.神经网络
5.1 神经元模型
-
神经网络
- 神经网络是由具有适应性的简单单元组成的广泛并行互连的网络,它的组织能够模拟生物神经系统对真实世界物体所作出的交互反应
-
最简单的神经网络
-
M-P神经元模型
- 神经元收到n个输入信号,这些输入信号通过带权重的连接进行传递,神经元接受到的总输入值将于神经元的阈值进行比较,然后通过“激活函数”处理以产生神经元的输出。
- 神经元收到n个输入信号,这些输入信号通过带权重的连接进行传递,神经元接受到的总输入值将于神经元的阈值进行比较,然后通过“激活函数”处理以产生神经元的输出。
-
理想激活函数是阶跃函数,0表示抑制神经元而1表示激活神经元
-
阶跃函数具有不连续、不光滑等不好的性质,常用的是Sigmoid函数
5.2 感知机与多层网络
-
感知机
-
由两层神经元组成,输入层接收外界输入信号后,经过线性组合,从输出层输出
-
感知机容易实现逻辑“与”、“或"、”非“运算。在权重
w i ( i = 1 , 2 , . . . n ) w_i(i=1,2,...n) wi(i=1,2,...n)
和阈值
θ \theta θ
不断学习时,可以找到一个线性可分的平面将样本点分开,例如(a)”与“问题中,只有当输入值全为1时,结果才为1,其余结果均为0,则可以找到这么一个超平面,将两个不同的结果分开像(d)”异或“问题用一个超平面并不能将两个结果分开,需要用到两个超平面,这时候感知机在学习过程中就会发生振荡,权重w难以稳定下来,这属于非线性可分问题,需考虑使用多层功能神经元
-
-
多层前馈网络结构
- 多层网络:包含隐层的网络
- 前馈网络:神经元之间不存在同层连接也不存在跨层连接
- 隐层和输出层神经元亦称“功能单元”
- 例如下图的神经网络,我们需要预测房子的价格,最简便的模型就是我们只利用房屋的大小,去预测房价,即房屋越大,价格越高。现如今,我们通过输入4个值(房屋大小、卧室数、邮政编码、地区财政质量),来预测房价,这时候就构成了一个小型神经网络。
5.3 误差逆传播算法(BP算法)
- 给定训练集
D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x m , y m ) } , x i ∈ R d , y i ∈ R l D=\{(x_1,y_1),(x_2,y_2),...,(x_m,y_m)\},x_i\in R^d,y_i\in R^l D={(x1,y1),(x2,y2),...,(xm,ym)},xi∈Rd,yi∈Rl
-
输入:d维特征向量
-
输出:l个输出值
-
隐层:假定使用q个隐层神经元
-
假定功能函数均使用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^k_1,\hat y^k_2,...,\hat y^k_l) y^k=(y^1k,y^2k,...,y^lk)y ^ j k = f ( β j − θ j ) \hat y^k_j=f(\beta_j-\theta_j) y^jk=f(βj−θ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^k_j-y^k_j)^2 Ek=21j=1∑l(y^jk−yjk)2
需通过学习确定的参数数目
d q : 输入层与隐层之间需要确定的参数个数 l q : 输出层与隐层之间需要确定的参数个数 q : 隐层需要确定的参数个数 l : 输出层需要确定的参数个数 dq:输入层与隐层之间需要确定的参数个数\\ lq:输出层与隐层之间需要确定的参数个数\\ q:隐层需要确定的参数个数\\ l:输出层需要确定的参数个数 dq:输入层与隐层之间需要确定的参数个数lq:输出层与隐层之间需要确定的参数个数q:隐层需要确定的参数个数l:输出层需要确定的参数个数
即
d q + l q + q + l = ( d + l + 1 ) q + l dq+lq+q+l=(d+l+1)q+l dq+lq+q+l=(d+l+1)q+l
BP是一个迭代学习算法,在迭代的每一轮中采用广义感知学习规划
v
<
—
v
+
△
v
v\quad<— \quad v+\triangle v
v<—v+△v
BP算法基于梯度下降策略,以目标的负梯度方向对参数进行调整
更具体的说,我们以
w
h
j
w_{hj}
whj
为例(隐层到输出层的参数),有
w
h
j
:
=
w
h
j
−
α
∂
E
k
∂
w
h
j
w_{hj}:=w_{hj}-\alpha\frac{\partial E_k}{\partial w_{hj}}
whj:=whj−α∂whj∂Ek
现需计算
∂
E
k
∂
w
h
j
\frac{\partial E_k}{\partial w_{hj}}
∂whj∂Ek
-
则有
∂ E k ∂ w h j = ∂ E k ∂ y ^ j k ⋅ d y ^ j k d a ⋅ ∂ a ∂ w h j \frac{\partial E_k}{\partial w_{hj}}=\frac{\partial E_k}{\partial \hat y^k_j}\cdot\frac{d \hat y^k_j}{d a}\cdot\frac{\partial a}{\partial w_{hj}} ∂whj∂Ek=∂y^jk∂Ek⋅dady^jk⋅∂whj∂a-
∂ a ∂ w h j = ∂ ∑ h = 1 q ( w h j b h − θ j ) ∂ w h j = b h \frac{\partial a}{\partial w_{hj}}=\frac{\partial \sum_{h=1}^q(w_{hj}b_h-\theta_j)}{\partial w_{hj}}=b_h ∂whj∂a=∂whj∂∑h=1q(whjbh−θj)=bh
-
∂ E k ∂ y ^ j k = ∂ ∂ y ^ j k [ 1 2 ∑ j = 1 l ( y ^ j k − y j k ) 2 ] = ( y ^ j k − y j k ) \frac{\partial E_k}{\partial \hat y^k_j}=\frac{\partial }{\partial \hat y^k_j}[\frac{1}{2}\sum_{j=1}^l(\hat y^k_j-y^k_j)^2]=(\hat y^k_j-y^k_j) ∂y^jk∂Ek=∂y^jk∂[21j=1∑l(y^jk−yjk)2]=(y^jk−yjk)
-
d y ^ j k d a = d f ( a ) d a = f ′ ( a ) f ( x ) 为 s i g m o i d 激活函数 s i g m o i d 激活函数有一个很好的性质: f ′ ( x ) = f ( x ) ( 1 − f ( x ) ) = y ^ j k ( 1 − y ^ j k ) \frac{d \hat y^k_j}{d a}=\frac{d f(a)}{d a}=f'(a)\quad f(x)为sigmoid激活函数\\ sigmoid激活函数有一个很好的性质:f'(x)=f(x)(1-f(x))\\ =\hat y^k_j(1-\hat y^k_j) dady^jk=dadf(a)=f′(a)f(x)为sigmoid激活函数sigmoid激活函数有一个很好的性质:f′(x)=f(x)(1−f(x))=y^jk(1−y^jk)
-
-
所以
∂ E k ∂ w h j = ( y ^ j k − y j k ) ⋅ y ^ j k ( 1 − y ^ j k ) ⋅ b h \frac{\partial E_k}{\partial w_{hj}}=(\hat y^k_j-y^k_j)\cdot\hat y^k_j(1-\hat y^k_j)\cdot b_h ∂whj∂Ek=(y^jk−yjk)⋅y^jk(1−y^jk)⋅bh -
类似的
-
∂ E k ∂ θ j = ∂ E k ∂ y ^ j k ⋅ d y ^ j k d a ⋅ ∂ a ∂ θ j = ( y ^ j k − y j k ) ⋅ y ^ j k ( 1 − y ^ j k ) ⋅ ( − 1 ) \frac{\partial E_k}{\partial \theta_j}=\frac{\partial E_k}{\partial \hat y^k_j}\cdot\frac{d \hat y^k_j}{d a}\cdot\frac{\partial a}{\partial \theta_j}=(\hat y^k_j-y^k_j)\cdot\hat y^k_j(1-\hat y^k_j)\cdot(-1) ∂θj∂Ek=∂y^jk∂Ek⋅dady^jk⋅∂θj∂a=(y^jk−yjk)⋅y^jk(1−y^jk)⋅(−1)
-
∂ E k ∂ v i h = ∂ E k ∂ y ^ j k ⋅ d y ^ j k d a ⋅ ∂ a ∂ b h ⋅ d b h d c ⋅ ∂ c ∂ v i h = ( y ^ j k − y j k ) ⋅ y ^ j k ( 1 − y ^ j k ) ⋅ ∑ j = 1 l w h j ⋅ b h ( 1 − b h ) ⋅ x i \frac{\partial E_k}{\partial v_{ih}}=\frac{\partial E_k}{\partial \hat y^k_j}\cdot\frac{d \hat y^k_j}{d a}\cdot\frac{\partial a}{\partial b_h}\cdot\frac{d b_h}{dc}\cdot\frac{\partial c}{\partial v_{ih}}\\ =(\hat y^k_j-y^k_j)\cdot\hat y^k_j(1-\hat y^k_j)\cdot\sum_{j=1}^lw_{hj}\cdot b_h(1-b_h)\cdot x_i ∂vih∂Ek=∂y^jk∂Ek⋅dady^jk⋅∂bh∂a⋅dcdbh⋅∂vih∂c=(y^jk−yjk)⋅y^jk(1−y^jk)⋅j=1∑lwhj⋅bh(1−bh)⋅xi
-
∂ E k ∂ γ h = ∂ E k ∂ y ^ j k ⋅ d y ^ j k d a ⋅ ∂ a ∂ b h ⋅ d b h d c ⋅ ∂ c ∂ γ h = ( y ^ j k − y j k ) ⋅ y ^ j k ( 1 − y ^ j k ) ⋅ ∑ j = 1 l w h j ⋅ b h ( 1 − b h ) ⋅ ( − 1 ) \frac{\partial E_k}{\partial \gamma_{h}}=\frac{\partial E_k}{\partial \hat y^k_j}\cdot\frac{d \hat y^k_j}{d a}\cdot\frac{\partial a}{\partial b_h}\cdot\frac{d b_h}{dc}\cdot\frac{\partial c}{\partial \gamma_{h}}\\ =(\hat y^k_j-y^k_j)\cdot\hat y^k_j(1-\hat y^k_j)\cdot\sum_{j=1}^lw_{hj}\cdot b_h(1-b_h)\cdot(-1) ∂γh∂Ek=∂y^jk∂Ek⋅dady^jk⋅∂bh∂a⋅dcdbh⋅∂γh∂c=(y^jk−yjk)⋅y^jk(1−y^jk)⋅j=1∑lwhj⋅bh(1−bh)⋅(−1)
-
-
令
g j = ( y ^ j k − y j k ) ⋅ y ^ j k ( 1 − y ^ j k ) e h = ( y ^ j k − y j k ) ⋅ y ^ j k ( 1 − y ^ j k ) ⋅ ∑ j = 1 l w h j ⋅ b h ( 1 − b h ) = b h ( 1 − b h ) ∑ j = 1 l w h j g j g_j=(\hat y^k_j-y^k_j)\cdot\hat y^k_j(1-\hat y^k_j)\\ e_h=(\hat y^k_j-y^k_j)\cdot\hat y^k_j(1-\hat y^k_j)\cdot\sum_{j=1}^lw_{hj}\cdot b_h(1-b_h)=b_h(1-b_h) \sum_{j=1}^lw_{hj}g_j gj=(y^jk−yjk)⋅y^jk(1−y^jk)eh=(y^jk−yjk)⋅y^jk(1−y^jk)⋅j=1∑lwhj⋅bh(1−bh)=bh(1−bh)j=1∑lwhjgj -
综上
w h j : = w h j + α g j b h θ j : = θ j − α g j v i h : = v i h − α e h x i γ h : = γ h − α e h w_{hj}:=w_{hj}+\alpha g_j b_h\\ \theta_{j}:=\theta_{j}-\alpha g_j\\ v_{ih}:=v_{ih}-\alpha e_hx_i\\ \gamma_{h}:=\gamma_{h}-\alpha e_h whj:=whj+αgjbhθj:=θj−αgjvih:=vih−αehxiγh:=γh−αeh
学习率 α ∈ ( 0 , 1 ) 不能太大,也不能太小 学习率\alpha\in(0,1)不能太大,也不能太小 学习率α∈(0,1)不能太大,也不能太小
以上是属于“标准BP算法”,即每次更新只针对单个样例,参数更新得非常频繁,而且对不同样例进行更新的效果可能出现“抵消”现象。
另一种则是“累积BP算法”,直接针对累计误差最小化,它在读取整个训练集D一遍后才对参数进行更新,其参数跟新的频率低很多。但在很多任务中,累积误差下降到一定程度之后,进一步下降会非常缓慢。
-
BP神经网络经常遭遇到过拟合,有两种策略可以缓解
-
“早停”:数据分为训练集和验证集,利用训练集不断更新参数,验证集来估计误差,若训练集误差降低,但验证集误差升高,则停止训练
-
“正则化”:在误差目标函数中增加一个用于描述网络复杂度的部分,例如连接权和阈值的平方和,则误差目标函数改变为
E = λ 1 m ∑ k = 1 m E k + ( 1 − λ ) ∑ i w i 2 E k : 第 k 个训练样例上的误差 , w i 表示连接权和阈值 λ ∈ ( 0 , 1 ) 用于对经验误差与网络复杂度这两项进行折中,常通过交叉验证发来估计 E=\lambda\frac{1}{m}\sum_{k=1}^mE_k+(1-\lambda)\sum_i w_i^2\\ E_k:第k个训练样例上的误差,w_i表示连接权和阈值\\ \lambda\in(0,1)用于对经验误差与网络复杂度这两项进行折中,常通过交叉验证发来估计 E=λm1k=1∑mEk+(1−λ)i∑wi2Ek:第k个训练样例上的误差,wi表示连接权和阈值λ∈(0,1)用于对经验误差与网络复杂度这两项进行折中,常通过交叉验证发来估计
-
5.4 全局最小与局部最小
- 如果误差函数仅有一个局部极小,那么此时找到的局部极小就是全局最小
- 如果误差函数具有多个局部极小,则不能保证找到的解是全局最小,这种情况称为参数寻优陷入了局部极小。
- “跳出”局部极小
- 以多组不同参数值初始化多个神经网络,按标准方法训练后,取其中误差最小的解作为最终参数。这相当于从多个不同的初始点开始搜索,这样就可能陷入不同的局部极小从中进行选择有可能获得更接近全局最小的结果。
- 使用 “模拟退火” 技术 。模拟退火在每一步都以一定的概率接受比当前解更差的结果,从而有助 于 "跳出"局部极小。在每步迭代过程中接受"次优解"的概率要随着 时间的推移而逐渐降低,从而保证算法稳定。(但也会造成“跳出”全局最小)
- 使用随机梯度下降。与标准梯度下降法精确计算梯度不同,随机梯度下降法在计算梯度时加入了随机因素。于是,即便陷入局部极小点,它计算出的梯度仍可能不为零,这样就有机会跳出局部极小继续搜索。
5.5 其他常见神经网络
5.5.1 RBF网络
-
单隐层前馈神经网络
-
使用径向基函数作为隐层神经元激活函数
- 径向基函数:某种沿径向对称的标量函数,通常定义为样本x到数据中心
c i \bf{c_i} ci
之间欧式距离的单调函数,常用的高斯径向基函数为
ρ ( x , c i ) = e − β i ∣ ∣ x − c i ∣ ∣ 2 c i : 第 i 给隐层神经元所对应的中心 \rho(\bf{x}\rm{,}\bf{c_i}\rm{)=e^{-\beta_i||\bf{x}\rm{-}\bf{c_i}||^2}} \\\bf{c_i}\rm{:第i给隐层神经元所对应的中心} ρ(x,ci)=e−βi∣∣x−ci∣∣2ci:第i给隐层神经元所对应的中心
- 径向基函数:某种沿径向对称的标量函数,通常定义为样本x到数据中心
-
输出层是对隐层神经元输出的线性组合
-
RBF网络可表示为
φ ( x ) = ∑ i = 1 q w i ρ ( x , c i ) \varphi(\bf{x})=\sum_{i=1}^qw_i\rho(\bf{x}\rm{,}\bf{c_i}\rm{)} φ(x)=i=1∑qwiρ(x,ci)w i : 第 i 给隐层神经元所对应的权重 q : 隐层神经元个数 w_i:第i给隐层神经元所对应的权重\\ q:隐层神经元个数\\ wi:第i给隐层神经元所对应的权重q:隐层神经元个数
-
训练RBF网络
-
确定神经元中心
c i \bf{c_i} ci -
利用BP算法等来确定参数
w i 、 β i w_i、\beta_i wi、βi
-
5.5.2 ART(自适应谐振理论)网络
竞争型学习是神经网络中一种常用的无监督学习策略,在使用该策略时,网络的输出神经元相互竞争,每一时刻仅有一个竞争获胜的神经元被激活,其他神经元的状态被抑制。这种机制亦称“胜者通吃”原则。
- ART网络是竞争型学习的重要代表.该网络由比较层、识别层、识别阈值和重置模块构成
- 比较层负责接收输入样本,并将其传递给识别层神经元
- 识别层每个神经元对应一个模式类,神经元数目可在训练过程中动态增长以增加新的模式类
- 识别阈值对ART网络的性能有重要影响。当识别阈值较高时,输入样本将会被分成比较多、比较精细的模式类,而如果识别阈值较低,则会产生比较少、比较粗略的模式类。
5.5.3 SOM(自组织映射)网络
SOM网络是一种竞争学习型的无监督神经网络,它能将高维输入数据映射到低维空间(通常为二维),同时保持输入数据在高维空间的拓扑结构,即将高维空间中相似的样本点映射到网络输出层中的邻近神经元。
5.5.4 级联相关网络
一般的神经网络模型通常假定网络结构是事先固定的,训练的目的是利用训练样本来确定合适的连接权、阈值等参数。与此不同,结构自适应网络则将网络结构也当作学习的目标之一,并希望能在训练过程中找到最符合数据特点的网络结构。级联相关网络是结构自适应网络的重要代表。
5.5.5 Elman网络
与前馈神经网络不同,“递归神经网络“允许网络中出现环形结构,从而可让一些神经元的输出反馈回来作为输入信号。之样的结构与信息反馈过程,使得网络在t时刻的输出状态不仅与t时刻的输入有关,还与t ―1时刻的网络状态有关,从而能处理与时间有关的动态变化。
5.5.6 Boltzmann机
神经网络中有一类模型是为网络状态定义一个“能量”,能量最小化时网络达到理想状态,而网络的训练就是在最小化这个能量函数Boltzmann机就是一种“基于能量的模型”,常见结构如图5.14(a)所示,其神经元分为两层:显层与隐层.显层用于表示数据的输入与输出,隐层则被理解为数据的内在表达. Boltzmann机中的神经元都是布尔型的,即只能取0、1两种状态,状态1表示激活,状态0表示抑制.令向量
s
∈
{
0
,
1
}
n
s ∈ \{0,1\}^n
s∈{0,1}n
表示n个神经元的状态
w
i
j
w_{ij}
wij
表示神经元i与j之间的连接权
θ
i
\theta_i
θi
表示神经元i的阈值,则状态向量s所对应的 Boltzmann机能量定义为
E
(
s
)
=
−
∑
i
=
1
n
−
1
∑
j
=
i
+
1
n
w
i
j
s
i
s
j
−
∑
i
=
1
n
θ
i
s
i
E(s)=-\sum_{i=1}^{n-1}\sum_{j=i+1}^nw_{ijs_is_j}-\sum_{i=1}^n\theta_is_i
E(s)=−i=1∑n−1j=i+1∑nwijsisj−i=1∑nθisi
5.6 深度学习
理论上来说,参数越多的模型复杂度越高、“容量”越大,这意味着它能完成更复杂的学习任务。但复杂模型的训练效率低,易陷入过拟合。随着云计算、大数据时代的到来,计算能力的大幅提高可缓解训练低效性,训练数据的大幅增加则可降低过拟合风险,因此,以“深度学习”为代表的复杂模型开始受到人们的关注。
典型的深度学习模型就是很深层的神经网络。显然,对神经网络模型,提高容量的一个简单办法是增加隐层的数目。隐层多了,相应的神经元连接权、阈值等参数就会更多.模型复杂度也可通过单纯增加隐层神经元的数目来实现。但从增加模型复杂度的角度来看,增加隐层的数目显然比增加隐层神经元的数目更有效,因为增加隐层数不仅增加了拥有激活函数的神经元数目,还增加了激活函数嵌套的层数.然而,多隐层神经网络难以直接用经典算法(例如标准BP算法)进行训练,因为误差在多隐层内逆传播时,往往会“发散”而不能收敛到稳定状态。
事实上,“预训练+微调”的做法可视为将大量参数分组,对每组先找到局部看来比较好的设置,然后再基于这些局部较优的结果联合起来进行全局寻优.这样就在利用了模型大量参数所提供的自由度的同时,有效地节省了训练开销。
另一种节省训练开销的策略是“权共享”(weight sharing),即让一组神经元使用相同的连接权.这个策略在卷积神经网络(CNN)中发挥了重要作用.以CNN进行手写数字识别任务为例 ,如图5.15所示,网络输入是一个32×32的手写数字图像,输出是其识别结果,CNN复合多个“卷积层”和“采样层”对输入信号进行加工,然后在连接层实现与输出目标之间的映射.每个卷积层都包含多个特征映射,每个特征映射是一个由多个神经元构成的“平面”,通过一种卷积滤波器提取输入的一种特征。