Lecture 11: ConvNets for NLP

Lecture 11: ConvNets for NLP_第1张图片

文章目录

  • From RNNs to Convolutional Neural Nets
  • CNNS
    • What is a convolution anyway?
    • convolution for text
    • Single Layer CNN for Sentence Classification
    • Model comparison: Our growing toolkit
    • Very Deep Convolutional Networks for Text Classification
    • RNNs are Slow …
  • 总结

推荐一本书
Lecture 11: ConvNets for NLP_第2张图片

From RNNs to Convolutional Neural Nets

  • 循环神经网络不能捕获没有前缀上下文的短语

  • 总是捕获了太多最后一个词的信息在最终词向量中
    Lecture 11: ConvNets for NLP_第3张图片

  • 例如,softmax总是在最后一步计算

  • RNN的主要思想:

    • 对每个固定长度的可能的词序列计算一个向量
    • 例如“tentative deal reached to keep government open”
      为以下词序列计算向量
      tentative deal reached, deal reached to, reached to keep, to keep government, keep government open
    • 不管短语是否合乎语法
    • 在语言或认知上不太合理
    • 然后再分组(稍后)

CNNS

What is a convolution anyway?

  • 一维卷积:假设f和g是两个一维向量,其中f是主向量,g是filter,f和g直接的卷积,在n处的值表示为 ( f ∗ g ) [ n ] (f*g)[n] (fg)[n],值等于 ∑ m = − M M f [ n − m ] g [ m ] \sum_{m=-M}^{M}f[n-m]g[m] m=MMf[nm]g[m]
  • 卷积常用于提取图片的特征
  • 二维卷积:如下图所示
    Lecture 11: ConvNets for NLP_第4张图片

convolution for text

  • 普通卷积,使用3×3的filter,相当于提取tri-gram的特征
    Lecture 11: ConvNets for NLP_第5张图片
  • with padding:前后增加padding,可以保持经过卷积后维度不变
    Lecture 11: ConvNets for NLP_第6张图片
  • 3 channel:使用3个filter,分别提取不同的特征
    Lecture 11: ConvNets for NLP_第7张图片
  • pooling:使用池化可以缩小维度
    • max,最大池化
      Lecture 11: ConvNets for NLP_第8张图片
    • ave:平均池化
      Lecture 11: ConvNets for NLP_第9张图片
      In PyTorch
batch_size= 16 
word_embed_size= 4 
seq_len= 7 input = torch.randn(batch_size, word_embed_size, seq_len) 
conv1 = Conv1d(in_channels=word_embed_size, out_channels=3, kernel_size=3)  # can add: padding=1 
hidden1 = conv1(input) 
hidden2 = torch.max(hidden1, dim=2)  # max pool

其他概念

  • stride = 2,步长,filter每次移动的距离
    Lecture 11: ConvNets for NLP_第10张图片
  • Less useful: local max pool, stride = 2
    每两行做 max pooling,被称为步长为2的局部最大池化
    Lecture 11: ConvNets for NLP_第11张图片
  • 记录每一个channel的所有时间的 top k的激活值,并且按原有顺序保留(如下图中的-0.2 0.3)
    Lecture 11: ConvNets for NLP_第12张图片

Lecture 11: ConvNets for NLP_第13张图片

  • 扩张卷积
  • 上例中,对1 3 5行进行卷积,通过两个filter得到两个channel的激活值
  • 可以在第一步的卷积中将卷积核从3改为5,即可实现这样的效果,既保证了矩阵很小,又保证了一次卷积中看到更大范围的句子

