CS224N笔记——Word Window分类与神经网络

17 篇文章 2 订阅

目录

分类的背景

分类问题中更新词向量

Window classification

神经网络


  • 分类的背景

关于分类

给定训练集:\left \{ x_{i},y_{i} \right \}_{i=1}^{N}

其中x^{(i)}是一个d维向量,y^{(i)}是一个c维one-hot向量,N是训练集样本数。在传统的机器学习方法中,往往通过诸如逻辑斯谛回归和SVM找到分类决策边界:

softmax细节

把给定输入x时的输出为y的概率计算分成两步:

(1)用W_{y}(W的第y行)乘以向量x:

从1开始对所有C个类别都做这样的乘法

(2)归一化,将向量输入到softmax,计算得到一个概率分布,所有概率之和为1:

softmax和交叉熵误差

输入x,预测y,我们希望模型可以最大化正确类别的概率,最大化概率=最大化对数概率=最小化对数概率的负数,对数概率的负数通常是我们的目标函数:

为什么是交叉熵误差

假设我们有正确标注的概率分布,正确类别的概率为1,其余的概率为0,定义理想的概率为p,softmax计算得到的概率记为q,则交叉熵为:

因为p是one-hot向量,所以非正确类别的求和项的值全部为零,最后交叉熵的结果是-log(q)。

补充:KL散度(KL divergence)

交叉熵可以被改写成熵和两个分布之间的KL散度:

在我们的例子中,H(p)是零(即使它不是零,它也是不变的,对梯度没有贡献),所以最小化交叉熵等于最小化p和q之间的KL散度。

KL散度不是距离,而是两个概率分布p和q之间差异的非对称度量:

整个数据集上的分类

整个数据集上的交叉熵损失函数J:

用f表示矩阵运算的记号:,代替这样的表示:

正则化

在实际应用中,还会用到正则项作为总体目标函数的一部分:

目的是为了鼓励模型中的权值尽可能的小,或尽可能接近零。当我们拥有大量特征或模型非常复杂时,正则化能够防止过拟合。

红线是test error,蓝线是training error,横轴是模型复杂度或迭代次数,直线是方差偏差均衡点。

L1正则项和L2正则项详解参考:https://blog.csdn.net/jinping_shi/article/details/52433975

dropout正则化详解参考:https://blog.csdn.net/stdcoutzyx/article/details/49022443

优化

在一般的机器学习中,\theta只由W的列组成:

故只需优化W,也就是softmax分类器的参数,所以我们只需更新决策边界:

而在词向量或其他深度学习中,需要同时学习权值矩阵和词向量。参数一多,就容易过拟合:

  • 分类问题中更新词向量

re-training词向量失去泛化效果

比如有一个给单词做情感分析的小任务,在预训练的词向量中,这三个表示电视的单词都是在一起的:

但由于情感分析语料中,训练集只含有TV和telly,导致re-training之后两者跑到别处去了:

于是在测试集上导致television被误分类。

这个例子说明,如果任务的语料非常小,则不必在任务语料上重新训练词向量,否则会导致词向量过拟合。

补充:词向量相关术语

词向量矩阵L常被称作lookup table:

Word vectors = word embeddings = word representations (mostly)

  • Window classification

词窗口分类

很少对单个词做分类,实际上想做的是在上下文中对单词进行分类。

第一个例子:四分类命名实体识别,对大语料库中的每个单词识别人名、地点、组织及其他。

做法:给中心词分配一个标签,然后用一个窗口把它前后的单词连接起来,训练一个softmax分类器。

例如:从一个长句中截取短句作为窗口,在这个窗口的上下文中,对中心词Paris进行分类。定义窗口长度为2,:

定义新的输入X为整个窗口连接成的5个词向量,即一个5d维的列向量:

最简单的窗口分类器:Softmax

J对X求导,注意这里的X指的是窗口所有单词的词向量拼接向量:

于是就可以更新词向量了:

另一方面,对W求偏导数,将所有参数的偏导数写到一起有:

在更新过程中计算代价最高的有矩阵运算f=Wx和指数函数,但矩阵运算比循环要快多了(在CPU上快一个数量级)。

Softmax(等价于逻辑斯谛回归)效果有限

仅限于较小的数据集,能够提供一个勉强的线性分类决策边界。

使用神经网络

神经网络可以提供非线性的决策边界:

  • 神经网络

前向传播

使用一个三层神经网络计算一个窗口的得分:s=score(museums in Paris are amazing)

这种红点图经常在论文里看到,大致代表单元数;中间的空格分隔开一组神经元,比如隐藏层单元数为2×4。U是隐藏层到class的权值矩阵:

其中a是激活函数:

关于额外层

额外层学习不同的输入词之间的非线性相互作用。以前我们只能说如果单词in出现在这个位置,总会增加下一个词是地点的概率,现在我们可以学习这样的模式,即如果单词in在第二个位置,只有在单词museum也是第一个词的情况下,会提高这个是地点的可能性。

间隔最大化目标函数

怎么设计目标函数呢,记s_{c}代表误分类样本的得分,s表示正确分类样本的得分。则朴素的思路是最大化(s-s_{c})或最小化 (s_{c}-s)。但有种方法只计算s_{c}> s\Rightarrow (s_{c}-s)> 0时的错误,也就是说我们只要求正确分类的得分高于错误分类的得分即可,并不要求错误分类的得分多么多么小。这得到间隔最大化目标函数:

minimizeJ=max(s_{c}-s,0)

但上述目标函数要求太低,风险太大了,没有留出足够的“缓冲区域”。可以指定该间隔的宽度(s-s_{c}< \Delta ),得到:

minimizeJ=max(\Delta +s_{c}-s,0)

可以调整其他参数使得该间隔为1:

minimizeJ=max(1+s_{c}-s,0)

这实际上是将函数间隔转换为几何间隔,参考SVM.

在这个分类问题中,这两个得分的计算方式为:s_{c}=U^{T}f(Wx_{c}+b)s=U^{T}f(Wx+b);通常通过负采样算法得到负例。

另外,这个目标函数的好处是,随着训练的进行,可以忽略越来越多的实例,而只专注于那些难分类的实例。

反向传播训练

跳过链式法则推导直接贴结果:

其中\delta^{(k)}是第k层的误差:

可见只要控制误差的计算方式,就可以smoothly地过渡到间隔最大化目标函数:

另外,对偏置的偏导数是\delta _{i}^{(k)}

最后一片拼图是对词向量的偏导数,由于连接时每个输入单元连到了多个隐藏单元,所以对某个输入单元的偏导数是求和的形式(残差来自相连的隐藏单元):

其中,W_{j}^{T}是第j列,转置后得到行向量;红色部分是误差,相乘后得到一个标量,代表词向量第j维的导数。那么对整个词向量的偏导数就是:

\frac{\partial s}{\partial x}=W^{T}\delta

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值