感知机是一种经典的神经网络算法,用于数据分类。其图形化展示如下图,相互连接的神经元
j
和神经元
k
做了放大处理,我们可以更清楚地了解感知机中每个神经元的计算逻辑。
其中,输入层
x1
和
x2
对应于一条有两个特征的数据,输出层
y
表示这条数据的标签(类别)。对于神经元
k
,接收它左侧三个神经元的输出,作为其输入。每一个输入配有一个权重
wjk
,因此,神经元
k
接收的输入总和为
zk=∑jwjkaj+bk
。
gk(z)
是神经元
k
的激活函数,其结果
ak
作为神经元
k
的输出。即:
ak=gk(∑jwjkaj+bk)
常见的激活函数有:
学习策略
此处,我们以双输入单神经元感知机,
sgn_func
作为激活函数为例开始讲解感知机的学习策略。如下图:
如上神经网络的输出定义为
a=sgn(WTX+b)=sgn(w1x1+w2x2+b)
,决策边界定义为
z=WTX+b=w1x1+w2x2+b=0
。其图形化展示如下:
其中,
W
为决策边界
WTX+b=0
的法向量,始终垂直于决策边界。
对于输入数据
{x1=[12],y1=1}{x2=[−0.52],y2=0}{x3=[−0.5−1],y3=0}
,下图中空心圆表示
yi=0
,实心圆表示
yi=1
。感知机的学习策略步骤如下:
- 令
x0i=1
和
w0=b
,我们随机初始化
W
构建感知机模型
l0:W0X=0
;
- 在决策边界
l0
的分类下,发现
x1
被错误分类,即
y=1,a=0
。因此,参数更新公式有
W1=W0+x1
(新的参数向量
W1
使得新的决策边界
l1
向
x1
的方向旋转);
- 在决策边界
l1
的分类下,发现
x2
被错误分类,即
y=0,a=1
。因此,参数更新公式有
W2=W1−x2
(新的参数向量
W2
使得新的决策边界
l2
向远离
x2
的方向旋转);
- 在决策边界
l2
的分类下,发现
x1,x2,x3
均被正确分类,即
y=0,a=0
或
y=1,a=1
。因此,参数不再更新。
总结如上两种错误分类情况,即得统一的参数更新公式:
Wnew=Wold+(y−a)X
此参数更新公式对于单隐层多神经元感知机同样适用,不过是
W
由向量变成了矩阵。
感知机的收敛性
由于
y−a∈{−1,1}
,可令
W(k+1)=W(k)+X′(k)
。其中:
X′(k)∈{x1,x2,…,xm,−x1,−x2,…,−xm}
然后,我们假设感知机存在一个最终解
W⋆
,使得:
W⋆Txi>δ>0|y=1W⋆Txi<−δ<0|y=0
其中,
δ
表示某可能很小的正数。结合
X′(k)
的定义,得
W⋆TX′(k)>δ
。
roof:
初始化感知机参数
W(0)
为
0
,经过
k
次迭代后:
W(K)=X′(0)+X′(1)+X′(2)+⋯+X′(k−1)W⋆TW(K)=W⋆TX′(0)+W⋆TX′(1)+W⋆TX′(2)+⋯+W⋆TX′(k−1)
由于
W⋆TX′(k)>δ
,得
W⋆TW(K)>kδ
。
(W⋆TW(K))2=(∥W⋆∥∥W(K)∥cosθ)2≤∥W⋆∥2∥W(K)∥2∥W(K)∥2≥(W⋆TW(K))2∥W⋆∥2>(kδ)2∥W⋆∥2
接下来计算
∥W(K)∥
的上界:
∥W(K)∥2=WT(K)W(K)=[W(K−1)+X′(K−1)]T[W(K−1)+X′(K−1)]=WT(K−1)W(K−1)+2WT(K−1)X′(K−1)+X′T(K−1)X′(K−1)
对于
W(K−1)
,决策边界仍处于更新状态中。因此,必有数据被错误分类。如果
y=1,a=0
,
WT(K−1)X′(K−1)=WT(K−1)X(K−1)≤0
;如果
y=0,a=1
,
WT(K−1)X′(K−1)=−WT(K−1)X(K−1)≤0
(读者可以自行构建二维坐标系验证)。因此:
∥W(K)∥2≤∥W(K−1)∥2+∥X′(K−1)∥2
重复迭代可得:
∥W(K)∥2≤∥X′(0)∥2+∥X′(1)∥2+⋯+∥X′(K−1)∥2
令
Π=max(∥X′(i)∥2)
,得:
∥W(K)∥2≤kΠ
结合
∥W(K)∥2>(kδ)2∥W⋆∥2
,得:
(kδ)2∥W⋆∥2<∥W(K)∥2≤kΠk<Π∥W⋆∥2δ2
得证感知机的学习能在有限次数内完成。
感知机的局限性
上面对单层神经元感知机学习策略的讲解和收敛性的证明都基于一个假设:数据是线性可分的。即存在一个超平面能将不同类的数据分隔开。然而,现实中的数据大多是非线性可分的,如下图:
而非线性数据可通过引入多层神经元处理。