本文参考文献:
Gehring J, Auli M, Grangier D, et al. Convolutional Sequence to Sequence Learning[J]. arXiv preprint arXiv:1705.03122, 2017.
被引次数:13
 
Dauphin Y N, Fan A, Auli M, et al. Language modeling with gated convolutional networks[J]. arXiv preprint arXiv:1612.08083, 2016.
被引次数:24
 
今天要讲的一个模型是由Facebook人工智能研究院提出来的完全基于卷积神经网络的seq2seq框架,seq2seq我在之前的推送中已经讲过好多次了,传统的seq2seq模型是基于RNN来实现的,特别是LSTM,这就带来了计算量复杂的问题。Facebook作出大胆改变,将编码器、解码器、注意力机制甚至是记忆单元全部替换成卷积神经网络,想法是不是简单粗暴?虽然单层CNN只能看到固定范围的上下文,但是将多个CNN叠加起来就可以很容易将有效的上下文范围放大。Facebook将此模型成功地应用到了英语-法语机器翻译、英语-德语机器翻译,不仅刷新了二者前期的记录,而且还将训练速度提高了一个数量级,无论是GPU还是CPU上。
 
在详细开始介绍Facebook的conv seq2seq模型之前,我们需要回顾一下Gated CNN,这个同样是Facebook在去年底提出来的用于语言建模的模型。
 
用于语言建模的Gated CNN模型如下图所示,可以看到,最上层的word embedding操作与传统的语言建模没有区别,紧接着就是对这些embedding向量划分时间窗并做卷积操作,注意这里使用了两个卷积神经网络,这两个神经网络中的其中一个通过激活函数一个与另外一个进行相乘,得到最终的输出。说到这里,应该有读者已经发现了其中一个卷积神经网络的功能就是充当了闸门的作用,即控制着多少有用的信息作为最终的输出。同时,实验结果也表明Gated CNN在WikiText-103上取得了较好的效果。
 

在conv seq2seq这篇文章中,也使用了Gated CNN以及Residual connection,文中的模型结构图如下所示,下面我来仔细说明一下这里的计算细节。
 

对于编码器,原始的单词首先需要经过embedding层得到其相应的embedding向量,然后将embedding向量作为Gated CNN的输入,这里需要注意的是,为了保证经过卷积操作之后与之前的输入长度一致,卷积需要做pad操作。模型中有两个地方都使用到了GLU(Gated Linear Unit),我在图中已经用红色字眼标出,编码器的embedding和解码器的embedding分别通过各自的GLU单元得到各自的分布式状态,将两个状态矩阵进行点乘即可得到注意力权重,图中已用红色字体Attention标出,具体的注意力权重的计算如下公式所示:
 

 
注意到图中编码器的embedding和编码器的状态进行相加,并且乘上注意力权重,得到的结果文中称之为条件输入c,这里我们可以对比传统的注意力机制,传统的注意力机制是直接将注意力权重和编码器的状态进行相乘,而这里引入了embedding量,文中解释是因为embedding可以在做预测的时候可以结合具体元素的信息,增加了位置感,条件输入c的计算如下图公式所示:

 
将条件输入c加上解码器的状态,即可得到输出序列的概率,以上就是conv seq2seq的模型结构。作者最终在机器翻译上相比其他RNN的模型速度提高了近10倍!

