详解从 Seq2Seq模型、RNN结构、Encoder-Decoder模型 到 Attention模型

一、Seq2Seq 模型

1. 简介

Sequence-to-sequence (seq2seq) 模型,顾名思义,其输入是一个序列,输出也是一个序列,例如输入是英文句子,输出则是翻译的中文。seq2seq 可以用在很多方面:机器翻译、QA 系统、文档摘要生成、Image Captioning (图片描述生成器)。

2. 基本框架

第一种结构

[参考1]论文中提出的 seq2seq 模型可简单理解为由三部分组成:Encoder、Decoder 和连接两者的 State Vector (中间状态向量) C 。

RNN encoder-decoder

上图中 EncoderDecoder 可以是一个 RNN ,但通常是其变种 LSTM 或者 GRUEncoderDecoder 具体介绍请见第三部分。

第二种结构

该结构是最简单的结构,和第一种结构相似,只是 Decoder 的第一个时刻只用到了 Encoder 最后输出的中间状态变量

RNN encoder-decoder

应用:

……

注:确保你对所有模型都有所了解后再阅读应用后面的参考链接。

二、RNN 结构

1. 为什么在这里提及 RNNRNN 变种?

接下来要介绍的 Encoder-Decoder 模型中,EncoderDecoder 两部分的输入输出可以是文字、图像、语音等等,所以 EncoderDecoder 一般采用 CNNRNNLSTMGRU 等等。这里,我们只介绍经典 RNN 的结构。

如果对 LSTM 感兴趣的话,请参考 -原创翻译- 详解 LSTM(Understanding LSTM Networks)

2. 图解 RNN 结构

RNN 大都用来处理像一串句子、一段语音这种的序列化数据。展开的 RNN 结构图如下:

roolled RNN

由图可见,其当前时间 t 的输出依赖两部分:前一时刻的隐层 h_{t-1} 和当前的输入 x_{t}

下面主要介绍经典的三种 RNN 结构:

(1) n VS 1

nvs1

注:圆圈代表给定的输入,箭头代表运算,矩形代表隐层,也就是箭头运算后的结果。其中参数 W、U、V 都是一样的。在自然语言处理问题。x_{1} 可以看做是第一个单词,x_{2} 可以看做是第二个单词…

这种结构可应用于情感分析、文本分类等等。

(2) 1 VS n

1vsn1

下图是把输入当作每个时刻的输入:

1vsn2

这种结构可应用于应用于 Image Caption ,输入是图像的特征矩阵,输出是一段对图像的描述。

(3) n VS n

nvsn

这种结构可应用于机器翻译等。如果感兴趣,可以参考下面的 文章。作者使用 RNN 实现了根据一个字母推测下一个字母的概率。

参考3:-原创翻译- RNNs的“神奇功效”(The Unreasonable Effectiveness of Recurrent Neural Networks)

(4) n VS m

在机器翻译中,源语言和目标语言的句子序列都是不等长的,而原始的 n VS n 结构都是要求序列等长的。为此,我们有了 n VS m 结构,这种结构又被称为 Encoder-Decoder模型 。具体请见下一部分。

三、Encoder-Decoder 模型

1. 简介

在第二节的第四部分,我们提出了 RNNn VS m 结构:Encoder-Decoder 模型,Encoder-Decoder 模型是深度学习中常见的一种模型。在本文中,我们只简单介绍其在文本-文本的应用,比如将英语翻译成汉语,所以该模型也可以称为 Seq2Seq 模型 。下图为 Encoder-Decoder 模型的抽象图:

Encoder-Decoder框架

2. 分析

1) Encoder

给定句子对 <X,Y> ,我们的目标是给定输入句子 X ,通过Encoder-Decoder 模型来翻译成目标句子 Y 。而 XY 分别由各自的单词序列构成:

x && y

首先,Encoder 对输入语句 X 进行编码,经过函数变换为中间语义向量 C (可以通过多种方式得到) :

e&d1

2) Decoder

得到中间语义向量 C 后,使用 Decoder 进行解码。Decoder根据中间状态向量 C 和已经生成的历史信息 y1,y2…yi-1 去生成 t 时刻的单词 yi

