资源链接:https://www.bilibili.com/video/BV1r4411
想看书吗
![2019年CS224N课程笔记-Lecture 11: ConvNets for NLP_第1张图片](http://img.e-com-net.com/image/info8/6c8f22825e6e4222b9b27edc7ab1beb1.jpg)
推荐了一本书~可以自己去了解了解
正课内容
本周主要是CNN专题
从RNNs到卷积神经网络
递归神经网络不能捕获没有前缀上下文的短语
经常在最终向量中捕获太多的最后单词,如下图
![2019年CS224N课程笔记-Lecture 11: ConvNets for NLP_第2张图片](http://img.e-com-net.com/image/info8/b9db960bf69546c68c1b1e898404c496.jpg)
例如,如上图,softmax通常只在最后一步计算
卷积网络的主要想法:
如果我们为每个可能的子序列计算一定长度的向量呢?例如:“tentative deal reached to keep government open” 计算的向量为tentative deal reached, deal reached to, reached to keep, to keep government, keep government open
不管短语是否合乎语法,在语言学上或认知上看似是合理的,然后就是如何将他们它们进行分组~(下面会讨论如何分组)
一维离散卷积一般为:![2019年CS224N课程笔记-Lecture 11: ConvNets for NLP_第3张图片](http://img.e-com-net.com/image/info8/b801c5f8a46242909732d24798ad1622.jpg)
卷积可以很好的从图像中提取特征~
2维的例子:
![2019年CS224N课程笔记-Lecture 11: ConvNets for NLP_第4张图片](http://img.e-com-net.com/image/info8/f87b9287c1414b56b479b8671462a510.jpg)
![2019年CS224N课程笔记-Lecture 11: ConvNets for NLP_第5张图片](http://img.e-com-net.com/image/info8/880a229de5994a168fa1716ed1a0bae2.jpg)
可以自己计算一下试试~
- 黄色的是卷积核扫描的区域,为什么有的*0有的*1,这个其实就是卷积核参数(初始是随机的,然后会训练得出的)
- 绿色的是输入(其实就这个大矩阵)
- 红色的是卷积后的矩阵
上述的2D卷积可能是我们在视觉中了解的~(上述其实就对图片的卷积~)
下面继续来看1D卷积,也就是人们在文本数据中使用的
![2019年CS224N课程笔记-Lecture 11: ConvNets for NLP_第7张图片](http://img.e-com-net.com/image/info8/5a8510509bf34f5a9c0e5c5d902f8749.jpg)
卷积核是3个字*词向量长度,也就是连续3个字给卷积到一起,一个卷积核卷积后得到一个通道的数值
在图像卷积中,我们经常补0,实际上,在文本中也可以这么做,如下图:
![2019年CS224N课程笔记-Lecture 11: ConvNets for NLP_第8张图片](http://img.e-com-net.com/image/info8/d12fe3a7504047ecb3dd83366641beb7.jpg)
在图像处理中也经常多个卷积核,在NLP中也可以,如下图:n卷积核卷积后会产生n个通道的卷积后向量,关注的文本潜在特征也不同
![2019年CS224N课程笔记-Lecture 11: ConvNets for NLP_第9张图片](http://img.e-com-net.com/image/info8/4a812da9a52645a5851c6ea8c995797e.jpg)
(max p其实就是最大池化,通过 max pooling over time,获得最大的激活值)
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,可以减少计算量~
![2019年CS224N课程笔记-Lecture 11: ConvNets for NLP_第10张图片](http://img.e-com-net.com/image/info8/7f65775fcf544c7d9b192203606a22c2.jpg)
看一下步伐=1和=2的对比,通过数据对比我们可以发现,对步伐=1的每两行做最大池化与步伐=2是等价的
![2019年CS224N课程笔记-Lecture 11: ConvNets for NLP_第11张图片](http://img.e-com-net.com/image/info8/0824af78b7c6437197a6edcb40a2167a.jpg)
上述说的每两行做一次最大池化,被称为步长为2的局部最大池化
再看一个叫k-max pooling over time的概念,直接看图就能明白(其实就间隔k取最大值)
![2019年CS224N课程笔记-Lecture 11: ConvNets for NLP_第12张图片](http://img.e-com-net.com/image/info8/f3801de5f87b4580acbb4de5b25472b9.jpg)
还有一种扩张卷积(思想就是跳过某些行做卷积),如下:(使用两个步长,右下角两个是卷积核,取1,3,5与两个矩阵做卷积,得出0.3和0.0这两个数值,后面的同上)
![2019年CS224N课程笔记-Lecture 11: ConvNets for NLP_第13张图片](http://img.e-com-net.com/image/info8/a0267cecedda4040974f9eb6f98e74ad.jpg)
可以在第一步的卷积中将卷积核从3改为5,即可实现这样的效果,既保证了矩阵很小,又保证了一次卷积中看到更大范围的句子(这一部分可以参考感受野的概念,简单说,之前的时候一行代表3个词,现在可以代表5个词,而且卷积后更小)
总结:
- 在CNN中,一次能看一个句子的多少内容是很重要的概念,一定要搞懂
- 可以使用更大的filter、扩张卷积或者增大卷积深度(层数)
用于句子分类的单层CNN
- 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)
- 目标:句子分类
- 主要是句子的积极或消极情绪
- 其他任务
- 判断句子主观或客观
- 问题分类:问题是关于什么实体的?关于人、地点、数字、……
- 一个卷积层和池化层的简单使用
- 词向量:
![2019年CS224N课程笔记-Lecture 11: ConvNets for NLP_第14张图片](http://img.e-com-net.com/image/info8/34877ad074c9495e9fdc4460336137df.jpg)
- 句子:
(向量连接)
- 连接:
范围内的句子 (对称更常见)
- 卷积核:
(作用范围为 h 个单词的窗口)
- 注意,filter是向量,size 可以是2,3或4
单层CNN
- 过滤器 W 应用于所有可能的窗口(连接向量)
- 为CNN层计算特征(一个通道)
![](http://img.e-com-net.com/image/info8/3ff6eff6d05b48dc811d0ef5a7272b9f.jpg)
- 所有可能的长度为 h 的窗口
![](http://img.e-com-net.com/image/info8/2675a72c0a1842769f0b910b065cc1cc.jpg)
- 结果是一个 feature map
![](http://img.e-com-net.com/image/info8/e39779265372431dbee3a8503810c0c6.jpg)
![2019年CS224N课程笔记-Lecture 11: ConvNets for NLP_第16张图片](http://img.e-com-net.com/image/info8/f946bdac639e47fda7c245683613e892.jpg)
Pooling and channels
- 池化:max-over-time pooling layer/最大池化
- 想法:捕获最重要的激活(maximum over time)
- 从feature map中
![](http://img.e-com-net.com/image/info8/9db2eff67c8049268d6fb5b3efb43980.jpg)
- 池化得到单个数字
![](http://img.e-com-net.com/image/info8/edfb87f707974d47801c2d785d69dff6.jpg)
- 使用多个过滤器权重 W
- 不同窗口大小 h 是有用的
- 由于最大池化
,和c的长度无关
![](http://img.e-com-net.com/image/info8/a7ce09e8d1ba490c8bede8550815331c.jpg)
- 所以我们可以有一些 filters 来观察 unigrams, bigrams, tri-grams, 4-grams,等等
Multi-chanenl input idea
![2019年CS224N课程笔记-Lecture 11: ConvNets for NLP_第17张图片](http://img.e-com-net.com/image/info8/f0c1032b97184cf697b365119908e1b8.jpg)
- 使用预先训练的单词向量初始化(word2vec或Glove)
- 从两个副本开始
- 只有一个副本进行了反向传播,保持其他“静态”
- 两个通道集都在最大池化前添加到ci
Classificantion after one CNN layer
![2019年CS224N课程笔记-Lecture 11: ConvNets for NLP_第18张图片](http://img.e-com-net.com/image/info8/540a8cf2ec4d47c4b9913672b0dd5d91.jpg)
- 首先是一个卷积,然后是一个最大池化
- 为了获得最终的特征向量
![2019年CS224N课程笔记-Lecture 11: ConvNets for NLP_第19张图片](http://img.e-com-net.com/image/info8/b03cc563c83043bba97899cecf79406a.jpg)
- 假设我们有 m 个 filter W
- 使用100个大小分别为3、4、5的特征图
- 最终是简单的 softmax layer
![2019年CS224N课程笔记-Lecture 11: ConvNets for NLP_第20张图片](http://img.e-com-net.com/image/info8/932168a501d441529b4d79e6daed6410.jpg)
![2019年CS224N课程笔记-Lecture 11: ConvNets for NLP_第21张图片](http://img.e-com-net.com/image/info8/36e0a96f8bd2473ca2d0d2875673b23e.jpg)
用三个不同的过滤器进行特征提取,在此提取变成6个一块,最后softmax进行概率估计~秀~
具体过程如下:
- 输入长度为 7 的一句话,每个词的维度是 5 ,即输入矩阵是 7*5
- 使用不同的filter_size : (2,3,4),并且每个size都是用两个filter,获得两个channel的feature,即共计6个filter
- 对每个filter的feature进行1-max pooling后,拼接得到 6 维的向量,并使用softmax后再获得二分类结果
正规化
- 使用 Dropout : 使用概率 p (超参数)的伯努利随机变量(只有0 1并且p是为1的概率)创建mask向量 r
- 训练过程中删除特征
![](http://img.e-com-net.com/image/info8/9147842496bc48389d38c48b083c800d.jpg)
- 解释:防止互相适应(对特定特征的过度拟合)(Srivastava, Hinton, et al. 2014)
- 在测试时不适用dropout,使用概率p缩放最终向量
![](http://img.e-com-net.com/image/info8/6df03198fb2c4052b0d16ddf1fee284c.jpg)
- 此外:限制每个类的权重向量的L2 Norm(softmax 权重
的每一行)不超过固定数 s (也是超参数)
- 如果
,则重新缩放为
(关于Dropout建议自己查阅一下,课程将的不是很细)
Kim(2014)的所有超参数
![2019年CS224N课程笔记-Lecture 11: ConvNets for NLP_第22张图片](http://img.e-com-net.com/image/info8/29fb1784d9124b62afc9d4f76ec1ab18.jpg)
问题的比较
- Dropout提供了2 - 4%的精度改进
- 很多比较系统没有使用Dropout就已过时了,如果使用的话可能获得更好的效益
- 仍然被视为一个简单架构的显著结果(比较建议所有模型使用)
- 与我们在前几节课中描述的窗口和RNN架构的不同之处:池化、许多过滤器和dropout
- 这些想法中有的可以被用在RNNs中
模型比较:我们成长中的工具箱
- Bag of Vectors :对于简单的分类问题,这是一个非常好的基线。特别是如果后面有几个ReLU层(See paper: Deep Averaging Networks)
- Window Model :对于不需要广泛上下文的问题(即适用于local问题),适合单字分类。例如POS, NER
- CNNs :适合分类,较短的短语需要零填充,难以解释,易于在gpu上并行化
- RNNs :从左到右的认知更加具有可信度,不适合分类(如果只使用最后一种状态),比CNNs慢得多,适合序列标记和分类以及语言模型,结合注意力机制时非常棒,RNN对序列标记和分类之类的事情有很好的效果,以及语言模型预测下一个单词,并且结合注意力机制会取得很好的效果,但是对于某个句子的整体解释,CNN做的是更好的(原因一开始也说了)
Gated units used vertically
(主要讨论了门控结构)
- 我们在LSTMs和GRUs中看到的门/跳过是一个普遍的概念,现在在很多地方都使用这个概念(对于梯度消失很有帮助)
- 您还可以使用垂直的门(下面两个图是它很成功的两个样例)
- 实际上,关键的概念——用快捷连接对候选更新求和——是非常深的网络工作所需要的
![2019年CS224N课程笔记-Lecture 11: ConvNets for NLP_第23张图片](http://img.e-com-net.com/image/info8/71cba9c0dd654b98a154fc8406e18cc3.jpg)
(第一个比较简单,仅仅是跳转,也被称为残差块,用于剩余网络,也被称为ResNets,第二个多个T门和C门进行控制)
注:用于conv的pad,所以添加时大小是相同的
批量标准化
- 常用于 CNNs
- 通过将激活量缩放为零均值和单位方差,对一个mini-batch的卷积(小批量的卷积)输出进行变换
- 这是统计学中熟悉的 Z-transform
- 但在每组mini-batch都会更新,所以波动的影响不大
- 使用BatchNorm使模型对参数初始化的敏感程度下降,因为输出是自动重新标度的
- 可以使用PyTorch: nn.BatchNorm1d
1 x 1 Convolutions
- 这个概念有意义吗?是的,非常有意义
- 1x1卷积,即网络中的 Network-in-network (NiN) connections,是内核大小为1的卷积内核
- 1x1卷积为您提供了一个跨通道的全连接的线性层
- 它可以用于从多个通道映射到更少的通道(这一点非常重要~)
- 1x 1卷积添加了额外的神经网络层,附加的参数很少,
- 与全连接(FC)层不同,全连接(FC)层添加了大量的参数
CNN应用:翻译
![2019年CS224N课程笔记-Lecture 11: ConvNets for NLP_第24张图片](http://img.e-com-net.com/image/info8/98f0c7bdd27f4420ae2285099dcfbfcc.jpg)
- 最早成功的神经机器翻译之一
- 使用CNN进行编码(蓝色部分),使用RNN进行解码(黄色部分)
- Kalchbrenner和Blunsom(2013)的“递归连续翻译模型”论文,第一个神经机器翻译的论文
词性标注中字符级表示的学习
Dos Santos and Zadrozny(2014)
![2019年CS224N课程笔记-Lecture 11: ConvNets for NLP_第25张图片](http://img.e-com-net.com/image/info8/a1c54a870e564a2d92a89439dec6e471.jpg)
- 对字符进行卷积以生成单词嵌入
- 固定窗口的词嵌入被用于POS标签
(详细的字词模型将会在后面课程中进行介绍~)
字符感知神经语言模型
![2019年CS224N课程笔记-Lecture 11: ConvNets for NLP_第26张图片](http://img.e-com-net.com/image/info8/c08213b640d045ffa2b4557141ad1fc7.jpg)
- 基于字符的单词嵌入
- 利用卷积、highway network和LSTM
用于文本分类的非常深的卷积网络
- Conneau, Schwenk, Lecun, Barrault. EACL 2017.
- 出发点:序列模型(LSTMs)在NLP中占主导地位;还有CNNs、注意力等等,但是所有的模型基本上都不是很深入——不像计算机视觉中的深度模型(因为跳跃链接的出现,导致可以更深~)
- 当我们为NLP构建一个类似视觉的系统时会发生什么(很多视觉系统可以几百层,吓人~)
- 从字符级开始工作
(虽然这四个人这么声称在在弄非常深的网络,但是实际上他们还是用的3层,尴尬不)
很深的一个网络:
![2019年CS224N课程笔记-Lecture 11: ConvNets for NLP_第27张图片](http://img.e-com-net.com/image/info8/f7ead4dcd5754e758a70a2b256d7b5c0.jpg)
对于图片输入,大小一般是固定的,对于文字也是一样,输入是固定长度(实际上文本不一定是固定长度的,所以多了就砍掉,少了就补0)
Convolutional block in VD-CNN
![2019年CS224N课程笔记-Lecture 11: ConvNets for NLP_第28张图片](http://img.e-com-net.com/image/info8/84377b848f444dd5b7e03698bc7b07b7.jpg)
- 每个卷积块是两个卷积层,每个卷积层后面跟着BatchNorm和一个ReLU
- 卷积大小为3
- pad 以保持(或在局部池化时减半)维数
大数据集样例
![2019年CS224N课程笔记-Lecture 11: ConvNets for NLP_第29张图片](http://img.e-com-net.com/image/info8/e15e76985eb24f51a1c9552ffac28b2c.jpg)
使用大文本分类数据集,比NLP中经常使用的小数据集大得多,如Yoon Kim(2014)的论文
以上数据均为错误率,所以越低越好,深度网络会取得更好的结果,残差层取得很好的结果,但是深度再深时并未取得效果提升
实验表明使用 MaxPooling 比 KMaxPooling 和 使用stride的卷积 的两种其他池化方法要更好
ConvNets可以帮助我们建立很好的文本分类系统
RNNs are Slow ...
RNNs是深度NLP的一个非常标准的构建块,但它们的并行性很差,因此速度很慢,解决想法:取RNNs和CNNs中最好且可并行的部分
Quasi-Recurrent Neural Networks by James Bradbury, Stephen Merity, CaimingXiong& Richard Socher. ICLR 2017(该论文研究了上述问题,解决方法如下:Quasi-Recurrent Neural Network)
Quasi-Recurrent Neural Network
努力把两个模型家族的优点结合起来~(RNN、CNN)
![2019年CS224N课程笔记-Lecture 11: ConvNets for NLP_第30张图片](http://img.e-com-net.com/image/info8/3798b8466e3d42cd8d74191d17a5c401.jpg)
上图内容:时间上并行的卷积,卷积计算候选,遗忘门和输出门
![2019年CS224N课程笔记-Lecture 11: ConvNets for NLP_第31张图片](http://img.e-com-net.com/image/info8/9a7f30b459e04c199b8f47770b01777a.jpg)
跨通道并行性的逐元素的门控伪递归是在池化层中完成的
![](http://img.e-com-net.com/image/info8/d80414c48c784ab6bec31de73a9c6a62.jpg)
Q-RNN Experiments: 语言模型
James Bradbury,Stephen Merity,CaimingXiong,Richard Socher (ICLR 2017)
![2019年CS224N课程笔记-Lecture 11: ConvNets for NLP_第32张图片](http://img.e-com-net.com/image/info8/0ac5a9d83b304876949180bbc11eccba.jpg)
![2019年CS224N课程笔记-Lecture 11: ConvNets for NLP_第33张图片](http://img.e-com-net.com/image/info8/771f8e284fcc479a8ad7c378d390bd03.jpg)
用于情绪分析的Q-RNNs
通常比LSTMs更好更快,更加的可解释,例如:
QRNN限制
对于字符级的LMs并不像LSTMs那样有效 ,建模时遇到的更长的依赖关系问题
通常需要更深入的网络来获得与LSTM一样好的性能,当它们更深入时,速度仍然更快,有效地使用深度作为真正递归的替
(下次将会讨论变压器模型)