2018-01-30 | CS244n | UNLOCK

CS244n Lecture4 Notes:词窗口分类及神经网络基础

分类任务介绍

一般来说,我们有一个训练集,
,其中xi代表输入,可以是词的下标,向量,上下文窗口,句子,文档等,i代表第几个样本,yi是希望预测的label,通常是一个C维的one-hot向量,这个类别可以情感倾向,命名实体,购买或出售决策;也可以是后面会提到的其他词序列。对于分类任务来说,给定训练样本x和它的label y,可以采用logistic regression或svm等寻找决策界面实现分类。举个简单例子,我们对一个2维的词向量进行分类,采用LR,训练模型找到一个决策平面,目标函数和结果图如下。
image.png
image.png
其中,x是d维向量,C是类别数这里指词,W是一个权重矩阵。

softmax

在上面分类目标函数中,我们采用softmax函数,softmax函数可以分解成两步,首先对于W_yX可以看成是矩阵W的第y行与x相乘,形式如下,
image.png
第二步对求得结果进行归一化处理以获得概率,
image.png

softmax 和cross entropy error

对于每个样本{x,y},我们的目标是使得正确类别的概率最大,等价于最小化概率的负对数函数,
image.png
这个目标函数其实是cross entropy。假设我们正确类别的概率分布是1, 错误类别的分布是0,那么对于一个概率分布p=[0,…0,1,…0],计算得到的概率q,则二者之间的交叉熵损失为,
image.png
因为p是一个one-hot向量,那么最终形式为,
image.png

从KL divergence角度思考交叉熵

cross-entropy可以看成是两个分布的熵与KL 散度之和
image.png
这个式子中,加号左边是真是概率的分布的熵(用来描述一个事物的不确定性,不确定越大,熵越大),因为它的分布是1即是确定性,所以熵为零,即使它的分布不是1,但它也是固定的,对整体梯度并没有多少贡献。因此最小化上式就等价于优化加号右边部分,分布p和q的KL divergence,它是用来描述两个分布之间差别的一个指标,形式如下,
image.png
上式于我们之前需要优化的目标函数一样。
上面是针对一个样本点做的分析,在N个样本集上,误差函数为,
image.png
加上正则化项后为,
image.png
上式采用的是L2正则化,theta代表模型中所有的参数。加入正则化的目的是防止模型参数过分升高造成模型过拟合。过拟合的形式如图,
image.png
横轴代表模型迭代次数或模型复杂度,蓝色代表训练误差,红色代表测试误差,过拟合的表现是训练误差很低但测试误差很大,泛化能力差。

ML优化

对于一把的ML,参数由权值矩阵的列组成,维度不会太大,只需要更新决策边界即可,
image.png
image.png
在深度学习中,我们不仅仅要更新权重,同时也要更新词向量,词表大小和词向量维度会很大,就会容易过拟合。
image.png

re-train 词向量失去泛化能力

比如用LR训练一个电影评论情感的任务,在训练集中我们有“TV”和“telly”这两个词,在测试集中有“television”,使用预训练的word vectors会发现这三个单词是相似的。
image.png
现在,重新训练词向量,训练集中只有TV和telly没有television,最终的结果是不能发现这三个词具有相似性,因此分类会出现错误,
image.png
因此得到如下结论,再前节课课程也提到过,如果任务中数据集比较小,则不适合重新训练词向量,如果训练足够大,重新训练词向量可能会提升组中的效果。
词向量术语
词向量矩阵L也被叫做lookup table(在TensorFlow,对词进行embedding就是通过查表实现),通常通过word2vec或Glove实现,而在TensorFlow里面也有具体的实现。
image.png
word vectors = word embeddings = word representations

window classification

对窗口上下文中的词进行分类,比如实体识别,是把词分为Person、location、organization、none/misc四类,目前采用的方式大多是将一个词窗口中所有词词向量累加平均,但这种方式会忽略位置信息。这里介绍另外一种方式来完成NER任务,通过训练softmax分类器,输入是把一个词窗口中的所有词向量拼接在一起。比如要对句子中的Pairs进行分类,词窗口为2。如果一个词向量的维度是d,那么整个词窗口向量是5d(根据词窗口而变)的列向量。
image.png
这个时候,输入是X_window,可以写出预测出类别的概率计算公式和误差函数
image.png

词窗口中向量更新

首先介绍一些符号定义,$\widehat{y}$表示预测输出向量,$t$是真是预测结果值。向量更新原则是通过误差函数对所有参数的梯度进行更新。
首先求误差函数对输入x的梯度,采用链式求导法则
image.png
image.png
在推到过程中要区分当前下标c是否和真是类别下标y相等和不相等两种情况进行求导。但是为什么上面的复合求导前面会有个求和符号,个人理解的是因为在复合求导时,所有C个函数都与输入x有关,误差对x的梯度,就是这些fc分别对x求导然后在求和。得到下面结果,这个结果是y=c和y!=c的结果复合
image.png
这里做个符号替换
image.png
那么最终误差对输入x的梯度结果为
image.png
image.png
因为x是一个Window中所有词的词向量拼接而成的向量,因此它的维度是5d,那么相应的梯度维度也是5d
image.png
然后就可以根据维度划分,进而更新每个词对应的词向量
image.png
通过词向量不断的更新,模型会学习的看到X_in在中心词的前面,就可能会推测出中心词可能是一个location。
采用同样的方式,求loss对参数wij的梯度,得到参数的更新,
image.png
在softmax运算中,有两处计算特别耗时,一处是f=Wx,一处是exp,在实现的时候我们会选择进行矩阵计算比如把W和x都做成矩阵然后计算,因为矩阵计算会比循环在CPU上的效果快一个量级。
上面介绍的是基于softmax分类等价于logistic regression,仅在小数据集上给出一个基本的、线性分类决策面,在大数据集任务复杂情况下就很受限了。
image.png