<center style="color: rgb(85, 85, 85); font-family: Lato, "PingFang SC", "Microsoft YaHei", sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-style: initial; text-decoration-color: initial;">y_{i} = g (C, y_{1}, y_{2}, y_{i-1})</center>

如果直接将 c 输入到 Decoder 中,则是 Seq2Seq 模型的第二种模型:

e&d stru1

如果将 c 当作 Decoder 的每一时刻输入,则是 Seq2Seq 模型的第一种模型:

e&d stru2
  • 中英翻译中, <X,Y> 是不同语言的句子,X 是英文句子,Y 是中文句子。

  • QA 系统中,X 是问题,Y 是回答。

  • ……

    Encoder-Decoder 模型是使用非常广泛的深度学习模型框架,与其说 Encoder-Decoder 是一种模型,不如称其为一种通用框架。因为 EncoderDecoder 具体使用什么模型是根据任务而定义的。在自然语言处理研究中通常使用 LSTM 或者是 GRU

四、Attention 模型

1. Encoder-Decoder 模型的局限性

(1) 从第三节的第一部分的 Encoder-Decoder 模型的抽象图中可以看出 EncoderDecoder 的唯一联系只有语义编码 ,即将整个输入序列的信息编码成一个固定大小的状态向量再解码,相当于将信息”有损压缩”。很明显这样做有两个缺点:

  • 中间语义向量无法完全表达整个输入序列的信息。
  • 随着输入信息长度的增加,由于向量长度固定,先前编码好的信息会被后来的信息覆盖,丢失很多信息。

(2)大家看第三节的第二部分的第二个 Decoder 过程,其输出的产生如下:

y_{1}=g(C, h’_{0})

y_{2}=g(C, y_{1})

y_{3}=g(C, y_{1}, y_{2})

明显可以发现在生成 y_{1}、y_{2}、y_{3} 时,语义编码 对它们所产生的贡献都是一样的。例如翻译:Cat chase mouseEncoder-Decoder 模型逐字生成:“猫”、“捉”、“老鼠”。在翻译 mouse 单词时,每一个英语单词对“老鼠”的贡献都是相同的。如果引入了Attention 模型,那么 mouse 对于它的影响应该是最大的。

2. 图解 Attention

为了解决上面两个问题,于是引入了 Attention 模型。Attention 模型的特点是 Decoder 不再将整个输入序列编码为固定长度的中间语义向量 ,而是根据当前生成的新单词计算新的 C_{i} ,使得每个时刻输入不同的 ,这样就解决了单词信息丢失的问题。引入了 AttentionEncoder-Decoder 模型如下图:

am

对于刚才提到的那个“猫捉老鼠”的翻译过程变成了如下:

y_{1}=g(C_{1}, h’_{0})

y_{2}=g(C_{2}, y_{1})

y_{3}=g(C_{3}, y_{1}, y_{2})

整个翻译流程如下:

h1

图中输入是 Cat chase mouseEncoder 中隐层 h1、h2、h3 可看作经过计算 Cat、chase、mouse 这些词的信息。

h2

使用 a_{ij} 表示 Encoder 中第 j 阶段的 h_{j} 和解码时第 i 阶段的相关性,计算出解码需要的中间语义向量 C_{i}C_{1} 和 “猫” 关系最近,相对应的 a_{11} 要比 a_{12}a_{13} 大;而 C_{2} 和 “捉” 关系最近,相对应的 a_{22} 要比 a_{21}a_{23} 大;同理 C_{3} 和 “老鼠” 关系最近,相对应的 a_{33} 要比 a_{31}a_{32} 大。

h3

那么参数 a_{ij} 是如何得到呢?

Encoder 中第 j 个隐层单元 h_{j}Decoderi-1 个隐层单元 h’*{i-1} 经过运算得到 a*{ij}

例如 a_{1j} 的计算过程:

a1j

a_{2j} 的计算过程:

a2j

参考 :引入Attention 并基于 RNNEncoder-Decoder 模型公式推导

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容