0%

cs224n-8.NLP中的CNN

从RNN到CNN

RNN的输入是一个完整的序列,其每一个时间步的输出均受到之前时间步的影响,RNN最终捕捉的是整个序列的特征信息,而一些NLP问题可能更加关注于句子的局部信息(例如本文分类),这一点是CNN的强项。

CNN解决NLP问题的出发点

按照窗口大小,在原序列上进行滑动,获得不同相同长度的子序列(语义可能无关),对于这些个子序列分别计算向量信息

  • 忽略了语法和语义信息,只是距离上的临近
  • 没有RNN的语法语义上的说服性(你就这样随便划分,提取出来的向量能有用?)

NLP中的CNN类似于图像处理中的多通道一维卷积问题(conv1d)

  • 同样通过增加空向量,实现padding操作
  • 使用多个卷积核,实现多通道输出
  • pooling over time,k-max pooling over time,dilation pooling

Batch Normalization

解释来自 Batch Normalization详解

作为网络的一层,对输入的一个batch进行标准化处理(减均值,除以方差),能够有效的降低深度网络的学习难度

batch分布不断变化导致模型拟合偏差

  • 每次梯度下降根据输入batch的分布计算,或者说拟合的是输入的分布
  • 不同batch分布不同,导致每次拟合不断改变方向(类似于无头苍蝇),导致学习速率减慢
  • 在机器学习或者浅层模型中,这种问题并不严重,而在深度网络中,每一层都在进行着(无头苍蝇拟合),为了避免震荡,必须将学习率设置的小一些(Internal Covariate Shift)。

BN的主要操作:

  1. 对batch数据进行标准化操作(减均值,除以方差)
    • 这一步的参数是由输入batch决定的不需要学习
  2. 对标准化后的数据进行平移和放缩(修改均值,和方差)
    • 平移和放缩的量由网络学习得到,即batch分布的均值和方差由学习得到

BN带来的好处:

  1. 所有变换均为线性变换,反向传播求导较为简单
  2. 可以使用更大的学习率
  3. 权重的大小和初始化值不再重要,bias也可以设置为0

CNN的应用

Translation

使用cnn作为encoder,rnn作为decoder

使用cnn实现深度nlp文本分类系统

Quasi-Recurrent Neural Network

Q-RNN Experiments: 语言模型