大模型架构层次详解(完整版)
大模型本质上是一个深度神经网络其内部结构精密且复杂。为了便于理解我们可以将其架构解构为五个核心逻辑层级每一层都承担着特定的“认知”功能。以下是对各层的通俗讲解及代码实现演示。1. 输入表示层Input Representation Layer通俗讲解这一层是模型的“眼睛”和“耳朵”负责将人类世界的文本信息转化为机器能理解的数学信号。它首先通过分词Tokenization将句子切分成一个个小片段token然后通过嵌入Embedding将每个 token 映射成一个高维向量。在这个向量空间里语义相近的词如“猫”和“狗”距离会更近这为模型后续的理解打下了基础。此外该层还通常包含位置编码Positional Encoding赋予序列中每个词“位置”信息因为 Transformer 本身没有顺序概念。段落编码Segment Embedding用于多句任务如问答。代码案例import torch import torch.nn as nn # 定义词汇表大小和嵌入维度 vocab_size 10000 # 假设词汇表有1万个词 embedding_dim 768 # 常用的向量维度如BERT-base # 初始化嵌入层 embedding_layer nn.Embedding(vocab_size, embedding_dim) # 模拟输入假设输入是 我 爱 AI对应的Token ID为[101, 567, 2048] input_ids torch.tensor([[101, 567, 2048]]) # shape: [batch_size1, seq_len3] # 进行嵌入计算 input_embeddings embedding_layer(input_ids) print(f输入形状: {input_ids.shape}) # [1, 3] print(f嵌入后形状: {input_embeddings.shape}) # [1, 3, 768] → 每个词变成768维向量✅ 输出示例输入形状: torch.Size([1, 3]) 嵌入后形状: torch.Size([1, 3, 768]) 提示实际应用中会使用 Hugging Facetransformers库中的tokenizer来自动完成分词 编码。2. 核心特征提取层Core Feature Extraction Layer通俗讲解这是大模型的“大脑皮层”也是 Transformer 架构的核心所在。它由数十个相同的Transformer Block堆叠而成。每个 Block 内部包含两个关键组件多头自注意力机制Multi-Head Self-Attention让模型在处理每个词时都能同时关注到句子中所有其他词理解上下文依赖关系。例如“他喜欢猫”中的“他”可以关联到前面的“李明”。前馈神经网络Feed-Forward Network, FFN对注意力输出的信息进行非线性变换与深加工提升表达能力。通过残差连接Residual Connection和层归一化LayerNorm确保深层网络训练稳定。代码案例完整实现一个 Transformer Blockclass SimpleTransformerBlock(nn.Module): def __init__(self, embed_dim768, num_heads12): super().__init__() # 多头自注意力层 self.self_attn nn.MultiheadAttention(embed_dim, num_heads, batch_firstTrue) # 前馈神经网络 (FFN) self.ffn nn.Sequential( nn.Linear(embed_dim, embed_dim * 4), # 扩展至4倍 nn.GELU(), # 非线性激活函数 nn.Linear(embed_dim * 4, embed_dim) # 回缩到原始维度 ) # 层归一化用于稳定训练 self.norm1 nn.LayerNorm(embed_dim) self.norm2 nn.LayerNorm(embed_dim) def forward(self, x): # Step 1: 自注意力 残差连接 归一化 attn_output, _ self.self_attn(x, x, x) # QKVx x self.norm1(x attn_output) # 残差连接 # Step 2: 前馈网络 残差连接 归一化 ffn_output self.ffn(x) x self.norm2(x ffn_output) # 残差连接 return x # 测试使用上一层的嵌入输出作为输入 block SimpleTransformerBlock(embed_dim768, num_heads12) # 假设输入是 [1, 3, 768] 的嵌入向量 x input_embeddings # shape: [1, 3, 768] # 传入 block output block(x) print(f经过一个 Transformer Block 后形状: {output.shape}) # [1, 3, 768]✅ 输出示例经过一个 Transformer Block 后形状: torch.Size([1, 3, 768]) 小贴士真实的大模型如 GPT、BERT会堆叠 12~48 层这样的 Block逐层提取越来越抽象的语义特征。3. 上下文融合层Contextual Fusion Layer通俗讲解经过多个 Transformer Block 的叠加后每个词的表示已经融合了整句话甚至更长上下文的信息。这一层的作用就是整合这些深层上下文信息让模型真正“读懂”句子的整体含义。例如在“北京是中国的首都”这句话中第一个词“北京”的向量已经包含了“中国”、“首都”等背景信息不再只是字面意思。在实践中这一层常表现为最终的隐藏状态输出如 BERT 中的[CLS]向量或对所有位置向量做池化如平均池化、最大池化得到整体表示代码案例# 模拟堆叠多个 Transformer Block简化为两层 num_layers 2 transformer_stack nn.Sequential(*[SimpleTransformerBlock(768, 12) for _ in range(num_layers)]) # 输入[1, 3, 768] x input_embeddings # 逐层传递 for layer in transformer_stack: x layer(x) print(f经过 {num_layers} 层后形状: {x.shape}) # [1, 3, 768] # 取第一个 token通常是 [CLS]作为整句表示 sentence_embedding x[:, 0, :] # shape: [1, 768] print(f句子级表示向量: {sentence_embedding.shape}) # [1, 768]✅ 输出示例经过 2 层后形状: torch.Size([1, 3, 768]) 句子级表示向量: torch.Size([1, 768]) 这个[CLS]向量就是下游任务如分类、情感分析的输入4. 输出生成层Output Generation Layer通俗讲解这一层是模型的“嘴巴”——负责把学到的知识“说出来”。对于不同任务它的形式也不同语言模型任务如 GPT预测下一个词的概率分布。分类任务如 BERT将最终表示映射到类别标签。序列生成任务如翻译、摘要逐步生成目标序列。本质是一个输出投影层Projection Layer通常是一个线性层 softmax。代码案例语言模型输出头class LMHead(nn.Module): def __init__(self, embed_dim768, vocab_size10000): super().__init__() self.proj nn.Linear(embed_dim, vocab_size) # 投影到词汇空间 self.softmax nn.LogSoftmax(dim-1) # 得到 log-probabilities def forward(self, hidden_states): # hidden_states: [batch, seq_len, embed_dim] logits self.proj(hidden_states) # [batch, seq_len, vocab_size] log_probs self.softmax(logits) return log_probs # 构建输出头 lm_head LMHead(embed_dim768, vocab_size10000) # 使用最后一层的输出作为输入 log_probs lm_head(x) # shape: [1, 3, 10000] # 获取最后一个词的预测概率分布 last_token_logits log_probs[:, -1, :] # shape: [1, 10000] predicted_token_id last_token_logits.argmax(dim-1).item() print(f预测下一个词的 Token ID: {predicted_token_id}) 实际中还会加入温度采样temperature sampling、Top-k / Top-p 采样等策略来控制生成多样性。5. 解码与推理层Decoding Inference Layer通俗讲解这是模型的“思维执行器”负责将模型的内部表示转化为可读的自然语言输出。尤其在生成式任务中至关重要。它包括贪婪搜索Greedy Search每一步选最可能的词。束搜索Beam Search保留多个候选路径寻找最优序列。采样生成Sampling按概率随机选择增加创造性。重复惩罚Repetition Penalty、长度约束等技巧。代码案例简单贪心解码模拟def greedy_decode(model, start_ids, max_length10): device next(model.parameters()).device input_ids start_ids.to(device) generated input_ids.clone() with torch.no_grad(): for _ in range(max_length): # 获取当前输出 outputs model(generated) # 假设 model 包含所有层 next_token_logits outputs[:, -1, :] # 取最后一个位置的 logits # 贪心选择取最大值对应的 token next_token next_token_logits.argmax(dim-1).unsqueeze(1) # 拼接新词 generated torch.cat([generated, next_token], dim-1) # 到达结束符或达到长度限制则停止简化示例 if next_token.item() 102: # 假设 102 是 [SEP] 标记 break return generated # 模拟调用需完整模型结构 # 注意此处仅示意流程真实模型应封装好 forward 函数 print(开始生成……) generated_seq greedy_decode(lm_head, input_idsinput_ids, max_length8) print(f生成结果: {generated_seq.squeeze().tolist()})✅ 示例输出虚构生成结果: [101, 567, 2048, 1001, 345, 987, 102]✅ 实际部署中会使用transformers.generation.GenerationConfiggenerate()方法。 总结五大层级全景图层级功能关键技术1. 输入表示层文本 → 数学向量分词、嵌入、位置编码2. 核心特征提取层提取深层语义Transformer Block自注意力FFN3. 上下文融合层整合全局信息多层堆叠、[CLS] 向量、池化4. 输出生成层生成预测结果线性投影 Softmax5. 解码与推理层生成自然语言贪心/束搜索/采样 延伸学习建议学习Hugging Face Transformers库快速构建真实模型from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer AutoTokenizer.from_pretrained(gpt2) model AutoModelForCausalLM.from_pretrained(gpt2)探索attention visualization工具如transformers.io观察注意力权重。理解因果掩码causal mask在 GPT 系列中的作用。一句话总结大模型就像一位“超级阅读理解者”——从文字出发层层解析最终能写出文章、回答问题、甚至创作故事。而这一切都源于这五个逻辑清晰、协同工作的认知