之前看过TCN,稍微了解了一下语言模型,这篇论文也是对语言模型建模,但是由于对语言模型了解不深,一些常用数据处理方法,训练损失的计算包括残差都没有系统的看过,只是参考网上代码对论文做了粗浅的复现。开学以来通过看的几篇论文及复现基本掌握了tensorflow的基本使用,了解了“数据处理-模型构建-训练“的处理问题基本流程,但是随着看论文的增多发现理论基础严重薄弱,以后应该会一边补理论一边看论文...

一.论文简介

来源:没...没找到

题目:Language Modeling with Gated Convolutional Networks

原文链接:https://arxiv.org/pdf/1612.08083.pdf

参考代码:anantzoid/Language-Modeling-GatedCNN

之前语言模型的主流方法都是基于RNN,本篇论文提出了一种新颖的门控机制,结合CNN网络应用到语言模型。该网络包含多层,与经典语法形式相似,能分层次地分析输入,构建了增加粒度的句法树结构。与RNN逐个处理输入序列不同,CNN可以实现并行计算,大大加快训练速度。并且分层结构也简化了学习,与RNN的链结构相比,非线性计算数量减少,从而减轻了消失梯度问题。

二.网络架构

所谓的门限卷积,其核心在于为卷积的激活值添加一个门限开关,来决定其有多大的概率传到下一层去。下面一步步对上图进行解析。

1.将单词embedding到连续空间,即上图中的第二部分Lookup Table。这样,单词序列就能表现为矩阵了。

2.然后是卷积操作,与普通卷积不同,门限卷积在这里分为两部分,一部分是卷积激活值,即B,该处与普通卷积的不同在于没有用Tanh,而是直接线性,但会经过一个sigmoid运算符。另一部分是门限值,即A,A也是直接线性得到。在做卷积的时候,需要不让第i个输出值看到i以后的输入值。这是由语言模型的特性决定的,需要用i之前的信息来预测i。为了达到这样的效果,需要将输入层偏移k - 1个单位,其中k是卷积的宽度,偏移后开头空缺的部分就用0进行padding。

3.接下来是门限单元,A和sigmoid(B)进行element-wise的相乘,得到卷积后的结果。卷积单元和门限单元加起来形成一个卷积层(作者在具体实现里将卷积和门控单元放在一起,形成residual block)。

注意,LSTM中有input门和forget门两种,这两种缺一则会导致有些信息的缺失。而卷积中,作者经过实验,提出不需要forget gate。此外,作者对两种门控机制GTU和GLU做了比较:

GTUGLU

作者从梯度的角度对两种门控单元进行了分析,发现GTU会衰减的比较快,因为其梯度公式中包含两个衰减项。而GLU只有一个衰减项,可以较好地减轻梯度弥散。

4.经过多个这样的卷积层之后,再将其输入到softmax中,得到最后的预测。作者提出,在最后的softmax层,普通的softmax会因为词表巨大而非常低效。因而选用adaptive softmax。adaptive softmax可以为高频词分配更多的空间而给低频次分配比较少的空间。

三.实验

使用Google Billion Word和WikiText-103两种数据集,将perplexity作为衡量结果。使用Nesterov’s momentum算法来训练,momentum设为0.99,作者还使用了weight normalization和gradient clipping来加速收敛。

实验结果如下:

性能测试:

作者使用Throughput和Responsiveness作为衡量标准,Throughput是指在并行化条件下最大输出,Responsiveness是指序列化的处理输入。由表可知,CNN本身的处理速度非常快。而LSTM在并行化后也能拥有很高的速度。究其原因,是在cuDNN中对LSTM有特别的优化,而对1-D convolution却没有。但即便如此,CNN仍然完胜。

门限测试:

非线性模型测试:

context size测试:

训练测试:

四.总结

这篇文章提出了一种基于卷积神经网络的新颖的门限机制,将其应用到语言模型。与循环神经网络相比,卷积神经网络局部性的特点使得其可以在词序列中进行并行训练,提高了处理的速度,并且分层结构也简化了学习,与RNN的链结构相比,非线性计算数量减少,从而减轻了消失梯度问题,加快了模型的收敛速度。

问题:

主要是针对参考代码的实现有一些疑问。

论文中作者提到,在做卷积的时候,需要不让第i个输出值看到i以后的输入值。这是由语言模型的特性决定的,需要用i之前的信息来预测i。为了达到这样的效果,需要将输入层偏移k - 1个单位,其中k是卷积的宽度,偏移后开头空缺的部分就用0进行padding。代码作者实现的时候在句子开头增加了(k/2)个padding,然后在卷积的时候采用“SAME”模式,这与原文中处理方式不同,并且我认为这样处理是有问题的,这个问题这里有提到,后面对残差部分的修改比较符合我的认知。其次对于代码作者对数据进行分割的方法,在embedding层加mask的方法都不是很理解,不知道针对语言模型问题,数据处理和卷积一般都是怎么操作的,以后慢慢熟悉...

参考:

Language Modeling with Gated Convolutional Networks(句子建模之门控CNN)--模型简介篇

《Language Modeling with Gated Convolutional Networks》阅读笔记

