跳过正文
  1. Posts/
  2. 微调部分/

大语言模型微调(一)概览

··2939 字·6 分钟
微调部分
蚂蚁无双
作者
蚂蚁无双
AI 与生活
目录

前言:此部分文章并非系统性的教学文章,网络上已经很多非常优秀的教学课程,顶尖且免费。比如,哔哩哔哩上李沐大神的《动手学深度学习v2》,Andrej Karpathy 在 YouTube 上教程,以及 Standford CS224N 课程。 这里主要记录作者的一些理解,有意思的知识点,或者豁然开朗的乐趣,希望你也能喜欢!

当我们谈到微调(fine-tuning)某个开源模型时,我们往往指的是监督微调(supervised fine-tuning,简称 sft)。

维基百科上对微调的定义如下:

Fine-tuning (deep learning)
#

In deep learningfine-tuning is an approach to transfer learning in which the parameters of a pre-trained model are trained on new data.

从以上定义可知 fine-tuning 也是伴随深度学习(deep learning)而来的新进词。维基百科上把微调作为一类迁移学习(transfer learning)方法,但其实没有必要纠结于概念定义。

个人以为人工智能与数学还是有非常大的区别。数学概念必须要做到精确,它会直接影响数学定理的证明以及推理。而人工智能中很多看似严肃的技术概念,其实和你平时对项目或者软件系统的取名没有太多区别。

计算机学术界是懂得造词的。李沐大神在解读 Transformer 论文就提及 deep learning 和 transformer 都是各位大牛造词的结果,当然比鲁迅先生的通假字有心机的多😄。想当年读研时,读博的师兄们也有提及造新词对文章录用的重要性。

言归正传,在讲微调(supervised fine-tuning,简称 sft),首先会介绍它的两个前辈迁移学习(transfer learning)和强化学习(reinforcement learning)。其次,会依次介绍, OpenAI 标志性大语言模型 ChatGPT 用到的 PPO 微调算法;在 PPO 基础上,避免使用强化学习中的 reward 模型,训练效率更高,模型效果更好的 DPO 算法;以及由 DPO 算法演进而来的 ORPO 和 SimPO 算法。

总结起来,大语言模型微调介绍会分为以下四部分,迁移学习和强化学习相关概念,PPO 算法,DPO 算法,ORPO 和 SimPO 算法。其中 ORPO 算法已在ORPO 模型偏好对齐微调新方法有所介绍,不做重复。

迁移学习(Transfer learning)
#

早在 2009 年,机器学习和数据挖掘(Data Mining)概念还在交替使用的时候,A Survey on Transfer Learning中香港科技大学的杨强教授对迁移学习进行了归纳、总结,迁移学习有了相对清晰的框架和概念。

A major assumption in many machine learning and data mining algorithms is that the training and future data must be in the same feature space and have the same distribution. However, in many real-world applications, this assumption may not hold. For example, we sometimes have a classification task in one domain of interest, but we only have sufficient training data in another domain of interest, where the latter data may be in a different feature space or follow a different data distribution. In such cases, knowledge transfer, if done successfully, would greatly improve the performance of learning by avoiding much expensive data labeling efforts. – Abstract, A Survey on Transfer Learning

论文摘要部分就明确了迁移学习在机器学习中的作用,以及它需要解决的问题。

问题往往具备以下特征:

  • 相关联的问题空间。 虽然论文中说迁移学习解决的是两个具备不同特征空间和分布的机器学习问题,其实需要进一步增加一个假设,具备不同特征空间和分布的两个任务必须在相关联的问题空间下。 比如,在 LLM 之前,迁移学习在视觉分类问题上的应用,使用 CNN 算法识别小狗图片的能力,可以通过迁移学习,在付出相对较小的代价下使模型具备识别猫的能力,但它无论如何也无法通过迁移学习来解决 NLP 的相关问题。
  • 数据成本高。 无论是分类还是回归问题,一般都需要打标的数据作为输入进行模型训练。打标数据的成本不证自明。

论文中提到的表格阐述了“what to transfer?”的问题。从表中我们可以得知,在迁移学习中,必须确保涉及的两个问题空间之间存在一定程度的相关性。

249ddece055f2a264e22e84c024a5157_MD5

