斯坦福CS224n NLP课程【十三】——卷积神经网络

从RNN到CNN

只能捕获上下文左侧的短语,RNN无法利用未来的特征预测当前单词,就算是bi-RNN,也不过是双向重蹈覆辙而已。经常把过多注意力放到最后一个单词上。
斯坦福CS224n NLP课程【十三】——卷积神经网络

比如,如果只想得到my birth的向量,RNN就无能为力了,因为它捕捉的是从左到右的“上文”。与此对应,softmax也是加在最后一个单词上的

CNN的解决思路说来也很简单粗暴,那就计算相邻的n-gram,不管它到底是不是真正的短语,眉毛胡子一把抓地为它们计算向量。

什么是卷积:

定义在两个矩阵上的函数,生成另一个矩阵(也许称作tensor会更好)。对一维矩阵(向量来讲),可以形式化地描述如下

 斯坦福CS224n NLP课程【十三】——卷积神经网络

 这里2M是过滤器的大小。在计算机视觉中,卷积可以提取诸如物体边缘之类的特征。一个很棒的可视化:

斯坦福CS224n NLP课程【十三】——卷积神经网络

 单层CNN

假设词向量x_i∈R^k,那么n个单词的句子可视作词向量(列向量)的按列拼接x_1:n=x_1⊕x_2...⊕x_n 串联

对于h个单词上的卷积过滤器 w∈R^h*k ,比如k=2, n=5, h=3,下图演示了NLP中的单层CNN工作过程,n为总的单词数:

斯坦福CS224n NLP课程【十三】——卷积神经网络

也就是说,每相邻3个词语的组合对应卷积结果中的一个标量。卷积过滤器的权值w也是一个向量,最终得到每个卷积结果 c_i=f(w^T*x_(i:i|h−1)+b) ,组合得到向量特征图:c=[c_1,c_2...c_n−h+1]∈R^(n−h+1)。

斯坦福CS224n NLP课程【十三】——卷积神经网络

 对最后两个词语,由于不够长(h=3),常见的技巧是补零:

斯坦福CS224n NLP课程【十三】——卷积神经网络

一个过滤器就是一个向量,卷积运算的子运算实际上就是与某个n-gram的内积,内积代表相似性。于是卷积核实际上在挑选与自己相似的那种pattern,比如正面情感的n-gram。

池化:pooling layer

卷积不是最终目的,最终目的是将卷积结果输入到其他网络中去。在不补零的情况下,卷积结果c中有n−h+1个数,与n有关;而我们想要一个定长的输入。一个解决办法是max-pooling,输入是CNN结果c∈Rn−h−1,输出是一个标量c^(c hats)=max{c},其中c^ ∈R。

斯坦福CS224n NLP课程【十三】——卷积神经网络

当然也可以用min,不过ReLU时经常结果是0,所以没什么意义。max的意义是,这个过滤器就是要过滤出最强烈的那个n-gram,作为整段话的中心意思。为了得到多个卷积特征,简单地使用多个卷积核(不需要大小一致),然后把池化结果拼接起来。

斯坦福CS224n NLP课程【十三】——卷积神经网络

另外,有一个关于词向量的技巧。如果任由梯度流入词向量,则词向量会根据分类任务目标而移动,丢失语义上泛化的相似性。解决办法是用两份相同的词向量,称作两个通道(channel)。一个通道可变,一个通道固定。将两个通道的卷积结果输入到max-pool中。

斯坦福CS224n NLP课程【十三】——卷积神经网络

 分类:

斯坦福CS224n NLP课程【十三】——卷积神经网络

 图示:

斯坦福CS224n NLP课程【十三】——卷积神经网络

 双通道词向量=> 多个卷积核得到的feature map(红色是bi-gram,橙色是tri-gram)=>池化得到最终特征=>softmax分类输出。

Dropout

想法:1.随机掩盖或者丢弃或设置为0在一些你已经得到的特征权重z上 2.创建一个掩码矢量r,基本上随机Bernoulli 伯努利分布变量将概率p设置为1 

斯坦福CS224n NLP课程【十三】——卷积神经网络

 防止不同类型的特征相互适应

r中的元素满足参数p的伯努利分布,最终特征向量相当于被缩放了:

斯坦福CS224n NLP课程【十三】——卷积神经网络

直觉上,也相当于在数据上采样子集训练模型,然后平均起来(ensemble),通常可以带来2-4%的效果提升。

这些训练trick都相当于给GD引入噪声,让其不再肯定地瞄准一个局部最优,而是尽可能地探索尽可能多的landscape。以前挺有希望的高斯过程调参也不流行了,人们觉得随机采样超参数空间就已经惊人地好用了。

斯坦福CS224n NLP课程【十三】——卷积神经网络

一般模型里面的超参数非常多,就算给定一组超参数,多数情况下也无法复现结果。往好的方向解释是作者试验了很多次,终于碰巧撞上了更好的局部最优点,而我们都没撞上去。实验结果:

斯坦福CS224n NLP课程【十三】——卷积神经网络

 双通道不显著地带来了一点提升。这张对比表也暴露了深度学习学术界公开的“黑幕”,没有人把每个训练trick单独拎出来报告提升比;2014年之前几乎没人用Dropout,可最新发表的论文就是要跟它们比Dropout,却不愿把它们加入Dropout重新实现一遍(可能费时费力还不讨好吧,万一被baseline反杀不就完蛋啦)。事实上,这个结果只能说明Dropout比不Dropout有2-4%的提升,不能说明CNN多有效。

CNN变形

可以变换很多花样,比如每个feature map是变大了还是变小了,池化技巧等等。

斯坦福CS224n NLP课程【十三】——卷积神经网络

 CNN应用:

机器翻译 第一个神经网络机器翻译模型吧,用CNN做encoder,RNN做decoder:

斯坦福CS224n NLP课程【十三】——卷积神经网络

 模型比较:

  • Bag of Vectors:对分类问题来讲非常棒的基线模型,接几层ReLU甚至可能打败CNN。
  • Window Model:对单个单词的分类来讲挺好,但不适用于需要更多上下文的任务。
  • CNN:适合分类,不清楚如何做短语级别的标注,对短文本需要padding,难以用NLP的视角解释,容易GPU并行化
  • RNN:从左读到右,最符合认知。不是分类任务的最佳选择,比CNN慢,但可以做序列标注。

Quasi-RNN

CNN和RNN的混血儿,在时序数据上做卷积:

斯坦福CS224n NLP课程【十三】——卷积神经网络

 比LSTM速度要快,效果要好:

斯坦福CS224n NLP课程【十三】——卷积神经网络