深层挖掘深度金字塔神经网络在文本分类中的应用

      本文主要来源于Deep Pyramid Convolutional Neural Networks for Text Categorization,这是我们这学期模式识别的复现作业,这篇文章主要说一下对这篇文章中主要涉及到的金字塔神经网络模型的理解,因为是NLP方向的第一篇论文,若有不对之处,敬请各位大佬指正。

先附上原文链接Deep Pyramid Convolutional Neural Networks for Text Categorization

源代码链接基于pytorch环境的源代码,但是由于这个源代码数据处理部分作者没有,懒癌如我,找到了另一个小姐姐写的很详细的一片复现论文,原文链接基于fastNLP和pytorch代码,当然,大家也可以去github上去探索一下其他好的代码,欢迎及时与我分享哈哈。接下来就进入正题了。

一、论文的背景

1.之前已经证明浅层的单词级别的卷积神经网络都要比深层的字符级别的神经网络表现要好,所以本文是目的是发掘一个有效的单词级别的神经网络,当然我们本文可不仅仅是单词级别的,而是region embedding,后面我们会详细说。

2.本文的金字塔神经网络采用了15层,7个卷积块(每个卷积块包含2个卷积层和一个池化层,在这里我们池化层不计入单独的层算)+1个region embedding层

二、模型的结构

上图就是我们本文主要要研究的模型结构图了

首先,先为每个单词生成一个词向量,可以用onehot,或者n-gram模型,这个大家感兴趣的可以去看一下原文,作者一共列了三种方式。为每个单词生成词向量之后,作者使用了tv-embedding训练方式对输入数据进行训练,着重强调的使我们的region embedding层,这层不同于我们常用的Word-embedding层的区别就是它是将多个单词作为一个区域,然后对这些单词用之前训练好的参数进行卷积操作。

经过region embedding层生成的新的特征输入到第一个卷积块中。就像我们刚才所提到的,每个卷积块包括两个卷积层和一个池化层。理论上来说,经过卷积之后我们的特征图维度相比我们输入的数据维度会降低,但是本文中为了避免维度匹配问题,所以我们采用了等长卷积的方式,就是在数据卷积之前,对数据两端进行补0操作。 等长卷积(equal-width convolution): 数据原本维度为n,卷积核大小为m,设步长s为1,那么数据输出维度则为n-m+1.那么我们想要是数据输出维度为n,那么我们就应该在原始数据两端补零p=(m-1)/2,卷积后输出长度为n。经过两层这样的等长卷积之后,进入了池化层,对数据进行大小为3,步长为2的降采样操作,这样由于步长为2 的池化操作,卷积核有效的覆盖率变为之前的2倍,经过L次池化之后,有效覆盖率就变成了之前倍,这样就可以捕获到文章中长距离之间的关系。文中我们采用了7个这样的卷积块,经过一层一层的特征提取之后,最后一个池化层将文档中的信息聚合在一个向量之中。

三、模型结构的特征

1.在保持特征图数目不变的情况下进行下采样操作

首先,相信也有很多人像我一样对特征图的概念模糊不清,我之前就把它和维度的概念混淆掉了(求轻喷),下面我上一张图大家就很容易就能理解特征图的概念了,话不多说,上图


大家可以看到,其实大家可以理解为,保持特征图的数目不变,其实也就是保持卷积核的数目不变。

在接触卷积神经网络的过程中,尤其是做图像的,经常会增加特征图的数量来提取它更深层次的特征。我们发现增加特征图的数量,只是造成了计算复杂度的增加,对模型的精度并没有很大的提高,所以在文章中我们固定了特征图的数量为250

2、采用shortcut连接

作者采用了何凯明大神之前用的一种结构,shortcut连接。简而言之,主要是通过加法运算来解决梯度弥散问题。值得注意的一点还有,不同于传统的卷积神经网络在卷及操作之后才使用激活函数,本文结构中,我们在卷积操作之前就使用激活函数。

3、无需维度匹配

shortcut连接需要两端数据维度相同。由于我们shortcut连接是在每个卷积块内部进行连接,它没有跨过池化层,而我们在卷积块内部采用的是等长卷积的方式,所以无需维度匹配,这会减少添加额外的参数等一系列额外的工作。

4.region embedding

此外,不同于传统的Word-embedding操作,本文采用的region embedding操作,即对多个单词进行卷积操作

就先写到这里了,欢迎指正

你可能感兴趣的:(深层挖掘深度金字塔神经网络在文本分类中的应用)