大模型发展史笔记:从Transformer到DeepSeek的架构演进与实操避坑指南

发布时间:2026/10/27 20:17:21
大模型发展史笔记:从Transformer到DeepSeek的架构演进与实操避坑指南 1. 从一张手写笔记说起为什么要重新梳理大模型发展史我在2022年底开始系统接触大模型当时手头只有几篇Transformer的原始论文和一堆零散的博客。真正让我把整条脉络串起来的反而是自己动手写的一份“学习笔记”——不是那种抄概念的笔记而是按时间线把每个关键节点、每个模型的改进动机、每次架构调整背后的取舍都记下来。这份笔记后来被我反复翻看每次重读都有新收获因为大模型这个领域发展太快新模型层出不穷但底层的演进逻辑其实一直没变。这份笔记的核心价值在于它把大模型LLM从2017年到今天的演进路线拆成了几个清晰的阶段每个阶段都对应着具体的技术突破和工程实践。如果你刚开始学大模型面对满屏的Transformer、BERT、GPT、DeepSeek这些名词感到无从下手或者你已经用过一些大模型API但说不清楚它们之间的本质区别那这份笔记的整理思路应该能帮到你。它不是一篇论文综述而是一个从业者从“能跑通代码”到“理解为什么这样设计”的认知升级记录。我整理这份笔记的初衷很简单当时我在做一个文本分类项目试了BERT效果不错但换到GPT系列做生成任务时发现两者的设计哲学完全不同。为了搞清楚“为什么BERT适合理解任务而GPT适合生成任务”我被迫回溯到Transformer原始论文然后一路追到GPT-3、BERT、T5、再到后来的DeepSeek、LLaMA等模型。这个过程里踩了不少坑也积累了一些只有动手做过才会明白的经验。下面我就按笔记的结构把大模型发展史拆开来讲重点放在每个阶段解决了什么问题、用了什么方法、以及实际使用时要注意什么。2. 史前时代在Transformer之前大家是怎么做NLP的2.1 循环神经网络与长短期记忆网络的统治期在2017年之前自然语言处理领域的主流架构是循环神经网络RNN及其变体长短期记忆网络LSTM。我第一次跑LSTM做情感分析时用的是PyTorch的nn.LSTM输入是一句话的词向量序列输出是最后一个时间步的隐藏状态再接一个全连接层做分类。代码很简单但训练起来很慢因为RNN必须按时间步顺序计算前一个词的结果要传给下一个词没法并行。LSTM通过门控机制输入门、遗忘门、输出门缓解了RNN的梯度消失问题能处理稍长一点的依赖。但它的根本缺陷没变序列越长信息传递路径越长梯度越容易消失或爆炸。我试过用LSTM处理超过200个词的文本效果明显下降即使加了注意力机制也只是缓解。另外LSTM的训练速度受限于序列长度一个batch里如果句子长度差异大padding之后计算浪费很严重。那个时期还有一个重要分支是Word2Vec和GloVe这类静态词向量。它们把每个词映射成一个固定维度的向量比如300维然后通过上下文窗口训练。问题是同一个词在不同语境下向量是一样的“苹果”在“吃苹果”和“苹果手机”里没有区分。虽然后来有ELMo这种上下文相关的词向量但底层还是LSTM没跳出序列建模的框架。2.2 注意力机制的萌芽与Seq2Seq的瓶颈2014年提出的Seq2Seq模型是机器翻译的主流方案它用一个LSTM做编码器把源句子压成一个固定长度的向量再用另一个LSTM做解码器生成目标句子。这个固定长度向量成了瓶颈——句子一长信息就压丢了。2015年Bahdanau注意力被引入让解码器在每一步都能“看”到编码器的所有隐藏状态而不是只看最后一个。这算是注意力机制的早期成功应用但注意力只是附加在RNN上的一个模块不是独立架构。我实际复现过带注意力的Seq2Seq做英译中训练数据用的是IWSLT效果比纯Seq2Seq好不少但训练时间依然很长因为RNN的串行计算没法避免。而且注意力权重的计算还是依赖RNN的隐藏状态整体架构没有质变。这个阶段给我的经验是注意力机制本身很强大但如果底层还是RNN并行化和长距离依赖的问题就解决不了。这个痛点直接催生了Transformer。3. Transformer的诞生一次架构上的彻底重构3.1 自注意力机制到底解决了什么问题2017年Google的论文《Attention Is All You Need》提出了Transformer彻底抛弃了RNN和CNN只用自注意力Self-Attention和前馈网络。我第一次读这篇论文时最震撼的是它的并行性输入序列的所有位置可以同时计算注意力不需要按时间步循环。这意味着训练时GPU利用率大幅提升可以处理更长的序列。自注意力的核心计算是对于每个输入向量生成Query、Key、Value三个向量然后用Query和所有Key做点积得到注意力权重再对Value加权求和。公式是Attention(Q,K,V) softmax(QK^T / sqrt(d_k)) V。这里的sqrt(d_k)是缩放因子防止点积结果太大导致softmax梯度消失。我手写实现过这个计算用PyTorch的torch.matmul和torch.softmax几行就能搞定但要注意维度对齐和mask处理。多头注意力是另一个关键设计把Q、K、V分成多个头每个头独立计算注意力最后拼接。这样模型可以同时关注不同位置的不同特征。比如一个头关注语法依赖另一个头关注语义相似度。我试过把头数从8改成16在小数据集上效果没提升反而过拟合所以头数不是越多越好要和模型维度匹配。3.2 位置编码没有循环和卷积怎么知道词的顺序Transformer没有循环结构也没有卷积的局部感受野所以必须显式注入位置信息。原始论文用的是正弦位置编码对于位置pos和维度i用sin(pos/10000^(2i/d))和cos(pos/10000^(2i/d))交替生成。这样每个位置都有一个唯一的编码向量而且相对位置关系可以通过线性变换表示。我实际用的时候发现正弦编码在短序列上没问题但序列很长时外推能力有限。后来很多模型改用可学习的位置嵌入比如BERT就是把位置也当成一个可训练的embedding。但可学习嵌入的问题是最大长度固定超过就得截断。再后来出现了旋转位置编码RoPE通过旋转矩阵把位置信息融入注意力计算外推能力更好LLaMA和DeepSeek都用了这种方案。我对比过RoPE和正弦编码在长文本任务上的表现RoPE确实更稳尤其是序列长度超过训练长度时。3.3 编码器-解码器结构的分化原始Transformer是编码器-解码器结构编码器处理输入序列解码器生成输出序列中间用交叉注意力连接。这个结构适合机器翻译这类序列到序列的任务。但后来大家发现根据任务类型不同可以只用编码器或只用解码器。BERT只用了编码器通过掩码语言模型MLM预训练即随机遮住一些词让模型预测。这样模型能学到双向上下文适合理解类任务比如分类、问答、命名实体识别。GPT只用了解码器通过自回归语言模型预训练即预测下一个词。这样模型能生成连贯文本适合生成类任务。我实际用BERT做文本分类时只需要在[CLS]token的输出上加一个分类层微调几个epoch就能达到不错的效果。而用GPT做生成时要注意解码策略比如贪心搜索、束搜索、温度采样不同策略对生成质量影响很大。4. 预训练时代的开启BERT与GPT的路线之争4.1 BERT的掩码语言模型与下一句预测2018年Google发布BERT把预训练微调的模式推向了主流。BERT的预训练有两个任务掩码语言模型MLM和下一句预测NSP。MLM随机遮住15%的词其中80%替换为[MASK]10%替换为随机词10%保持不变。这样做的原因是如果全用[MASK]微调时模型没见过[MASK]会有偏差。NSP是判断两个句子是否连续用来学句子间关系。我复现过BERT的预训练用的是中文维基百科数据跑在单卡V100上。MLM的收敛速度比预期慢因为每次只有15%的词参与损失计算。而且NSP任务后来被证明效果有限RoBERTa直接去掉了NSP只保留MLM效果反而更好。这给我的经验是预训练任务的设计要谨慎不是越多越好任务之间可能互相干扰。BERT的输入表示也值得注意[CLS]用于分类[SEP]用于分隔句子还有段嵌入区分两个句子。我实际微调时发现[CLS]的输出确实能聚合整句信息但对于长文本[CLS]可能关注不到所有细节后来有研究用平均池化或多层聚合来改进。4.2 GPT的自回归路线与零样本能力OpenAI的GPT系列走的是另一条路只用解码器自回归预测下一个词。GPT-1只有1.17亿参数GPT-2有15亿GPT-3直接飙到1750亿。GPT-3的论文《Language Models are Few-Shot Learners》展示了上下文学习能力不给梯度更新只在提示里给几个例子模型就能完成新任务。我第一次用GPT-3的API做few-shot分类时确实被震撼到了——给几个示例模型就能按格式输出不需要微调。但GPT-3的API调用成本高而且生成结果不稳定。我试过用温度参数控制随机性温度低时输出更确定但可能重复温度高时更多样但可能跑题。后来GPT-3.5和GPT-4通过人类反馈强化学习RLHF进一步对齐生成质量大幅提升。RLHF的流程是先监督微调再训练奖励模型最后用PPO优化策略。这个过程工程复杂度很高但效果确实好。4.3 两条路线的融合与分化BERT和GPT的路线之争持续了一段时间后来大家发现两者可以结合。比如T5把所有任务都转成文本到文本的格式用编码器-解码器结构统一处理。BART也是编码器-解码器但预训练任务是去噪自编码。我实际用T5做摘要生成时只需要在输入前加“summarize: ”前缀模型就能输出摘要非常方便。但真正让大模型出圈的还是GPT系列因为生成任务更通用而且解码器架构更适合规模化。BERT系列后来发展出RoBERTa、ALBERT、DistilBERT等变体主要在预训练任务和模型压缩上做优化。我个人的经验是理解类任务优先用BERT系生成类任务优先用GPT系如果任务复杂且数据少可以考虑T5或BART。5. 规模化之路从GPT-3到DeepSeek的架构演进5.1 参数规模与涌现能力GPT-3的1750亿参数让业界看到了规模化定律模型越大性能越好而且某些能力在规模达到一定程度后突然出现这叫涌现能力。比如多步推理、代码生成、数学计算在小模型上几乎做不了但大模型能做得不错。我对比过GPT-2和GPT-3在数学题上的表现GPT-2基本瞎猜GPT-3能给出步骤虽然不一定对。但规模化也带来问题训练成本极高推理延迟大部署困难。GPT-3训练一次要几百万美元普通团队根本玩不起。所以后来出现了各种高效训练和推理的技术比如混合精度训练、梯度检查点、模型并行、流水线并行。我在单卡上试过用梯度检查点训练BERT-large显存占用从24G降到10G左右但训练速度慢了30%这是典型的空间换时间。5.2 稀疏专家模型与DeepSeek的突破为了在控制计算量的同时增加参数混合专家模型MoE被引入。MoE把前馈网络分成多个专家每次只激活其中几个。比如DeepSeek的MoE架构总参数很大但每次推理只用到一部分计算量可控。我研究过DeepSeek的技术报告它的多头潜在注意力MLA和DeepSeekMoE设计确实有创新在中文任务上表现很好。DeepSeek的另一个特点是开源模型权重可以下载这对研究者很友好。我下载过DeepSeek的7B模型在本地用llama.cpp跑推理量化到4bit后显存占用不到5G生成速度可以接受。但要注意开源模型的微调需要一定经验数据质量和超参设置很关键。我试过用LoRA微调DeepSeek做领域问答效果比全量微调差一点但显存需求低很多适合个人开发者。5.3 上下文长度的扩展与位置编码的改进大模型的上下文长度从最初的512扩展到现在的128K甚至1M。这背后是位置编码和注意力机制的改进。稀疏注意力、滑动窗口注意力、RoPE外推等技术让模型能处理更长文本。我实际测试过把上下文从4K扩展到32K后模型在长文档问答上的表现明显提升但推理成本也线性增长。这里有个坑不是所有模型都支持长上下文有些模型虽然声称支持但实际效果在超过训练长度后急剧下降。我建议在使用长上下文时先做小规模测试确认模型在目标长度上的表现。另外长上下文对显存要求高可以用FlashAttention优化它通过分块计算减少显存访问速度提升明显。6. 实操中的关键问题与排查技巧6.1 模型选型什么任务用什么模型选模型不能只看参数规模要看任务类型、数据量、计算资源。我整理了一个简单的对照表任务类型推荐模型理由注意事项文本分类BERT/RoBERTa双向编码理解能力强数据少时用LoRA微调文本生成GPT/LLaMA/DeepSeek自回归解码生成流畅注意解码策略和重复惩罚机器翻译T5/BART编码器-解码器序列到序列需要平行语料问答系统BERT/RoBERTa抽取式问答效果好长文档需分段处理代码生成Codex/DeepSeek代码预训练语法准确注意代码执行安全我实际用BERT做分类时学习率设2e-5batch size 32训练3个epoch效果就很稳。用GPT做生成时温度设0.7top_p设0.9重复惩罚设1.1生成质量比较平衡。6.2 训练中的常见问题与排查损失不下降先检查数据预处理比如tokenizer是否匹配标签是否对齐。我遇到过标签错位导致损失震荡排查了半天才发现是数据加载时shuffle没设随机种子。过拟合小数据集上微调大模型很容易过拟合。可以加dropout、权重衰减、早停。我试过用LoRA微调只训练低秩矩阵过拟合风险小很多。显存不足用梯度累积、混合精度、梯度检查点。我试过用torch.cuda.amp做混合精度显存减少30%速度提升20%。推理速度慢用量化、蒸馏、剪枝。我试过用ONNX Runtime加速BERT推理速度提升2倍左右。6.3 部署与成本控制大模型部署要考虑延迟、吞吐、成本。我试过用vLLM部署LLaMA吞吐量比HuggingFace Transformers高很多因为vLLM用了PagedAttention优化显存管理。但vLLM对模型格式有要求需要转换。成本控制方面API调用按token计费要控制输入输出长度。我试过用缓存机制对相同输入直接返回缓存结果节省不少费用。另外小模型能做的事不要用大模型比如简单分类用BERT就够了没必要上GPT-4。7. 学习路径与资源推荐7.1 从理论到代码的进阶路线我的建议是先读Transformer原始论文然后手写一个简化版Transformer不用太大2层编码器2层解码器就行。用PyTorch实现跑一个小的翻译任务比如把数字转成英文。这个过程能帮你理解注意力计算、位置编码、残差连接、层归一化。然后读BERT和GPT的论文理解预训练任务的区别。接着用HuggingFace Transformers库微调BERT做分类再用GPT-2做生成。最后研究DeepSeek、LLaMA的架构改进比如RoPE、MoE、MLA。我实际走这条路花了大概三个月每天两小时。手写Transformer那部分最耗时但收获最大因为很多细节只有自己实现过才会注意到比如mask的对角线处理、padding的忽略。7.2 常用工具与库HuggingFace Transformers模型加载和微调的首选文档全社区活跃。PyTorch灵活适合研究和自定义模型。vLLM推理加速适合部署。llama.cpp本地推理支持量化适合个人电脑。DeepSeek技术社区中文资料多有官方技术报告和代码。我平时用HuggingFace的Trainer做微调用datasets加载数据用accelerate做分布式训练。这些工具配合起来从数据到模型到训练流程很顺。7.3 避坑经验汇总不要一上来就训大模型先从BERT-base开始理解流程后再上大的。数据质量比数量重要我试过用噪声数据微调效果比不用还差。学习率要调不同模型不同任务学习率差异很大BERT常用2e-5GPT常用1e-4。保存检查点训练中断是常事定期保存能省很多时间。多读论文大模型发展快论文是最新技术的来源但要注意甄别质量。这份笔记我还在持续更新因为大模型领域每个月都有新东西。但核心的演进逻辑——从RNN到Transformer从BERT到GPT从稠密到稀疏从短上下文到长上下文——这些主线不会变。抓住主线再去看新模型就不会迷失在细节里。