完全基于卷积神经网络的seq2seq的更多相关文章

  1. 深度学习项目——基于卷积神经网络(CNN)的人脸在线识别系统

    基于卷积神经网络(CNN)的人脸在线识别系统 本设计研究人脸识别技术,基于卷积神经网络构建了一套人脸在线检测识别系统,系统将由以下几个部分构成: 制作人脸数据集.CNN神经网络模型训练.人脸检测.人脸 ...

  2. 【RS】Automatic recommendation technology for learning resources with convolutional neural network - 基于卷积神经网络的学习资源自动推荐技术

    [论文标题]Automatic recommendation technology for learning resources with convolutional neural network ( ...

  3. 基于卷积神经网络的人脸识别项目_使用Tensorflow-gpu+dilib+sklearn

    https://www.cnblogs.com/31415926535x/p/11001669.html 基于卷积神经网络的人脸识别项目_使用Tensorflow-gpu+dilib+sklearn ...

  4. 基于卷积神经网络的面部表情识别(Pytorch实现)----台大李宏毅机器学习作业3(HW3)

    一.项目说明 给定数据集train.csv,要求使用卷积神经网络CNN,根据每个样本的面部图片判断出其表情.在本项目中,表情共分7类,分别为:(0)生气,(1)厌恶,(2)恐惧,(3)高兴,(4)难过 ...

  5. Pytorch实现基于卷积神经网络的面部表情识别(详细步骤)

    文章目录 一.项目背景 二.数据处理 1.标签与特征分离 2.数据可视化 3.训练集和测试集 三.模型搭建 四.模型训练 五.完整代码 一.项目背景数据集cnn_train.csv包含人类面部表情的图 ...

  6. 基于卷积神经网络CNN的电影推荐系统

    本项目使用文本卷积神经网络,并使用MovieLens数据集完成电影推荐的任务. 推荐系统在日常的网络应用中无处不在,比如网上购物.网上买书.新闻app.社交网络.音乐网站.电影网站等等等等,有人的地方 ...

  7. 基于卷积神经网络的手写数字识别分类(Tensorflow)

    import numpy as np import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_dat ...

  8. 使用Python+TensorFlow2构建基于卷积神经网络(CNN)的ECG心电信号识别分类(二)

    心律失常数据库 目前,国际上公认的标准数据库包含四个,分别为美国麻省理工学院提供的MIT-BIH(Massachusetts Institute of Technology-Beth Israel H ...

  9. 基于 SoC 的卷积神经网络车牌识别系统设计(0)摘要

    ​NOTES:现如今,芯片行业无比火热啊,无论是前景还是钱景,国家芯片战略的发布,公司四五十万的年薪,着实令人非常的向往,为了支持芯片设计者,集成了工作.科研.竞赛于一体的<基于 SoC 的卷积 ...

随机推荐

  1. 十三、细说NULL导致的神坑,让人防不胜防

    当数据的值为NULL的时候,可能出现各种意想不到的效果,让人防不胜防,我们来看看NULL导致的各种神坑,如何避免? 一.比较运算符中使用NULL 任何值和NULL使用运算符(>.<.> ...

  2. redis连接数高居不下,怎么破?。。。。这么破

    最近项目一直在使用redis,首次用redis,随便从网上找了例子就用了,一开始用的还挺正常,后来发现,当客户端访问量一上来,redis的连接数居高不下,一开始以为是客户端没有关闭,开始怀疑redis ...

  3. linux alsa音频中采样率fs、比特率BCLK 、主时钟MCLK关系

    转:https://blog.csdn.net/lugandong/article/details/72468831 一.拿512fs说话: 看图知道采样的位深是32bit(位),左右声道各占了8*3 ...

  4. nginx日志配置笔记:if条件

    1.特定条件写日志: 参照: https://stackoverflow.com/questions/19011719/how-to-write-only-logs-with-200-status h ...

  5. 交付Dubbo微服务到kubernetes集群

    1.基础架构 1.1.架构图 Zookeeper是Dubbo微服务集群的注册中心 它的高可用机制和k8s的etcd集群一致 java编写,需要jdk环境 1.2.节点规划 主机名 角色 ip hdss ...

  6. Tensorflow&CNN:验证集预测与模型评价

    版权声明:本文为博主原创文章,转载 请注明出处:https://blog.csdn.net/sc2079/article/details/90480140 - 写在前面 本科毕业设计终于告一段落了.特 ...

  7. Go语言中的IO操作、Flag包以及urfave/cli命令行框架

    一.格式化输入和输出 1.从终端获取用户的输入 fmt.Scanf  空格作为分隔符,占位符和格式化输出的一致 fmt.Scan  从终端获取用户的输入,存储在Scanln中的参数里,空格和换行符作为 ...

  8. P1880 [NOI1995]石子合并[环形DP]

    题目来源:洛谷 题目描述 在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分. 试设计出1个算法,计算出将 ...

  9. Selenium常用API的使用java语言之8-模拟鼠标操作

    通过前面例子了解到,可以使用click()来模拟鼠标的单击操作,现在的Web产品中提供了更丰富的鼠标交互方式, 例如鼠标右击.双击.悬停.甚至是鼠标拖动等功能.在WebDriver中,将这些关于鼠标操 ...

  10. document基本操作 动态脚本-动态样式-创建表格

    var html = document.documentElement; var body = document.body; window.onload = function() { //docume ...