Single Layer CNN for Sentence Classification

  • Yoon Kim (2014): Convolutional Neural Networks for Sentence Classification. EMNLP 2014. https://arxiv.org/pdf/1408.5882.pdf Code: https://arxiv.org/pdf/1408.5882.pdf[Theano!, etc.]
  • A variant of convolutional NNs of Collobert, Weston et al. (2011)
  • 目标:句子分类
    • 主要是句子的积极或消极情感
    • 其他类似的任务:判断句子的主观或客观、问题分类:关于人,地点,数字,…
  • 单层卷积和池化的简单应用
  • 词向量: x i ∈ R k x_i \in R^k xiRk
  • 句子: x 1 : n = x 1 ⨁ x 1 ⨁ ⋅ ⋅ ⋅ ⨁ x n x_{1:n} = x_1 \bigoplus x_1 \bigoplus ··· \bigoplus x_n x1:n=x1x1xn(词向量拼接而成)
  • 连接 x i : i + j x_{i:i+j} xi:i+j范围内的词 (对称更常见)
  • 卷积核是一个向量: w ∈ R h k w \in R^{hk} wRhk
  • 卷积核的大小可以是2,3,4(指上式中的h)
    Lecture 11: ConvNets for NLP_第14张图片
  • 卷积核 w w w被用到所有可能的windows(即拼接而成的词向量)
  • 根据下式计算一个window的一个特征(one channel) c i = f ( w T x i : i + h − 1 + b ) c_i = f(w^Tx_{i:i+h-1} +b) ci=f(wTxi:i+h1+b)
  • 长度为h的所有可能window: x 1 : h , x 2 : h + 1 , ⋅ ⋅ ⋅ , x n − h + 1 : n {x_{1:h}, x_{2:h+1}, ···, x_{n-h+1:n}} x1:h,x2:h+1,,xnh+1:n
  • 一个feature map(即用一个卷积核卷积得到的结果)的结果为: c = [ c 1 , c 2 , ⋅ ⋅ ⋅ , c n − h + 1 ] ∈ R n − h + 1 c = [c_1, c_2, ···, c_{n-h+1}] \in R^{n-h+1} c=[c1,c2,,cnh+1]Rnh+1,需要对原句子进行padding,如下图在句子末尾进行了padding
    Lecture 11: ConvNets for NLP_第15张图片

Pooling and channels

  • 池化: 最大池化就是选择最大的值作为结果
  • 想法:捕获最重要的激活
  • 如对上述获得的feature map进行pool就会得到一个向量: ( ^ c ) = m a x { c } \hat (c) = max\{\boldsymbol c\} (^c)=max{c}
  • 使用多个filter 权重w(即多个channels),每个filter会获得一个feature map
  • 可以有不同的window大小h,因为最大池化 ( ^ c ) = m a x { c } \hat (c) = max\{\boldsymbol c\} (^c)=max{c}与c的长度无关
  • 所以可以设置多个filters来提取unigrams,bigrams,tri-grams,4-grams的特征

Multi-channel input idea

  • 使用预先训练的单词向量初始化(word2vec或Glove)
  • 从两个副本开始
  • 只有一个副本进行了反向传播,保持其他“静态”
  • 两个通道集都在最大池化前添加到 c i c_i ci

