机器学习西瓜书&南瓜书 神经网络
1. 神经元模型
神经网络:由具有适应性的简单单元组成的广泛并行互连的网络,它的组织能够模拟生物神经系统对真实事件物体所做出的交互反应。
神经网络最基本的成分是神经元neuron模型,即定义中的“简单单元”,接下来以M-P神经元模型为例讲解:
神经元接收来自n个其他神经元传递的输入信号,这些输入信号通过带权重的连接(connection)进行传递,神经元接收到的总输入值将与神经元的阈值进行比较,然后通过“激活函数”(activation function,也称响应函数)处理以产生神经元的输出。
理想中的激活函数是阶跃函数,但是该函数具有不连续、不光滑等性质,实际常用Sigmoid函数作为激活函数。
把多个神经元按一定的层次结构连接起来,就得到了神经网络。
2. 感知机与多层网络
感知机(Perceptron)由两层神经元组成,输入层接收外界输入信号后传递给输出层,输出层是M-P神经元,亦称“阈值逻辑单元”(threshold logic unit)。
感知机能容易地实现逻辑与、或、非运算,注意到 y = f ( ∑ i ω i x i − θ ) y=f(\sum_i\omega_ix_i - \theta) y=f(∑iωixi−θ),假定f是阶跃函数,有:
- 与:令 ω 1 = ω 2 = 1 , θ = 2 \omega_1=\omega_2=1, \theta=2 ω1=ω2=1,θ=2,则 y = f ( 1 ∗ x 1 + 1 ∗ x 2 − 2 ) y=f(1*x_1 + 1*x_2 - 2) y=f(1∗x1+1∗x2−2),仅在 x 1 = x 2 = 1 x_1=x_2=1 x1=x2=1时,y=1
- 或:令 ω 1 = ω 2 = 1 , θ = 0.5 \omega_1=\omega_2=1, \theta=0.5 ω1=ω2=1,θ=0.5,则 y = f ( 1 ∗ x 1 + 1 ∗ x 2 − 0.5 ) y=f(1*x_1 + 1*x_2 - 0.5) y=f(1∗x1+1∗x2−0.5),仅在 x 1 = 1 或 x 2 = 1 x_1=1或x_2=1 x1=1或x2=1时,y=1
- 非:令 ω 1 = − 0.6 , ω 2 = 0 , θ = − 0.5 \omega_1=-0.6, \omega_2=0, \theta=-0.5 ω1=−0.6,ω2=0,θ=−0.5,则 y = f ( − 0.6 ∗ x 1 + 0 ∗ x 2 + 0.5 ) y=f(-0.6*x_1 + 0*x_2 + 0.5) y=f(−0.6∗x1+0∗x2+0.5),仅在 x 1 = 1 x_1=1 x1=1时,y=0,当仅在 x 1 = 0 x_1=0 x1=0时,y=1
对训练样例
(
x
,
y
)
(\mathbf x, y)
(x,y) 感知机的学习规则如下:
ω
i
←
ω
i
+
Δ
ω
i
Δ
ω
i
=
η
(
y
−
y
ˇ
)
x
i
\omega_i \leftarrow \omega_i + \Delta\omega_i \\ \Delta\omega_i = \eta(y - \check y)x_i
ωi←ωi+ΔωiΔωi=η(y−yˇ)xi
其中
η
∈
(
0
,
1
)
\eta \in (0, 1)
η∈(0,1)称为学习率(learning rate)。需注意,感知机只有输出层神经元进行激活函数处理,即只拥有一层功能神经元(functional neuron),其学习能力非常有限。
可以证明:若两类模式是线性可分的,即存在一个线性超平面能将它们分开,则感知机的学习过程一定会收敛(converge),否则感知机学习过程将会发生振荡(fluctuation)。
要解决非线性可分问题,需考虑使用多层功能神经元。更一般的,常见的神经网络是形如下图的层级结构,神经元之间不存在同层连接,也不存在跨层连接,称为“多层前馈神经网络”(multi-layer feedforward neural networks)。其中输入层神经元接收外界输入,隐层与输出层神经元(包含功能神经元)对信号进行加工,最终结果由输出层神经元输出。
神经网络学习的结果体现在连接权与阈值中。
3. 误差逆传播算法(反向传播算法)
3.1 模型定义及模型训练
多层网络的学习能力比单层感知机强得多,因此也需要更强大的学习算法。比如误差逆传播(error BackPropagation, 简称BP)算法,BP算法通常用于训练多层前馈神经网络,但也可用于其他类型的神经网络,如递归神经网络。BP网络模型如下图:
对训练集
(
x
k
,
y
k
)
(\mathbb x_k, \mathbb y_k)
(xk,yk),假定神经网络的输出为:
y
ˇ
k
=
(
y
ˇ
1
k
,
y
ˇ
2
k
,
.
.
.
,
y
ˇ
l
k
)
\check y_k = (\check y_1^k, \check y_2^k, ..., \check y_l^k)
yˇk=(yˇ1k,yˇ2k,...,yˇlk),即:
y
ˇ
j
k
=
f
(
β
j
−
θ
j
)
\check y_j^k = f(\beta_j - \theta_j)
yˇjk=f(βj−θj)
则网络在
(
x
k
,
y
k
)
(\mathbb x_k, \mathbb 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(\check y_j^k - y_j^k)^2
Ek=21j=1∑l(yˇjk−yjk)2
图中一共有(d + l + 1)q + l个参数需要确定:输入层到隐层的
d
∗
q
d*q
d∗q个权值、隐层到输出层的
q
∗
l
q*l
q∗l个权重、q个隐层神经元的阈值、l个输出层的阈值。BP是一个迭代学习算法,在迭代的每一轮中采用广义的感知机学习规则对参数进行更新估计,任意参数v的更新估计式为:
v
←
v
+
Δ
v
v \leftarrow v + \Delta v
v←v+Δv
BP算法基于梯度下降策略(gradient descent),以目标的负梯度方向对参数进行调整,输出层参数更新公式:
Δ ω h j = η g j b h Δ θ j = − η g j g j = − ∂ E k ∂ y ˇ j k ∗ ∂ y ˇ j k ∂ β j = − ( y ˇ j k − y j k ) f ′ ( β j − θ j ) = y ˇ j k ( 1 − y ˇ j k ) ( y j k − y ˇ j k ) \Delta\omega_{hj} = \eta g_jb_h \\ \Delta\theta_j = -\eta g_j \\ g_j = -\frac{\partial E_k}{\partial\check y_j^k} * \frac{\partial\check y_j^k}{\partial \beta_j} \\ = -(\check y_j^k - y_j^k)f'(\beta_j - \theta_j) \\ = \check y_j^k(1-\check y_j^k)(y_j^k-\check y_j^k) \\ Δωhj=ηgjbhΔθj=−ηgjgj=−∂yˇjk∂Ek∗∂βj∂yˇjk=−(yˇjk−yjk)f′(βj−θj)=yˇjk(1−yˇjk)(yjk−yˇjk)
隐层参数更新公式:
Δ
v
i
h
=
η
e
h
x
i
Δ
γ
h
=
−
η
e
h
e
h
=
−
∂
E
k
∂
b
h
∗
∂
b
h
∂
α
h
=
−
∑
j
=
1
l
∂
E
k
∂
β
j
∗
∂
β
j
∂
b
h
f
′
(
α
h
−
γ
h
)
=
∑
j
=
1
l
ω
h
j
g
j
f
′
(
α
h
−
γ
h
)
=
b
h
(
1
−
b
h
)
∑
j
=
1
l
ω
h
j
g
j
\Delta v_{ih} = \eta e_hx_i \\ \Delta\gamma_h = -\eta e_h \\ e_h = -\frac{\partial E_k}{\partial b_h} * \frac{\partial b_h}{\partial \alpha_h} \\ = -\sum_{j=1}^l\frac{\partial E_k}{\partial \beta_j} * \frac{\partial \beta_j}{\partial b_h}f'(\alpha_h - \gamma_h) \\ = \sum_{j=1}^l\omega_{hj}g_jf'(\alpha_h - \gamma_h) \\ = b_h(1-b_h)\sum_{j=1}^l\omega_{hj}g_j
Δvih=ηehxiΔγh=−ηeheh=−∂bh∂Ek∗∂αh∂bh=−j=1∑l∂βj∂Ek∗∂bh∂βjf′(αh−γh)=j=1∑lωhjgjf′(αh−γh)=bh(1−bh)j=1∑lωhjgj
学习率
η
∈
(
0
,
1
)
\eta \in (0, 1)
η∈(0,1)控制着算法每一轮迭代中的更新步长,有时隐层参数更新公式中的学习率和输出层参数更新公式中的学习率可以不同。
“标准BP算法”每次仅针对一个训练样例更新连接权和阈值,即更新规则是基于单个的
E
k
E_k
Ek,累积误差逆传播(accumulated error backpropagation)算法是最小化训练集D上的累积误差。
E
=
1
m
∑
k
=
1
m
E
k
E = \frac{1}{m}\sum_{k=1}^mE_k
E=m1k=1∑mEk
隐层神经元的数量只要足够多,多层前馈网络就能以任意精度逼近任意复杂度的连续函数。而隐层神经元的个数在实际应用中通常靠“试错法”(trial-by-error)调整。
3.2 过拟合
BP神经网络经常遭遇过拟合,有两种策略常用来缓解BP网络的过拟合。
- 早停(early stopping)
将数据分成训练集和验证集,训练集用来计算梯度、更新连接权和阈值,验证集用来估计误差,若训练集误差降低但验证集误差升高,则停止训练。同时返回具有最小验证集误差的连接权和阈值。
- 正则化(regularization)
在误差目标函数中增加一个用于描述网络复杂度的部分,如连接权和阈值的平方和,令
E
k
E_k
Ek表示第k个训练样例上的误差,
ω
i
\omega_i
ωi表示连接权和阈值,则误差目标函数变为:
E
=
λ
1
m
∑
k
=
1
m
E
k
+
(
1
−
λ
)
∑
i
ω
i
2
E = \lambda\frac{1}{m}\sum_{k=1}^mE_k + (1-\lambda)\sum_i\omega_i^2
E=λm1k=1∑mEk+(1−λ)i∑ωi2
其中
λ
∈
(
0
,
1
)
\lambda \in (0, 1)
λ∈(0,1)用于对经验误差与网络复杂度两项进行折中,常通过交叉验证法进行估计。
4. 全局最小与局部最小
若用E表示神经网络在训练集上的误差,则它显然是关于连接权 ω \omega ω和阈值 θ \theta θ的函数。此时,神经网络的训练过程可看作一个参数寻优过程,即在参数空间中,寻找一组最优参数使E最小。
有两种最优:
- 局部最优(local minimum):其中的误差函数值称为误差函数的局部极小值
- 全局最优(global minimum):其中的误差函数值称为误差函数的全局最小值
基于梯度的搜索是使用最为广泛的参数寻优方法,其中是参数沿着负梯度方向搜索最优解,这是如果误差函数有多个局部最优,则参数寻优可能陷入局部极小,一般通过以下策略“跳出”局部极小,从而进一步接近全局最小:
- 以多组不同参数值初始化多个神经网络,按标准方法训练后,取其中误差最小的解作为最终参数。
- 使用“模拟退火”(simulated annealing)技术,在每一步都以一定的概率接受比当前解更差的结果,从而有助于“跳出”局部极小。(也有可能造成跳出“全局最优”)
- 使用随机梯度下降:在计算梯度是加入了随机因素。
此外,遗传算法(genetic algorithms)也常用来训练神经网络以更好地逼近全局最小。
需注意上述技术大多是启发式,理论上尚缺乏保障。
5. 其他神经网络
5.1 RBF网络
RBF(Radial Basis Function, 径向基函数)网络是一种单隐层前馈神经网络,使用径向基函数作为隐层神经元激活函数,而输出层是对隐层神经元输出的线性组合。假定输入为d维向量
x
\mathbf x
x,输出为实值,则RBF网络可表示为:
φ
(
x
)
=
∑
i
=
1
q
ω
i
ρ
(
x
,
c
i
)
\varphi(\mathbf x) = \sum_{i=1}^q\omega_i\rho(\mathbf{x}, \mathbf{c}_i)
φ(x)=i=1∑qωiρ(x,ci)
其中q为隐层神经元个数,
c
i
\mathbf{c_i}
ci和
ω
i
\omega_i
ωi分别是第i个隐层神经元所对应的中心和权重,
ρ
(
x
,
c
i
)
\rho(\mathbf{x}, \mathbf{c_i})
ρ(x,ci)是径向基函数,通常定义为样本
x
\mathbf{x}
x到数据中心
c
i
\mathbf{c_i}
ci之间的欧氏距离的单调函数。常用的高斯径向基函数形如:
ρ
(
x
,
c
i
)
=
e
−
β
i
∣
∣
x
−
c
i
∣
∣
2
\rho(\mathbf{x}, \mathbf{c_i}) = e^{-\beta_i\left||\mathbf{x}-\mathbf{c_i}\right||^2}
ρ(x,ci)=e−βi∣∣x−ci∣∣2
RBF网络一般分两步:
- 确定神经元中心 c i \mathbf{c_i} ci,常用的方式如随机采样、聚类等
- 利用BP算法等来确定参数 ω i \omega_i ωi和 β i \beta_i βi
5.2 ART网络
竞争型学习(competitive learning)是神经网络中一种常用的无监督学习策略,在使用该策略,网络的输出神经元相互竞争,每一时刻仅有一个竞争获胜的神经元被激活,其他神经元的状态被抑制。这种机制亦称“胜者通吃”(winner-take-all)原则。
ART(Adaptive Resonance Theory, 自适应谐振理论)网络是竞争型学习的重要代表。该网络由比较层、识别层、识别阈值和重置模块构成。其中比较层负责接收输入样本,并将其传递给识别层神经元。识别层每个神经元对应一个模式类,神经元数目可在训练过程中动态增长以增加新的模式类。
ART具有一个很重要的优点:可进行增量学习(incremental learning)或在线学习(online learning)
5.3 SOM网络
SOM(Self-Organizing Map,自组织映射)网络是一种竞争学习型的无监督神经网络,能将高维输入数据映射到低维空间(通常为二维),同时保持输入数据在高维空间的拓扑结构。
训练过程:接收到训练样本后,计算输出层神经元携带的权向量与训练样本的距离,距离最近的样本称为竞争获胜者,称为最佳匹配单元(best matching unit),然后更新最佳匹配单元及其附近神经元的权向量,以使得权向量与当前输入样本距离缩小。
5.4 级联相关网络
一般的神经网络训练连接权和阈值,结构自适应网络则将网络结构也作为学习的目标之一。其中的代表就是极限相关(Cascade-Correlation)网络是结构自适应网络的重要代表。
主要有两个成分:“级联”(建立层次链接的层级结构)和“相关”(通过最大化新神经元的输出与网络误差之间的相关性来训练相关参数)
无需设置网络层数、隐层神经元数量,且训练速度较快,但在数据较小时易陷入过拟合。
5.5 Elman网络
“递归神经网络”(recurrent neural networks)允许网络出现环形结构,从而可让一些神经元的输出反馈回来作为输入信号,使得网络在t时刻的输出状态和t时刻的输入、t-1时刻的网络状态都有关,从而能处理时间相关的动态变化。
Elman网络是最常用的递归神经网络,其中的隐层神经元通常采用Sigmoid激活函数,而网络的训练通过推广的BP算法进行。
5.6 Boltzmann机
神经网络中有一类模型是为网络状态定义一个“能量”(energy),能量最小化时网络达到理想状态,而网络的训练就是在最小化能量函数。
6. 深度学习
理论上讲,参数越多的模型复杂度越高、“容量”(capacity)越大,意味着能完成更复杂的学习任务。但一般情况下,复杂模型的训练效率低,易陷入过拟合。但是由于计算能力的提高和训练数据的大幅增加可以解决以上两个问题,出现了以“深度学习”为代表的复杂模型。
模型复杂度可通过单纯增加隐层神经元的数目来实现,但这时难以直接用经典算法(如标准BP算法)进行训练,因为误差在多隐层内逆传播时,往往会发散而不能收敛到稳定状态。
无监督逐层训练(unsupervised layer-wise training)是多隐层网络训练的有效手段,其基本思想如下:
- 预训练(pre-training):是每次训练一层隐结点,训练时将上一层隐结点作为下一层隐结点的输入
- 微调(fine-tuning)训练
“权共享”(weight sharing):让一组神经元使用相同的连接权。在卷积神经网络(Convolutional Neural Network, 简称CNN)中发挥了重要作用。其中可以使用BP算法进行训练,但在训练中,每一层的每一组神经元都使用相同的连接权。
深度学习可理解为进行“特征学习”(feature learning)或“表示学习”(representation learning)
以往在机器学习用于现实任务时,描述样本的特征通常需由专家来设计,这称为“特征工程”(feature engineering);而特征学习则通过机器学习技术自身来产生好特征,使机器学习向“全自动数据分析”又前进了一步。