课程概要
1、分类问题背景
2、窗口分类与交叉熵导数建议
3、后馈(Backpropagation)训练
一、分类问题背景
1、分类的一些主要符号
说到分类任务,我们一般会有一个数据集包含样本:
{
x
i
,
y
i
}
i
=
1
N
\{x_i , y_i\}^N_{i=1}
{xi,yi}i=1N
xi表示输入,比如单词(序号或者向量),上下文窗口,句子,文档等等
yi表示我们尝试预测的标签,比如分类:情感、命名实体、买卖决策;其他的单词;或者是多单词的句子
2、主要思想
- 一个简单解释的例子:单词向量是二维的,想使用逻辑回归进行分类。分类结果是找到线性的决策边界。
- 一般机器学习的思想:假设x是固定的,逻辑回归训练的参数是x的权重w,来找到决策边界。
3、目标函数:
对每个x可以计算关于y的概率:
其中,
W
y
.
x
=
f
y
W_y.x=f_y
Wy.x=fy表示第y行的W与X的点积
同时使用softmax函数来计算标准化的概率
对于每一个样本,我们都希望当y是正确分类的时候,p的概率是最大的。等价于最小化该分类的对数概率:
接下来的问题是如何利用针对所有样本的所有可能分类的表达式表现出只针对正确分类的对数概率,这里主要引入了交叉熵(cross entropy)的概念,其中P(c)表示一个分布,只有在c是正确分布的时候才取1,其他时候都取0;而q表示的是我们在上面计算的softmax的概率,这样我们就利用一个针对所有可能的公式表示了正确分类的对数概率:
交叉熵(cross entropy)可以进一步进行化简,分为两个部分:
第一部分是一个固定的值,在这里是0,因此求这个式子的最小值等价于求第二项的最小值,第二项一般被成为KL散度(Kullback-Leibler divergence)
因而整体的目标函数可以被改写为:
4、正则
在实际的损失函数中,我们往往还会加入正则项,来控制参数的大小。对正则从先验角度的理解可以参考斯坦福大学-自然语言处理入门 笔记 第十一课 最大熵模型与判别模型(2)第四节第三部分
当我们的模型发生过拟合的时候,我们可以利用正则项加以控制。
5、优化
对于一般的机器学习而言,需要优化的参数只有W,也就是说所有的参数个数是Cd,其中C表示类的个数,d表示向量的长度。
但是在机器学习中,我们不仅仅需要学习W,我们还需要学习词向量X,这就导致我们需要学习的参数变得非常大,很有可能会导致过拟合。
举例而言,假设我们的任务是做单词的情感分类,我们认为TV,telly,televisiton都是负面的。如果我们先在一个大的语料库中进行词向量的训练,然后在小的语料库中进行单词分类的话,我们很容易把这三个单词分到负面这一边。
但是,假如我们一开始就使用小的语料库进行词向量训练,小的语料库中只有TV和telly在训练集中,但是television是在测试集中的,那么我们就很有可能得到下面的结果:
所以一般的建议是,如果训练集很小的话,我们不推荐进行词向量的训练;但是如果训练集很大的话,训练词向量是更好的选择。
二、窗口分类与交叉熵导数建议
1、窗口分类
我们很少做单个单词的分类,主要的问题是基于上下文它会产生歧义。
窗口分类的基本思想:利用一个关于临近的单词的上下文窗口来对单词进行分类,比如将命名实体分成四类:人、地点、组织、无。
我们可以训练一个softmax分类器来对中心词以及其和它上下文连接的词向量进行标记,也就是下面的Xwindow
训练softmax的目标函数和之前提到的是一样的,所以我们的问题就集中到我们怎么对词向量更新上。
2、词向量的更新
词向量更新的方法是利用导数。
-
首先,先对一些概念进行定义:
- y(hat):表示的是softmax概率输出的向量
- t:表示的是目标的概率分布,除了正确分类为1以外,其他都是0
- f=f(x)=Wx∈R,fc表示f向量的第c个元素
-
建议(tips)
-
1、需要特别注意变量的定义并且关注他们的维度
-
2、链式法则:
-
3、在进行 softmax部分的求导时,首先计算c=y(正确分类)的时候fc的导数,然后计算c≠y(错误分类)的时候fc的导数
-
4、当你计算f的偏导时,尝试着看看能不能构建包含所有偏导的梯度
-
5、定义下面的部分为δ
-
6、当开始使用链式法则时,一开始使用具体的和,查看偏导
-
7、为了方便弄明白后面更复杂的方程:我们需要清楚每个变量的维度
-
8、如果不清楚的话,就写出完整的加和公式
-
-
矩阵运用的一些笔记:在softmax中有两个非常昂贵的操作,矩阵乘法f=Wx和exp计算
- 对于矩阵乘法而言,会比直接词向量循环计算更为有效
- 对于矩阵乘法而言,会比直接词向量循环计算更为有效
三、神经网络与后馈(Backpropagation)训练
神经网络与softmax相比一个巨大的优势是它可以学习非线性的决策边界,如下面的右图
1、神经网络介绍
神经网络是由单个神经元构成的,如下图的这个神经元有三个输入,一个输出,参数W,b。该神经元先是计算了线性组合wx+b(类似逻辑回归),随后利用激活函数f得出了输出的数值。这里使用激活函数的阈值图在下图的右边,将结果控制在0-1之间,防止出现结果过大的情况。
神经网络实际上就是神经元构成的网络,也就是由许多的逻辑回归同时构成的网络。所以我们的输入向量,做完逻辑回归之后得到的是一个输出向量,并且我们并不会提前知道逻辑回归想要预测的变量是什么。随后,我们再将几个逻辑回归的输出再输入到新的逻辑回归的节点。整个神经网络每一层都是好几个逻辑回归,一直到最后一层,做出整个模型的输出。然后基于最后输出的损失函数,来确定前面的逻辑回归预测的变量,并降低偏误。
多层的神经网络:
为了书写的简洁,神经网络一般会使用矩阵的表示方法:
在神经网络之中引入激活函数a的作用是,使得神经网络可以进行非线性的决策边界。并且随着层数的增加,模型就可以拟合更加复杂的函数。
2、例子:单层神经网络
-
任务:判断中心词是否是地点
-
输入:单词窗的联合词向量,Xwindow
-
单层神经网络表示只有一个线性层(z=Wx+b)和一个激活函数(a=f(x))
-
激活函数的输出f可以直接输入softmax(Wa)来计算最终的概率,或者直接使用一个非标准化的得分来得到最终结果。
-
前馈计算:整体计算表现如下,中间包含一个隐层,隐层的作用是可以学习两个输入词向量之间非线性的交互,比如当第一个单词是museum的时候,第二个单词是in的话,中心词是地点的可能性会变大的特点
-
最大边际损失(max-margin loss):公式表示为下面的方程,其中s表示的是中心单词是地点的score,sc表示的是中心词不是地点的得分。我们的优化目标是使得这个损失函数最小化,因为这是连续的因此可以使用SGD来进行优化。对每个正确的窗口,都找几个错误的窗口。把所有的训练窗口加在一起。
3、后馈(Backpropagation)训练
损失函数为上图,我们需要针对着计算U,W,b,x的偏导。
-
U的偏导
-
W的偏导
如果我们想要同时计算23个参数的话,我们实际上得到的矩阵公式如下,其中sigm是21,分别对应两个隐层中一个节点。
-
b的偏导
-
计算x的偏导:在后馈计算中,值得关注的一点是,我们可以利用之前的计算导数进行计算,这样可以加速我们的计算。
-
基于目标函数的梯度表示