在人工神经网络简介一节中,图二中的ANN系统的每一个单元称之为感知器或感知机(perceptron),为二类分类的线性分类模型,是神经网络的基础,其输入为实例的特征向量,输出为实例的类别,共有 − 1 -1 −1和 + 1 +1 +1两种类别。
一、感知器模型
图1
如图1所示将感知器公式表达为
o
(
x
1
,
⋯
,
x
n
)
=
{
1
i
f
w
0
+
w
1
x
1
+
w
2
x
2
+
⋯
+
w
n
x
n
>
0
−
1
o
t
h
e
r
w
i
s
e
o(x_1,\cdots,x_n)=\left\{ \begin{aligned} 1 & \ \ if \ \ w_0+w_1x_1+w_2x_2+\cdots+w_nx_n>0\\ -1 &\ \ otherwise \\ \end{aligned} \right.
o(x1,⋯,xn)={1−1 if w0+w1x1+w2x2+⋯+wnxn>0 otherwise
已知
x
0
=
1
x_0=1
x0=1,将上边不等式改写为
∑
i
=
0
n
w
i
x
i
>
0
\sum_{i=0}^nw_ix_i>0
∑i=0nwixi>0,进一步以向量形式简化
o
(
x
→
)
=
s
i
g
n
(
w
→
⋅
x
→
)
=
{
1
i
f
w
→
⋅
x
→
>
0
−
1
o
t
h
e
r
w
i
s
e
o(\overrightarrow x)=sign(\overrightarrow w\cdot\overrightarrow x)=\left\{ \begin{aligned} 1 & \ \ if \ \ \overrightarrow w\cdot\overrightarrow x>0\\ -1 &\ \ otherwise \\ \end{aligned} \right.
o(x)=sign(w⋅x)={1−1 if w⋅x>0 otherwise
学习一个感知机模型,就是获取
w
0
,
w
1
,
w
2
,
⋯
 
,
w
n
w_0,w_1,w_2,\cdots,w_n
w0,w1,w2,⋯,wn权值的过程,其空间
H
=
{
w
→
∣
w
→
∈
R
(
n
+
1
)
}
H=\{{\overrightarrow w|\overrightarrow w\in\mathbf{R} ^{(n+1)}} \}
H={w∣w∈R(n+1)}
二、 两种训练法则
感知器训练法则和delta法则提供了学习单个感知器权值的算法,是学习多个单元构成的ANN网络的基础。
1、感知器训练法则
如果训练样例线性可分,则使用感知器训练法则,可保证算法收敛:
(1)随机设置权值向量
w
→
\overrightarrow w
w;
(2)训练每一个样例,如果样例的目标输出值
t
t
t和感知器的输出值
o
o
o不同,则修改该样例对应的权值
w
i
←
w
i
+
Δ
w
i
w_i\leftarrow w_i+\Delta w_i
wi←wi+Δwi,
Δ
w
i
=
η
(
t
−
o
)
x
i
\Delta w_i=\eta(t-o)x_i
Δwi=η(t−o)xi(
i
i
i从
0
0
0到
n
n
n),
η
\eta
η为学习速率可调节权重调整的快慢,通常设置为较小值(有时会随着调整次数的增加而衰弱);
(3)一直训练到感知器正确分类所有的训练样例。
注:若不从数学证明,只从表面现象上理解上述算法。
按照图1所示模型,假设其中一个样例
A
=
{
x
0
,
x
1
,
⋯
 
,
x
n
}
A=\{x_0,x_1,\cdots,x_n\}
A={x0,x1,⋯,xn}真实的输出为
+
1
+1
+1,而经过感知器
o
(
x
)
=
s
i
g
n
(
w
→
⋅
x
→
)
o(x)=sign(\overrightarrow w\cdot\overrightarrow x)
o(x)=sign(w⋅x)输出为
−
1
-1
−1。这种情况下
w
→
⋅
x
→
<
0
\overrightarrow w\cdot\overrightarrow x<0
w⋅x<0,想要转变,只有通过修改权值才能使
w
→
⋅
x
→
>
0
\overrightarrow w\cdot\overrightarrow x>0
w⋅x>0,修改的法则就是
Δ
w
i
=
η
(
t
−
o
)
x
i
\Delta w_i=\eta(t-o)x_i
Δwi=η(t−o)xi。例如,此时
η
=
0.1
\eta=0.1
η=0.1,样例
A
=
{
1
,
−
0.8
}
A=\{1,-0.8\}
A={1,−0.8},真实的输出为
+
1
+1
+1,经过感知器为
−
1
-1
−1。
x
0
=
1
x_0=1
x0=1,则
Δ
w
0
=
η
(
t
−
o
)
x
0
=
0.1
∗
(
1
−
(
−
1
)
)
∗
1
=
0.2
\Delta w_0=\eta(t-o)x_0=0.1*(1-(-1))*1=0.2
Δw0=η(t−o)x0=0.1∗(1−(−1))∗1=0.2,进一步使得
w
0
和
w
0
x
0
w_0和w_0x_0
w0和w0x0增大;
x
1
=
−
0.8
x_1=-0.8
x1=−0.8则
Δ
w
1
=
−
0.16
\Delta w_1=-0.16
Δw1=−0.16,,使得
w
1
w_1
w1减小,而
w
1
x
1
w_1x_1
w1x1增大,以使
w
→
⋅
x
→
\overrightarrow w\cdot\overrightarrow x
w⋅x整体增大。
相反的情形
A
=
{
x
0
,
x
1
,
⋯
 
,
x
n
}
A=\{x_0,x_1,\cdots,x_n\}
A={x0,x1,⋯,xn}的目标输出为
−
1
-1
−1,而经过感知器
o
(
x
)
=
w
→
⋅
x
→
o(x)=\overrightarrow w\cdot\overrightarrow x
o(x)=w⋅x输出为
+
1
+1
+1,则和正的
x
i
x_i
xi关联的权值减小,和负的
x
i
x_i
xi关联权值增大。
2、delta法则
感知器训练法则只适用于线性可分的训练样例,在样例是非线性可分时,该训练法将不再收敛。因此又提出了delta法则,在训练样本为线性不可分时,它依然提供收敛到目标函数的最佳近似。delta法则的核心思想是采用梯度下降的方法来搜索权向量
w
→
\overrightarrow w
w的空间,找到最佳拟合训练样本的权向量。
此时将感知器的模型定义为无阈值的函数
o
(
x
)
=
w
→
⋅
x
→
o(x)=\overrightarrow w\cdot\overrightarrow x
o(x)=w⋅x,即为一个线性单元,同时定义训练误差
E
(
w
→
)
=
1
2
∑
d
∈
D
(
t
d
−
o
d
)
2
E(\overrightarrow w)= \frac{1}{2} \sum_{d\in D}(t_d-o_d)^2
E(w)=21∑d∈D(td−od)2,
D
D
D表示整个训练样例集合,
t
d
t_d
td为样例
d
d
d的目标输出,
o
d
o_d
od为感知器对训练样例
d
d
d的输出。实际训练中
E
(
w
→
)
E(\overrightarrow w)
E(w)的
t
d
t_d
td已由训练样例固定,唯一改变的值是
o
d
o_d
od依赖
w
→
\overrightarrow w
w向量。
(1)可视化假设空间
图2
根据图2,假设这是一个两维的
w
→
\overrightarrow w
w向量,可以看出
w
0
w_0
w0、
w
1
w_1
w1确定了一个平面,纵轴表示误差
E
(
w
→
)
E(\overrightarrow w)
E(w),我们希望得到最小的误差函数,对于线性单元,误差面一定存在着一个单一最小值的抛物面,具体的形状依赖于训练样例集合。
图2中的箭头显示了该点梯度的相反方向,指出了
w
0
w_0
w0、
w
1
w_1
w1沿误差最陡峭下降的方向。为了得到一个使
E
E
E最小化的权向量,梯度下降从一个任意的初始权向量开始,然后以很小的步伐反复修改这个向量(沿着最陡峭的方向),直到全局的最小误差点。
(2)梯度下降法则的推导
E
(
w
→
)
=
1
2
∑
d
∈
D
(
t
d
−
o
d
)
2
E(\overrightarrow w)= \frac{1}{2} \sum_{d\in D}(t_d-o_d)^2
E(w)=21∑d∈D(td−od)2的梯度
∇
E
(
w
→
)
≡
[
∂
E
∂
w
0
,
∂
E
∂
w
1
,
⋯
 
,
∂
E
∂
w
n
]
\nabla E(\overrightarrow w)\equiv[\frac{\partial E}{\partial w_0},\frac{\partial E}{\partial w_1}, \cdots,\frac{\partial E}{\partial w_n}]
∇E(w)≡[∂w0∂E,∂w1∂E,⋯,∂wn∂E],表示最陡峭上升的方向,则最陡峭下降的方向为
−
∇
E
(
w
→
)
-\nabla E(\overrightarrow w)
−∇E(w)。此时对于
w
→
\overrightarrow w
w则沿着
−
∇
E
(
w
→
)
-\nabla E(\overrightarrow w)
−∇E(w)的方向下降,不断缩小直到获取全局的最小值,为了控制下降的步长定义
Δ
w
→
=
−
η
∇
E
(
w
→
)
\Delta \overrightarrow w= -\eta \nabla E(\overrightarrow w)
Δw=−η∇E(w),
η
\eta
η称之为下降搜索步长,则
w
→
←
w
+
Δ
w
→
=
w
→
−
η
∇
E
(
w
→
)
\overrightarrow w\leftarrow w+\Delta \overrightarrow w= \overrightarrow w-\eta \nabla E(\overrightarrow w)
w←w+Δw=w−η∇E(w)
考虑到
w
→
\overrightarrow w
w对应于
n
+
1
n+1
n+1个分向量,对每一个分量下降规则为
w
i
←
w
i
+
Δ
w
i
=
w
i
−
η
∇
∂
E
∂
w
i
w_i \leftarrow w_i+\Delta w_i=w_i-\eta \nabla \frac{\partial E}{\partial w_i}
wi←wi+Δwi=wi−η∇∂wi∂E。
∂
E
∂
w
i
=
∂
∂
w
i
1
2
∑
d
∈
D
(
t
d
−
o
d
)
2
\frac{\partial E}{\partial w_i}=\frac{\partial }{\partial w_i}\frac{1}{2}\sum_{d\in D}(t_d-o_d)^2
∂wi∂E=∂wi∂21∑d∈D(td−od)2
=
1
2
∑
d
∈
D
∂
∂
w
i
(
t
d
−
o
d
)
2
=\frac{1}{2}\sum_{d\in D}\frac{\partial }{\partial w_i}(t_d-o_d)^2
=21∑d∈D∂wi∂(td−od)2
=
1
2
∑
d
∈
D
=\frac{1}{2}\sum_{d\in D}
=21∑d∈D
2
2
2
∂
∂
w
i
(
t
d
−
o
d
)
\frac{\partial }{\partial w_i}(t_d-o_d)
∂wi∂(td−od)
=
∑
d
∈
D
(
t
d
−
o
d
)
∂
∂
w
i
(
t
d
−
w
→
⋅
x
→
d
)
=
∑
d
∈
D
(
t
d
−
o
d
)
(
−
x
i
d
)
=\sum_{d\in D}(t_d-o_d)\frac{\partial }{\partial w_i}(t_d-\overrightarrow w\cdot\overrightarrow x_d)=\sum_{d\in D}(t_d-o_d)(-x_{id})
=∑d∈D(td−od)∂wi∂(td−w⋅xd)=∑d∈D(td−od)(−xid)。
其中
x
i
d
x_{id}
xid表示一个训练样例d的输入分量
x
i
x_{i}
xi,对于整个训练样例D来说,这个训练集合
Δ
w
i
=
−
η
∇
∂
E
∂
w
i
=
η
∑
d
∈
D
(
t
d
−
o
d
)
x
i
d
\Delta w_i=-\eta\nabla \frac{\partial E}{\partial w_i}=\eta\sum_{d\in D}(t_d-o_d)x_{id}
Δwi=−η∇∂wi∂E=η∑d∈D(td−od)xid。
有上述分析后可得出,在样例集
D
D
D(假设共有
k
k
k个)中每一个样例
d
d
d的输入值向量为
x
→
\overrightarrow x
x,
t
t
t为目标输出值,
o
o
o为感知器的输出,
η
\eta
η为学习速率,训练线性单元
o
(
x
)
=
w
→
⋅
x
→
o(x)=\overrightarrow w\cdot\overrightarrow x
o(x)=w⋅x的梯度下降算法:
-
初始化 w → \overrightarrow w w向量中的分量 w i w_i wi(i从0到n共 n + 1 n+1 n+1个)为小的随机值
-
在终止条件之前:
a、初始化每个 Δ w i ( i 从 0 到 n 共 \Delta w_i(i从0到n共 Δwi(i从0到n共n+1 个 ) 个) 个)为 0 0 0;
b、计算 w i w_i wi的更新值,即 Δ w i = η ∑ d ∈ D ( t d − o d ) x i d \Delta w_i=\eta\sum_{d\in D}(t_d-o_d)x_{id} Δwi=η∑d∈D(td−od)xid,对每一个样例的 Δ w i \Delta w_i Δwi计算后累加求和,见下伪代码:
f o r ( d = 0 ; d ≤ k ; d + + ) for(d=0;d\leq k;d++) for(d=0;d≤k;d++) //循环计算每一个样例的 Δ w i \Delta w_i Δwi
{
计算 o d ( x → ) = w 0 x 0 d + w 1 x 1 d + ⋯ + w n x n d o_d(\overrightarrow x)=w_0x_{0d}+w_1x_{1d}+\cdots+w_nx_{nd} od(x)=w0x0d+w1x1d+⋯+wnxnd;//当前样例求出经过感知器的输出值
f o r ( i = 0 ; i ≤ n + 1 ; i + + ) for(i=0;i\leq n+1;i++) for(i=0;i≤n+1;i++) //对样例的每一个分向量求出变化值并累加
Δ w i ← Δ w i + η ( t d − o d ) x i d \Delta w_i \leftarrow \Delta w_i+\eta(t_d-o_d)x_{id} Δwi←Δwi+η(td−od)xid;
}
c、对于每个权值 w i w_i wi做 w i ← w i + Δ w i w_i \leftarrow w_i+\Delta w_i wi←wi+Δwi -
遇到终止条件,停止算法。
(3)梯度下降的随机近似
梯度下降作为一种重要的通用学习规则,是搜索庞大假设空间或无限假设空间的一种策略,此时必须满足函数
o
(
x
)
=
w
→
⋅
x
→
o(x)=\overrightarrow w\cdot\overrightarrow x
o(x)=w⋅x连续且可微。
应用梯度下降时遇到的两个主要实践问题:有时收敛过程可能非常慢;如果误差曲面上有多个局部极小值,不能保证这个过程会找到全局最小值。解决的算法见下:
- 初始化 w → \overrightarrow w w向量中的分量 w i w_i wi(i从0到n共 n + 1 n+1 n+1个)为小的随机值;
- 在终止条件之前:
a、初始化每个 Δ w i ( i 从 0 到 n 共 \Delta w_i(i从0到n共 Δwi(i从0到n共n+1 个 ) 个) 个)为 0 0 0;
b、 对每一个训练样例直接做 w i w_i wi更新,即 Δ w i = η ( t − o ) x i \Delta w_i=\eta(t-o)x_{i} Δwi=η(t−o)xi,见下伪代码:
f o r ( d = 0 ; d ≤ k ; d + + ) for(d=0;d\leq k;d++) for(d=0;d≤k;d++) //对每一个样例更新
{
计算 o d ( x → ) = w 0 x 0 d + w 1 x 1 d + ⋯ + w n x n d o_d(\overrightarrow x)=w_0x_{0d}+w_1x_{1d}+\cdots+w_nx_{nd} od(x)=w0x0d+w1x1d+⋯+wnxnd;//当前样例求出经过感知器的输出值
f o r ( i = 0 ; i ≤ n + 1 ; i + + ) for(i=0;i\leq n+1;i++) for(i=0;i≤n+1;i++) //每一个样例的分向量求出变化,直接更新 w i w_i wi
w i ← w i + η ( t d − o d ) x i d w_i\leftarrow w_i+\eta(t_d-o_d)x_{id} wi←wi+η(td−od)xid;
} - 遇到终止条件,停止算法。
以上算法称之为随机梯度下降法,它和梯度下降最大不同在于求 Δ w i \Delta w_i Δwi更新时,梯度下降法是对所有的样例的分向量 w i w_i wi求出变化累加后进行统一更新,而随机梯度下降法是对单一样例的分向量 w i w_i wi求出变化后直接更新,增加了 w i w_i wi更新的步数,更精细化更新 w i w_i wi。
注:标准梯度下降的输出值 o d ( x ) o_d(x) od(x)在算法每次的一重循环中其实已经固定与二重循环无关,而随机梯度下降中因为在每次的二重循环中都更新了 w i w_i wi,故每次一重循环中输出值 o d ( x ) o_d(x) od(x)都要发生变化。 所以随机梯度下降相当于为每个样例定义了不同的误差 E d ( w → ) = 1 2 ( t d − o d ) 2 E_d(\overrightarrow w)= \frac{1}{2} (t_d-o_d)^2 Ed(w)=21(td−od)2,而每次二重循环中的权重 w → \overrightarrow w w的更新也正是 E d ( w → ) E_d(\overrightarrow w) Ed(w)对应的梯度值。只要使 η \eta η足够小,就可以使随机梯度下降以任意程度接近于真实的梯度下降。
三、 小结
1、标准梯度下降算法与随机梯度下降算法的差异
- 标准梯度是在权值向量 w → \overrightarrow w w更新前对所有样例的变化进行汇总,而随机梯度下降是向量 w → \overrightarrow w w通过考察每个训练实例来更新的。
- 标准梯度下降中,权值更新的每一步对所有的样例进行求和,需要更多的计算,且每一次更新的权值步长要比随机梯度的幅度大。
- 如果
E
(
w
→
)
E(\overrightarrow w)
E(w)有多个局部极小值,随机的梯度下降有时可能避免陷入这些局部极小值中,因为它使用的是
∇
E
d
(
w
→
)
\nabla E_d(\overrightarrow w)
∇Ed(w)去搜索而不是用
∇
E
(
w
→
)
\nabla E(\overrightarrow w)
∇E(w)来进行搜索。
注:在实际的应用中标准梯度下降算法和随机梯度下降算法都被广泛应用。
2、有阈值的感知机算法和无阈值的感知机算法的差异
-
依据更新的 o o o输出值不同。 在随机梯度算法中 Δ w i = η ( t − o ) x i \Delta w_i=\eta(t-o)x_{i} Δwi=η(t−o)xi,其被称为delta法则(增量法则),或叫做LMS法则(least-mean-square最小均方)、Adaline法则或Windrow-Hoff法则。虽然这个法则和感知器训练法在表面上看起来是一致的,但本质上却不同,因为增量法则的线性单元 o ( x → ) = w → ⋅ x → o(\overrightarrow x)=\overrightarrow w \cdot\overrightarrow x o(x)=w⋅x 是无阈值的感知器算法,而感知器法则的输出为 o ( x → ) = s i g n ( w → ⋅ x → ) o(\overrightarrow x)=sign(\overrightarrow w \cdot\overrightarrow x) o(x)=sign(w⋅x)是有阈值的感知机算法,即 Δ w i = η ( t − o ) x i \Delta w_i=\eta(t-o)x_{i} Δwi=η(t−o)xi中 o o o的更新不同,一个为无阈值输出,一个为有阈值输出。
-
不同的收敛特性。感知器算法收敛的条件是训练样例必须是线性可分的,而deta法则无论训练样例是否线性可分都会收敛。
delta法则给出是用来学习非阈值线性单元的权,但它可以方便地用来训练有阈值的感知机单元。因为如果非阈值的输出能够完美拟合出训练样例的目标值 ± 1 \pm 1 ±1,那么把它从 o ( x → ) = w → ⋅ x → o(\overrightarrow x)=\overrightarrow w \cdot\overrightarrow x o(x)=w⋅x 切换为有阈值的感知机单元 o ′ ( x → ) = s i g n ( w → ⋅ x → ) o'(\overrightarrow x)=sign(\overrightarrow w \cdot\overrightarrow x) o′(x)=sign(w⋅x) 后也能够完美拟合出样例的目标值;如果不能够完美拟合出训练样例的目标值 ± 1 \pm 1 ±1,只要拟合的符号正确,那么把它从 o ( x → ) = w → ⋅ x → o(\overrightarrow x)=\overrightarrow w \cdot\overrightarrow x o(x)=w⋅x 切换为有阈值的感知机单元 o ′ ( x → ) = s i g n ( w → ⋅ x → ) o'(\overrightarrow x)=sign(\overrightarrow w \cdot\overrightarrow x) o′(x)=sign(w⋅x) 后依然能够完美拟合出样例的目标值。
注:当线性单元误差最小时进行拟合得出 w → \overrightarrow w w不能保证有阈值的输出 o ′ o' o′的误分类样例数最小。
参考:
《机器学习》(美)卡内基·梅隆大学著 曾华军 张银奎等译 63-70页