# 预训练与微调

预训练(Pre-training) 为模型提供一个良好的初始参数估计。在这一阶段,模型通过海量数据学习通用的语言知识和模式。

微调(Fine-tuning) 则是在预训练的基础上,使用特定任务的数据集对模型进行进一步训练。若预训练效果良好,微调能更快地收敛到泛化能力强的局部最优解。


# 大语言模型(LLM)的代表性架构

BERT(Bidirectional Encoder Representations from Transformers)

  • BERT 采用双向 Transformer 编码器。
  • 核心训练任务是 Masked Language Model (Masked LM):用特殊标记 [MASK] 替换输入中的部分词汇,然后预测这些被遮蔽的词,模型的损失只计算在这些被遮蔽词上。

GPT(Generative Pretrained Transformer)

  • GPT 采用 Transformer 解码器,擅长生成任务。
  • InstructGPT(指令微调技术):通过为每个 NLP 任务设计不同的提示模板,并用相应的指令和数据对模型进行微调。这使得模型在面对从未见过的新任务指令时,也能展现出零样本(Zero-shot) 任务解决能力,这体现了模型的泛化能力。
  • RLHF(Reinforcement Learning from Human Feedback,人类反馈强化学习)
    1. 有监督微调:使用人工标注的高质量对话数据对模型进行微调。
    2. 奖励模型:训练一个模型来预测人类对模型输出的偏好分数。
    3. 策略优化:使用强化学习算法,根据奖励模型的分数来优化语言模型,使其产生更受人类偏好的回答。
  • RLHF 的 Prompt(提示)通常来源于真实的用户请求。

# 语言模型的核心现象与能力

缩放法则(Scaling Laws)

  • 模型的效果会随着计算量、数据集大小和参数数量的指数级增长而呈现线性提升。

涌现能力(Emergent Abilities)

  • 当模型规模达到某个临界点时,模型的能力会突然大幅提升,而不是平稳增长。这种能力的出现与模型的具体结构关系不大,更多取决于其规模。

# 提示工程(Prompt Engineering)

提示工程是一种通过设计和优化输入文本(Prompt)来引导大语言模型产生所需输出的技术。

  • 零样本提示(Zero-shot Prompting):直接将任务描述输入模型,不提供任何示例。
  • 指令提示(Instruction Prompting):通过提供明确的指令或步骤来指导模型执行特定任务。
  • 少样本提示(Few-shot Prompting):也称为上下文学习(In-Context Learning, ICL)。在提示中提供几个任务示例作为范本,然后让模型解决新问题。
    • 这与微调(Fine-tuning) 截然不同,后者需要通过大量数据反复更新模型权重来实现训练。
    • 也不同于指令微调,后者旨在让模型掌握在未见过的任务上泛化的能力。
  • 思维链(Chain of Thought, CoT)
    • 通过在提示中加入“Let's think step by step”(让我们一步步思考)等短语,引导模型输出具体的推理过程。
    • 也可以将生成的推理步骤与最终问题拼接后重新提问。
    • 该技术可用于零样本或少样本场景,但在模型规模足够大时才能展现出显著效果。
    • 对推理任务效果明显,但对其他任务效果不一。
  • 自洽性(Self-Consistency)
    • 作为 CoT 的补充技术,通过多次生成不同的推理链条,然后选择多数派答案作为最终结果。
  • 最少到最多提示(Least-to-most Prompting, LtM)
    • 首先将一个复杂问题分解为多个子问题,然后逐一解决这些子问题。

# 轻量化微调技术

这些技术旨在减少微调所需的计算和存储资源,同时保持预训练模型的强大能力。

  • LoRA(Low-Rank Adaptation,低秩自适应)

    • 选择预训练模型中的特定权重矩阵(例如某层注意力机制的 WqW_q)。
    • 将其分解为两个低秩矩阵的乘积,只对这两个低秩矩阵进行微调。
    • 显著减少了需要训练的参数量。
  • Adapter(适配器)

    • 在预训练模型的每一层(或某些层)中添加一个小的 Adapter 模块。
    • 微调时,冻结预训练模型的主体,仅训练这些 Adapter 模块来学习特定任务知识。
    • Adapter 模块通常由一个降维层和一个升维层组成,形成一个“压缩-复原”的结构。
  • Prefix-Tuning(前缀微调)

    • 在模型的输入前添加一个可训练的、特定于任务的连续向量序列,即“前缀”。
    • 这个前缀完全由自由参数构成,与提示工程中的自然语言提示不同。
    • 只需要训练这个非常小的、特定于任务的前缀,就能实现对模型的微调。