论文理解(二)

for very deep convolutional networks for nlp

对于nlp中的任务,我们一般会采用RNN(尤其是lstm)和cnn网络,但是相比于计算机视觉中的神经网络是非常浅的。文章提出了一个新的结构,用于文本处理,作用于字符级别上,使用小的convlution和pooling 操作(小,应该指的是卷积核和步长之类)。用了29层卷积层。这是深度卷积网络第一次用于NLP。‘

nlp就是用不同的形式表示相同的信息,处理的细粒度可以从字符到单词,到句子,到文章段落。cnn把特征提取和分类看做是联合训练的过程。(这个思想已经提出了很多年了)

尤其是用多层的convlution和pooling 操作有序的提取出输入的hierarchical representation。很多任务都会把word当做处理的基本单元。因为word有连续的表示,例如word2vec。但是我们并不清楚,如何才能最好的表示一个单词序列。例如如何去表示一个句子,因为会涉及到复杂的语法和语义的关系。事实上,同一个句子,我们可能会面临长或短的依赖问题。目前,我们的处理方法就是把句子看成一系列的标志。(字符或单词)RNN除此之外考虑了位置信息。LSTMs are generic learning machines for sequence processing which are lacking task specific structure.缺点:lstm(RNN的变体)是通用的用来处理序列,但缺乏任务具体结构。

By these means,the search space is heavily constrained and efficient solutions can be learned with SGD.(如果使用深度的结构的话,不太理解这一句)

However, we argue that the depth varies considerably for the tokens in the sequence: the first token goes through many recurrent layers while basically a linear operation is applied to the last one.)(不理解,难道深度神经网络只应用在需要处理的第一个token,最后一个token只用到了一个线性操作,这不可能。网络结构在任何时候都是相同的呀)

怎样计算出一个句子的表示,可以使词向量的平均,这样很差是因为失去位置信息。或者用parse tree ,那么根节点就是分类器的输入。 

 

 

对于向前用cnn做的一些工作,kim的论文中使用一个卷积层(多个宽度和过滤器),跟着一个max-pooling layer.最后一层使用全连接和drop-out。一个相似的模型被提出,使用k-max pooling。它允许检测句子k个重要的特征,不考虑他们的具体位置,只考虑它们的相对位置。k的值依赖于句子长度和这个子采样层在网络结构中的位置。另一篇作用于字符上的论文,一个word的所有字符向量通过一个最大化的操作进行组合,然后和word向量联合使用。

在计算机视觉领域,RNN和CNN组合使用,得到两者之中最好的结果。这样的想法同样也被用于句子分类。一个卷积网络,可达五层,被用来学习高等级的特征,并把他作为lstm的输入。

 

提出的结构:::

 

首先是一个LKT,对应与每个字母,都是是一个向量。设为f0,则输入矩阵为f0*s,其中s就是字符的个数,f就是字符维度。我们第一次使用64个convolutions,大小为

3*f0,后面跟着一个堆叠的时序convolutional block。。我们设定两个规则:1.对于相同的时序输出,这一层有相同的feature map 数。2.当时序输出减半是,这一层的feature map数量变为原来的两倍。刚开始我们使用64个featuremap,进行了三次poling操作。每一次都减半输出,所以每一次都会增加一倍的feature map数。不同的convolutional block数目决定了模型的不同深度。convolutional block的输出是一个张量,512*sd(sd=sd/2^p)(p=1,2,3分别对应于三次子采样操作)。这些张量可以被看作为输入文本的高等级表示。我们把输入文本padding成固定的长度。当输入文本长度不固定时,卷积编码提供输入文本的表示取决于输入的初始长度。对于机器翻译来说很重要,尤其是结合注意力模型的机器翻译。

先前的一些模型结构非常浅,并且结合不同大小的convulotion层。convolution 层实际上就是提取n-gram的特征,不同的长度用于建立模型的长短时依赖。文章提出的模型 使。用多层,即是深度模型,使用小的convolution,大小为3。堆叠四层,用于处理上下文9个tokens(Stacking 4 layers of such convolutions results in a span of 9 tokens不理解)。网络可以自动学习如何组合 3-gram features。convulotion block的时序输出被down-sampled成固定的维度,使用k-max pooling。网络通过这样提取出了k个最重要的特征,而不考虑他们在句子中的具体位置。512*k个结果特征,通过带有Relu和softmax的三层全连接转变为一个单个向量。在全连接层不使用dropout 会比较好,而仅仅使用时序分批的正则化。

convulution Block包含两个卷基层,每个卷基层后面跟着正则化层和Relu层。mini-batch的大小m,时序信息的feature map大小s,the sum and the standard deviations related to the BatchNorm algorithm are taken over |B| = m· s terms。提出了子采样层的三种方法:

