DPCNN

与之前CNN模型相比, 加深了很多.通过不断加深网络,可以抽取长距离的文本依赖关系. 参考了ResNet结构.

模型结构

等长卷积

首先交代一下卷积的的一个基本概念。一般常用的卷积有以下三类:

假设输入的序列长度为n,卷积核大小为m,步长(stride)为s,输入序列两端各填补p个零(zero padding),那么该卷积层的输出序列为(n-m+2p)/s+1。

  1. 窄卷积(narrow convolution): 步长s=1,两端不补零,即p=0,卷积后输出长度为n-m+1。
  2. 宽卷积(wide onvolution) :步长s=1,两端补零p=m-1,卷积后输出长度 n+m-1。
  3. 等长卷积(equal-width convolution): 步长s=1,两端补零p=(m-1)/2,卷积后输出长度为n。如下图所示,左右两端同时补零p=1,s=3。

池化

那么DPCNN是如何捕捉长距离依赖的呢?Downsampling with the number of feature maps fixed。

作者选择了适当的两层等长卷积来提高词位embedding的表示的丰富性。然后接下来就开始 Downsampling (池化)。再每一个卷积块(两层的等长卷积)后,使用一个size=3和stride=2进行maxpooling进行池化。序列的长度就被压缩成了原来的一半。其能够感知到的文本片段就比之前长了一倍。

固定feature maps(filters)的数量

为什么要固定feature maps的数量呢? 许多模型每当执行池化操作时,增加feature maps的数量,导致总计算复杂度是深度的函数。与此相反,作者对feature map的数量进行了修正,他们实验发现增加feature map的数量只会大大增加计算时间,而没有提高精度。

固定了feature map的数量,每当使用一个size=3和stride=2进行maxpooling进行池化时,每个卷积层的计算时间减半(数据大小减半),从而形成一个金字塔。

Shortcut connections with pre-activation

网络太深会有以下问题:

  1. 初始化CNN的时,往往各层权重都初始化为很小的值,这导致了最开始的网络中,后续几乎每层的输入都是接近0,这时的网络输出没有意义;

  2. 小权重阻碍了梯度的传播,使得网络的初始训练阶段往往要迭代好久才能启动;

  3. 就算网络启动完成,由于深度网络中仿射矩阵(每两层间的连接边)近似连乘,训练过程中网络也非常容易发生梯度爆炸或弥散问题。

所以, 论文参考ResNet, 采用Shorcut connection, 这样就可以极大的缓解了梯度消失问题.

另外, 在做卷积运算时, 作者采用了pre-activation的做法.也就是说, 卷积运算是 W σ ( x ) + b W\sigma(x)+b Wσ(x)+b, 而不是通常用的 σ ( W x + b ) \sigma(Wx+b) σ(Wx+b), 直观上,这种“线性”简化了深度网络的训练.

Text region embedding

作者将TextCNN的包含多尺寸卷积滤波器的卷积层的卷积结果称之为Region embedding,意思就是对一个文本区域/片段(比如3-gram)进行一组卷积操作后生成的embedding。

另外,作者为了进一步提高性能,还使用了tv-embedding (two-views embedding)进一步提高DPCNN的accuracy。也就是引入预训练的词向量.

最终, 输入的词向量变为 W x + u U W ( u ) z ( u ) + b Wx+\sum _{u \in U}W^{(u)}z^{(u)}+b Wx+uUW(u)z(u)+b.
x就是Basic region embedding, z ( u ) z^{(u)} z(u)则表示x中每个词的词向量

实验

数据集及预处理

数据集就是几个常用的分类数据集:

  • AG
  • Sougou
  • Dbpedia
  • Yelp
  • Yahoo
  • Amazon

预处理主要是大小写转换. 另外对数据vocabulary size限制为3w.

参数设置

  • optimizer: SGD with momentum 0.9
  • epoch: 在AG数据集上50, Yelp和Dbpedia上30, 其他数据集15
  • batch size: 100
  • dropout: 0.5
  • region size: {1, 3, 5}
  • 模型深度: 15(15 means 7 convolution blocks of 2 layers plus 1 layer for region embedding.)
  • 另外, 为了防止过拟合, 设置了early-stopping.
  • Unsupervised embedding不进行fine-tuning.

结果

.