在机器学习中,感知机(perceptron)是二分类的线性分类模型,属于监督学习算法。输入为实例的特征向量,输出为实例的类别(取+1和-1)。感知机对应于输入空间中将实例划分为两类的分离超平面。感知机旨在求出该超平面,为求得超平面导入了基于误分类的损失函数,利用梯度下降法 对损失函数进行最优化(最优化)。
如上图所示,输入任意的特征向量 x ′ ∈ R n × 1 \boldsymbol{x}' \in \mathbb{R}^{n \times 1} x′∈Rn×1 与负的单位向量 ω ′ ∈ R n × 1 \boldsymbol{\omega}' \in \mathbb{R}^{n \times 1} ω′∈Rn×1的点积代表,单位向量所在超平面与原点之间的距离 b b b:
(1.1) − ω ′ ⊤ x ′ = b ⇒ ω ′ ⊤ x ′ + b = 0 -\boldsymbol{\omega}'^\top \boldsymbol{x}' = b \Rightarrow \boldsymbol{\omega}'^\top \boldsymbol{x}' + b = 0 \tag{1.1} −ω′⊤x′=b⇒ω′⊤x′+b=0(1.1)
超平面将样本分成两类小于等于 b b b为一类,大于 b b b的为另一类
机器学习的任务是找到一个超平面,满足 ( 1.1 ) (1.1) (1.1),其中的 w w w和 b b b是需要训练的参数,需要注意的是,机器学习中权重向量 w w w并不是垂直于超平面的单位向量,是代表权值的普通向量,因此 b b b并不能表示超平面到原点的距离,但是是距离的缩放版本。
感知机学习本质是利用输入和标签训练 w w w和 b b b,找到一个超平面(该超平面上对应的自变量相当于 w x + b wx+b wx+b,也就是说将原始的超平面空间 R n \mathbf{R^n} Rn,经过平移变换之后移动到原点,增加一个维度,进入新的空间 R n + 1 \mathbb{R}^{n+1} Rn+1如果将输入的值带入之后比0大,则对应标签的 y ( i ) = 1 y^{(i)} = 1 y(i)=1,反之则为 y ( i ) = 0 y^{(i)} = 0 y(i)=0),根据标签能够正确分类所有的输入值。具体步骤:
另 x ( i ) ∈ R ( n + 1 ) × 1 ∀ i = { 1 , 2 , 3... , m } x^{(i)} \in \mathbb{R}^{(n+1) \times 1} \quad \forall i=\{1, 2, 3...,m\} x(i)∈R(n+1)×1∀i={ 1,2,3...,m}代表 m m m个输入的特征向量, y ( i ) ∈ { 0 , 1 } ∀ i = { 1 , 2 , 3 , . . . , m } y^{(i)} \in \{0, 1\} \quad \forall i = \{1, 2, 3, ..., m\} y(i)∈{ 0,1}∀i={ 1,2,3,...,m}为每个输入对应的类别标签。
设有两个点集 ( x ( 1 ) , y ( 1 ) ) (x^{(1)}, y^{(1)}) (x(1),y(1)), ( x ( 2 ) , y ( 2 ) ) (x^{(2)}, y^{(2)}) (x(2),y(2)), x ( 1 ) x^{(1)} x(1)与超平面1垂直, x ( 2 ) x^{(2)} x(2)与超平面2垂直,在权重 w w w的向量空间中,满足 y ( 1 ) y^{(1)} y(1)结果的 w w w取值为超平面1右上方部分,满足 y ( 2 ) y^{(2)} y(2)结果取值的 w w w为超平面2左下方部分,两者叠加部分为 w w w最终的取值范围,任何一个在此范围内的 w w w均能将 ( x ( 1 ) , y ( 1 ) ) (x^{(1)}, y^{(1)}) (x(1),y(1)), ( x ( 2 ) , y ( 2 ) ) (x^{(2)}, y^{(2)}) (x(2),y(2))进行正确分类。
无法解决非线性问题,如简单的异或问题(XOR):
x 1 x_1 x1 | x 2 x_2 x2 | y y y |
---|---|---|
1 | 0 | 1 |
0 | 1 | 1 |
1 | 1 | 0 |
0 | 0 | 0 |
综上所述,不管迭代几次,权重都不会在发生变化,只能分类样本类别为负值的输入。
如果线性分类解决异或问题,则需要两个超平面才可以,相当于费用非线性方式解决。
多层感知机(MLP)通过引入隐藏层实现非线性变换
如图,添加逻辑与门和或门作为隐藏层,最终实现异或。
如果使用线性的激活函数,那么最终的输出仍是线性的,无法解决非线性问题,例如:
上图为有两个隐藏层的网络,如果使用线性激活函数。则
h 1 = w 11 x 1 + w 21 x 2 + b 1 h 2 = w 12 x 1 + w 22 x 2 + b 2 p 1 = w 1 h 1 + w 2 h 2 + b 3 = ( w 1 w 11 + w 2 w 12 ) x 1 + ( w 1 w 21 + w 2 w 22 ) x 2 + w 1 b 1 + w 2 b 2 + b 3 h_1 = w_{11}x_1+w_{21}x_2+b_1\\ h_2 = w_{12}x_1+w_{22}x_2+b_2\\ p_1 = w_1h_1+w_2h_2+b_3 \\ = (w_1w_{11}+w_2w_{12})x_1+(w_1w_{21}+w_2w_{22})x_2+w_1b_1+w_2b_2+b_3 h1=w11x1+w21x2+b1h2=w12x1+w22x2+b2p1=w1h1+w2h2+b3=(w1w11+w2w12)x1+(w1w21+w2w22)x2+w1b1+w2b2+b3
仍是线性,所以有必要引入非线性激活函数来解决更复杂的问题。
在一个线性神经元中,其输出是线性依赖于输入的,如 y ^ = w 1 x 1 + w 2 x 2 + w 3 x 3 + b , y ^ \hat{y} = w_1x_1+w_2x_2+w_3x_3+b, \hat{y} y^=w1x1+w2x2+w3x3+b,y^为输出,如果用向量表达的话为: y ^ = w ⊤ x + b \hat{y} = w^{\top}x+b y^=w⊤x+b,对于一个两层的神经网络来说,输入 z = w ⊤ x + b z = w^{\top}x+b z=w⊤x+b与输出 y y y之间的关系为:
另 z = w ⊤ x + b z = w^{\top}x+b z=w⊤x+b:
y = { 1 ( z > k ) 0 ( z ≤ k ) y = \begin{cases} 1 & (z >k) \\ 0 & (z \le k) \end{cases} y={ 10(z>k)(z≤k)
S i g m o i d ( σ ) = 1 1 + e − z z = w ⊤ x Sigmoid(\sigma) = \frac{1}{1+e^{-z}} \qquad z = w^\top x Sigmoid(σ)=1+e−z1z=w⊤x
P ( y i = 1 ∣ x ) = e w ( i ) ⊤ + b ( i ) ∑ j = 1 k e w ( j ) ⊤ + b ( j ) x ∈ R n × 1 P(y_i = 1| x)=\frac{e^{w^{(i)\top+b^{(i)}}}}{\sum_{j=1}^ke^{w^{ {(j)\top+b^{(j)}}}}} \qquad x \in \mathbb{R^{n \times 1}} P(yi=1∣x)=∑j=1kew(j)⊤+b(j)ew(i)⊤+b(i)x∈Rn×1
值得注意的是,损失函数所在的层,一般将softmax和交叉熵一起使用。
C E = ∑ i = 1 k − y i l o g P ( y i = 1 ∣ x ) CE = \sum^k_{i = 1}-y_ilogP(y_i=1|x) CE=i=1∑k−yilogP(yi=1∣x)
y = m a x ( 0 , w ⊤ x + b ) y = max(0, w^\top x+b) y=max(0,w⊤x+b)
可以防止梯度消失
(PReLU) y = m a x ( 0 , z ) + β m i n ( 0 , z ) y = max(0, z) + \beta min (0, z) \tag{PReLU} y=max(0,z)+βmin(0,z)(PReLU)
当 β = − 1 , y = ∣ z ∣ \beta = -1, y = |z| β=−1,y=∣z∣称为绝对值ReLU
当 β = \beta = β=小的正值,如常用的0.01,称为leaky ReLU
y = e z − e − z e z + e − z y = \frac{e^z-e^{-z}}{e^z+e^{-z}} y=ez+e−zez−e−z
Pro Deep Learning with TensorFlow. Santanu Pattanayak