大语言模型基础:Transformer架构、预训练与微调的区别、常见开源模型简介
在正式进入LoRA微调实战之前,我们必须先建立对大语言模型(LLM)底层机制的系统认知。LoRA(Low-Rank Adaptation)并非一个独立于模型之外的魔法工具,它是在预训练模型权重基础上进行参数高效修改的技术。因此,理解Transformer的核心计算逻辑、预训练与微调的本质差异,以及主流开源模型的架构特点,将直接决定你在后续章节中能否正确选择微调策略、设置超参数并诊断训练异常。本章将围绕这三块基石展开,帮助你构建一个清晰的“模型世界观”。
上图展示了本章的核心知识框架:Transformer作为底层引擎,预训练与微调作为两种训练范式,以及开源模型作为具体载体。LoRA微调正是作用于“预训练→微调”这一转换过程中的高效桥梁。下面我们逐一深入拆解。
2.1 Transformer架构:自注意力机制与堆叠结构
Transformer架构由Vaswani等人在2017年提出,彻底取代了RNN/LSTM成为大语言模型的标准骨架。其核心创新在于自注意力机制(Self-Attention),它允许模型在处理每个词元()时,直接计算该词元与序列中所有其他词元的相关性权重,从而捕捉长距离依赖关系。这种并行计算能力使得训练效率大幅提升,也为后续的规模扩展(Scaling Law)奠定了基础。
核心原理:多头注意力与位置编码
自注意力的计算过程可以概括为三个步骤:首先,将输入词向量分别乘以三个权重矩阵(W_Q、W_K、W_V),得到查询(Query)、键(Key)、值(Value)向量;然后,计算Query与所有Key的点积,经过缩放(除以√d_k)和Softmax归一化,得到注意力权重;最后,用权重对Value进行加权求和。多头注意力(MHA)则是将这一过程并行执行多次(例如8头或32头),每个头关注不同的子空间信息,最后拼接并线性变换。此外,由于Transformer没有循环结构,必须通过位置编码(Positional Encoding)注入词元的位置信息,常见的有正弦编码和可学习位置嵌入。
关键公式(单头注意力):
Attention(Q, K, V) = softmax(QK^T / √d_k) V
其中 d_k 为键向量的维度。除以 √d_k 是为了防止点积结果过大导致Softmax梯度消失。
堆叠结构与工程实现
一个标准的Transformer层由两个子层组成:多头注意力子层和前馈网络(FFN)子层。每个子层后都跟随残差连接(Residual Connection)和层归一化(LayerNorm)。FFN通常包含两个线性变换,中间使用ReLU或GELU激活函数。大语言模型(如LLaMA)通常堆叠32层、40层甚至更多这样的Transformer块。在工程实现中,KV Cache是推理阶段的重要优化手段——它将历史的Key和Value缓存下来,避免重复计算,但这也意味着微调时需要考虑缓存带来的显存开销。
| 组件 | 作用 | 微调时的影响 |
|---|---|---|
| 多头自注意力 | 捕捉词元间长距离依赖 | LoRA通常作用于Q、K、V、O矩阵 |
| 前馈网络 (FFN) | 非线性特征变换 | LoRA也可作用于FFN的权重矩阵 |
| 层归一化 | 稳定训练过程 | 通常冻结,不参与LoRA微调 |
| 残差连接 | 缓解梯度消失 | 保持原样,不修改 |
实战经验:在后续LoRA实验中,如果你发现模型在特定任务上表现不佳,可以尝试将LoRA的秩(Rank)分配到FFN层而非仅注意力层。FFN层存储了大量知识性记忆,对领域适配同样重要。
2.2 预训练与微调:从通用到专用的范式跃迁
预训练与微调是两种截然不同的训练阶段,理解它们的差异是掌握LoRA的前提。预训练阶段,模型在海量无标注文本(如数万亿)上进行自监督学习,目标是预测下一个词元(Next Prediction)。这一阶段需要数千张GPU和数周时间,成本极高,但赋予了模型强大的语言理解与生成能力。微调阶段,模型在特定任务的有标注数据上进行有监督学习,例如指令遵循、情感分类或代码生成。传统微调会更新全部参数,而LoRA则只更新少量新增参数。
判断方法:何时需要微调?
并非所有场景都需要微调。你可以通过以下问题快速判断:
- 任务是否超出了预训练知识范围?例如,让模型学习一种全新的专有名词体系或特定格式输出。
- 是否需要改变模型的输出风格?例如,从通用对话风格转变为严谨的法律文书风格。
- 是否有足够的标注数据?微调至少需要数百条高质量样本,否则效果可能不如提示工程。
如果以上答案均为“是”,则微调是必要的。而LoRA正是为了降低微调门槛而设计的。
案例拆解:从通用助手到金融客服
假设你是一家金融科技公司的算法工程师,需要将Qwen-7B模型改造成一个专业的金融客服助手。初始现象是:模型虽然能回答通用问题,但对“年化收益率计算”、“风险等级分类”等专业问题回答模糊,且输出格式不符合公司规范。
关键输入数据:你收集了5000条历史客服对话,每条包含用户问题、标准答案、意图标签(如“账户查询”、“理财推荐”)。
分析判断过程:直接使用全量微调需要更新70亿参数,单卡A100(80GB)无法承载,且容易过拟合。因此选择LoRA方案:冻结Qwen-7B全部原始权重,在注意力层的Q、V矩阵上注入秩为16的低秩分解矩阵。
实际操作步骤:
# 伪代码示例
from peft import LoraConfig, get_peft_model
config = LoraConfig(
r=16, # 秩
lora_alpha=32, # 缩放系数
target_modules=["q_proj", "v_proj"], # 只作用于Q和V
lora_dropout=0.1
)
model = get_peft_model(base_model, config)
# 训练3个epoch,学习率2e-4
结果对比:训练后,模型在金融意图分类准确率从68%提升至92%,回答格式合规率达到95%。训练耗时仅2小时(单卡A100),显存占用从70GB降至45GB。
风险与代价:LoRA微调后模型可能出现“灾难性遗忘”的轻微版本——对通用闲聊能力略有下降。复盘经验是:在训练数据中混入10%的通用对话数据,可有效缓解该问题。
常见误区:不要认为LoRA是万能的。如果任务需要模型学习全新的语言(如从零学习编程语言),LoRA的低秩假设可能不足以表达复杂的权重变化。此时应考虑继续预训练或使用更大的秩。
2.3 常见开源模型:LLaMA、Mistral与Qwen的选型指南
当前开源社区最活跃的三大家族分别是Meta的LLaMA、法国的Mistral以及阿里的Qwen。它们各有侧重,选型直接影响微调效果和部署成本。
核心差异对比
| 模型 | 参数规模 | 架构特点 | 许可证 | 中文能力 | 生态工具 |
|---|---|---|---|---|---|
| LLaMA 2/3 | 7B/13B/70B | 标准Transformer,GQA(分组查询注意力) | LLaMA License(商用需申请) | 较弱,需中文微调 | HuggingFace生态最全 |
| Mistral 7B | 7B/8x7B | 滑动窗口注意力(SWA),推理速度快 | Apache 2.0(宽松) | 一般,支持多语言 | vLLM支持极佳 |
| Qwen 1.5/2 | 0.5B-72B | 标准架构,强化中文语料 | Apache 2.0(部分版本) | 强,原生中文优化 | ModelScope支持好 |
选型判断流程
面对具体业务,你可以按照以下路径决策:
- 第一步:评估语言需求。若业务以中文为主,优先考虑Qwen系列,可减少大量中文微调成本。
- 第二步:评估推理性能。若对延迟敏感(如实时聊天),Mistral的滑动窗口注意力在长文本场景下显存占用更低。
- 第三步:评估生态与合规。若需要商用且避免法律风险,Apache 2.0协议的Mistral或Qwen更安全。
- 第四步:评估硬件资源。7B模型在FP16精度下需要约14GB显存,LoRA微调可降低至8GB左右。
实战场景:假设你需要在低配GPU(如RTX 3090 24GB)上微调一个中文法律问答助手。推荐选择Qwen-7B + LoRA。原因:Qwen原生中文分词器对法律术语切分更准确;LoRA将显存需求控制在20GB以内,且训练速度比全量微调快3倍。
总结复盘:模型不是越新越好
很多初学者盲目追求最新发布的模型,但忽略了两个关键点:一是新模型可能缺乏成熟的微调工具链支持;二是模型参数量越大,LoRA微调时需要的秩和训练步数也相应增加。建议在课程实战中,优先使用Qwen-7B或Mistral-7B作为练习对象,它们对LoRA的兼容性最好,且社区案例丰富,便于排错。
经验提醒:在开始任何微调项目前,先使用模型的原始权重跑通一次推理(Inference),确认模型加载、分词器配置无误。这一步能帮你区分“模型本身问题”和“微调引入的问题”。