Why CNNs?
之前的RNN系统中(不利用Attention的情况下),通常我们用最后的hidden vector来表示整个句子的所有信息,这就造成了信息的瓶颈。而CNN处理的思路是对于所有的子短语,都计算一个特征向量,最后再根据具体的任务将它们结合在一起。
卷积神经网络接收词向量的序列,并首先为所有子短语创建短语向量,而不仅仅是语法正确的短语。然后,CNNs将他们分组完成手头的任务。
What is Convolution?
对于一维向量 f 和 g ,它们在位置i的卷积为 。其中 g被称作filter或kernel即卷积核,m是卷积核的大小。而二维的情况就是对于矩阵 F ,G,在位置i,j的卷积 。多维向量的情况以此类推。
下图显示了二维卷积的情况。9×9 的绿色矩阵表示关注的主矩阵 f 。3×3 的红色矩阵表示 filter g,
Single layer CNN
对于NLP,可以看做是二维向量的情况。假设我们输入的每个word vector 即word embedding空间维度为k,而包含n个单词的句子则是 的二维向量 ,卷积核为二维向量 ,h是一个超参数,可以看做是卷积窗口的大小。而每个未知的卷积的输出就是 ,所有的输出可以组合成输出向量 。
Multiple-Filters
当然,我们也可以有多个不同的卷积核,分别代表不同特征的提取,它们的维度也可以不同,分别代表unigram, bigram,trigram, 4-gram等的提取。每个过滤器都有一个关联的最大池化层。因此,CNN层的最终输出将是一个长度等于过滤器数量的向量.
1 x 1 Convolutions
1x1卷积,即网络中的 Network-in-network (NiN) connections,是内核大小为1的卷积内核。它提供了一个跨通道的全连接的线性层,可以用于从多个通道映射到更少的通道。1x 1卷积添加了额外的神经网络层,附加的参数很少,与全连接(FC)层不同,全连接(FC)层添加了大量的参数。(1X1卷积核到底有什么作用)
Pooling¶
CNN中还有常用的操作是pooling,其作用是利用附近元素的统计信息来代替其原有的值,其目的是可以使结果在对于输入的小量改变的干扰下保持稳定,常用的有max pooling(选择最大值), average pooling(平均值),k-max pooling(与max pooling类似,但是选择k个最大的值)等。
我们也可以使用最小池化,因为通常我们使用ReLU作为非线性激活函数而ReLU的下界是0。因此,一个最小池化可能会被ReLU覆盖,所以我们几乎总是使用最大池化而不是最小池化。
另外值得一提的是,对于较深的CNN,通常用Batch Normalization来进行优化.
Multiple-Channels
多通道,就是CNN中的一次性卷积要处理的多少组数据。比如图像中,如果是只有灰度值的图像就只有一个通道,如果是彩色图片的话,就会RGB三个图像(也就是三个通道)。NLP中就一个句子长度 * embed维度组成的一个二维输入,刚开始我们用的都是单通道的。如果单词只出现在测试集中而没有出现在训练集上,虽然出现在训练集中的其他语义相关的单词向量将从它们的起始点显著移动,但是这些单词仍将处于它们的初始点。神经网络将专门用于已更新的输入。因此,我们在使用这些单词的句子中会表现得很差。
在NLP上使用多通道的一种方法是维护两组单词向量,一组“静态”(没有梯度流,词向量保持不变)和一组“动态”(通过SGD更新词向量),它们最初是一样的(GloVe 或者其他初始化)。这两个集合同时作为神经网络的输入。因此,初始化的词向量在神经网络的训练中始终起着重要的作用。在测试中给出看不见的单词可以依赖预训练词向量,提高正确理解的几率。
有几种处理这两个channel的方法,最常见的是在CNN中使用之前对它们进行平均。另一种方法是将CNN过滤器的长度加倍。
Quasi-Recurrent Neural Network
我们能够将RNN的对上下文信息的利用与CNN的并行计算快速的优点结合起来呢?一个这方面的研究是QRNN(Quasi RNN)。
参考:https://zhuanlan.zhihu.com/p/68333187
http://web.stanford.edu/class/cs224n/readings/cs224n-2019-notes08-CNN.pdf