(i) The first convolutional layer of Ki+1 has stride 2.

(ii) Ki is followed by a k-max pooling layer [11] where k is such that the resolution is halved.

(iii) Ki is followed by max-pooling with kernel size 3 and stride 2
(iii) Ki is followed by max-pooling with kernel size 3 and stride 2(iii) Ki is followed by max-pooling with kernel size 3 and stride 2(iii) Ki is followed by max-pooling with kernel size 3 and stride 2这三种pooling操作,使得时序输出为原来的二分之一,网络深度,层数以及相应的参数个数见下图:

 

 

字符总共有72个,包含特殊字符和未知字符,输入大小固定为1014.字符维度是16,mini-batch大小为128,刚开始的学习率为0.01,momentum为0.9.随着验证集误差可连续两次误差的增大,学习率被除。同样使用正则化,而不是用drop-out。

我们得到一些结论;

1.本文用的结构非常适用于大数据,即使深度没有很深。(We also observe that for a small depth, temporal max-pooling works best on all data sets.)

2.随着深度变大,数据错误率越低,表现越好。

3.max-pooling的表现比其他按两种pooling方法要好。与convolution with stride 2 相近但是都比K-max pooling(需要考虑句子的全局信息)要好

4.我们的结构得到了state of art的结果,除了在两个小的数据集上,与最好的方法 ngram tf-idf 相近,远超过浅层的cnn。

5.随着深度的越来越大,效果不会越来越好。当达到一个限制的时候,网络的准确率开始下降。因为梯度消失问题,sgd无法提供正确的损失函数的最小化。解决这个问题提出short-connnection。本来随着深度的增大,误差减小。训练集误差大于测试集误差。到第49层时,误差却增大。如果使用shortcut误差依然增大,只不过增大的幅度较小。

6.如果文本数据需要分成很多类(数目比较大),探索网络深度对其影响是很有意义的。

结论::两个创新点,首先作用在字符级别上,然后使用深度堆叠网络。convolution 和 max-pooling ,大小为3.去学习一个句子的等级表征方式。在图像领域使得cnn成功的是他的组合性。nlp中也需要组合字符组成n-gram,stems,单词,短语,句子。

本文把dcnn用于句子分类,相同的想法也可用于序列处理,例如机器翻译等。需要注意的是这两类在概念上有些不同,在句子分类中,我们需要提取有特点的特征,放弃与分类任务无关的信息。而在机器翻译中,所有信息都需要被考虑。提出的模型DCNN需要被探索怎样用在sequence to senquence 问题处理上面。

 

 

关于cnn用于nlp的几个点:

卷积核的大小要与tokens维度相关,一般我们只指定一个size,另一个就是词向量维度那样的。

1.Multi-Channel:这里很有意思,输入句子时,使用两个通道(channel,可以认为是输入copy一份),都用word2vec初始化,其中一个词的向量保持不变(static),另一个是non-static,在BP过程不断修改,最后再pooling前对两个通道得到的卷积特征进行累加。

2.Wide Convolution:与Narrow相对而言,wide convolution指用filter m 对句子中的所有可能组合进行卷积,句子左右可以补零,从而得到比原句子长度更长的feature map,能够获得句子中词语尽可能多的不同组合

3.K-Max Pooling:与普通max-pooling取最大的feature不同,这里取最大的k个值,一定程度上保留了这些feature的顺序。

4. Dynamic K-Max Pooling:k的大小与卷积得到的feature map长度、以及当前pooling层数有关,公式如下:

 

5.stride size :每次移动多少,卷积核

6.每个卷积核就是提取一种特征,不同的特征到更深的结构再进行组合。所以说cnn刚开始是考虑局部信息的,但是到后面还是考虑整体信息。(组合性)

7.卷积是为了提取局部特征,pooling是为了什么?应的响应就会很大,得到的值就越大

8.在卷积过程有一个例子:比如说一副图像,你想检测其中的人脸,你拿人脸作为卷积核进行卷积,那么图片中相应部分的响应就会很大,得到的值也会越大。如果是情感分析,训练出来的卷积核是什么,有情感的的形容词,good or bad(是这样理解吗?)

9.Folding:两行变一行,将同一个词的第1,2特征叠加,3,4特征叠加,我的理解是可能特征间存在某种联系,进行叠加能综合特征,又降低维数。

10.为什么要进行pooling,两个原因,降低维度,获得分类器的固定输入。

关于图像cnn:

http://www.cnblogs.com/nsnow/p/4562363.html

附上两个网址,关于cnn for nlp

http://www.cnblogs.com/chenbjin/p/4976583.html

http://www.wildml.com/2015/11/understanding-convolutional-neural-networks-for-nlp/

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值