既然我们已经明确了预训练LLM的调整原因以及与迁移学习的关系,现在我们将注意力转向用于这种调整的实际方法。核心思想是获取一个通用预训练模型,并使用特定任务或特定领域的数据对其进行调整。然而,这种调整的具体执行方式差异很大,从而形成了一系列微调方法,它们在计算成本、内存需求和可能结果上各有不同。在这个范围的一端是全参数微调 (Full FT)。顾名思义,这种方法涉及在调整过程中更新预训练LLM的所有参数(权重和偏差)。工作方式: 您从预训练模型权重开始,使用您的特定数据集继续训练过程。标准的反向传播和优化算法(如 AdamW)用于计算每个参数的梯度并进行更新。比喻: 可以想象,这就像让一位博学专家(预训练LLM)将其全部精力和学习能力投入到掌握一个新专业领域(您的特定任务)中。他们会调整所有现有的知识联系。优点: 能够在该目标任务上获得最高的表现,因为模型的全部能力都用于调整。缺点: 计算成本极高,需要大量GPU内存(通常是多个高端GPU)和训练时间,尤其是对于拥有数十亿参数的模型。为每个微调任务存储一个完整的模型副本变得不切实际。它还容易出现“灾难性遗忘”,即模型失去在预训练期间获得的一些通用能力。由于全参数微调 (Full FT) 巨大的资源需求,特别是随着模型规模的不断增大,参数高效微调 (PEFT) 方法受到了广泛关注。这些方法旨在通过仅修改总参数的一小部分,或引入少量新的可训练参数来调整LLM,同时保持绝大多数原始预训练权重不变。工作方式: PEFT方法不更新所有$N$个参数(其中$N$可以是数十亿个),而是侧重于更新或添加$\Delta N$个参数,其中$\Delta N \ll N$。这些$\Delta N$参数的具体选择或引入方式定义了特定的PEFT方法。比喻: 与其完全重新训练这位博学专家,不如给他们提供专门的工具或一小组集中的指令(高效参数)来调整其专业知识以适应新任务,使其核心知识基本保持不变。示例(稍后会详细介绍):适配器模块 (Adapter Modules): 在冻结的Transformer模块中插入小的、可训练的前馈层。低秩适应 (LoRA): 将可训练的低秩矩阵注入现有层中,有效地学习对原始权重矩阵的低秩更新。提示微调 (Prompt Tuning): 保持整个模型冻结,只学习一个小的连续“提示”嵌入,该嵌入被添加到输入前面。前缀微调 (Prefix Tuning): 与提示微调类似,但学习自注意力机制中键和值的前缀。优点: 大幅降低计算成本和内存需求(可训练参数可以少几个数量级)。便于存储和部署,因为您只需存储少量修改/添加的参数以及单个基础模型。通常有助于减轻灾难性遗忘。缺点: 表现有时可能会略低于全参数微调 (Full FT),尽管考虑到效率提升,这种差距通常很小且可以接受。其有效性可能取决于所选的PEFT方法和具体任务。digraph FineTuningSpectrum { rankdir=LR; node [shape=box, style=rounded, fontname="sans-serif", margin=0.2]; edge [fontname="sans-serif", fontsize=10]; subgraph cluster_approach { label = "微调方法"; style=dashed; color="#adb5bd"; FullFT [label="全参数微调\n(更新所有参数)", width=3, style=filled, fillcolor="#ffc9c9"]; PEFT [label="参数高效微调 (PEFT)\n(更新/添加少量参数)", width=3, style=filled, fillcolor="#a5d8ff"]; } subgraph cluster_factors { label = "考虑因素"; style=dashed; color="#adb5bd"; rank = same; HighCompute [label="高\n计算成本\n& 内存", shape=oval, width=1.5, style=filled, fillcolor="#ffec99"]; LowCompute [label="低\n计算成本\n& 内存", shape=oval, width=1.5, style=filled, fillcolor="#b2f2bb"]; HighPerf [label="潜在\n最高表现", shape=oval, width=1.5, style=filled, fillcolor="#d8f5a2"]; GoodPerf [label="通常\n良好表现", shape=oval, width=1.5, style=filled, fillcolor="#c0eb75"]; StorageHeavy [label="存储密集\n(完整模型副本)", shape=oval, width=1.5, style=filled, fillcolor="#ffd8a8"]; StorageLight [label="存储高效\n(小型适配器)", shape=oval, width=1.5, style=filled, fillcolor="#96f2d7"]; } FullFT -> HighCompute [label="需要"]; FullFT -> HighPerf [label="实现"]; FullFT -> StorageHeavy [label="导致"]; PEFT -> LowCompute [label="需要"]; PEFT -> GoodPerf [label="实现"]; PEFT -> StorageLight [label="导致"]; {rank=min; FullFT; PEFT;} {rank=max; HighCompute; LowCompute; HighPerf; GoodPerf; StorageHeavy; StorageLight;} }根据计算资源、潜在表现和存储需求,对全参数微调和参数高效微调方法进行比较。全参数微调 (Full FT) 和各种PEFT方法之间的选择在很大程度上取决于可用的计算资源、特定任务需求、期望的表现水平以及部署限制。本课程将介绍全参数微调 (Full FT)(第3章)和几种重要的PEFT技术(第4章)的实际实施和权衡,为您提供所需知识,以便选择和应用最适合您需求的调整策略。在介绍后续章节中涵盖的数据准备和实施细节之前,理解这个范围是很重要的。