赞
踩
《Deep Pyramid Convolution Neural Network》是对TextCNN网络的加深,DPCNN这篇文章挺难读的,内容量很大,我们仔细来看一下
DPCNN这篇文章提出了一种效率比较高、基于单词的深度卷积神经网络,主要应用于文本分类领域。在Abstract和Introduction部分,作者提到了三条我认为很有价值的信息:
DPCNN的三个关键组件分别是:
本文的卷积层采用的是等长卷积,先介绍三种卷积概念:
假设输入序列长度为 n n n,卷积核大小为 k k k ,步长为 s s s,输入序列两端补0数量为 p p p ,那么经过卷积操作之后的序列长度为 n − m + 2 p s + 1 \frac{n-m+2p}{s}+1 sn−m+2p+1
等长卷积的物理意义:由于输入输出序列长度均为 n n n ,所以此时长度为 k k k 的卷积核执行的卷积操作可以理解为将输入序列的每个位置的词及其左右 k − 1 2 \frac{k-1}{2} 2k−1个词的上下文信息压缩到输出序列的第 i i i个位置。
至于为什么要使用等长卷积,我觉得是因为他想在后面的池化层让feature map大小减半,因此在卷积的时候不想改变feature map大小
这一部分是本文的精华之一。这里的池化操作是在保证feature map数量不变的前提下进行的,为什么要保证feature map数量不变呢?文中作者说的是他们分析发现在以往一味增加feature map数量的做法不仅不会提升accuracy,还会增加computation cost,可谓是得不偿失。我还看了另一篇笔记的解释是这样的:作者认为文本数据不像图片数据,我们知道每个卷积核所提取的通常是数据的某个特征而得到一张feature map,那么对于图像来说,很多特征的差异是很大的,比如人的鼻子、眼睛、嘴巴,衣服的颜色,物体的形状等等,这种情况下我们多使用卷积核多提取feature map是有利于我们分类的。但是对于文本数据,我们没有图片里那么差异显著的特征信息,因此我们反而应该考虑怎么去合并已有的特征信息,就像“特别”、“不好”在一个句子中分别被两个卷积核提取到了,我们其实希望的是这两张feature map的信息能够在一定程度上合并,这样才有助于我们文本数据的分类。
文中的池化层采用的是 k e r n e l _ s i z e = 3 , s t r i d e = 2 kernel\_size=3,stride=2 kernel_size=3,stride=2,这样一来,每次经过池化层,feature map就会被减半,但是数量不变,也就有了我们的金字塔形状
而且,这样的池化操作是有利于我们处理文本的长距离依赖的,假设经过了 L L L层池化,我们的模型就可以学习到距离为 2 L 2^L 2L的单词依赖关系。
ResNet结构现在其实很常用,是一种抑制因网络结构太深而引起的过拟合问题很有效的手段,本文也采用了这样的残差结构。在图中可以看到,池化后的 z z z会通过一个shortcut与经过两层卷积后的 f ( z ) f(z) f(z)连接。
文中还采用了一种我之前没见过的trick,就是pre-activation,与它相对立的就是我们所常用的post-activation。具体来说,我们一般是先将数据传进卷积层得到 W x + b Wx+b Wx+b,然后再对结果进行非线性激活得到 σ ( W x + b ) \sigma(Wx+b) σ(Wx+b)。但是pre-activation做的是先对输入数据做激活得到 σ ( x ) \sigma(x) σ(x),再将激活后的作为输入传入模型得到 W σ ( x ) + b W\sigma(x)+b Wσ(x)+b。作者通过实验发现pre-activation效果确实比post-activation要好。
这一部分后面说了一堆Unsupervised Learning的东西(tv-embedding)说实话我没太看懂,我们就说不加Unsupervised Learning的text region embedding。其实说白了,就是TextCNN,作者先用CNN把文本卷积一次获取一些region的特征作为我们的文本表示,而不是简单的使用词向量。region embedding的窗口大小为k,其实得到的文本表示有点k-gram的感觉。作者提到region embedding的输入可以是三种:连续输入(将k个单词的one-hot向量concat起来)、BOW、n-gram,作者经过比较实验发现BOW的效果是最好的,输入使用n-gram特征的化容易过拟合(这也可以理解,本身region embedding做的事情就类似n-gram)。
作者举了个例子,Shallow-TextCNN其实就是Text Region Embedding的特殊形式,可以看作是池化层前就只有一个用来做region embedding的卷积层。
实验表格中的数据是错误率,可以发现DPCNN在当时可以说是屠榜了。
作者还就模型的准确率与效率做了对比试验,具体来说有两组:
DPCNN和Shallow-TextCNN的对比,从图中数据可以看出来DPCNN速度上其实没有怎么的下将,但是正确率确实是大幅上升
Pyramid和non-Pyramid结构的对比,文中提出的这种Pyramid结构效果不用多说了吧,真的是一目了然
这篇文章可以说让我学到了不少东西:
感觉自从CNN被提出可以用于文本分类,RNN就逐渐被击溃了……
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。