https://blog.csdn.net/weixin_42475060/article/details/121101749
b站视频:https://www.bilibili.com/video/BV1ih4y1J7rx
1. 解码器的输入组成
在推理阶段,解码器的输入有两个主要部分:
(1) 目标序列的前缀(已生成的部分)
- 解码器需要自回归地生成序列。
- 在每个时间步,解码器的输入是当前生成的序列(前缀),经过 Embedding 层 转换成向量表示后输入到解码器。
- 例如:
- 如果生成的是句子 “I am”, 在生成下一个单词时,解码器输入是 “I am” 的嵌入表示。
- 这个前缀会不断扩展,直到生成完整的句子或者达到停止条件。
(2) 编码器输出(上下文向量)
- 编码器(Encoder)在推理阶段对输入序列(source sequence,例如源语言句子)进行一次性编码,生成上下文向量(context representations)。
- 这个上下文向量会作为解码器的一个固定输入,供解码器的 Encoder-Decoder Attention 模块 使用,用于理解输入序列的全局信息。
2. 推理阶段解码器输入的变化
推理阶段的解码是一个**逐步生成(autoregressive generation)**的过程:
- 初始时,解码器的输入是一个特殊的 起始标志([START] 或 <s>)。
- 解码器输出第一个单词的概率分布,通过 argmax 或 beam search 选择一个单词作为输出。
- 将第一个单词加入到输入序列中,形成新的前缀。
- 重复这个过程,逐步生成下一个单词,直到遇到停止标志([END] 或 </s>)或者达到最大序列长度。
3. 推理阶段解码器输入的形式
- 解码器的输入是一个动态增长的序列,表示为 [y1,y2,…,yt],其中 yt 是已生成的单词序列。
- 解码器输入会经过嵌入层和位置编码(Positional Encoding),然后送入解码器各层。
总结
在推理阶段,Decoder 的输入包括:
- 动态生成的目标序列的前缀(由特殊标志 <s> 开始,逐步扩展)。
- 编码器的输出上下文向量(固定的输入,用于帮助解码器生成与输入相关的结果)。
这种逐步生成的方式使 Transformer 能够灵活地进行序列生成任务,例如翻译、文本生成等。