0. 引言
前情提要:
《NLP深入学习(一):jieba 工具包介绍》
《NLP深入学习(二):nltk 工具包介绍》
《NLP深入学习(三):TF-IDF 详解以及文本分类/聚类用法》
《NLP深入学习(四):贝叶斯算法详解及分类/拼写检查用法》
《NLP深入学习(五):HMM 详解及字母识别/天气预测用法》
《NLP深入学习(六):n-gram 语言模型》
《NLP深入学习(七):词向量》
1. 感知机
感知机(Perceptron)是一种基于线性模型的监督学习算法,主要用于解决二分类问题。它是神经网络和许多其他机器学习算法的基础模型之一,由弗兰克·罗森布拉特(Frank Rosenblatt)于1957年提出。
1.1 基本概念与结构
- 感知机模型试图找到一个超平面来分割特征空间中的数据点,使得不同类别的样本分别位于超平面的两侧。
- 超平面可以用线性函数表示:
f ( x ) = w T x + b f(x) = w^T x + b f(x)=wTx+b
其中 x x x 是输入特征向量, w w w 是权值向量(weight vector), b b b 是偏置项(bias), s i g n ( f ( x ) ) sign(f(x)) sign(f(x)) 表示对输入 x x x 的分类结果,通常取+1或-1。
1.2 学习策略
感知机的学习策略:确定参数
w
w
w和
b
b
b,定义一个损失函数并将其最小化。损失函数一般是选择误分类点到超平面的距离和:
∣
w
⋅
x
+
b
∣
∣
∣
w
∣
∣
\frac{|w·x+b|}{||w||}
∣∣w∣∣∣w⋅x+b∣
∣
∣
w
∣
∣
||w||
∣∣w∣∣是
w
w
w 的第二范数。因为
y
y
y取值是+1和-1,对于误分类的点有:
−
y
i
(
w
⋅
x
+
b
)
>
0
-y_i(w\cdot x + b)>0
−yi(w⋅x+b)>0
因此,误分类点
x
i
x_i
xi 到超平面的距离是:
−
1
∣
∣
w
∣
∣
y
i
(
w
⋅
x
+
b
)
-\frac{1}{||w||}y_i(w·x+b)
−∣∣w∣∣1yi(w⋅x+b)
那么所有的误分类点到超平面的总和距离为:
−
1
∣
∣
w
∣
∣
∑
x
i
∈
M
y
i
(
w
⋅
x
i
+
b
)
-\frac{1}{||w||}\sum\limits_{x_i\in M}y_i(w·x_i+b)
−∣∣w∣∣1xi∈M∑yi(w⋅xi+b)
不必考虑
1
∣
∣
w
∣
∣
\frac{1}{||w||}
∣∣w∣∣1,则得到感知机的损失函数:
L
(
w
,
b
)
=
−
∑
x
i
∈
M
y
i
(
w
⋅
x
i
+
b
)
L(w,b) = -\sum\limits_{x_i\in M}y_i(w·x_i+b)
L(w,b)=−xi∈M∑yi(w⋅xi+b)
其中M为误分类的点的集合。
2. 感知机学习算法
2.1 原始形式
已经确定了感知机的损失函数,那么其原始形式只需要最小化这个损失函数:
min
w
,
b
L
(
w
,
b
)
=
−
∑
x
i
∈
M
y
i
(
w
⋅
x
i
+
b
)
\min \limits_{w,b}L(w,b) = -\sum\limits_{x_i\in M}y_i(w·x_i+b)
w,bminL(w,b)=−xi∈M∑yi(w⋅xi+b)
随机梯度下降法初始时任选
w
0
w_0
w0,
b
0
b_0
b0作为初始超平面,如果有误分类点,随机选取一个误分类点,进行梯度下降,计算损失函数的梯度:
▽
w
L
(
w
,
b
)
=
−
∑
x
i
∈
M
y
i
x
i
▽
w
L
(
w
,
b
)
=
−
∑
x
i
∈
M
y
i
\begin{aligned} \triangledown _wL(w,b)&=-\sum_{x_i\in M}y_ix_i \\ \triangledown_wL(w,b)&=-\sum_{x_i\in M}y_i \end{aligned}
▽wL(w,b)▽wL(w,b)=−xi∈M∑yixi=−xi∈M∑yi
梯度下降法使参数向反方向变化,使用随机选出的误分类点的数据,根据提前设置好的学习率对进行更新:
w
←
w
+
η
y
i
x
i
b
←
b
+
η
y
i
\begin{aligned} w& \leftarrow w+\eta y_ix_i \\ b& \leftarrow b+\eta y_i \end{aligned}
wb←w+ηyixi←b+ηyi
使损失函数不断减小,直到为0时就得到了可正确分类数据集的超平面。
2.2 对偶形式
感知机(Perceptron)的对偶形式是针对原始形式进行优化的一种方法,其基本思想是将原问题转换为对偶形式,从而改变算法求解的方式。在解决线性可分数据集的二分类问题时,原始的感知机算法通过迭代更新权重向量 w w w 来找到一个能够正确划分正负样本的超平面。
对偶形式则引入了拉格朗日乘子法,并且使用了一种基于误分类点的表示方式。在这个形式下,不再直接更新权重向量 w w w,而是维护一组系数 α \alpha α,每个系数对应训练集中的一条误分类样例。对偶形式的核心更新规则是在每次迭代中调整这些系数 α \alpha α,而不是权值向量和偏置项。
可将每次
w
,
b
w,b
w,b 增量表示为
α
i
y
i
x
i
,
α
i
y
i
\alpha _iy_ix_i,\alpha _iy_i
αiyixi,αiyi,其中
α
=
n
i
η
\alpha = n_i\eta
α=niη,假设
w
0
=
b
0
=
0
w_0=b_0=0
w0=b0=0(无关要紧),更新过程表示为:
w
=
∑
i
α
i
y
i
x
i
b
=
∑
i
α
i
y
i
\begin{aligned} w&=\sum_i\alpha _iy_ix_i\\ b&=\sum_i \alpha _iy_i \end{aligned}
wb=i∑αiyixi=i∑αiyi
感知机模型可由
α
,
b
\alpha ,b
α,b表出。
f
(
x
)
=
s
i
g
n
(
∑
j
α
j
y
j
⋅
x
+
b
)
f(x)=sign(\sum_j\alpha _jy_j\cdot x + b)
f(x)=sign(j∑αjyj⋅x+b)
在判断是否是误分类点时用
y
i
(
∑
j
α
j
y
j
x
j
⋅
x
i
+
b
)
⩽
0
y_i(\sum _j\alpha _jy_jx_j\cdot x_i + b)\leqslant 0
yi(j∑αjyjxj⋅xi+b)⩽0
更新时
α
i
←
α
i
+
η
b
←
b
+
η
y
i
\begin{aligned} \alpha _i &\leftarrow \alpha _i +\eta\\ b &\leftarrow b + \eta y_i \end{aligned}
αib←αi+η←b+ηyi
对偶形式的优势在于它可能比原始形式收敛更快,尤其是在大规模稀疏数据集上,因为它的计算主要集中在误分类样本上。另外,对偶形式对于支持向量机(SVM)的学习算法也有重要影响,SVM 的对偶形式也是通过类似的拉格朗日对偶变换得到的,并且在实际应用中有更优的表现。
3. 参考
《NLP深入学习(一):jieba 工具包介绍》
《NLP深入学习(二):nltk 工具包介绍》
《NLP深入学习(三):TF-IDF 详解以及文本分类/聚类用法》
《NLP深入学习(四):贝叶斯算法详解及分类/拼写检查用法》
《NLP深入学习(五):HMM 详解及字母识别/天气预测用法》
《NLP深入学习(六):n-gram 语言模型》
《NLP深入学习(七):词向量》
欢迎关注本人,我是喜欢搞事的程序猿; 一起进步,一起学习;
也欢迎关注我的wx公众号:一个比特定乾坤