神经网络

由于softmax线性分类的限制,我们就需要有一种模型能够学习复杂数据,那这个模型就是神经网络。它可以学到非线性的决策边界。
image.png
基本单元介绍
image.png
一个最基本的神经单元,有三个输入,还有个bias,中间圆圈代表激活函数,一个输出构成。每一个神经元都类似以个LR分类单元
image.png
输入通过加权求和之后输入到神经元,再通过sigmod激活函数后,将结果输出。以此类推,一个神经网络就就等价于同时运行多个LR程序,输出就得到一个向量,但并不具体要求LR去预测什么。
image.png
我们还可以将这些LR的结果送入到另外一个LR当中,为了能够获得的更好的预测结果,误差函数会找到中间隐藏层变量应该是怎么的。
image.png
这道了这些,就可以构建多层的NN
image.png

网络层中的矩阵记号

在NN中通常采用矩阵的形式来表示输入输出及网络中的参数,如下
image.png
z代表下一层神经元输入矩阵,f代表激活函数,常采用sigmod、tanh等函数,目的是增加非线性,那么问题来了,为什么需要给网络增加非线性呢?增加非线性的目的是提高网络拟合能力,如果没有非线性,整个网络依然只是一个线性变换的过程,从而可以转变为一个简单的线性变换Wx的形式,很明显这种明显能力有限,但增加了非线性及多层网络,就可以拟合很更复杂的函数。
image.png

利用NN实现Window 分类

输入依然是一个词窗口,我们的目标是判断词窗口中的中心词是否是location。
image.png
先来解释单层网络构成,它是线性和非线性的组合,
image.png
神经元激活指a可以用来做其他计算,比如用softmax计算概率,P(y|x)=softmax(Wa);也可以用来计算未归一化的分数,
image.png
根据刚才的解释,来具体执行词窗分类,Feed-forward计算,用一个三层网络来计算词窗分数,
image.png

Max-margin loss

当我们计算出每个词窗得分之后,必须有一个准则来去判断这个分数到底是还是坏,这里采用max-margin loss即是使得分类间的间隔最大
image.png
目标是使正确词窗得分尽量高,不正确的词窗得分尽量低。具体而言,对于一个词窗口中心词是location的score + 1应该大于词窗口中心词不是location的score,这个1是用来扩大二者之间的差距。这种loss可以理解为是Hing Loss,预测结果Sc值越大,离分类决策面距离越远,越容易被正确分类,式子中的“1”就是用来判断的一个阈值,是一个超参数,随着训练的进行只需关注那些难训练的样本即可。

采用反向传播进行训练

定义好目标函数/损失函数之后,采用反向传播的方式进行训练。s和$s_c$得分计算公式为$s=U^{T}f(Wx+b)=U^{T}a$和$s_c=U^{T}f(Wx_c+b)=U^{T}a$,之后通过计算s和$s_c$对所有相关变量$U,W,b,x$的梯度,进而更新每个参数。

下面来推导对隐藏层参数$Wij$的导数,根据score计算公式有

这个我们要清楚所要求的是哪个参数的梯度,由于我们求得是$Wij$的梯度,它只会出现在第i个神经元中,如图所示,
image.png
$W_23$只在第二个$a_2$中出现,因此得到$Wij$的梯度为,
image.png
由于bias b并不含变量$W_ij$,因此可得到下式,
image.png
在上式中,$\delta_i$表示的隐藏单元误差,即local error signalf代表神经元所选用的激活函数,因此推广到整个隐藏层,可以得到
$\frac{\partial{s}}{\partial{W}}=\delta{x^T}$
s对偏置的导数,
image.png
反向传播梯度计算的一个方便之处是在计算后面层中变量梯度时,可以直接用前面层计算结果而不需要重新计算。

下面推导score对输入词向量的x的导数,由于任意一个输入$x_j$都与所有的神经元相互连接,结合上图,对$a_1$和$a_2$都有影响,因此梯度计算为,
image.png
这是score对输入$x_j$的最终梯度,而$\delta$是隐藏层误差(维度与隐藏单元个数相同),在前面已经计算过,可以直接拿来用。我们刚才计算的是score对所有变量的梯度,而我们正真要计算的是目标函数或者是误差函数对变量的梯度,我们的目标函数为,
image.png,举个例子,误差对$U$的梯度,

因为前面已经介绍过score $s$对个参数的求导,根据这种方式,就可以求误差对所有参数的梯度。

总结

这次课程介绍了词向量训练,词窗口分类,softmax和cross entropy error,scores和maximum margin loss,及简单的NN,误差对个变量的梯度,下一节课会详细介绍back propagation的思想。

评论加载中