第一章 机器学习简介
第二章 感知机
感知机(PLA)是 1957 年,由 Rosenblatt 提出会,是神经网络和支持向量机的基础。PLA 全称是 Perceptron Linear Algorithm,即线性感知机算法,属于一种最简单的感知机模型。感知机是二分类的线性分类模型,其输入为实例的特征向量,输出为实例的类别,取值为+1和-1。
首先我们来介绍一下什么是超平面,超平面是具有下面形式的集合:
Ω = { x ∣ a T x = b } , 其中 a ∈ R n , a ≠ 0 且 b ∈ R \Omega=\{x|a^Tx=b\} ,其中 a\in R^n,a≠0 且 b\in R Ω={x∣aTx=b},其中a∈Rn,a=0且b∈R超平面是关于 x x x的非平凡线性方程组的解空间。为了从几何上来直观理解,首先, 我们选取这样的一点 x 0 x_0 x0 , 使得 a T x 0 = b a^T x_0=b aTx0=b(若不存在这样的 x 0 x_0 x0, Ω \Omega Ω为空集),然后我们对原式做如下变换:
a T x = b ⇒ a T x − b = 0 ⇒ a T x − a T x 0 = 0 ⇒ a T ( x − x 0 ) = 0 \begin{aligned} & a^T x=b \\ \Rightarrow\quad &a^T x-b=0 \\ \Rightarrow\quad& a^T x-a^T x_0=0 \\ \Rightarrow\quad& a^T\left(x-x_0\right)=0 \end{aligned} ⇒⇒⇒aTx=baTx−b=0aTx−aTx0=0aT(x−x0)=0
也就是说, x x x 代表所有与 a a a 内积为 b 的向量组成的集合, x − x 0 x−x_0 x−x0 代表所有与 a a a 内积为0的向量组成的集合。那么,在二维条件下,我们先尝试构造出 x − x 0 x−x_0 x−x0 与 a a a 的几何表示:
橙色线上的点与原点构成的向量即为 x − x 0 x-x_0 x−x0,那么 x = ( x − x 0 ) + x 0 x=(x-x_0 )+x_0 x=(x−x0)+x0(相对于黄色的线平移 x 0 x_0 x0),如下图所示:
由图可知红色直线上的点到 a a a向量方向的投影 ∣ x ∣ cos θ |x|\cos\theta ∣x∣cosθ为一个定值,故 < a , x > = ∣ a ∣ ∣ x ∣ cos θ = b =|a||x|\cos\theta=b <a,x>=∣a∣∣x∣cosθ=b.
假设输入空间(特征空间)是 X ⊆ R n \mathcal{X}\subseteq R^n X⊆Rn, 输出空间是 Y = { + 1 , − 1 } \mathcal{Y}=\{+1,-1\} Y={+1,−1}。输入 x ∈ X x\in\mathcal{X} x∈X 表示实例的特征向量,对应于输入空间(特征空间)的点;输出 y ∈ Y y\in\mathcal{Y} y∈Y 表示实例的类别。由输入空间到输出空间的如下函数
f ( x ) = sign ( w ∙ x + b ) f(x)=\operatorname{sign}(w\bullet x+b) f(x)=sign(w∙x+b) 称为感知机。
其中:
也就是说,我们想用一个超平面将两类点分开,如下图所示,黑色点和红色的是两类标签取值不同的点,我们可以用直线将其“分开”.
感知机是受生物学上的启发创造的,可以类比我们大脑的神经元。神经元通过树突、轴突等接受信号、处理信号,然后将信号在输出。为了模拟机器来实现这样一个过程,那么感知机就构建了一个类似的结构:
上面的神经元的激活函数取符号函数(sign),便得到感知机模型。而在神经网络结构里,前馈神经网络也是由这样一个个神经元构成,只不过激活函数一般取sigmoid函数、tanh函数等。(见多层感知机与反向传播)
在二维空间上,两类点被一条直线(高维空间叫超平面)完全分开叫做线性可分:
严格的数学定义是:
设 D 0 D_{0} D0 和 D 1 D_{1} D1 是 n \mathrm{n} n 维欧氏空间中的两个点集,如果存在 n \mathrm{n} n 维向量 w \mathrm{w} w 和实数 b \mathrm{b} b, 使得:
- 所有属于 D 0 D_{0} D0 的点 x i x_{i} xi 都有 w x i + b > 0 w x_{i}+b>0 wxi+b>0
- 而对于所有属于 D 1 D_{1} D1 的点 x j x_{j} xj 则有 w x j + b < 0 w x_{j}+b<0 wxj+b<0, 则我们称 D 0 D_{0} D0 和 D 1 D_{1} D1 线性可分
- 从二维扩展到多维空间中时, 将 D 0 D_{0} D0 和 D 1 D_{1} D1 完全正确地划分开的 w x + b = 0 w x+b=0 wx+b=0 就成了一个超平面。
如果数据不是线性可分的,那么便不能用感知机进行分类,见第四节的讨论(感知机不能表示异或函数)。
假设数据集是线性可分的,接下来需要定义损失函数,我们注意到:
设误分类的点集为M,则考虑: ∑ x i ∈ M − y i ( w ⋅ x i + b ) . \sum\limits_{x_i\in M}-y_i(w\cdot x_i+b). xi∈M∑−yi(w⋅xi+b). 感知机 f ( x ) = sign ( w ⋅ x + b ) f(x)=\operatorname{sign}(w\cdot x+b) f(x)=sign(w⋅x+b)学习的损失函数定义为:
L ( w , b ) = − ∑ x i ∈ M y i ( w ⋅ x i + b ) . L(w,b)=-\sum_{x_i\in M}y_i(w\cdot x_i+b). L(w,b)=−xi∈M∑yi(w⋅xi+b).由这个定义我们知:
有了损失函数,感知机的学习问题转化为如下最优化问题,给定训练数据集
D = { ( x i , y i ) } i = 1 N , D=\left\{\left(x_i, y_i\right)\right\}_{i=1}^N, D={(xi,yi)}i=1N,
求参数 w w w 和 b b b 为如下优化问题的解:
min w , b L ( w , b ) . \min _{w, b} L(w, b). w,bminL(w,b).
由上面对感知机问题的分析知,感知机模型的求解是一个无约束优化问题,可以采用随机梯度下降法。梯度下降法的基本思想:负梯度方向是函数值下降最快的方向.若误分类的点集 M M M固定, L ( w , b ) L(w,b) L(w,b)的梯度由如下给出:
∇ w L = − ∑ x i ∈ M y i x i ∇ b L = − ∑ x i ∈ M y i . \begin{aligned} \nabla_wL &=-\sum_{x_i\in M}y_ix_i\\ \nabla_bL &=-\sum_{x_i\in M}y_i. \end{aligned} ∇wL∇bL=−xi∈M∑yixi=−xi∈M∑yi.随机梯度下降法(SGD)的核心思想是随机选取一个误分类点 ( x i , y i ) (x_i,y_i) (xi,yi),对参数进行更新:
w = w − η ∇ w L , b = b − η ∇ b L , = w + η y i x i . = b + η y i . \begin{aligned} w &= w-\eta\nabla_wL,& b &=b-\eta\nabla_bL,\\ &=w+\eta y_ix_i .& &=b+\eta y_i. \end{aligned} w=w−η∇wL,=w+ηyixi.b=b−η∇bL,=b+ηyi.其中 η ( 0 < η ≤ 1 ) \eta(0<\eta\leq1) η(0<η≤1)是步长 (或学习率)。通过迭代,使 L ( w , b ) L(w,b) L(w,b)不断减小,直至为0.
由学习算法知,迭代次数主要和误分类点有关,下面给出这个算法的收敛性分析。
为了表述方便,令 w + = ( w T , b ) T , x + = ( x T , 1 ) T . w^+=(w^T,b)^T,x^+=(x^T,1)^T. w+=(wT,b)T,x+=(xT,1)T.下面给出收敛性定理,证明见参考资料.
Novikoff定理
设训练数据集 D = { ( x i , y i ) } i = 1 N D=\left\{\left(x_i, y_i\right)\right\}_{i=1}^N D={(xi,yi)}i=1N 是线性可分的,其中 x i ∈ X = R n , y i ∈ Y = { + 1 , − 1 } x_i \in \mathcal{X}=\mathrm{R}^n, y_i \in \mathcal{Y}=\{+1,-1\} xi∈X=Rn,yi∈Y={+1,−1}, 则
- 存在满足 ∥ w o p t + ∥ = 1 \left\|w_{o p t}^{+}\right\|=1 wopt+ =1 的超平面 w o p t + ⋅ x + = 0 w_{o p t}^{+} \cdot x^{+}=0 wopt+⋅x+=0 将训练数据集完全正确分开;
- 存在 γ > 0 \gamma>0 γ>0 ,对所有 i ≥ 1 , y i w o p t + ⋅ x i + ≥ γ i \geq 1, y_i w_{o p t}^{+} \cdot x_i^{+} \geq \gamma i≥1,yiwopt+⋅xi+≥γ;
- 令 R = max 1 ≤ i ≤ N ∥ x i + ∥ R=\max\limits_{1 \leq i \leq N}\left\|x_i^{+}\right\| R=1≤i≤Nmax xi+ , 则感知机算法在训练集上的误分类次数 k k k 满足: k ≤ ( R γ ) 2 k \leq\left(\frac{R}{\gamma}\right)^2 k≤(γR)2.
上述定理表明,误分类次数有上界,所以算法会在有限次迭代后终止。
Minsky 与Papert指出: 因为感知机是线性模型,所以不能表示复杂的函数如异XOR 。
这里给出证明,我们考虑只有两个变量的情况,异或运算的规则如下:
x 1 x_1 x1 | x 2 x_2 x2 | x 1 ⊕ x 2 x_1\oplus x_2 x1⊕x2 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
其实在图上画出异或函数的四个点,很明显能看出不能用一条线分开这两类点:
为了严谨给出严格的数学证明。考虑如下的感知机模型:
f ( x ) = sign ( w T x + b ) f(\boldsymbol{x}) = \operatorname{sign}(\boldsymbol{w}^T\boldsymbol{x} + b) f(x)=sign(wTx+b)
其中 x = ( x 1 , x 2 ) T \boldsymbol{x} = (x_1,x_2)^T x=(x1,x2)T, w = ( w 1 , w 2 ) T \boldsymbol{w} = (w_1,w_2)^T w=(w1,w2)T, sign ( x ) = { 1 , x ≥ 0 − 1 , x < 0 \operatorname{sign}(x) = \begin{cases} 1, & x \geq 0 \\ -1, & x < 0 \end{cases} sign(x)={1,−1,x≥0x<0.接下来我们证明感知机不能表示异或。
反证法.假设感知机可以模拟异或运算,则必须满足:
- 当 x = ( 0 , 0 ) T \boldsymbol{x}=(0,0)^T x=(0,0)T时,有 f ( x ) = 0 f(\boldsymbol{x}) = 0 f(x)=0,从而 b < 0 b<0 b<0;
- 当 x = ( 1 , 0 ) T \boldsymbol{x}=(1,0)^T x=(1,0)T时,有 f ( x ) = 1 f(\boldsymbol{x}) = 1 f(x)=1,从而 w 1 > − b > 0 w_1>-b>0 w1>−b>0;
- 当 x = ( 0 , 1 ) T \boldsymbol{x}=(0,1)^T x=(0,1)T时,有 f ( x ) = 1 f(\boldsymbol{x}) = 1 f(x)=1,从而 w 2 > − b > 0 w_2>-b>0 w2>−b>0;
- 但是,当 x = ( 1 , 1 ) T \boldsymbol{x}=(1,1)^T x=(1,1)T时,有: f ( x ) = sign ( w 1 + w 2 + b ) = 1 f(\boldsymbol{x}) = \operatorname{sign}(w_1+w_2+b) = 1 f(x)=sign(w1+w2+b)=1,与 x 1 ⊕ x 2 = 0 x_1\oplus x_2=0 x1⊕x2=0矛盾。
因此,原假设不成立,感知机无法模拟异或逻辑运算。
这也是为什么在神经网络里面,要引入非线性的激活函数,使得模型更复杂,表达能力更强。