【论文阅读】对CNN进行序列分类的理解或者说是使用指南

论文:A Sensitivity Analysis of (and Practitioners’ Guide to) Convolutional
Neural Networks for Sentence Classification

2016年的论文,中国人的论文,作者写得很认真,每次实验的都非常详细(如交叉验证,实验多次等),这篇博客略去了对实验细节的介绍,只阐述结果。

Abstract

近年来,CNN已被证明可用于序列分类,并且能获得很好的效果(strong performance)。但要真正在实践中,使用CNN进行序列分类,还需要知道CNN的各项参数(如卷积核的大小和个数)对序列分类的影响,方便调参。

作者基于一层CNN构建序列分类模型,在9个数据集上进行了大量实验,包括与SVM和逻辑回归的比较,也包括CNN不同参数的实验。

本文的贡献在于,对使用CNN做序列分类给出了很多实用建议,也在实验中论证了CNN分类序列的合理性。

Introduction

目前,序列分类的CNN模型的构造如下图所示(来自论文Convolutional Neural Networks for Sentence Classification):
CNN model for sentence classification

  • 输入序列是I like this movie very much !,长为7,每个token都被embedding成5维向量,因此模型的输入是7x5的矩阵。
  • 模型的第一层是卷积层,卷积层共有6个卷积核: k1, k2, k3, k4, k5, k6,它们的大小分别是4x5, 3x5, 2x5。
  • 那么,输入经过卷积,再经过激活函数,获得6个feature map,大小分别为4、4、5、5、6、6。
  • 6个feature map经max pooling,得6个1维向量,拼接为6维的feature向量
  • 最后经softmax,预测对应类别。

显然,这个模型的超参数太多了,我们需要确定输入数据的embedding的维度、卷积核大小、卷积核个数、激活函数、pooling策略和正则化策略(如dropout和L2)。

Experiment

实验1——SVM

使用SVM作为baseline,实验结果如下图所示:

  • 第一列是9个dataset。
    • 第二列,bowSVM表示sentence的嵌入是bow嵌入,words的组合方式是uni-gram和bi-gram混合。对于sentence=I like this movie very much !,uni-gram list=[I, like, this, movie, very, much, !], bi-gram list=[I_like, like_this, this_movie, movie_very, very_much, much_!],以上两个list混合构成总的bag of words。模型是linear kernel的SVM。
  • 第三列,wvSVM表示sentence的嵌入方法是word2vec,嵌入后每个token的维度是300维,模型是RBF kernel的SVM。
  • 第四列,bowwvSVM表示sentence的嵌入方法是word2vec和bow的concat,模型是linear kernel的SVM。

为什么使用不同kernel的SVM呢?作者也没有说,我也不知道。
SVM result

实验二——CNN base line

CNN的超参数设置如下图所示,比较容易看懂,就不再详述了。使用CNN模型前,对sentence使用的嵌入方法是word2vec。
CNN baseline result
下图是CNN模型在多个数据集上的实验结果。

  • 不同颜色的曲线代表不同的数据集,曲线的意义是:每个数据集上做了100次实验,实验结果的分布图。
  • Non-static word2vec表示,使用预训练的word2vec,然后在目标数据集上训练CNN模型时,也更新word2vec中embedding layer的参数。
  • static word2vec表示,使用预训练的word2vec,但是不更新其embedding layer的参数。

从图中可以看出,在目标数据集上再次更新word2vec的参数,在MR、CR、SST-2上取得更好的效果,但在Subj和TREC上效果反而变差了。但是为什么会这样,作者没有解释。

Density curve of accuracy using static and non-static word2vec-CNN

实验3——embedding方法对CNN的影响

使用bow嵌入的one-hot向量效果很差,而使用word2vec和Glove嵌入方法的效果如下图所示:

  • 第一列表示数据集
  • 第二列是使用non-static的word2vec,嵌入空间维度是300
  • 第三列是使用non-static的Glove,嵌入空间维度是300
  • 第四列是使用non-static的word2vec和Glove嵌入向量的concat,维度是600
  • 表中每一个元素的值:平均值(最小值,最大值)

从图中可以看出,word2vec和Glove作为词嵌入方法对CNN的影响不大。
在这里插入图片描述

实验4——卷积核大小对CNN的影响

下图显示了卷积核大小对CNN的影响,因为这里只是为了观察卷积核大小对最后结果的影响,为控制变量,只是使用了一种卷积核,在上文对网络的介绍中有2、3、4共三种卷积核:

  • 图中每个曲线代表一个数据集
  • 横座标表示卷积核大小,纵座标表示准确率。准确率是以每个数据集在卷积核size=3的值为参考的相对值。

从图中可以看出,红线MR数据集的最佳卷积核大小是7,黑线TREC数据集的最佳卷积核大小是3。
Effect of the region size
下面两个图是选择卷积核大小和组合的最优解。第一个图的数据集是MR,第二个图的数据集是TREC。可以看出,卷积核大小都是上图中的7和3的值或者近似值。因此,作者在本章节的最后建议,选择卷积核的大小和组合时,可以先选择最佳的卷积核大小,然后再实验最佳卷积核大小或者其近似值的组合。

In light of these observations, we believe it ad- visable to first perform a coarse line-search over a single filter region size to find the ‘best’ size for the dataset under consideration, and then explore the combination of several region sizes nearby this single best size, including combining both differ- ent region sizes and copies of the optimal sizes.

Effect of filter region size with several region sizes on the MR dataset
Effect of filter region size with several region sizes using non-static word2vec-CNN on TREC dataset

实验5——卷积核个数对CNN的影响

下图显示了卷积核个数对CNN的影响。一般而言,卷积核个数越大效果越好,不过在实际选择中也要考虑计算性能的影响。
Effect of the number of feature maps

实验6——激活函数的影响

从下图可以看出,不同激活函数的区别也不明显,另Iden表示identity,即没有激活函数。
Performance of different activation functions

实验7——pooling策略的影响

1-max pooling > k-max pooling > average pooling

实验8——正则项的影响

当卷积核个数很多的时候(如500以上),正则项有用,其他时候可以不加正则。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章