赞
踩
关于周志华老师的《机器学习》这本书的学习笔记
记录学习过程
本博客记录Chapter5 神经网络
神经网络(neural networks):由具有适应性的简单单元组成的广泛并行互联的网络,他的组织能够模拟生物神经系统对真实世界物体所做出的交互反应。
神经网络中最基本的成分是“神经元模型”,即上述定义中的“简单单元”。经典的M-P神经元模型如下图所示。其中,神经元(neural)接收到 n n n个其他神经元传递过来的输入信号,这些输入信号通过带权重的连接(connection)进行传递,神经元接收到的总输入值将与神经元的阈值进行比较,然后通过激活函数(activation function)处理以产生神经元的输出。
理想中的激活函数如下图所示的阶跃函数,其将输入值映射为输出值0或1,1对神经元产生刺激,0对神经元产生抑制。但阶跃函数具有不连续、不光滑等缺点,因此实际中常用Sigmoid函数作为激活函数,它能在较大范围内变化的输入值挤压到
(
0
,
1
)
(0,1)
(0,1)之间也被称为“挤压函数”(squashing function),其公式如下:
s
g
n
(
x
)
=
{
1
,
x
≥
0
0
,
x
≤
0
sgn(x)={1,x≥00,x≤0
sgn(x)={1,x≥00,x≤0
s i g m o i d ( x ) = 1 1 + e − x sigmoid(x)=\frac{1}{1+e^{-x}} sigmoid(x)=1+e−x1
将神经元按照一定的层次结构连接起来,就组成了神经网络。神经网络包含了许多参数的数学模型,这个模型是若干个函数相互嵌套代入所得。有效的神经网络模型大多以数学证明为支撑。
感知机(perceptron)由两层神经元组成。输入层接受外界输入信号后传递给输出层,输出层是M-P神经元,也成为“阈值逻辑单元”(threshold logic unit)。能容易地实现与或非的运算。其中 y = f ( ∑ i w i x i − θ ) y=f(\sum_iw_ix_i-\theta) y=f(∑iwixi−θ), f f f假设为阶跃函数。
当给定训练数据,权重
w
i
w_i
wi以及阈值
θ
\theta
θ都可以通过学习得到。阈值可以看作一个固定输入为-1的“哑结点”(dummy node)所对应的连接权重
w
n
+
1
w_{n+1}
wn+1。这样,权重和阈值的学习可以统一为权重的学习。感知机的学习规则如下:训练样例
(
x
,
y
)
(\bold{x},y)
(x,y),若当前感知机的输出为
y
^
\hat{y}
y^,则感知机的权重调整为:
w
i
←
w
i
+
Δ
w
i
Δ
w
i
=
η
(
y
−
y
^
)
x
i
w_i \leftarrow w_i+ \Delta w_i \\ \Delta w_i = \eta(y-\hat{y})x_i
wi←wi+ΔwiΔwi=η(y−y^)xi
其中,
η
\eta
η是学习率,感知机对预测数据的错误的程度进行权重调整。实际中,感知机只有输出层神经元进行激活函数处理,即只用有一层功能神经元(functional neural),能解决的只有线性可分问题(与或非都是此类问题)。对于线性可分问题,感知机的学习过程一定会收敛,球的适当的权向量
w
=
(
w
1
;
w
2
;
…
;
w
n
+
1
)
\bold w=(w_1;w_2;…;w_{n+1})
w=(w1;w2;…;wn+1)。否则,感知机学习过程将会发生振荡,
w
\bold w
w难以稳定,即使是异或这样简单的非线性可分问题也无法解决。
两层感知机可以解决异或问题,其在输入层与输出层之间添加一层神经元,称为隐含层(hidden layer),隐含层和输出层神经元都是拥有激活函数的功能神经元。
多层前馈神经网络(multi-layer feedforward neural networks):每层神经元与下层神经元完全互连,神经元之间不存在同层连接,也不存在跨层连接。
误差逆传播(error BackPropagation, BP)算法是最成功的神经网络学习算法,能有效地训练多层网络。
其算法原理:
对训练例
(
x
k
,
y
k
)
(\bold x_k, \bold 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)
yk^=(y^1k,y^2k,…,y^lk),即
y
k
^
=
f
(
β
j
−
θ
j
)
\hat{y_k}=f(\beta_j-\theta_j)
yk^=f(βj−θj)
则网络在
(
x
k
,
y
k
)
(\bold x_k, \bold 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=21j=1∑l(y^jk−yjk)2
该网络共有
d
q
+
q
l
+
q
+
l
=
q
(
d
+
l
+
1
)
+
l
dq+ql+q+l=q(d+l+1)+l
dq+ql+q+l=q(d+l+1)+l个参数需要确定,BP是一个迭代学习算法,每一轮迭代中采用广积的感知机学习规则对参数进行更新估计
v
←
v
+
Δ
v
v \leftarrow v+\Delta v
v←v+Δv
BP算法基于梯度下降策略(gradient descent):以目标的负梯度方向对参数进行调整。对误差
E
k
E_k
Ek,给定学习率
η
\eta
η,有
Δ
w
h
j
=
−
η
∂
E
k
∂
w
h
j
∂
E
k
∂
w
h
j
=
∂
E
k
∂
y
^
j
k
⋅
∂
y
^
j
k
∂
β
j
⋅
∂
β
j
∂
w
h
j
\Delta w_{hj}=-\eta \frac{\partial E_k}{\partial w_{hj}}\\ \frac{\partial E_k}{\partial w_{hj}}=\frac{\partial E_k}{\partial \hat{y}_j^k}·\frac{\partial \hat y_j^k}{\partial \beta_j} ·\frac{\partial \beta_j}{\partial w_{hj}}
Δwhj=−η∂whj∂Ek∂whj∂Ek=∂y^jk∂Ek⋅∂βj∂y^jk⋅∂whj∂βj
根据
β
j
\beta_j
βj的定义:
∂
β
j
∂
w
h
j
=
b
h
\displaystyle \frac{\partial \beta_j}{\partial 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)]
因此:
g
j
=
−
(
y
^
j
k
−
y
j
k
)
f
′
(
β
j
−
θ
j
)
=
y
^
j
k
(
1
−
y
^
j
k
)
(
y
j
k
−
y
^
j
k
)
g_j=-(\hat y_j^k-y_j^k)f'(\beta_j-\theta_j)=\hat y_j^k(1-\hat y_j^k)(y_j^k-\hat y_j^k)
gj=−(y^jk−yjk)f′(βj−θj)=y^jk(1−y^jk)(yjk−y^jk)
将上述式子带入到
Δ
w
h
j
\Delta w_{hj}
Δwhj:
Δ
w
h
j
=
η
g
j
b
h
\Delta w_{hj}=\eta g_j b_h
Δwhj=ηgjbh
类似可得:
Δ
θ
j
=
−
η
g
i
Δ
v
i
h
=
η
e
h
x
i
Δ
γ
h
=
−
η
e
h
\Delta \theta_j=-\eta g_i\\ \Delta v_{ih} = \eta e_h x_i\\ \Delta \gamma_h=-\eta e_h
Δθj=−ηgiΔvih=ηehxiΔγh=−ηeh
其中,
e
h
=
−
∂
E
k
∂
b
h
⋅
∂
b
h
∂
α
h
=
−
∑
i
=
1
l
∂
E
k
∂
β
j
∂
β
j
∂
b
h
f
′
(
α
h
−
γ
h
)
=
∑
j
=
1
l
w
h
j
g
j
f
′
(
α
j
−
γ
j
)
=
b
h
(
1
−
b
h
)
∑
j
=
1
l
w
h
j
g
j
e_h=-\frac{\partial E_k}{\partial b_h}·\frac{\partial b_h}{\partial \alpha_h}=-\sum_{i=1}^l \frac{\partial E_k}{\partial \beta_j} \frac{\partial \beta_j}{\partial b_h}f'(\alpha_h-\gamma_h)=\sum_{j=1}^lw_{hj}g_jf'(\alpha_j-\gamma_j)=b_h(1-b_h)\sum_{j=1}^lw_{hj}g_j
eh=−∂bh∂Ek⋅∂αh∂bh=−i=1∑l∂βj∂Ek∂bh∂βjf′(αh−γh)=j=1∑lwhjgjf′(αj−γj)=bh(1−bh)j=1∑lwhjgj
学习率 η ∈ ( 0 , 1 ) \eta \in (0,1) η∈(0,1)控制着算法每一轮迭代的更新步长,太小收敛速度会过慢,太大容易发生振荡。
BP算法流程:
标准BP算法: 基于每个数据进行更新,参数更新频繁,而且对不同的样例进行更新的效果可能出现抵消现象。
累积BP算法: 直接针对累积误差最小化。读取整个训练集D一遍后才对参数进行更新,其参数更新频率较低,但累计误差下降到一定程度后,进一步下降会非常缓慢,这时候标准BP往往会更快获得较好的解。
min
E
=
1
m
∑
i
=
1
m
E
k
\min E=\frac{1}{m}\sum_{i=1}^mE_k
minE=m1i=1∑mEk
BP神经网络经常遭遇“过拟合”的现象,有两种解决方法:
“早停”(early stopping):将数据集分成训练集和验证集,训练集用来计算梯度、更新连接权和阈值,验证机用来估计误差,若训练集误差降低而测试集误差升高,则停止训练。
“正则化”(regularization):在误差目标函数中增加一个用于描述网络复杂度的部分,例如连接权和阈值的平方和,其中
λ
\lambda
λ用于经验误差和网络复杂度两项进行折中,通过交叉验证法估计。
E
=
λ
1
m
∑
i
=
1
m
E
k
+
(
1
−
λ
)
∑
i
w
i
2
E=\lambda \frac{1}{m}\sum_{i=1}^m E_k+(1-\lambda)\sum_i w_i^2
E=λm1i=1∑mEk+(1−λ)i∑wi2
基于梯度的搜索是使用最广泛的参数寻优方法。
在此类方法中,我们从某些初始解出发,迭代寻找最优参数值。每次迭代中,我们计算误差函数在当前点的梯度,然后根据梯度确定搜索方向。由于负梯度方向是函数值下降最快的方向,因此梯度下降法就是沿着负梯度方向搜索最优解。若误差函数在当前点的梯度为0,则达到局部极小,迭代停止。因此,该方法可能会陷入局部极小,无法达到全局最小。
跳出“局部极小”的方法(大多是启发式算法,理论上缺乏保障):
RBF(Radial Basis Function,径向基函数)网络:单隐层前馈神经网络,使用径向基函数作为隐层神经元激活函数,输出层是对隐层神经元输出的线性组合。高级径向基函数似如:
φ
(
x
)
=
∑
i
=
1
q
w
i
ρ
(
x
,
c
i
)
ρ
(
x
,
c
i
)
=
e
−
β
i
∣
∣
x
−
c
i
∣
∣
2
\varphi(x)=\sum_{i=1}^qw_i\rho(\bold x, \bold c_i)\\ \rho(\bold x, \bold c_i)=e^{-\beta_i||\bold x-\bold c_i||^2}
φ(x)=i=1∑qwiρ(x,ci)ρ(x,ci)=e−βi∣∣x−ci∣∣2
径向基函数是沿径向对称的标量函数,定义为样本
x
\bold x
x与数据中心
c
i
\bold c_i
ci之间的欧氏距离。
竞争性学习(competitive learning)是神经网络中常用的一种无监督学习策略。网络的输出层神经元相互竞争,每个时刻仅有一个竞争获胜的神经元被激活,其他被抑制,即“胜者通吃”原则。
ART(Adaptive Resonance Theory,自适应谐振理论)网络是竞争性学习的代表。由比较层、识别层、识别阈值和重置模块构成。
流程:
ART比较好地缓解了竞争型学习中的“可塑性稳定性窘境”(stability-plasticity dilemma),可塑性是指神经网络要有学习新知识的能力,而稳定性则是指神经网络在学习新知识时要保持对旧知识的记忆。这就使得ART网络具有一个很重要的优点:可进行增量学习(incremental learning)或在线学习(online learning)。
SOM(Self-Organizing Map,自组织映射)网络:竞争学习型的无监督神经网络。将高维输入数据映射到低维空间,同时保持输入数据在高维空间的拓扑结构,即将高维空间中相似的样本点映射到网络输出层中的临近神经元。
结构自适应网络:不仅利用训练样本确定合适的连接权、阈值等参数,还将网络结构作为学习的目标之一。级联相关(Cascade-Correlation)网络是结构自适应网络的代表。
优点:无需设置网络层数、隐层神经元数目,训练速度较快
缺点:数据较小时容易陷入过拟合。
递归神经网络(recurrent neural networks, RNN):允许网络中出现环形结构,从而可以让神经元的输出反馈回来作为输入信号。这样使得网络在 t t t时刻的状态不仅与 t t t时刻的输入有关,还与 t − 1 t-1 t−1时刻的网络状态有关,从而处理与时间有关的动态变化。
Elman网络是最常用的递归神经网络之一。隐层神经元的输出被反馈回来,与下一时刻的输入层神经元提供的信号一起,作为隐层神经元的输出在下一时刻的输入。隐层神经元常常采用Sigmoid激活函数,网络的训练常通过推广的BP算法进行。
Boltzmann机(平衡态分布) 是一种“基于能量的模型”(最小化能量,达到理想状态),其神经元分为两层:显层与隐层。显层用于表示数据的输入和输出,隐层是数据的内在表达。
典型的深度学习模型就是很深层的神经网络。提高容量的一个简单办法是增加隐层的数目:隐层多了,相应的神经元连接权、阈值等参数就会更多。模型复杂度也可通过单纯增加隐层神经元的数目来实现。
单隐层的多层前馈网络已具有很强大的学习能力;但从增加模型复杂度的角度来看,增加隐层的数目显然比增加隐层神经元的数目更有效,因为增加隐层数不仅增加了拥有激活函数的神经元数目,还增加了激活函数嵌套的层数。然而,多隐层神经网络难以直接用经典算法(例如标准BP算法)进行训练,因为误差在多隐层内逆传播时,往往会“发散”(diverge)而不能收敛到稳定状态。
训练方法:
无监督逐层训练(unsupervised layer-wise training) 是多隐层网络训练的有效手段。其基本思想:
每次训练一层隐结点,训练时将上一层隐结点的输出作为输入,本层隐结点的输出作为下一层的输入,即“预训练”(pre-training)
与训练完成后,对整个网络进行微调(fine-tuning)训练
权共享: 让一组神经元采用相同的连接权。这个策略在卷积神经网络CNN中发挥了重要作用。
从另一个角度来理解深度学习。无论是DBN(深度信念网络)还是CNN(卷积神经网络),其多隐层堆叠、每层对上一层的输出进行处理的机制,可看作是在对输入信号进行逐层加工,从而把初始的、与输出目标之间联系不太密切的输入表示,转化成与输出目标联系更密切的表示,使得原来仅基于最后一层输出映射难以完成的任务成为可能。换言之,通过多层处理,逐渐将初始的**“低层”特征表示转化为“高层”特征表示后,用“简单模型”即可完成复杂的分类等学习任务。由此可将深度学习理解为进行“特征学习”(feature learning)或“表示学习”(representation learning).
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。