1、请完整实现多头注意力机制(Multi-Head Attention)的代码,包括query、key、value的计算、注意力权重的计算和输出投影等步骤
import torch
import torch.nn as nn
import torch.nn.functional as F
class MultiHeadAttention(nn.Module):
def __init__(self, embed_dim, num_heads):
super().__init__()
assert embed_dim % num_heads == 0
self.embed_dim = embed_dim
self.num_heads = num_heads
self.head_dim = embed_dim // num_heads
self.scale = self.head_dim ** -0.5
self.W_q = nn.Linear(embed_dim, embed_dim)
self.W_k = nn.Linear(embed_dim, embed_dim)
self.W_v = nn.Linear(embed_dim, embed_dim)
self.out_proj = nn.Linear(embed_dim, embed_dim)
def forward(self, query, key, value):
# (B, T, E)
B, T, E = query.size()
Q = self.W_q(query) # (B,T,E)
K = self.W_k(key)
V = self.W_v(value)
# reshape into heads manually
# (B, T, num_heads, head_dim) → (B, num_heads, T, head_dim)
Q = Q.view(B, T, self.num_heads, self.head_dim).transpose(1, 2)
K = K.view(B, T, self.num_heads, self.head_dim).transpose(1, 2)
V = V.view(B, T, self.num_heads, self.head_dim).transpose(1, 2)
# scaled dot‑product attention
attn_scores = torch.matmul(Q, K.transpose(-2, -1)) * self.scale # (B,H,T,T)
attn_probs = F.softmax(attn_scores, dim=-1)
attn_output = torch.matmul(attn_probs, V) # (B,H,T,D)
# merge heads manually
# (B, H, T, D) → (B, T, H*D)
attn_output = attn_output.transpose(1, 2).contiguous().view(B, T, E)
return self.out_proj(attn_output)
# usage example
if __name__ == "__main__":
B, T, E = 2, 5, 16
num_heads = 4
mha = MultiHeadAttention(E, num_heads)
x = torch.randn(B, T, E)
out = mha(x, x, x)
print("Output shape:", out.shape)
2、请详细解释Transformer多头自注意力机制中Query、Key、Value的计算过程,并说明在整个计算过程中的维度变化
-
输入维度
(batch, seq_len, d_model) -
生成 Q / K / V
用三组线性层投影输入:
(batch, seq_len, d_model) → (batch, seq_len, d_model) -
多头拆分
d_head = d_model / num_heads
reshape 成:
(batch, num_heads, seq_len, d_head) -
计算注意力权重
Q × Kᵀ → (batch, num_heads, seq_len, seq_len) -
加权 V
得到每个 head 的输出:
(batch, num_heads, seq_len, d_head) -
多头合并
拼回:
(batch, seq_len, d_model) -
输出线性层
最终输出仍是:
(batch, seq_len, d_model)
3、请详细解释Transformer中Self-Attention的计算流程,并分析其时间复杂度和空间复杂度
流程如上:
4、请详细解释Transformer架构中多头注意力机制(Multi-HeadAttention)的工作原理,包括其数学表达和为什么多头设计能够提升模型性能,
5、请详细解释Transformer架构的计算过程,包括自注意力机制、前馈网络和各维且件的具体计算方式
6、请详细讲解Attention Is All You Need论文中提出的Transformer模型的总体结构,包括各个组件的功能、设计原理以及它们如何协同同工作
- 总体结构
Transformer 由 编码器(Encoder) 和 解码器(Decoder) 堆叠组成。
编码器和解码器均由多层相同结构模块组成(通常 6 层)。
核心组件:多头自注意力(Multi-Head Self-Attention)、前馈网络(Feed-Forward ***work)、残差连接与 LayerNorm、位置编码(Positional Encoding)。
- 各组件功能与设计原理
输入嵌入 + 位置编码
将离散 token 转为向量表示,并加入序列顺序信息。
设计原理:补偿注意力机制本身对顺序不敏感的缺陷。
多头自注意力(MHA)
并行多个注意力头捕捉不同子空间的依赖关系。
编码器:关注输入序列内部关系;解码器:同时关注已生成输出(Masked MHA)和编码器输出。
前馈网络(FFN)
两层全连接网络 + 激活函数(ReLU)。
对每个 token 独立处理,增加非线性表达能力。
残差连接 + LayerNorm
避免深层网络梯度消失,加速训练收敛。
解码器特有的 Masked MHA 与 Encoder-Decoder Attention
Masked MHA 保证自回归生成顺序。
Encoder-Decoder Attention 让解码器根据编码器输出获取输入序列信息。
- 组件协同工作
编码器:输入序列 → 逐层 MHA + FFN → 输出上下文丰富的特征表示。
解码器:逐步生成输出 token,利用 Masked MHA 捕捉生成历史,Encoder-Decoder Attention 获取输入信息,FFN 提供非线性映射。
输出层:线性映射 + Softmax 预测下一个 token。
- 设计优势
全注意力结构,捕捉长距离依赖,无需递归或卷积。
并行计算效率高,易于扩展。
多头注意力 + 前馈网络增强表达能力,残差 + LayerNorm 稳定训练。
7、请详细对比分析Transformer架构与RNN、LSTM在模型结构、计算机制、并行化能力、长序列处理等方面的主要区别和优缺点
8、请详细描述Transformer模型的核心架构,包括自注意力机制、前馈网络和各组件的作用
9、请详细解释缩放点积注意力中注意力分数(attnscores)的计算过程呈,并说明为什么需要除以head dim的平方根进行缩放,其数学原理和作用是什么?
10、请详细说明多头自注意力机制中Query、Key、Value矩阵的生成过程,包括线性变换和分头操作的具体实现步骤和数学原理。
11、请描述您从零实现Transformer架构的完整过程,包括自注意力机制、前馈网络和训练细节
12、请解释大语言模型中位置编码的作用和重要性。详细阐述旋转位置置编码(RoPE)的数学原理和工作机制,分析RoPE相比其他位置编码方法的优势。此外,请列举并比较其他常见的位置编码方案
13、请概述当前大模型领域的主要技术发展趋势、研究热点和面临的挑战。
14、请系统性地介绍您了解的大语言模型和多模态大模型,包括它们的的技术特点、架构差异和应用场景
15、请比较Decoder-only(如GPT系列)、Encoder-only(如BERT)和Encoder-Decoder(如T5)三种架构在大模型设计中的主要差异种口各自优势
16、请从模型架构、训练数据和token处理三个角度,详细阐述扩展大模型上下文长度的技术方案和实现方法
17、请详细解释RoPE(Rotary Position Embedding)旋转位置编码的教数学原理和工作机制,并分析其相比传统的绝对位置编码在长序列建模、外推能力和计算效率方面的优势?
18、请分析大模型产生幻觉(Hallucination)现象的主要原因和底层机制
19、针对大模型的幻觉问题,有哪些有效的缓解和解决方案?请从技才术层面系统阐述