文章目录
1 解码器 (AT版) 的具体架构
Decoder其实有两种,比较常见的是 Autoregressive Decoder。
根据上文内容预测下一个可能跟随的单词,就是常说的自左向右的语言模型任务,或者反过来也行,就是根据下文预测前面的单词,这种类型的LM被称为Autoregressive的语言模型。
继续举语音辨识的例子来说明Autoregressive Decoder具体是怎么做的,语音辨识就是输入一段声音,输出一串文字,我们把一段声音输入给 Encoder,表示声音讯号的一排向量进入 Encoder以后,输出也是一排向量。
接下来就轮到 Decoder 上场了,Decoder 要做的事情就是把 Encoder 的输出先读进去,然后产生最终输出,也就是产生语音辨识的结果。
那Decoder怎么产生一段文字呢?首先,你要先给它一个特殊的符号,这个特殊的符号代表开始,图中用了START来表示,有时候也用**BOS(Begin Of Sentence)**来表示。
假设我们将最终要输出的每一个 Token,都用一个 One-Hot 的 Vector 来表示,START 也用 One-Hot Vector 来表示,那输入 START 后接下来 Decoder 会先输出一个向量,这个 Vector 的长度跟 Token 的 One-Hot Vector 一样长。
每一个中文的字因为One-Hot编码,其向量表示里面只有一个特定的位置是1,而 Decoder 的输出通过一个 Softmax 层之后,输出向量变为了一个概率分布,概率最大的位置对应的中文字即为真正的输出,在这个例子中,“机”的概率最高,所以“机”就是这个 Decoder 的第一个输出。
接下来,我们把“机”当做是 Decoder 新的 Input,原来 Decoder 的 Input 只有 START 这个特别的符号,现在它除了 START 以外,还有“机”作为它的 Input。
根据这两个输入,它输出一个蓝色的向量,根据这个蓝色的向量里面概率最大的位置对应的中文字即为真正的输出,假设"器"的概率最大,那么**"器"就是输出**。
然后这个过程就反复持续下去,这边有一个关键的地方,我们用红色的虚线把它标出来:
我们看到 Decoder 看到的输入,其实是它在前一个时间点自己的输出,Decoder 会把自己的输出,当做接下来的输入。那这时就有一个问题,如果 Decoder 产生了错误的输出,这个错误的输出又被当做 Decoder 下一个时间点的输入,会不会造成 Error Propagation,也就是类似于“一步错,步步错” 的问题呢?
那事实上也的确是有可能的,这个等会儿再继续讨论,这里先把Decoder的具体架构介绍完。
我们来看一下 Decoder 内部的具体结构是什么样的:
由于上一节刚刚讲过了 Encoder 的架构,我们现在把 Encoder 和 Decoder 放在一起来看:
稍微比较一下它们之间的差异,你会发现如果我们把 Decoder 中间这一块遮起来的话,其实 Encoder 跟 Decoder 并没有很大的差别。
这里我们着重来看一看不一样的地方,首先是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 的资讯,以此类推。
那为什么需要加上 Masked 这个限制呢?这个理由其实也很自然,我们刚刚就提到了Autoregressive Decoder的输出是顺序产生的,所以是先有 a 1 a^1 a1 再有 a 2 a^2 a

最低0.47元/天 解锁文章
1231

被折叠的 条评论
为什么被折叠?