Classification after one CNN layer

  • 首先经过一层卷积,然后使用一次最大池化
  • 来获得最终的特征向量: z = [ ( ^ c 1 ) , ⋅ ⋅ ⋅ , ( ^ c m ) ] z=[\hat (c_1), ···, \hat (c_m) ] z=[(^c1),,(^cm)](假设有m个filters w)
    • 对size为3,4,5都使用100个feature maps
  • 最后使用一个softmax层:$ y= softmax(W^{(S)z + b)$

Lecture 11: ConvNets for NLP_第16张图片

  • 输入为7个词的一句话,词向量d = 5,大小为2,3,4的卷积核分别有2个。经卷积得到6个feature map,长度分别为4,4,5,5,6,6
  • 对得到的6个feature map使用最大池化拼接后得到长度为6个向量,最后经过一个softmax完成二分类

Regularization

  • 使用 Dropout : 使用概率 p (超参数)的伯努利随机变量(只有0 1并且p是为1的概率)创建mask向量 r
  • 在训练的时候删除一些特征: y = s o f t m a x ( W ( S ) ( r ∘ z ) + b ) y = softmax(W^{(S)}(r \circ z) +b) y=softmax(W(S)(rz)+b)
  • 解释:防止互相适应(对特定特征的过度拟合)(Srivastava, Hinton, et al. 2014),即在训练时随机删除一些特征,防止对某些特征产生过拟合,让得到的模型能更加泛化
  • 在测试时,不用dropout,使用概率p缩放最终向量: W ^ ( S ) = p W ( S ) \hat W^{(S)} = pW^{(S)} W^(S)=pW(S)
  • 此外:限制每个类的权重向量的L2 Norm(softmax 权重$W^{(S)}的每一行)不超过固定数 s(也是超参数)
  • 如果 ∣ ∣ W c ( S ) ∣ ∣ > s ||W_c^{(S)}||>s Wc(S)>s,那么将其限制为 ∣ ∣ W c ( S ) ∣ ∣ > s ||W_c^{(S)}||>s Wc(S)>s
    • 不是很常见

All hyperparametersin Kim (2014)
Lecture 11: ConvNets for NLP_第17张图片
Experiments
Lecture 11: ConvNets for NLP_第18张图片
Problem with comparison?

  • Dropout提供了2%-4%的准确度提升
  • 但几个比较系统没有使用Dropout,并可能从它获得相同的收益
  • 仍然被视为一个简单架构的显著结果
  • 与我们之前课程中window和RNN架构不同的是:pooling,many filters,dropout
  • 这其中的有些想法也可以用到RNNs中

Model comparison: Our growing toolkit

  • Bag of Vectors:对于简单的分类问题来说,非常好的基线。尤其是后面跟着几层ReLu!(见论文:Deep Averaging Networks)
  • Window Model:对于不需要广泛上下文的问题(即适用于local问题),适合单字分类。例如POS, NER
  • CNNs:适合分类,短短语需要零填充,难以解释,易于在gpu上并行化。高效多功能
  • Recurrent Neural Networks:从认知上讲似乎合理(从左到右阅读),不适合分类(如果只是使用最后一个状态),比CNNs慢得多,适合序列标记和分类,对语言模型很好,使用注意机制可能会令人惊奇

Gated units used vertically

  • 我们在LSTMs和GRUs中看到的 gating/skipping是一个通用的概念,现在在很多地方都使用
  • 也可以使用垂直的的门
  • 实际上,关键的概念——用快捷连接对候选更新求和——是非常深的网络工作所需要的
    Lecture 11: ConvNets for NLP_第19张图片
    Batch Normalization (BatchNorm)
    [Ioffeand Szegedy. 2015. Batch normalization: Accelerating deep network training by reducing internal covariate shift. arXiv:1502.03167.]
  • 经常在CNNs中使用
  • 通过将激活量缩放为零均值和单位方差,对一个mini-batch的卷积输出进行变换
    • 这是统计学中熟悉的 Z-transform
    • 但在每组mini-batch都会更新,所以波动的影响不大
  • 使用BatchNorm使模型对参数初始化的敏感程度下降,因为输出是自动重新标度的
    • 也会让学习率的调优更简单
    • 模型的训练会更加稳定
    • 知乎有一个解释BN的回答:https://www.zhihu.com/question/38102762
      简单来说,BN的作用是客服深度神经网络难以训练的问题
  • Pytorch:nn.BatchNorm1d

1 x 1 Convolutions
[Lin, Chen, and Yan. 2013. Network in network. arXiv:1312.4400.]

  • 这个概念有意义吗?是的
  • 1x1卷积,即网络中的 Network-in-network (NiN) connections,是内核大小为1的卷积内核
  • 1x1卷积为您提供了一个跨通道的全连接的线性层
  • 它可以用于从多个通道映射到更少的通道
  • 1x 1卷积添加了额外的神经网络层,附加的参数很少,
    • 与全连接(FC)层不同,全连接(FC)层添加了大量的参数
  • 有一篇文章说明1×1卷积,挺不错的:https://zhuanlan.zhihu.com/p/40050371

CNN application: Translation
Lecture 11: ConvNets for NLP_第20张图片

  • 最早成功的神经机器翻译之一
  • 使用CNN进行编码,使用RNN进行解码
  • Kalchbrennerand Blunsom(2013) “Recurrent Continuous Translation Models” 论文地址:https://www.aclweb.org/anthology/D13-1176.pdf

Learning Character-level Representations for Part-of-Speech Tagging
Dos Santos and Zadrozny(2014)
Lecture 11: ConvNets for NLP_第21张图片

  • 对字符进行卷积以生成单词嵌入
  • 固定窗口的词嵌入被用于POS标签

Character-Aware Neural Language Models
(Kim, Jernite, Sontag, and Rush 2015)
Lecture 11: ConvNets for NLP_第22张图片

  • 基于字符的单词嵌入
  • 利用卷积、highway network和LSTM

Very Deep Convolutional Networks for Text Classification

  • Conneau, Schwenk, Lecun, Barrault. EACL 2017.
  • 出发点:序列模型(LSTMs)在NLP中占主导地位;还有CNNs、Attention等,但所有的模型基本上都不是很深,不像视觉中的深模型
  • 当我们为NLP构建一个类似视觉的系统时会发生什么
  • 从字符级开始工作
    Lecture 11: ConvNets for NLP_第23张图片
    Convolutional block in VD-CNN
    Lecture 11: ConvNets for NLP_第24张图片
  • 每个卷积块是两个卷积层,每个卷积层后面是BatchNorm和一个ReLU
  • 卷积大小为3
  • pad 以保持(或在局部池化时减半)维数

Experiments
使用大规模文本分类数据集,比NLP中经常使用的小数据集大得多
如在Yoon Kim (2014) 论文
Lecture 11: ConvNets for NLP_第25张图片
Lecture 11: ConvNets for NLP_第26张图片

  • 实验表明使用 MaxPooling 比 KMaxPooling 和 使用stride的卷积 的两种其他池化方法要更好
  • ConvNets可以帮助我们建立很好的文本分类系统
  • 较深的网络比浅网络结果要好,但更深时效果没有太大提升

RNNs are Slow …

  • RNNs是深度NLP模型中一个标准的构建块
  • 但他们并行性很差,所以很慢
  • 想法:取RNN和CNN中最好的可并行部分
  • Quasi-Recurrent Neural Networks by James Bradbury, Stephen Merity, CaimingXiong& Richard Socher. ICLR 2017

Quasi-Recurrent Neural Network

  • 尝试结合两个模型的优点
    Lecture 11: ConvNets for NLP_第27张图片
  • 时间上并行的卷积,卷积计算候选,遗忘门和输出门(使用CNN来提取大部分特征)
    Lecture 11: ConvNets for NLP_第28张图片
  • 为了利用上下文信息,QRNN将CNN中的pooling layer用dynamic average pooling来替换:(使用RNN提取序列整体特征)
    h t = f t ⨀ h t − 1 + ( 1 − f t ) ⨀ z t h_t = f_t \bigodot h_{t-1} + (1-f_t) \bigodot z_t ht=ftht1+(1ft)zt

Q-RNN Experiments: Language Modeling
James Bradbury,Stephen Merity,CaimingXiong,Richard Socher (ICLR 2017)
Lecture 11: ConvNets for NLP_第29张图片

  • batch-size越小,序列长度越长加速越多

Q-RNNs for Sentiment Analysis

  • 通常比LSTMs更好更快
    Lecture 11: ConvNets for NLP_第30张图片
  • 更具解释性,例如下图
    Lecture 11: ConvNets for NLP_第31张图片
  • 评论从117开始“not exactly a bad story”到158“I recommend this movie to everyone, even if you’ve never played the game”是积极的,从上图可视化可以看到,117-158,的隐藏层变量更浅

QRNN limitations

  • 对于字符级的LMs并不像LSTMs那样有效
    • 建模时遇到的更长的依赖关系问题
  • 通常需要更深入的网络来获得与LSTM一样好的性能
    • 当它们更深入时,速度仍然更快
    • 有效地使用深度作为真正递归的替代

Problems with RNNs & Motivation for Transformers

  • 我们希望并行化,但rnn本质上是顺序的
    Lecture 11: ConvNets for NLP_第32张图片
  • 尽管有GRUs和LSTM,RNN仍需从注意机制中获得处理长距离依赖关系的能力——状态间的路径长度随着序列的增长而增长
  • 但是如果注意力让我们接触到任何状态…也许我们不需要RNN?

总结

  • 介绍了CNN如何计算
  • 介绍了CNN如何用于处理文本中,一些概念
    • 1×1卷积:可用来不改变width和length的情况下改变channel
    • 池化:最大池化,平均池化,局部最大池化(local max pool),k-max pooling。最大池化与feature map的长度无关,故使用不同size的filter来提取不同gram的特征,然后经最大池化后拼接在一起
    • padding
    • channels:即filter的个数 = 得到的feature map的个数
    • Batch Normalization
    • 步长(stride)
    • dilation
  • dropout:训练时随机去掉某些特征,防止过拟合的一种方法
  • 我们目前的工具箱有:Bag of Vectors,Window Model,CNN,Recurrent Neural Networks。各自有不同的优点
  • Gated units:关键的想法:使用shortcut来将候选的更新加起来
    Lecture 11: ConvNets for NLP_第33张图片
    与Batch Normalization一样都可以使深度神经网络易于训练
  • 使用CNN可以做文本分类,机器翻译(2013使用CNN+RNN)
  • QRNN:结合CNN和RNN各自的优点
  • Transformers的motivation:RNN无法并行,且需要长距离依赖时还是需要使用注意力机制来获得。因此,若能使用注意力机制连接任意状态,那么能否不使用RNN?

你可能感兴趣的:(2019,CS224N)