You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GPT类Transformer解码器训练输入与多头注意力输入疑问

GPT类Transformer训练输入与注意力模块说明

一、训练时的输入与目标设置(Output shifted right)

以你的示例序列< abcdefgh >(<为起始符SOS,>为终止符EOS)为例:

  • 模型输入:移除序列末尾的EOS token,即 < a b c d e f g h
  • 训练目标标签:移除序列开头的SOS token,即 a b c d e f g h >

核心逻辑是让模型实现自回归预测:当模型看到前i个token时,必须输出第i+1个token。比如输入< a时预测b,输入< a b时预测c,直到输入< abcdefgh时预测>。

训练时必须给decoder的自注意力层添加因果掩码(Causal Mask),确保模型预测第i位置的token时,只能访问前面1到i-1位置的内容,无法“偷看”后续token,这是GPT类模型的核心约束。

二、无Encoder时的Multihead Attention模块处理

GPT类模型的Decoder Block和标准Transformer的Decoder不同:它只保留带因果掩码的自注意力层(Masked Multi-Head Self-Attention),完全去掉了与Encoder交互的跨注意力层(Encoder-Decoder Attention)。

因此你的Decoder Block只需实现带因果掩码的自注意力模块,无需为跨注意力层提供输入——毕竟没有Encoder输出可以对接。这个自注意力模块的输入就是模型的嵌入层输出(token embedding + position embedding),也就是前面提到的< a b c d e f g h对应的张量。

以下是PyTorch风格的简单伪代码示意:

# 序列预处理
raw_seq = ["<", "a", "b", "c", "d", "e", "f", "g", "h", ">"]
input_seq = raw_seq[:-1]  # 取除最后一个EOS外的所有token
target_seq = raw_seq[1:]  # 取除第一个SOS外的所有token

# 转换为模型可处理的张量(假设已有tokenizer)
input_ids = tokenizer(input_seq, return_tensors="pt")["input_ids"]
target_ids = tokenizer(target_seq, return_tensors="pt")["input_ids"]

# 模型前向传播与损失计算
outputs = model(input_ids)  # 输出为各位置的token概率分布
loss = criterion(outputs.view(-1, vocab_size), target_ids.view(-1))

内容的提问来源于stack exchange,提问作者mac179

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 11:37:17