介绍

在本文中,我们将分析一个经典的序列对序列(Seq2Seq)模型的结构,并演示使用注意解码器的优点。
这两个概念将为理解本文提出的Transformer奠定基础,因为“注意就是您所需要的一切”。

本文内容:

  1. 什么是Seq2Seq模型?
  2. 经典的Seq2Seq模型是如何工作的?
  3. 注意力机制

什么是Seq2Seq模型?

在Seq2seq模型中,神经机器翻译以单词序列的形式接收输入,并生成一个单词序列作为输出。
例如,意大利语的“Cosa vorresti ordinare?”作为输入,英语的输出是“What would you like to order?”。
另外,输入可以是一幅图像(图像字幕)或一长串单词(文本摘要)。

经典的Seq2Seq模型是如何工作的?

一个Seq2Seq模型通常包括:

  1. 一个编码器
  2. 一个解码器
  3. 一个上下文向量

请注意:在神经机器翻译中,编码器和解码器都是rnn

编码器通过将所有输入转换为一个称为上下文的向量(通常具有256、512或1024的长度)来处理所有输入。上下文包含编码器能够从输入中检测到的所有信息(请记住,输入是在本例中要翻译的句子)。然后向量被发送到解码器,由解码器确定输出序列。

神经机器翻译中的时间步长

现在我们已经对序列到序列模型有了一个高层次的概述,让我们简要分析一下如何处理输入。

时间步骤#1:将意大利语单词“Stai”发送到编码器
编码器根据其输入和之前的输入更新其隐藏状态(h1)。
时间步骤#2:单词“attento”被发送到编码器
编码器根据其输入和之前的输入更新其隐藏状态(h2)。
时间步骤#3:单词“Thomas”被发送到编码器
编码器根据其输入和之前的输入更新其隐藏状态(h3)。
时间步骤#4:最后一个隐藏状态成为发送到解码器的上下文
解码器产生第一个输出“Be”
时间步骤#5:解码器产生第二个输出“careful”
时间步骤#6:解码器产生第三个输出“Thomas”

编码器或解码器的每一步都是RNN处理其输入并生成该时间步长的输出。
正如您可能注意到的,我们最后的隐藏状态(h3)成为发送到解码器的内容。这就是经典序列对序列模型的局限性;编码器“被迫”只发送一个向量,不管输入的长度是多少,也就是我们的句子包含了多少个单词。
即使我们决定在编码器中使用大量隐藏单元以获得更大的上下文,模型也会与短序列过度匹配,并且随着参数数量的增加,我们的性能也会受到影响。

但是注意力能解决这个问题!

注意力机制

在这一点上,我们知道要解决的问题在于上下文向量。这是因为,如果输入是一个包含大量单词的句子,那么模型就会陷入麻烦。
badanua等和Loung等人提出了一种解决方案。这两篇论文介绍并改进了“注意力”的概念。这种技术通过关注输入序列的相关部分,使机器翻译系统得到了相当大的改进。

思路

带有注意力的Seq2Seq模型中的编码器的工作原理与经典的类似。一次接收一个单词,并生成隐藏状态,用于下一步。
随后,与之前不同的是,不仅最后一个隐藏状态(h3)将被传递给解码器,所有的隐藏状态都将被传递给解码器。

编码器

在到达编码器之前,我们的句子中的每个单词都通过嵌入过程转换为一个向量(大小为200或300)。
第一个单词,在我们的例子中是“Stai”,一旦它转换为一个向量就被发送到编码器。在这里,RNN的第一步产生第一个隐藏状态。同样的场景也会发生在第二个和第三个单词上,总是考虑到之前隐藏的状态。
一旦我们的句子中的所有单词都被处理完,隐藏状态(h1, h2, h2)就会被传递给注意力解码器。

注意力译码器

首先,注意力解码器中添加了一个重要过程:

  • 每个隐藏状态都有一个分数。
  • 分数通过softmax函数。
  • 隐藏状态和相关的softmax分数相互相乘
  • 最后,将得到的隐藏状态相加,得到单个向量,即上下文向量。

这个过程允许我们放大我们序列中重要的部分,减少不相关的部分。
此时,我们必须理解如何将分数分配给每个隐藏状态。
你还记得badanau和Luong吗?为了更好地理解注意力解码器内部发生了什么以及分数是如何分配的,我们需要更多地谈谈点积注意力。

点积注意力(multiplicative attention)是利用先前对加法注意所做的研究而发展起来的。
在“基于注意力的神经机器翻译的有效方法”一文中,Loung介绍了几个注意力评分的方法:

一般方法、点积 、合并(concat)

在这篇文章中,我们将分析一般注意力机制(公式中间的部份)。

这是因为在我们的例子中,一旦确定每种语言都有自己的嵌入空间,编码器和解码器就没有相同的嵌入空间。

我们可以直接将解码器的隐藏状态、权值矩阵和编码器的隐藏状态集相乘得到分数。

现在我们已经知道了如何计算分数,让我们尝试着理解Seq2Seq模型中的注意力解码器是如何工作的。

第一步,注意解码器RNN嵌入令牌(表示语句结束),并将其进入初始解码器隐藏状态。 RNN处理其输入,生成输出和新的解码器隐藏状态向量(h4)。这时输出被丢弃,从这里开始“注意力”步骤:

1-为每个编码器隐藏状态分配一个注意力公式中计算的分数。