无论是进行参数微调还是进行特征对齐,大型模型的微调过程均需满足此条件。大模型预训练和微调与上表中的 Inductive Transfer Learning 类型相对应,属于同一个领域,任务类型也相关联。前者是补全,后者是一种特殊的补全方式 – 问答。

同时,大模型微调所需数据需要标记,且单位成本是大模型预训练所需语料的“指数”倍。

因此,将大型语言模型的微调视为一种迁移学习是有一定合理性的。

强化学习(Reinforcement learning)
#

显然,迁移学习对于大语言模型微调而言只是一个分类而已。类似于传统机器学习中,我们会将一个机器学习任务,根据输出类型的不同分为分类或回归问题;或将一个机器学习算法,归类为有监督或者无监督。

强化学习则不同,它的思想作为大语言模型微调算法的一部分,实际落地应用。

强化学习入门:基本思想和经典算法对强化学习方法做了较好的总结。它的核心思想可以简单的归纳如下图所示:

c04bb7fd541c2a4e13f8f0b784becf6e_MD5

一个智能体根据现有环境状态 $S_t$ 做出决策,通过动作 $A_t$ 作用于环境,从而改变环境为 $S_{t+1}$,同时获得奖励 $S_{t+1}$ ,并循环往复此过程直到结束。智能体的目标是最大化奖励。

机器学习模型玩游戏就是其中一个易于理解的案例。此时智能体就是我们需要训练的模型,而游戏(围棋、扫雷、Dota 都可以)就是这里的环境。模型根据现有的游戏状态做出对应的动作,动作改变游戏状态,游戏给出奖励(有可能游戏最后才给出),直到游戏结束。

大语言模型 PPO 微调算法是另一个使用强化学习的典型例子。 PPO 微调算法的基本逻辑如下图,

c94066fce607b733a530c206c6f729b9_MD5

我们会在介绍 PPO 微调算法时具体展开。

微调(fine-tuning)
#

维基百科把微调定义为一种迁移学习方法。但 HuggingFace 对 SFT 的实现放在了 TRL (Transformer Reinforcement Learning) 模块下。

既然上文已将人工智能的技术概念与数学定义区分开来,我们不需要在分类的准确性上进行过多讨论。

此外,本文中的微调不只是指对预训练(pretraining)后的基础大模型(base model)进行微调训练,使其具备 Chat 功能的过程,这也被称为指令微调。它还包括模型对齐(alignment)以及增量预训练。

即那些暂没有能力预训练大语言模型,又希望直接作用于模型本身的行为,本文将这些行为统称为模型微调。

指令微调(Instruction fine-tuning)
#

狭义层面上的微调,往往会与指令微调相关联。这也是如今许多公司倾向于利用开源模型,结合自身内部数据进行微调,以便打造具有专业能力大模型的主要场景。

对齐(Alignment)
#

In the field of artificial intelligence (AI), AI alignment research aims to steer AI systems toward a person’s or group’s intended goals, preferences, and ethical principles. – AI alignment, Wikipedia

在人工智能领域,AI对齐研究旨在引导人工智能系统朝着个人或团体的预期目标、偏好和道德原则的方向发展。

增量预训练
#

增量预训练,也被称为后期预训练(Post-pretraining)或者领域自适应预训练(domain-adapter pretraining)。

总结
#

开源大语言模型,比如 Llama3,通常会提供两个模型版本:基础模型(base model)和指令模型(instruction model)。

指令模型就是在基础模型上进行指令微调和对齐训练而来。我们既可以在基础模型,也可以在指令模型基础上做再次指令微调或对齐。这两种训练方式所需的数据集格式有所不同:指令微调仅需要问、答文本,而对齐训练还需包含被拒绝的文本。

大语言模型预训练过程中的 checkpoint 机制,让增量预训练成为可能。这种增量预训练与大型语言模型预训练过程中使用 checkpoint 继续训练的原理相同,但只适用于基础模型。

尽管论文How Far Can Camels Go? Exploring the State of Instruction Tuning on Open Resources指出,微调可以提升或增强模型的特定能力,且基础模型的原有能力越强且微调数据集越优质,微调后的模型表现通常更佳。

然而,在实际应用中,即使拥有优质的微调数据集,若微调技术或流程存在漏洞,不仅无法增强模型的能力,而且可能影响模型的其他性能。特别是进行增量预训练时,可能会导致模型遭受灾难性的遗忘。