【Transformer】模型输出模块处理
目录
- 输出处理模块步骤
- 1. 交叉注意力后的输出向量
- 2. 线性变换(投影)
- 3. Softmax 操作
- 4. 选择最大概率的单词
- 5. 输出词并进入下一轮预测
- 总结:
- 线性变换详解
- 1. 交叉注意力后的输出向量
- 2. 线性层的参数
- 3. 线性变换的计算
- 4. Softmax 转换为概率
- 示例
- 5. 线性层的作用
输出处理模块步骤
下方图像中,红框内即模型输出处理模块
在 Transformer 解码器中的 交叉注意力 后,得到的每个目标词的向量表示将用于生成下一个词的预测。为了从这些向量表示中选择概率最高的单词,通常会经过以下几个步骤:
1. 交叉注意力后的输出向量
经过交叉注意力(Cross Attention)后,解码器得到的每个目标词的向量表示包含了目标语言的上下文信息(来自解码器的自注意力)以及源语言的上下文信息(来自编码器的输出)。这些向量是未经过激活的原始表示。
2. 线性变换(投影)
接下来,解码器中的每个目标词向量(经过交叉注意力后的输出)将通过一个 线性变换 投影到词汇表的维度上。具体来说,解码器的输出会经过一个 线性层,将每个词的向量表示从模型的维度(通常是 d_model
)映射到词汇表的维度大小,即 V
(词汇表的大小)。
假设:
d_model
是解码器中词向量的维度(通常是 512 或 1024)。V
是词汇表的大小,例如,假设词汇表中有 10,000 个单词。
经过线性变换后,解码器的输出会被投影到一个长度为 V
的向量。这个向量的每个元素表示模型对词汇表中每个词的原始预测得分,也就是 logits。
假设 d_model = 512,词汇表大小 V = 10,000,句子长度 T = 6,那么交叉注意力的输出会是 (6, 512)。经过线性变换后,得到的所有 logits 构成的矩阵的维度是 (6, 10,000),其中每行的 logits 是一个时间步上的词汇表分布。
所以预测下一个词,就得选择得到的 logits 矩阵中的最后一个时间步中V维向量中最高的概率。
3. Softmax 操作
为了将 logits 转换为概率分布,通常会使用 softmax 函数。Softmax 会将 logits 向量的每个元素转换为一个介于 0 和 1 之间的概率值,并且所有概率之和为 1。
假设 logits 向量是:
logits = [ 2.3 , − 0.5 , 1.1 , 3.5 , … ] \text{logits} = [2.3, -0.5, 1.1, 3.5, \dots] logits=[2.3,−0.5,1.1,3.5,…]
softmax 操作会把这个 logits 向量转换为一个概率分布:
probabilities = [ P ( word 1 ) , P ( word 2 ) , P ( word 3 ) , P ( word 4 ) , … ] \text{probabilities} = [P(\text{word}_1), P(\text{word}_2), P(\text{word}_3), P(\text{word}_4), \dots] probabilities=[P(word1),P(word2),P(word3),P(word4),…]
其中,( P ( word i P(\text{word}_i P(wordi) ) 是词汇表中第 (i) 个词的预测概率。
4. 选择最大概率的单词
完成 softmax 后,你将得到一个包含所有词汇表单词的概率分布。然后,解码器会选择概率最高的单词作为下一个生成的词。
如果 softmax 输出的概率分布是:
probabilities = [ 0.02 , 0.05 , 0.01 , 0.85 , … ] \text{probabilities} = [0.02, 0.05, 0.01, 0.85, \dots] probabilities=[0.02,0.05,0.01,0.85,…]
那么,模型会选择概率值 0.85 对应的词(在这个例子中是第4个词)作为当前时间步的输出词。
5. 输出词并进入下一轮预测
选定的词将作为解码器的输出,并作为下一轮输入的一部分。对于序列生成任务(如机器翻译),这个过程会重复,直到遇到结束符号(如 <EOS>
,表示句子的结束)为止。
总结:
- 交叉注意力 后得到的词向量会经过线性变换,得到一个与词汇表大小相同的 logits 向量。
- softmax 被应用于 logits 向量,将其转换为一个概率分布。
- 解码器根据概率选择下一个词(最大概率的词)。
- 选定的词会被作为输入传递给解码器,进行下一轮预测。
线性变换详解
在 Transformer 解码器中,线性变换的过程是通过一个 线性层 将解码器交叉注意力层的输出转换为一个与词汇表大小相同的向量。这一步称为“投影”,其目的是将解码器生成的高维向量映射到词汇表的每个单词对应的维度上。让我们更详细地看一下这个过程。
1. 交叉注意力后的输出向量
经过交叉注意力后,解码器每个时间步上的输出会包含目标语言和源语言的上下文信息。这些输出向量的维度是 d_model
,通常是 512 或 1024。例如,如果句子长度是 T
,那么解码器的交叉注意力输出的形状为 (T, d_model)
。
2. 线性层的参数
为了将解码器的输出映射到词汇表空间,线性层的权重矩阵 W_proj
的形状通常为 (d_model, V)
,其中:
d_model
是模型的隐藏层维度大小。V
是词汇表的大小。
此外,线性层还包含一个偏置向量 b_proj
,其长度为 V
。因此,线性层的输出维度会从 (T, d_model)
映射到 (T, V)
。
3. 线性变换的计算
在这个过程中,每个输出向量 x
会经过如下线性变换:
logits = x ⋅ W proj + b proj \text{logits} = x \cdot W_{\text{proj}} + b_{\text{proj}} logits=x⋅Wproj+bproj
这里:
-
x
x
x 是交叉注意力后的输出向量,形状为
(1,d_model)
。 -
W
p
r
o
j
W_{proj}
Wproj 是线性层的权重矩阵,形状为
(d_model, V)
。 -
b
p
r
o
j
b_{proj}
bproj 是偏置项,形状为
(1,V)
。
最终结果 logits
的形状是 (1,V)
,代表对词汇表中每个词的预测分数。
4. Softmax 转换为概率
将 logits
输入 softmax 函数后,就能得到一个概率分布,使每个词的概率都介于 0 到 1 之间,并且所有概率之和为 1。
示例
假设 d_model = 512
,词汇表大小 V = 10,000
,句子长度 T = 6
,那么交叉注意力的输出会是 (6, 512)
。经过线性变换后,得到的 logits 矩阵的维度是 (6, 10,000)
,其中每行是一个时间步上的词汇表分布。
5. 线性层的作用
这个线性变换的作用是将高维向量投影到词汇表空间,使得模型的输出与特定的单词一一对应,从而能够通过 softmax 计算概率并进行词汇表中的选择。且这个线性层也是需要通过训练得到的。