2-分数通过softmax函数。

3-编码器隐藏状态和相关softmax分数相乘。将获得的隐藏状态添加到上下文向量(c4)中。

4-上下文向量(c4)与解码器隐藏状态(h4)连接。

由连接产生的向量通过一个完全连接的神经网络传递,该神经网络基本上是乘以权值矩阵(Wc),并应用tanh激活。
这个完全连接的层的输出将是输出序列中的第一个输出单词(输入:“Stai”->输出:“be”)。

第二个时间步骤从第一步的输出(“Be”)开始,并产生解码器隐藏状态(h5)。所有这些都遵循上面描述的注意步骤。重复以上时间步骤中描述的过程。

总结

非常感谢您花时间阅读本文。 我希望本文能使您对经典的Seq2Seq模型以及带有注意力的Seq2Seq有一个很好的初步了解。

引用

  • Bahdanua et al., “Neural Machine Translation by Jointly Learning to Align and Translate”
  • Loung et al., “Effective Approaches to Attention-based Neural Machine Translation”
  • Visualizing a Neural Machine Translation Model (Mechanics of Seq2seq Model With Attention) by Jay Alammar

作者:Muhamed Kouate

deephub翻译组

经典Seq2Seq与注意力Seq2Seq模型结构详解相关推荐

  1. self-attention自注意力机制的结构详解(1)

    一.基本知识 1.模型的输入: 如果把输入看成一个向量,输出是数值或者类别.但是若输入是一系列的向量(序列),同时长度会改变,例如输入是一句英文,每个单词的长短不一,每个词汇对应一个向量,所以模型的输 ...

  2. AutoRec模型结构详解

    一.前言 这个模型2015年由澳大利亚国立大学提出, 是个单隐层的神经网络推荐模型,网络结构简单,非常适合深度学习推荐系统的入门模型,但由于比较简单, 表达能力不足, 并没有真正的被应用. 二.Aut ...

  3. classical CNN models : AlexNet 模型结构详解

    AlexNet 相关文献: ImageNet Classification with Deep Convolutional Neural Networks Alex Krizhevsky Ilya S ...

  4. classical CNN models : ZF Net 模型结构详解

    ZF Net 相关文献: Visualizing and Understanding Convolutional Networks Matthew D. Zeiler and Rob Fergus D ...

  5. Transformer(二)--论文理解:transformer 结构详解

    转载请注明出处:https://blog.csdn.net/nocml/article/details/110920221 本系列传送门: Transformer(一)–论文翻译:Attention ...

  6. 自然语言处理NLP星空智能对话机器人系列:第21章:基于Bayesian Theory的MRC文本理解基础经典模型算法详解

    自然语言处理NLP星空智能对话机器人系列: 第21章:基于Bayesian Theory的MRC文本理解基础经典模型算法详解 1,Bayesian prior在模型训练时候对Weight控制.训练速度 ...

  7. 生成模型——自回归模型详解与PixelCNN构建

    生成模型--自回归模型详解与PixelCNN构建 自回归模型(Autoregressive models) 简介 PixelRNN 使用TensorFlow 2构建PixelCNN模型 输入和标签 掩 ...

  8. 4个mos管驱动的全桥电路原理_最经典MOS管电路工作原理及详解没有之一

    欢迎加入技术交流QQ群(2000人):电力电子技术与新能源 1105621549 高可靠新能源行业顶尖自媒体 在这里有电力电子.新能源干货.行业发展趋势分析.最新产品介绍.众多技术达人与您分享经验,欢 ...

  9. [java] 虚拟机(JVM)底层结构详解[转]

    [java] 虚拟机(JVM)底层结构详解[转] 本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.net/csh624366188 在以前的博客里面,我们介绍了在java领 ...

最新文章

  1. 深入剖析Vue源码 - 响应式系统构建(上)
  2. 万众瞩目的特斯拉AI日,会有哪些惊喜?
  3. 消息中间件客户端消费控制实践
  4. Java:log4j:WARN no appenders could be found for logger问题解决
  5. Linux cd后显示文件,关于linux系统显示文件的问题!
  6. php sql查询占位符,使用命名占位符时PHP / SQL插入错误
  7. 计算机桌面上的输入法状态栏,输入法状态栏
  8. Linux下yum命令详解
  9. sql 查询重复行数据
  10. 2021年一月文章导读
  11. 9. 工作区和暂存区
  12. Java学习电子书大全
  13. mac安装adb工具
  14. 《人件》(Peopleware)文摘
  15. CSS居中对齐、定位的总结
  16. 密码编码学初探——传统加密技术
  17. 计算机组成原理第二章笔记---计算机进化与性能
  18. 《今日影评》前瞻《疯狂的外星人》:喜剧远大于科幻
  19. 【聚类之DBSCAN】DBSCAN实例
  20. Xshell、Xftp软件评估过期解决方案

热门文章

  1. 关于机器学习的面试题,你又了解多少呢?
  2. OSPF 总结—— ospf邻居关系无法建立原因 + OSPF选路影响因素
  3. ubuntu18.04安装roboware studio
  4. 电话号码查询系统(链式结构)
  5. Eclipse调试python
  6. 一,Weston简介
  7. linux 汇编 变址寻址,汇编--寻址方式(示例代码)
  8. jdk,jre的下载安装教程
  9. Python语音合成探究(一、男声和女声的选择)
  10. ST官网下载STM32固件库