NLP中的CNN

前言

这篇博文是笔者之前学习自然语言处理课程CS224的笔记,首发于公众号:NLP学习者

从RNN(循环网络)到CNN(卷积网络)

虽然已经学习了多个循环神经网络,但是实际上,循环神经网络不擅长于短语,因为RNN总是将整个句子输入到LSTM中,并且在RNN的最终向量中最后一个单词往往起了很大作用。

CNN的想法是从一定长度的序列中同时计算他们的表示。例如有句子“tentative deal reached to keep government open”,如果取3为序列大小,可以得到5个子序列:tentative deal reached, deal reached to,reached to keep, to keep government, keep government open。我们为每个序列计算某种表示。下面是一个2D的CNN例子图(相信读者大佬都会2D的CNN,笔者太懒就不详细介绍了hhh):
NLP中的CNN_第1张图片

1D的CNN

NLP中主要用的是1D的CNN,例如,有一个句子以及句子中每个单词对应的词向量(在卷积网络中也被称为channel)如下:
NLP中的CNN_第2张图片
  然后我们的CNN过滤器fliter的大小是3,宽度等于词向量的维度。
在这里插入图片描述
之后通过点积以及移动过滤器得到CNN卷积的结果如下:
NLP中的CNN_第3张图片
可以看出卷积之后维度从原来的7变成了5,为了保持卷积前后维度不变,通常会做zero padding,例如:
NLP中的CNN_第4张图片
从上图中可以看出,列的维度从4变成了1,这在一些情况下是不好的,因此研究人员提出了其他思路,比如,用多个filter。
NLP中的CNN_第5张图片
研究人员希望这些过滤器能以某种方式专注于不同的事物,比如第一个filter可以专注于“这种语言是不是有礼貌的?”,当遇到礼貌用语时,它会输出很高的值,人们希望会从文本中获得不同的潜在特征。

另一种研究人员经常做的操作是总结卷积网络的输出,一种做法是最大化时间池,即求一下最大值
NLP中的CNN_第6张图片
这通常是一个有用的概念,通过这个最大值可以帮助你判断这段话中是否提到了事物或礼貌问题。另外一种做法是用平均池化,这就变成了另一种语义,即求出这段话中礼貌意义的平均值。在pytorch中可以有如下实现:
NLP中的CNN_第7张图片
当得到第一次卷积的结果之后,还可以在后面增加local max pool层,即在上下两层中求max,例如:
NLP中的CNN_第8张图片
还有另一种压缩数据的方法,是一种扩张的卷积(dilated convolution),dilated convolution的思想是跳过一些行,用单独的卷积核求出值,步长取1。例如:

NLP中的CNN_第9张图片

例子

Single Layer CNN for Sentence Classification

NLP中的CNN_第10张图片
1.模型输入是multi-channels的句子词向量,词向量初始化自Google公开的word2vec,模型中multi-channel的句子表示分为两种,一种是static静态的在训练过程中不变的,另一种是随着反向传播而变化的。
2.模型用到多个大小不同的filter,每个filter都会遍历multi-channels中的所有数据,每个filter所做的变换如下:
在这里插入图片描述
3.之后执行max-pooling得到结果之后通过一个全连接层得到最终的分类结果。
4.Regularization:dropout被应用于倒数第二层,所以输出公式如下:
在这里插入图片描述

Gated units used vertically

与LSTM中的思想类似,卷积神经网络中有垂直方向的连接,有两种分别是ResNet与Highway block,模型图如下:
NLP中的CNN_第11张图片
可以看出ResNet只是将映射前的x与映射后的F(X)相加,而Highway block则是将用了两个门来控制二者权重。

Batch Normalization(BatchNorm)

BatchNorm会使你的参数搜索问题变得很容易,使神经网络对超参数的选择更加稳定,也会使你很容易的训练甚至是深层网络。
首先归一化输入可以使学习问题的轮廓变成更圆的东西,更易于算法优化。
NLP中的CNN_第12张图片
上面的例子是对于logistic回归和神经网络的归一化输入特征。当训练更深的模型时,比如:
NLP中的CNN_第13张图片
当得到a2想计算a3的时候,我们可以对a2进行归一化来更快速地计算w3,b3。
想比于归一化a,在实践中更普遍的做法是归一化z(z是a通过一个变换得到比如relu等),公式如下:
NLP中的CNN_第14张图片
公式中最后一个γ与β是一个可以学习的参数,它的作用是可以指定分布的均值和方差。比如,对于sigmod激活函数,你不想值全都集中在0附近,你想让值具有较大的方差,这时γ与β就可以体现出作用。
BatchNorm的作用是它适用的归一化过程不只只是输入层,甚至同样适用于神经网络的深度隐含层


最后欢迎大家关注我的公众号:NLP学习者
NLP中的CNN_第15张图片

你可能感兴趣的:(自然语言处理)