【学习笔记】李宏毅2021春机器学习课程第5.2节:Transformer(二)

1 解码器 (AT版) 的具体架构

Decoder其实有两种,比较常见的是 Autoregressive Decoder

根据上文内容预测下一个可能跟随的单词,就是常说的自左向右的语言模型任务,或者反过来也行,就是根据下文预测前面的单词,这种类型的LM被称为Autoregressive的语言模型。

继续举语音辨识的例子来说明Autoregressive Decoder具体是怎么做的,语音辨识就是输入一段声音,输出一串文字,我们把一段声音输入给 Encoder,表示声音讯号的一排向量进入 Encoder以后,输出也是一排向量。

image-20210505192814682

接下来就轮到 Decoder 上场了,Decoder 要做的事情就是把 Encoder 的输出先读进去,然后产生最终输出,也就是产生语音辨识的结果

image-20210505193416391

那Decoder怎么产生一段文字呢?首先,你要先给它一个特殊的符号,这个特殊的符号代表开始,图中用了START来表示,有时候也用**BOS(Begin Of Sentence)**来表示。

image-20210505193652691

假设我们将最终要输出的每一个 Token,都用一个 One-Hot 的 Vector 来表示,START 也用 One-Hot Vector 来表示,那输入 START 后接下来 Decoder 会先输出一个向量,这个 Vector 的长度跟 Token 的 One-Hot Vector 一样长。

image-20210505194403395

每一个中文的字因为One-Hot编码,其向量表示里面只有一个特定的位置是1,而 Decoder 的输出通过一个 Softmax 层之后,输出向量变为了一个概率分布,概率最大的位置对应的中文字即为真正的输出,在这个例子中,“机”的概率最高,所以“机”就是这个 Decoder 的第一个输出。

接下来,我们把“机”当做是 Decoder 新的 Input,原来 Decoder 的 Input 只有 START 这个特别的符号,现在它除了 START 以外,还有“机”作为它的 Input。

image-20210505195340257

根据这两个输入,它输出一个蓝色的向量,根据这个蓝色的向量里面概率最大的位置对应的中文字即为真正的输出,假设"器"的概率最大,那么**"器"就是输出**。

image-20210505203022207

然后这个过程就反复持续下去,这边有一个关键的地方,我们用红色的虚线把它标出来:

image-20210505203437172

我们看到 Decoder 看到的输入,其实是它在前一个时间点自己的输出,Decoder 会把自己的输出,当做接下来的输入。那这时就有一个问题,如果 Decoder 产生了错误的输出,这个错误的输出又被当做 Decoder 下一个时间点的输入,会不会造成 Error Propagation,也就是类似于“一步错,步步错” 的问题呢?

那事实上也的确是有可能的,这个等会儿再继续讨论,这里先把Decoder的具体架构介绍完。

我们来看一下 Decoder 内部的具体结构是什么样的:

image-20210505203958558

由于上一节刚刚讲过了 Encoder 的架构,我们现在把 Encoder 和 Decoder 放在一起来看:

image-20210505204215642

稍微比较一下它们之间的差异,你会发现如果我们把 Decoder 中间这一块遮起来的话,其实 Encoder 跟 Decoder 并没有很大的差别。

image-20210505204300084

这里我们着重来看一看不一样的地方,首先是Decoder的Multi-Head Attention上面多了一个修饰词——masked,所谓的 Masked Attention ,就是我们现在产生输出的时候不能再看右边的部分,也就是产生 b 1 b^1 b1​ 的时候,我们只能考虑 a 1 a^1 a1​ 的资讯,而不能够再考虑 a 2 a^2 a2 a 3 a^3 a3 a 4 a^4 a4​,产生 b 2 b^2 b2​ 的时候,只能考虑 a 1 a^1 a1 a 2 a^2 a2​ 的资讯,不能再考虑 a 3 a^3 a3 a 4 a^4 a4​​​​​ 的资讯,以此类推。

image-20210505205307428

那为什么需要加上 Masked 这个限制呢?这个理由其实也很自然,我们刚刚就提到了Autoregressive Decoder的输出是顺序产生的,所以是先有 a 1 a^1 a1​ 再有 a 2 a^2 a

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值