预训练与微调
什么是预训练
预训练(Pretraining)是指在大规模数据集上训练一个基础模型,让模型学习通用的知识和模式。这个基础模型可以后续用于各种下游任务。
类比:预训练就像让一个人先广泛阅读各种书籍,学习通用的知识和思维方式,然后再学习特定领域的专业技能。
预训练数据
大语言模型的预训练数据通常包括:
- 网页文本(维基百科、新闻网站、博客等)
- 书籍
- 代码仓库
- 论文
- 社交媒体内容
数据规模:现代大语言模型的预训练数据通常达到万亿级别的Token。
预训练目标
预训练阶段的主要目标是让模型学习:
- 语言知识:语法、词汇、语义
- 世界知识:事实、概念、关系
- 推理能力:逻辑、因果、类比
- 通用能力:理解、生成、推理等
预训练目标函数
掩码语言模型(Masked Language Modeling, MLM)
代表模型:BERT
方法:
- 随机掩盖输入序列中的一些词
- 让模型预测这些被掩盖的词
- 模型需要理解上下文才能准确预测
示例:
输入:The cat sat on the [MASK]
预测:mat优点:
- 能同时利用上下文
- 适合理解任务
缺点:
- 不适合生成任务
- 训练效率较低
因果语言模型(Causal Language Modeling, CLM)
代表模型:GPT系列、Claude
方法:
- 给定前面的词,预测下一个词
- 只能利用前面的上下文
- 自回归生成
示例:
输入:The cat sat on the
预测:mat优点:
- 适合生成任务
- 训练效率高
缺点:
- 只能利用单向上下文
什么是微调
微调(Finetuning)是指在预训练模型的基础上,使用特定任务的数据进行进一步训练,使模型适应特定任务或领域。
类比:微调就像一个已经广泛阅读的人,现在要学习特定领域的专业知识(如医学、法律等)。
微调的类型
全量微调:更新所有参数
- 优点:效果最好
- 缺点:成本高、需要大量数据
部分微调:只更新部分参数
- 优点:成本较低
- 缺点:效果可能略差
参数高效微调:只更新少量参数
- 代表方法:LoRA、Prefix Tuning、Adapter
- 优点:成本很低、数据需求少
- 缺点:效果可能略差
指令微调(Instruction Tuning)
指令微调是一种特殊的微调方法,它使用"指令-响应"对来训练模型,使模型能够理解并遵循自然语言指令。
指令微调的数据
指令微调的数据通常包含:
- 指令:自然语言描述的任务
- 输入:任务的具体输入
- 输出:期望的输出
示例:
指令:将以下句子翻译成英文
输入:我喜欢人工智能
输出:I like artificial intelligence指令微调的作用
- 提升指令遵循能力:让模型能够理解和执行自然语言指令
- 改善对话能力:让模型更擅长多轮对话
- 增强泛化能力:让模型能够处理未见过的指令
RLHF(基于人类反馈的强化学习)
RLHF(Reinforcement Learning from Human Feedback)是一种使用人类反馈来优化模型的方法,它使模型的输出更符合人类偏好。
RLHF的步骤
- 收集人类偏好数据:让人类对模型的不同输出进行排序
- 训练奖励模型:基于人类偏好数据训练一个奖励模型
- 使用强化学习优化:使用奖励模型作为奖励信号,优化语言模型
RLHF的作用
- 提升输出质量:让模型输出更有用、更诚实、更无害
- 对齐人类偏好:让模型的输出更符合人类价值观
- 减少有害输出:降低模型生成有害内容的概率
参数高效微调方法
LoRA(Low-Rank Adaptation)
LoRA是一种参数高效的微调方法,它通过添加低秩矩阵来适应新任务,而不是更新所有参数。
原理:
- 在原有权重矩阵旁边添加低秩矩阵
- 只训练这些低秩矩阵
- 原有权重保持不变
优点:
- 参数量少(通常不到原模型的1%)
- 训练成本低
- 可以轻松切换不同任务
应用:
- 适应特定领域
- 个性化模型
- 快速实验
其他方法
- Prefix Tuning:在输入前添加可学习的提示
- Adapter:在模型中添加小型适配器层
- Prompt Tuning:优化输入提示而非模型参数
微调的挑战和局限性
挑战
- 数据需求:需要高质量的领域数据
- 计算资源:即使参数高效微调也需要一定资源
- 灾难性遗忘:可能遗忘预训练学到的知识
- 过拟合:在小数据集上容易过拟合
局限性
- 效果限制:参数高效微调的效果可能不如全量微调
- 领域漂移:领域变化快时需要频繁微调
- 评估困难:如何评估微调效果是一个挑战
实际应用
预训练模型
- GPT-4:OpenAI的通用大语言模型
- Claude:Anthropic的AI助手
- LLaMA:Meta的开源模型
微调模型
- CodeLlama:专门针对代码的微调模型
- Med-PaLM:医学领域的微调模型
- BloombergGPT:金融领域的微调模型
总结
预训练与微调是大语言模型开发的核心流程:
- 预训练:在大规模数据上学习通用知识和能力
- 微调:适应特定任务或领域
- 指令微调:提升指令遵循能力
- RLHF:对齐人类偏好
理解预训练与微调有助于:
- 选择合适的模型
- 决定是否需要微调
- 理解模型的能力和局限
下一步学习
- 上下文窗口 - 了解模型如何处理长文本
- Tokenization - 了解模型如何处理文本