全参数微调调整预训练模型的全部权重。与那些冻结模型大部分、只训练一小部分参数的方法不同,这种方式将每个权重都视为可训练的。这意味着模型在大规模预训练期间编码的知识会直接调整,以适应您专用数据集中的模式。这个过程是一个迭代循环,由监督学习的原理驱动。在每一步,模型都会从其在您的数据上的错误中学习,并且这种学习会通过整个网络反向传播。我们来把这个循环分解成它的基本阶段。微调循环全参数微调的核心是一个重复循环,它处理数据批次以逐步改进模型。这个循环包含四个主要阶段:前向传播、损失计算、反向传播和参数更新。前向传播:一批训练样本被输入模型。模型通过其许多层处理此输入,从嵌入层到最终输出层,以生成预测。对于文本生成任务,此预测是关于下一个token在整个词汇表上的概率分布。损失计算:模型的预测与您数据集中的实际目标进行比较。损失函数量化了预测输出与真实标签之间的差异,即“误差”。对于语言建模,这通常是交叉熵损失,它衡量模型预测的概率分布与序列中实际下一个token的匹配程度。高损失值表明预测不佳,而低损失值表明预测良好。反向传播:这是学习信号生成的地方。损失值用于计算模型中每个参数的梯度。反向传播是一种有效计算这些梯度的算法,它从最后一层开始,反向遍历整个网络。梯度 $ \nabla L(\theta) $ 指示每个参数应该调整的方向,以便最快地降低损失。在全参数微调中,此计算是针对所有参数执行的,从注意力机制到前馈网络权重。参数更新:优化器接收计算出的梯度,并使用它们更新模型的参数。这是根据前面介绍的梯度下降公式执行更改的步骤。在学习率的引导下,优化器沿着与梯度相反的方向迈出一小步,将模型权重推向在训练数据上产生更少错误的状态。整个循环重复多次迭代或周期,逐步使模型行为专门化。下图展示了单个训练步骤的流程。digraph G { rankdir=TB; splines=ortho; node [shape=box, style="rounded,filled", fontname="Arial", margin=0.2]; edge [fontname="Arial", fontsize=10]; subgraph cluster_model { label="预训练LLM"; style=filled; color="#e9ecef"; bgcolor="#f8f9fa"; model_weights [label="所有模型参数 (θ)", shape=cylinder, fillcolor="#ced4da"]; } subgraph cluster_data { label="微调数据"; style=filled; color="#e9ecef"; bgcolor="#f8f9fa"; input_data [label="输入与目标对", shape=note, fillcolor="#a5d8ff"]; } subgraph cluster_process { label="单个训练步骤"; style=dashed; color="#495057"; forward_pass [label="1. 前向传播", fillcolor="#96f2d7"]; loss_calc [label="2. 损失计算\nL(θ)", fillcolor="#ffc9c9"]; backward_pass [label="3. 反向传播\n(反向传播)", fillcolor="#ffd8a8"]; optimizer [label="4. 优化器步骤\n(例如 AdamW)", fillcolor="#d0bfff"]; } input_data -> forward_pass; model_weights -> forward_pass [style=dotted, label=" 读取权重"]; forward_pass -> loss_calc [label=" 模型输出"]; loss_calc -> backward_pass [label=" 损失值"]; backward_pass -> optimizer [label=" 梯度 (∇L)"]; optimizer -> model_weights [label=" 更新所有权重 (θ_new)"]; {rank=same; forward_pass; loss_calc;} {rank=same; backward_pass; optimizer;} }单个训练步骤的微调循环。数据前向流动以计算损失,损失信号反向流动以计算梯度,优化器使用这些梯度更新模型中的每个参数。优化器的作用尽管基本梯度下降公式 $ \theta_{new} = \theta_{old} - \eta \cdot \nabla L(\theta_{old}) $ 描述了更新,但现代训练流程使用更高级的优化器。基于 Transformer 模型最常见的选择是 AdamW 优化器。AdamW 是 Adam (自适应矩估计) 优化器的扩展。它通过以下方式改进了标准梯度下降:为每个独立参数保持自适应学习率。需要更大更新的参数会得到更多调整,而其他参数则调整得更精细。引入动量,这有助于加速训练并越过局部最小值。实施解耦权重衰减,这是一种正则化技术,通过惩罚大权重来帮助防止过拟合。这是 AdamW 相对于 Adam 的主要改进,并且在训练大型模型时特别有效。优化器不仅负责应用更新。它还需要大量内存来存储其内部状态,例如每个参数的过去梯度的移动平均值。当您微调一个拥有数十亿参数的模型时,优化器的内存占用会成为一个严肃的实际考量。全参数更新的影响更新每个参数会带来两个您必须应对的重大影响。首先,它计算开销大。为数十亿参数计算梯度并存储每个参数的优化器状态需要大量 GPU 内存 (VRAM)。这就是为什么在没有高端、数据中心级硬件的情况下,对 Llama 3 70B 或 GPT-4 等大型模型进行全参数微调通常不切实际。其次,它带来灾难性遗忘的风险。由于模型中的每个权重都可能发生变化,模型可能会失去在预训练期间获得的一些通用知识。如果您的微调数据集过小或过窄,模型可能会过度专业化,并在该特定领域之外的任务上表现不佳。平衡专业化与通用能力的保持是全参数微调中的一个主要挑战。理解这些机制是有效实施该技术的第一步。接下来的章节将解决由这些机制带来的实际挑战,从内存管理到配置训练过程以获得最佳结果。