上海前十名广告公司,抖音seo搜索优化,网站空间域名每年都得交吗,海南省海口市网站建设如今深度学习已经成为NLP领域的标配技术#xff0c;在图像中大为成功的卷积神经网络#xff08;CNN#xff09;也开始广泛渗透到文本分类、机器翻译、机器阅读等NLP任务中。但是#xff0c;在ACL2017以前#xff0c;word-level的文本分类模型#xff08;以单词为语义单位… 如今深度学习已经成为NLP领域的标配技术在图像中大为成功的卷积神经网络CNN也开始广泛渗透到文本分类、机器翻译、机器阅读等NLP任务中。但是在ACL2017以前word-level的文本分类模型以单词为语义单位自2014Kim等人提出的TextCNN模型后就没有再出现过显著有效的CNN系模型尤其是深层模型。 图1 TextCNNShallowCNN模型而在2017年的ACL上有这么一篇文章Deep Pyramid Convolutional Neural Networks for Text Categorization [1]论文中提出的深层金字塔卷积网DPCNN是严格意义上第一个word-level的广泛有效的深层文本分类卷积神经网其性能表如下 当然这篇论文里还使用了two-view embedding来进一步提升模型性能不过从模型性能上纵向比较来看其也比经典的TextCNN表格第二行ShallowCNN有了明显提高在Yelp五分类情感分类任务中提升了近2个百分点。也是第一次真正意义上证明了在word-level的文本分类问题上深层CNN依然是有想象空间的。
好啦直接搬来DPCNN、ShallowCNN、ResNet的对比图正文开始 图2 DPCNN、TextCNN与ResNetRegion embedding
从图中的a和c的对比可以看出DPCNN与ResNet差异还是蛮大的。同时DPCNN的底层貌似保持了跟TextCNN一样的结构这里作者将TextCNN的包含多尺寸卷积滤波器的卷积层的卷积结果称之为Region embedding意思就是对一个文本区域/片段比如3gram进行一组卷积操作后生成的embedding。
对一个3gram进行卷积操作时可以有两种选择一种是保留词序也就是设置一组size3*D的二维卷积核对3gram进行卷积其中D是word embedding维度还有一种是不保留词序即使用词袋模型即首先对3gram中的3个词的embedding取均值得到一个sizeD的向量然后设置一组sizeD的一维卷积核对该3gram进行卷积。显然TextCNN里使用的是保留词序的做法而DPCNN使用的是词袋模型的做法DPCNN作者argue前者做法更容易造成过拟合后者的性能却跟前者差不多其实这个跟DAN网络Deep averaging networks中argue的原理和结论差不多有兴趣的可以下拉到下一部分的知乎传送门中了解一下。
卷积层or全连接层
产生region embedding后按照经典的TextCNN的做法的话就是从每个特征图中挑选出最有代表性的特征也就是直接应用全局最大池化层max-over-time-pooling layer这样就生成了这段文本的特征向量假如卷积滤波器的size有345这三种每种size包含100个卷积核那么当然就会产生3*100幅特征图然后将max-over-time-pooling操作应用到每个特征图上于是文本的特征向量即3*100300维。
但是显然TextCNN这样做会有很严重的问题诶这样做的意义本质上与词袋模型含ngramweightingNB/MaxEnt/SVM的经典文本分类模型没本质区别只不过one-hot表示到word embedding表示的转变避免了词袋模型遭遇的数据稀疏问题罢了。可以说TextCNN本质上收益于词向量的引入带来的“近义词有相近向量表示”的bonus同时TextCNN恰好可以较好的利用词向量中的知识近义关系罢了。这意味着经典模型里难以学习的远距离信息如12gram在TextCNN中依然难以学习。那么这些长距离复杂模式如何让网络学习到呢
显然要么加深全连接层要么加深卷积层。加深哪个更好呢小夕埋下了一个伏笔哦答案就在小夕这个知乎回答里
卷积层和分类层哪个更重要
等长卷积
在得到Region embedding后为了避免后续想象太抽象我们不妨还是把Region embedding看成word embedding假想为交给网络后面的就是word embedding序列哦。
首先交代一下卷积的一个基本概念——等长卷积。我们在文本分类里最常用的可能是窄卷积输入序列长度为seq_len卷积核大小为n的话窄卷积后的输出序列的长度就是seq_len-n1。而等长卷积顾名思义就是输出序列的长度等于输入序列长度seq_len。没有想像出来的同学自行Google一下哦就不展开讲啦。
那么对文本或者说对word embedding序列进行等长卷积的意义是什么呢
既然输入输出序列的位置数一样多我们将输入输出序列的第n个embedding称为第n个词位那么这时size为n的卷积核产生的等长卷积的意义就很明显了那就是将输入序列的每个词位及其左右((n-1)/2)个词的上下文信息压缩为该词位的embedding也就是说产生了每个词位的被上下文信息修饰过的更高level更加准确的语义。
好回到DPCNN上来。我们想要克服TextCNN的缺点捕获长距离模式显然就要用到深层CNN啦。那么直接等长卷积堆等长卷积可不可以呢
显然这样会让每个词位包含进去越来越多越来越长的上下文信息但是这样效率也太低了喂显然会让网络层数变得非常非常非常深这样笨拙的操作怎么能有呢哼。不过既然等长卷积堆等长卷积会让每个词位的embedding描述语义描述的更加丰富准确那么当然我们可以适当的堆两层来提高词位embedding的表示的丰富性。
所以region embedding层这里假想为word embedding层对应序列为“小娟 姐姐 带来 的 抹茶 青团 好 好吃 哦”之上就可以如图3这样设计啦 图3固定Feature Map的数量
在表示好每个词位的语义后其实很多邻接词或者邻接ngram的词义是可以合并的例如“小娟 姐姐 人 不要 太好”中的“不要”和“太好”虽然语义本来离得很远但是作为邻接词“不要太好”出现时其语义基本等价为“很好”这样完全可以把“不要”和“太好”的语义进行合并哇。同时合并的过程完全可以在原始的embedding space中进行的毕竟原文中直接把“不要太好”合并为“很好”是很可以的哇完全没有必要动整个语义空间。
而实际上相比图像中这种从“点、线、弧”这种low-level特征到“眼睛、鼻子、嘴”这种high-level特征的明显层次性的特征区分文本中的特征进阶明显要扁平的多即从单词1gram到短语再到3gram、4gram的升级其实很大程度上均满足“语义取代”的特性。而图像中就很难发生这种”语义取代“现象例如“鼻子”的语义可以被”弧线“的语义取代嘛。
因此划重点DPCNN与ResNet很大一个不同就是在DPCNN中固定死了feature map的数量也就是固定住了embedding space的维度为了方便理解以下简称语义空间使得网络有可能让整个邻接词邻接ngram的合并操作在原始空间或者与原始空间相似的空间中进行当然网络在实际中会不会这样做是不一定的哦只是提供了这么一种条件。也就是说整个网络虽然形状上来看是深层的但是从语义空间上来看完全可以是扁平的。而ResNet则是不断的改变语义空间使得图像的语义随着网络层的加深也不断的跳向更高level的语义空间。
1/2池化层
好啦所以提供了这么好的合并条件后我们就可以用pooling layer进行合并啦。每经过一个size3, stride2大小为3步长为2的池化层以下简称1/2池化层序列的长度就被压缩成了原来的一半请自行脑补。这样同样是size3的卷积核每经过一个1/2池化层后其能感知到的文本片段就比之前长了一倍。
感谢评论区 陈诚 指出pooling size的错误例如之前是只能感知3个词位长度的信息经过1/2池化层后就能感知6个词位长度的信息啦这时把1/2池化层和size3的卷积层组合起来如图4所示。 图4好啦看似问题都解决了目标成功达成。剩下的我们就只需要重复的进行等长卷积等长卷积1/2池化就可以啦也就是重复如图5的Block 图5残差连接
但是如果问题真的这么简单的话深度学习就一下子少了超级多的难点了。
首先由于我们在初始化深度CNN时往往各层权重都是初始化为一个很小的值这就导致最开始的网络中后续几乎每层的输入都是接近0这时网络的输出自然是没意义的而这些小权重同时也阻碍了梯度的传播使得网络的初始训练阶段往往要迭代好久才能启动。
同时就算网络启动完成由于深度网络中仿射矩阵每两层间的连接边近似连乘训练过程中网络也非常容易发生梯度爆炸或弥散问题虽然由于非共享权重深度CNN网络比RNN网络要好点。
当然上述这两点问题本质就是梯度弥散问题。那么如何解决深度CNN网络的梯度弥散问题呢当然是膜一下何恺明大神然后把ResNet的精华拿来用啦
ResNet中提出的shortcut-connection/skip-connection/residual-connection残差连接就是一种非常简单、合理、有效的解决方案。看着图5想一下既然每个block的输入在初始阶段容易是0而无法激活那么直接用一条线把region embedding层连接到每个block的输入乃至最终的池化层/输出层不就可以啦
想象一下这时的shortcut connection由于连接到了各个block的输入当然为了匹配输入维度要事先经过对应次数的1/2池化操作这时就相当于一个短路连接即region embedding直接短路连接到了最终的池化层或输出层。等等这时的DPCNN不就退化成了TextCNN嘛。深度网络不好训练就一层的TextCNN可是异常容易训练的。这样模型的起步阶段就是从TextCNN起步了自然不会遭遇前面说的深度CNN网络的冷启动问题了。
同样的道理有了shortcut后梯度就可以忽略卷积层权重的削弱从shortcut一路无损的传递到各个block手里直至网络前端从而极大的缓解了梯度消失问题。
所以DPCNN里的Block里加上了shortcut connection后就完美多啦。即设计出了如下最终版的网络形态 最后点一下题目由于前面所述的1/2池化层的存在文本序列的长度会随着block数量的增加呈指数级减少即 这导致序列长度随着网络加深呈现金字塔Pyramid形状 因此作者将这种深度定制的简化版ResNet称之为Deep “Pyramid” CNN。