1 感知机
1.1代数理论
在机器学习中,感知机(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}为每个输入对应的类别标签。
- 随机定义权重向量 w ∈ R ( n + 1 ) × 1 w \in \mathbb{R}^{(n+1) \times 1} w∈R(n+1)×1
- 通过 w w w预测输出结果,对于 x ( i ) x^{(i)} x(i),如果有 w ⊤ x > 0 w^\top x > 0 w⊤x>0,另预测结果 y ^ = 1 \hat{y} = 1 y^=1,反之 y ^ = 0 \hat{y} = 0 y^=0
- 根据输入的标签值对权重进行更新
- 重复第2,3步,直到所有的点都能正确分类,则找到该超平面。
1.2 几何解释
设有两个点集
(
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))进行正确分类。
1.3 感知机的局限性
无法解决非线性问题,如简单的异或问题(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 |
综上所述,不管迭代几次,权重都不会在发生变化,只能分类样本类别为负值的输入。
1.4 非线性的引入
如果线性分类解决异或问题,则需要两个超平面才可以,相当于费用非线性方式解决。
多层感知机(MLP)通过引入隐藏层实现非线性变换
如图,添加逻辑与门和或门作为隐藏层,最终实现异或。
1.5 隐藏层激活函数
如果使用线性的激活函数,那么最终的输出仍是线性的,无法解决非线性问题,例如:
上图为有两个隐藏层的网络,如果使用线性激活函数。则
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
仍是线性,所以有必要引入非线性激活函数来解决更复杂的问题。
1.6 不同的激活函数
1.6.1 线性激活函数
在一个线性神经元中,其输出是线性依赖于输入的,如
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之间的关系为:
1.6.2 二分类阈值激活函数
另
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)
1.6.3 Sigmoid激活函数
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
- 当 z > 0 z > 0 z>0,且 z → z \rightarrow z→大数, e − z → 0 , σ → 1 e^{-z} \rightarrow 0, \sigma \rightarrow 1 e−z→0,σ→1
- 当 z < 0 z < 0 z<0,且 z → z \rightarrow z→大数, e − z → ∝ , σ → 0 e^{-z} \rightarrow \propto, \sigma \rightarrow 0 e−z→∝,σ→0
- 当 z = 0 z = 0 z=0,且 z → z \rightarrow z→大数, e − z = 1 , σ = 1 2 e^{-z} = 1, \sigma= \frac{1}{2} e−z=1,σ=21
1.6.4 Softmax激活函数
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)
1.6.5 Rectified Linear Unit(ReLU)激活函数
y
=
m
a
x
(
0
,
w
⊤
x
+
b
)
y = max(0, w^\top x+b)
y=max(0,w⊤x+b)
可以防止梯度消失
ReLU的变体
(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
1.6.6 Tanh 激活函数
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