Language Modeling with Gated Convolutional Networks

gated cnn语言模型笔记

Gated CNN 阅读笔记的更多相关文章

  1. 《Graph Neural Networks: A Review of Methods and Applications》阅读笔记

    本文是对文献 <Graph Neural Networks: A Review of Methods and Applications> 的内容总结,详细内容请参照原文. 引言 大量的学习 ...

  2. 卷积神经网络(CNN)学习笔记1:基础入门

    卷积神经网络(CNN)学习笔记1:基础入门 Posted on 2016-03-01   |   In Machine Learning  |   9 Comments  |   14935  Vie ...

  3. Keras 文档阅读笔记(不定期更新)

    目录 Keras 文档阅读笔记(不定期更新) 模型 Sequential 模型方法 Model 类(函数式 API) 方法 层 关于 Keras 网络层 核心层 卷积层 池化层 循环层 融合层 高级激 ...

  4. 论文阅读笔记“Attention-based Audio-Visual Fusion for Rubust Automatic Speech recognition”

    关于论文的阅读笔记 论文的题目是“Attention-based Audio-Visual Fusion for Rubust Automatic Speech recognition”,翻译成中文为 ...

  5. 论文阅读笔记(二十一)【CVPR2017】:Deep Spatial-Temporal Fusion Network for Video-Based Person Re-Identification

    Introduction (1)Motivation: 当前CNN无法提取图像序列的关系特征:RNN较为忽视视频序列前期的帧信息,也缺乏对于步态等具体信息的提取:Siamese损失和Triplet损失 ...

  6. 论文阅读笔记(十二)【CVPR2018】:Exploit the Unknown Gradually: One-Shot Video-Based Person Re-Identification by Stepwise Learning

    Introduction (1)Motivation: 大量标记数据成本过高,采用半监督的方式只标注一部分的行人,且采用单样本学习,每个行人只标注一个数据. (2)Method: 对没有标记的数据生成 ...

  7. 个性探测综述阅读笔记——Recent trends in deep learning based personality detection

    目录 abstract 1. introduction 1.1 个性衡量方法 1.2 应用前景 1.3 伦理道德 2. Related works 3. Baseline methods 3.1 文本 ...

  8. 阅读笔记 1 火球 UML大战需求分析

    伴随着七天国庆的结束,紧张的学习生活也开始了,首先声明,阅读笔记随着我不断地阅读进度会慢慢更新,而不是一次性的写完,所以会重复的编辑.对于我选的这本   <火球 UML大战需求分析>,首先 ...

  9. [阅读笔记]Software optimization resources

    http://www.agner.org/optimize/#manuals 阅读笔记Optimizing software in C++   7. The efficiency of differe ...

随机推荐

  1. AOP初识

    AOP是Aspect Oriented Programing的简称,面向切面编程.AOP适合于那些具有横切逻辑的应用:如性能监测,访问控制,事务管理.缓存.对象池管理以及日志记录.AOP将这些分散在各 ...

  2. SpringBoot+SpringCloud+vue+Element开发项目——集成Swagger文档

    在pom.xml文件中添加Maven依赖 <!--swagger--> <dependency> <groupId>io.springfox</groupId ...

  3. SQL SERVER-CROSS APPLY

    CROSS APPLY和 OUTER APPLY 区别详解 SQL Server 2005 新增 cross apply 和 outer apply 联接语句,增加这两个东东有啥作用呢? 我们知道有个 ...

  4. 反射,内置方法,__str__ __repr__

    反射 反射用到的mmp模块 def wahaha():print('wahaha') class QQxing: def __init__(self,name): self.name = name d ...

  5. java基础(6)---面向对象,类,包

    一.类 类对象内存:  成员变量和局部变量: 成员变量:类中定义的一些私有变量,表示对象的属性. 局部变量:局部变量是在方法体里创建的,在方法体外是访问不到这个变量的. public class te ...

  6. keras模块之-优化器(optimizers)--笔记

    本笔记由博客园-圆柱模板 博主整理笔记发布,转载需注明,谢谢合作! 优化器是调整每个节点权重的方法,如: model = Sequential() model.add(Dense(64, init=' ...

  7. python开发笔记-python-numpy

    一.Numpy概念 Numpy(Numerical Python的简称)是Python科学计算的基础包.它提供了以下功能:  除了为Python提供快速的数组处理能力,Numpy在数据分析方面还有另外 ...

  8. CH6401 创世纪

    6401 创世纪 0x60「图论」例题 描述 上帝手中有 N(N≤10^6) 种世界元素,每种元素可以限制另外1种元素,把第 i 种世界元素能够限制的那种世界元素记为 A[i].现在,上帝要把它们中的 ...

  9. iptables常用命令二之如何删除nat规则

    删除iptables nat 规则 删除FORWARD 规则: iptables -nL FORWARD --line-number iptables -D FORWARD 1 删除一条nat 规则 ...

  10. Python3.X下安装Scrapy

    Python3.X下安装Scrapy (转载) 2017年08月09日 15:19:30 jingzhilie7908 阅读数:519 标签: python   相信很多同学对于爬虫需要安装Scrap ...