基于深度学习的自然语言处理——学习基础与线性模型
学习基础与线性模型
学习基础与线性模型
有监督学习与参数化函数
- 有监督机器学习的精华:创造一种通过观察样本进而产生泛化的机制。
- 假设类
指的是包含函数的特定的函数簇。例如:具有 d i n d_{in} din个变量的决策树空间。
也确定了学习器可以表示什么,不可以表示什么。- 常见假设类(一个高维线性函数)
f ( x ) = x ⋅ W + b f\left(x\right)=x\cdot W+b f(x)=x⋅W+b
x ∈ R d i n , W ∈ R d i n × d o u t , b ∈ R d o u t x\in R{^{{d_{in}}}},W\in R^{d_{in}\times d_{out}},b\in R^{d_{out}} x∈Rdin,W∈Rdin×dout,b∈Rdout
其中 x x x是函数输入, W W W和 b b b是参数,常被表示为 Θ \Theta Θ,学习的目标是确定参数的值。
- 常见假设类(一个高维线性函数)
- 归纳偏置:为了把搜素限制在假设类中,引入了归纳偏置——一组关于期望结果形式的假设。
训练集、测试集和验证集
-
留一法(留一交叉验证):
- 原理
首先我们做一个假设:训练样本是一个有代表性的样本集合。- 训练 k k k个函数 f 1 : k f_{1:k} f1:k,每次取出一个不同的输入样例,评估 f i f_i fi预测 x i x_i xi的能力。
- 之后在整个训练集上训练一个函数 f f f
- 则 f f f在新输入上的准确率接近对取出元素得到正确预测结果的函数 f i f_i fi所占的比例。
- 特点
非常浪费时间,当 k k k小时才会使用
- 原理
-
留存法
- 原理
就是大家常用的对数据进行划分,一部分作为训练集一部分作为验证集。之后可以在整个数据集上重新训练一个模型,一般会产生更好的结果。但是当训练过程中某些参数对训练集敏感时,就需要注意了,可能产生次优解。 - 特点
- 划分数据前应打乱数据,保证样例分布的平衡
- 随机划分不一定是一个好的选择
- 应该保证训练集中包含更早的数据,验证集包含 较新的数据
- 原理
-
三路划分
在上面的两路划分(存留法)中,根据验证集的准确率会导致对模型质量过于乐观的估计。- 原理
将数据划分为三个部分:- 训练集
- 验证集:在验证集上进行实验、调参、误差分析和模型选择等
- 测试集:只进行一次简单运算对模型达到评估的目的
- 原理
线性模型
- 二分类
二分类问题中,只有一个输出,所以 d o u t = 1 d_{out}=1 dout=1, w w w是一个向量, b b b是一个标量,
f ( x ) = x ⋅ w + b f\left( x \right) = x \cdot w + b f(x)=x⋅w+b
值域为 [ − ∞ , + ∞ ] \left[ { - \infty , + \infty } \right] [−∞,+∞],通常将 f ( x ) f\left( x \right) f(x)的输出通过sign函数进行映射。 - 对数线性二分类
当我们对决策的置信度或分类器分类的概率感兴趣时,一个便捷的方法就是将输出经过一个扁平函数将其映射到 [ 0 , 1 ] \left[ {0,1} \right] [0,1]内。-
s
i
g
m
o
i
d
sigmoid
sigmoid函数
σ ( x ) = 1 1 + e − x \sigma \left( x \right) = \frac{1}{{1 + {e^{ - x}}}} σ(x)=1+e−x1
最终模型为:
y ^ = σ ( f ( x ) ) = 1 1 + e − ( x ⋅ w + b ) \hat y = \sigma \left( {f\left( x \right)} \right) = \frac{1}{{1 + {e^{ - \left( {x \cdot w + b} \right)}}}} y^=σ(f(x))=1+e−(x⋅w+b)1
-
s
i
g
m
o
i
d
sigmoid
sigmoid函数
- 多分类
当为多分类问题时,一种可行的方法是:- 为不同的分类考虑不同的权重 w 1 , w 2 , ⋯   , w k {w^1},{w^2}, \cdots ,{w^k} w1,w2,⋯,wk和偏置 b 1 , b 2 , ⋯   , b k {b^1},{b^2}, \cdots ,{b^k} b1,b2,⋯,bk
- 将其分别组成矩阵 W W W和 b b b
- 则新的公式变为:
y ^ = f ( x ) = x ⋅ W + b \hat y=f\left( x \right) = x \cdot W + b y^=f(x)=x⋅W+b
p r e d i c t i o n = y ^ = arg max i y ^ [ i ] prediction=\hat y=\mathop {\arg \max }\limits_i {{\hat y}_{\left[ i \right]}} prediction=y^=iargmaxy^[i]
表示
- 通过上面多分类公式计算的向量
y
^
\hat y
y^可以看作是对样本的一个表示。
- 其实输入 x x x也是该文本的一个表示。
- W W W包含对不同分类结果的表示,也包含对不同特征的表示。
独热和稠密向量表示
- 独热
在语言分类的例子中,输入向量包含了文档 D D D中已标准化的二元对数量。这个向量可被分解为 ∣ D ∣ \left| D \right| ∣D∣个向量,每个对应一个特定的文档位置 i i i:
x = 1 ∣ D ∣ ∑ i = 1 ∣ D ∣ x D [ i ] x = \frac{1}{{\left| D \right|}}\sum\limits_{i = 1}^{\left| D \right|} {{x^{{D_{\left[ i \right]}}}}} x=∣D∣1i=1∑∣D∣xD[i]
其中 D [ i ] D_{\left[i\right]} D[i]是文档位置 i i i上的二元对,每个向量 x D [ i ] {{x^{{D_{\left[ i \right]}}}}} xD[i]是一个独热向量,这个向量中除了对应 D [ i ] D_{\left[i\right]} D[i]的分量为 1 1 1,其余都为 0 0 0。 - 平均二元对词袋(BOW)
上面的 x x x就是平均二元词袋,一个独热表示可以被认为是一个单一单词的词袋。 - 连续单词词袋(CBOW)
y ^ = 1 ∣ D ∣ ∑ i = 1 ∣ D ∣ W D [ i ] \hat y = \frac{1}{{\left| D \right|}}\sum\limits_{i = 1}^{\left| D \right|} {{W^{{D_{\left[ i \right]}}}}} y^=∣D∣1i=1∑∣D∣WD[i]
其中 W D [ i ] {{W^{{D_{\left[ i \right]}}}}} WD[i]表示 W W W中对应于二元对 D [ i ] D_{\left[i\right]} D[i]的一行。
对数线性多分类
在二分类情况中,我们使用了
s
i
g
m
o
i
d
sigmoid
sigmoid函数,对于多分类情况则是使用
s
o
f
t
m
a
x
softmax
softmax函数:
s
o
f
t
m
a
x
(
x
)
[
i
]
=
e
x
[
i
]
∑
j
e
x
[
j
]
softmax {\left( x \right)_{\left[ i \right]}} = \frac{{{e^{{x_{\left[ i \right]}}}}}}{{\sum\nolimits_j {{e^{{x_{\left[ j \right]}}}}} }}
softmax(x)[i]=∑jex[j]ex[i]
则有:
y
^
=
s
o
f
t
m
a
x
(
x
W
+
b
)
\hat y = softmax \left( {xW + b} \right)
y^=softmax(xW+b)
y
^
[
i
]
=
e
(
x
W
+
b
)
[
i
]
∑
j
e
(
x
W
+
b
)
[
j
]
{{\hat y}_{\left[ i \right]}} = \frac{{{e^{{{\left( {xW + b} \right)}_{\left[ i \right]}}}}}}{{\sum\nolimits_j {{e^{{{\left( {xW + b} \right)}_{\left[ j \right]}}}}} }}
y^[i]=∑je(xW+b)[j]e(xW+b)[i]
s
o
f
t
m
a
x
softmax
softmax转换强制
y
^
\hat y
y^中的值为正数,和为
1
1
1。
训练和优化
- 损失函数
- hinge
- 二分类: L h i n g e ( b i n a r y ) ( y ~ , y ) = max ( 0 , 1 − y ⋅ y ~ ) {L_{hinge\left( {binary} \right)}}\left( {\tilde y,y} \right) = \max \left( {0,1 - y \cdot \tilde y} \right) Lhinge(binary)(y~,y)=max(0,1−y⋅y~)
- 多分类
令 y ^ = y ^ [ 1 ] , y ^ [ 2 ] , ⋯   , y ^ [ n ] \hat y = {{\hat y}_{\left[ 1 \right]}},{{\hat y}_{\left[ 2 \right]}}, \cdots ,{{\hat y}_{\left[ n \right]}} y^=y^[1],y^[2],⋯,y^[n]为分类器的输出向量, y y y为正确类别。则分类规则则为:
p r e d i c t i o n = arg max i y ^ [ i ] prediction = \mathop {\arg \max }\limits_i {{\hat y}_{\left[ i \right]}} prediction=iargmaxy^[i]
令 t t t为正确类别, k k k为最高分的类别,则
L h i n g e ( m u l t i − c l a s s ) ( y ~ , y ) = max ( 0 , 1 − ( y ^ [ t ] − y ^ [ k ] ) ) {L_{hinge\left( {multi - class} \right)}}\left( {\tilde y,y} \right) = \max \left( {0,1 - \left( {{{\hat y}_{\left[ t \right]}} - {{\hat y}_{\left[ k \right]}}} \right)} \right) Lhinge(multi−class)(y~,y)=max(0,1−(y^[t]−y^[k]))
试图使正确类别的得分比其他类别高出 1 1 1。
- 对数损失
hinge损失的变形,比hinge更加平缓:
L log ( y ^ , y ) = log ( 1 + exp ( − ( y ^ [ t ] − y ^ [ k ] ) ) ) {L_{\log }}\left( {\hat y,y} \right) = \log \left( {1 + \exp \left( { - \left( {{{\hat y}_{\left[ t \right]}} - {{\hat y}_{\left[ k \right]}}} \right)} \right)} \right) Llog(y^,y)=log(1+exp(−(y^[t]−y^[k]))) - 二元交叉熵(logistic损失)
用于输出为条件概率分布的二元分类中,预测标签为 y ∈ { 0 , 1 } y \in \left\{ {0,1} \right\} y∈{0,1},预测规则为:
p r e d i c t i o n = { 0 y ^ < 0.5 1 y ^ ≥ 0.5 prediction = \left\{ \begin{array}{l} 0\quad \hat y < 0.5\\ 1\quad {\kern 1pt} {\kern 1pt} \hat y \ge 0.5 \end{array} \right. prediction={0y^<0.51y^≥0.5
损失被定义为:
L l o g i s t i c ( y ^ , y ) = − y log y ^ − ( 1 − y ) log ( 1 − y ^ ) {L_{logistic}}\left( {\hat y,y} \right) = - y\log \hat y - \left( {1 - y} \right)\log \left( {1 - \hat y} \right) Llogistic(y^,y)=−ylogy^−(1−y)log(1−y^) - 分类交叉熵损失
当希望得分为概率时,使用分类交叉熵损失。令 y = y [ 1 ] , ⋯   , y [ n ] y = {y_{\left[ 1 \right]}}, \cdots ,{y_{\left[ n \right]}} y=y[1],⋯,y[n]为正确分类的多项式分布向量, y ^ = y ^ [ 1 ] , ⋯   , y ^ [ n ] \hat y = {\hat y_{\left[ 1 \right]}}, \cdots ,{\hat y_{\left[ n \right]}} y^=y^[1],⋯,y^[n]为预测的结果,则
L c r o s s − e n t r o p y ( y ^ , y ) = − ∑ i y [ i ] log ( y ^ [ i ] ) {L_{cross - entropy}}\left( {\hat y,y} \right) = - \sum\limits_i {{y_{\left[ i \right]}}\log \left( {{{\hat y}_{\left[ i \right]}}} \right)} Lcross−entropy(y^,y)=−i∑y[i]log(y^[i])
对于样例只有一个正确类别时,可简化为:
L c r o s s − e n t r o p y ( y ^ , y ) = − log ( y ^ [ t ] ) {L_{cross - entropy}}\left( {\hat y,y} \right) = - \log \left( {{{\hat y}_{\left[ t \right]}}} \right) Lcross−entropy(y^,y)=−log(y^[t])
t t t是正确的类别指派。 - 等级损失
在没有就标签而言的监督时,只用一对正确项 x x x和不正确项 x ′ x' x′,目标是给正确项打不低于不正确项的分。针对这种情况,定义等级损失:
L r a n k i n g ( m arg i n ) ( x , x ′ ) = max ( 0 , 1 − ( f ( x ) − f ( x ′ ) ) ) {L_{ranking\left( {m\arg in} \right)}}\left( {x,x'} \right) = \max \left( {0,1 - \left( {f\left( x \right) - f\left( {x'} \right)} \right)} \right) Lranking(margin)(x,x′)=max(0,1−(f(x)−f(x′)))
其中 f ( x ) {f\left( x \right)} f(x)为针对 x x x所打的分。
- hinge
- 正则化
相关内容不再赘述。
基于梯度的最优化
参考文献
《基于深度学习的自然语言处理》