前情提要:
《NLP深入学习(一):jieba 工具包介绍》
《NLP深入学习(二):nltk 工具包介绍》
《NLP深入学习(三):TF-IDF 详解以及文本分类/聚类用法》
《NLP深入学习(四):贝叶斯算法详解及分类/拼写检查用法》
《NLP深入学习(五):HMM 详解及字母识别/天气预测用法》
《NLP深入学习(六):n-gram 语言模型》
《NLP深入学习(七):词向量》
感知机(Perceptron)是一种基于线性模型的监督学习算法,主要用于解决二分类问题。它是神经网络和许多其他机器学习算法的基础模型之一,由弗兰克·罗森布拉特(Frank Rosenblatt)于1957年提出。
感知机的学习策略:确定参数
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∣∣1?yi?(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∣∣1?xi?∈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为误分类的点的集合。
已经确定了感知机的损失函数,那么其原始形式只需要最小化这个损失函数:
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,bmin?L(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}
▽w?L(w,b)▽w?L(w,b)?=?xi?∈M∑?yi?xi?=?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+ηyi?xi?←b+ηyi??
使损失函数不断减小,直到为0时就得到了可正确分类数据集的超平面。
感知机(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
αi?yi?xi?,αi?yi?,其中
α
=
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∑?αi?yi?xi?=i∑?αi?yi??
感知机模型可由
α
,
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∑?αj?yj??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∑?αj?yj?xj??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}
αi?b?←αi?+η←b+ηyi??
对偶形式的优势在于它可能比原始形式收敛更快,尤其是在大规模稀疏数据集上,因为它的计算主要集中在误分类样本上。另外,对偶形式对于支持向量机(SVM)的学习算法也有重要影响,SVM 的对偶形式也是通过类似的拉格朗日对偶变换得到的,并且在实际应用中有更优的表现。
《NLP深入学习(一):jieba 工具包介绍》
《NLP深入学习(二):nltk 工具包介绍》
《NLP深入学习(三):TF-IDF 详解以及文本分类/聚类用法》
《NLP深入学习(四):贝叶斯算法详解及分类/拼写检查用法》
《NLP深入学习(五):HMM 详解及字母识别/天气预测用法》
《NLP深入学习(六):n-gram 语言模型》
《NLP深入学习(七):词向量》