DPCNN论文笔记

DPCNN论文笔记

Deep Pyramid Convolution Neural Network》是对TextCNN网络的加深,DPCNN这篇文章挺难读的,内容量很大,我们仔细来看一下

Overview

DPCNN这篇文章提出了一种效率比较高、基于单词的深度卷积神经网络,主要应用于文本分类领域。在Abstract和Introduction部分,作者提到了三条我认为很有价值的信息:

  1. 作者没有用基于字符的CNN,因为他们发现即便是浅层的TextCNN效果也要比CharCNN好,并且计算的复杂度要低很多
  2. 通过TextCNN和CharCNN的对比作者发现,word才是更能帮助我们去理解文本的最小单元(这一定程度上解答了我在CharCNN论文笔记中提出的质疑)
  3. 作者虽然加深了网络深度,但同时也控制了复杂度和参数量,实现的方式也就是文章标题所提到的金字塔结构。这种结构的另一大优势就是模型能更好的处理长距离依赖问题。

Model Structure

Overview

DPCNN的三个关键组件分别是:

  1. Downsampling:下采样pooling层(stride=2),特点是保持feature map的数量一直不变。这样的池化层能使得feature map的大小每次减半,也就实现了金字塔结构。
  2. Shortcut-connection:残差连接,作者学习了ResNet的做法,在加深网络深度的时候使用了残差结构
  3. Text region embedding:这个后面会详细说

在这里插入图片描述

Convoluntion Layer

本文的卷积层采用的是等长卷积,先介绍三种卷积概念:

假设输入序列长度为nnn,卷积核大小为 kkk ,步长为 sss,输入序列两端补0数量为 ppp ,那么经过卷积操作之后的序列长度为 n−m+2ps+1\frac{n-m+2p}{s}+1snm+2p+1

  1. 窄卷积: 步长 sss = 1,ppp = 0,卷积后序列长度为 n−k+1n-k+1nk+1
  2. 宽卷积: 步长 sss = 1,ppp = k−1k-1k1 ,卷积后输出长度为 n+k−1n+k-1n+k1
  3. 等长卷积: 步长sss = 1, ppp = k−12\frac{k-1}{2}2k1,卷积后输出长度为 nnn

等长卷积的物理意义:由于输入输出序列长度均为nnn ,所以此时长度为 kkk 的卷积核执行的卷积操作可以理解为将输入序列的每个位置的词及其左右 k−12\frac{k-1}{2}2k1个词的上下文信息压缩到输出序列的第iii个位置。

至于为什么要使用等长卷积,我觉得是因为他想在后面的池化层让feature map大小减半,因此在卷积的时候不想改变feature map大小

Downsampling with the number of feature maps fixed

这一部分是本文的精华之一。这里的池化操作是在保证feature map数量不变的前提下进行的,为什么要保证feature map数量不变呢?文中作者说的是他们分析发现在以往一味增加feature map数量的做法不仅不会提升accuracy,还会增加computation cost,可谓是得不偿失。我还看了另一篇笔记的解释是这样的:作者认为文本数据不像图片数据,我们知道每个卷积核所提取的通常是数据的某个特征而得到一张feature map,那么对于图像来说,很多特征的差异是很大的,比如人的鼻子、眼睛、嘴巴,衣服的颜色,物体的形状等等,这种情况下我们多使用卷积核多提取feature map是有利于我们分类的。但是对于文本数据,我们没有图片里那么差异显著的特征信息,因此我们反而应该考虑怎么去合并已有的特征信息,就像“特别”、“不好”在一个句子中分别被两个卷积核提取到了,我们其实希望的是这两张feature map的信息能够在一定程度上合并,这样才有助于我们文本数据的分类。

文中的池化层采用的是kernel_size=3,stride=2kernel\_size=3,stride=2kernel_size=3,stride=2,这样一来,每次经过池化层,feature map就会被减半,但是数量不变,也就有了我们的金字塔形状

在这里插入图片描述

而且,这样的池化操作是有利于我们处理文本的长距离依赖的,假设经过了LLL层池化,我们的模型就可以学习到距离为2L2^L2L的单词依赖关系。

Shortcut Connection

ResNet结构现在其实很常用,是一种抑制因网络结构太深而引起的过拟合问题很有效的手段,本文也采用了这样的残差结构。在图中可以看到,池化后的zzz会通过一个shortcut与经过两层卷积后的f(z)f(z)f(z)连接。

Pre-Activation

文中还采用了一种我之前没见过的trick,就是pre-activation,与它相对立的就是我们所常用的post-activation。具体来说,我们一般是先将数据传进卷积层得到Wx+bWx+bWx+b,然后再对结果进行非线性激活得到σ(Wx+b)\sigma(Wx+b)σ(Wx+b)。但是pre-activation做的是先对输入数据做激活得到σ(x)\sigma(x)σ(x),再将激活后的作为输入传入模型得到Wσ(x)+bW\sigma(x)+bWσ(x)+b。作者通过实验发现pre-activation效果确实比post-activation要好。

Text Region Embedding

这一部分后面说了一堆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的卷积层。

Experiment

在这里插入图片描述

在这里插入图片描述

实验表格中的数据是错误率,可以发现DPCNN在当时可以说是屠榜了。

Analysis

作者还就模型的准确率与效率做了对比试验,具体来说有两组:

  1. DPCNN和Shallow-TextCNN的对比,从图中数据可以看出来DPCNN速度上其实没有怎么的下将,但是正确率确实是大幅上升在这里插入图片描述

  2. Pyramid和non-Pyramid结构的对比,文中提出的这种Pyramid结构效果不用多说了吧,真的是一目了然在这里插入图片描述

Reflection

这篇文章可以说让我学到了不少东西:

  1. 让我确信了word用于文本表示效果是更好的,虽然我们往往要构建一个很大的corpus。
  2. 当我们试图加深网络结构的时候,residual一定要考虑一下
  3. pre-activation是一个解锁的新技能
  4. 文本卷积要与图像卷积区别开,不是卷的越多越好,保持feature map数量不变可以做到事半功倍
  5. region embedding是一种有效的文本表示方式,可以在其他模型中应用并比较效果
  6. 特征不是越复杂越好,有时候不妨考虑一下BOW。如果效果差不多,BOW时间成本确实低太多

感觉自从CNN被提出可以用于文本分类,RNN就逐渐被击溃了……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值