大模型开发和微调工具Llama-Factory-->训练方法(SFT, RLHF, DPO, KTO)

训练方法

1.Pre-training

大语言模型通过在一个大型的通用数据集上通过无监督学习的方式进行预训练来学习语言的表征/初始化模型权重/学习概率分布。 我们期望在预训练后模型能够处理大量、多种类的数据集,进而可以通过监督学习的方式来微调模型使其适应特定的任务。

预训练时,请将 stage 设置为 pt ,并确保使用的数据集符合 预训练数据集 格式 。

下面提供预训练的配置示例:

python 复制代码
### model
model_name_or_path: meta-llama/Meta-Llama-3-8B-Instruct

### method
stage: pt
do_train: true
finetuning_type: lora
lora_target: all

### dataset
dataset: c4_demo
cutoff_len: 1024
max_samples: 1000
overwrite_cache: true
preprocessing_num_workers: 16

### output
output_dir: saves/llama3-8b/lora/sft
logging_steps: 10
save_steps: 500
plot_loss: true
overwrite_output_dir: true

### train
per_device_train_batch_size: 1
gradient_accumulation_steps: 8
learning_rate: 1.0e-4
num_train_epochs: 3.0
lr_scheduler_type: cosine
warmup_ratio: 0.1
bf16: true
ddp_timeout: 180000000

2.Post-training

在预训练结束后,模型的参数得到初始化,模型能够理解语义、语法以及识别上下文关系,在处理一般性任务时有着不错的表现。

尽管模型涌现出的零样本学习,少样本学习的特性使其能在一定程度上完成特定任务, 但仅通过提示(prompt)并不一定能使其表现令人满意。

因此,我们需要后训练(post-training)来使得模型在特定任务上也有足够好的表现。

1.Supervised Fine-Tuning

Supervised Fine-Tuning(监督微调) 是一种在预训练模型上使用小规模有标签数据集进行训练的方法。

相比于预训练一个全新的模型,对已有的预训练模型进行监督微调是更快速更节省成本的途径。

监督微调时,请将 stage 设置为 sft 。 下面提供监督微调的配置示例:

python 复制代码
...
stage: sft
fintuning_type: lora
...

2.RLHF

由于在监督微调中语言模型学习的数据来自互联网,所以模型可能无法很好地遵循用户指令,甚至可能输出非法、暴力的内容,因此我们需要将模型行为与用户需求对齐(alignment)

通过 RLHF(Reinforcement Learning from Human Feedback) 方法,我们可以通过人类反馈来进一步微调模型,使得模型能够更好更安全地遵循用户指令。

  1. Reward model

    但是,获取真实的人类数据是十分耗时且昂贵的。

    一个自然的想法是我们可以训练一个奖励模型(reward model)来代替人类对语言模型的输出进行评价。

    为了训练这个奖励模型,我们需要让奖励模型获知人类偏好,而这通常通过输入经过人类标注的偏好数据集来实现。

    在偏好数据集中,数据由三部分组成:输入、好的回答、坏的回答

    奖励模型在偏好数据集上训练,从而可以更符合人类偏好地评价语言模型的输出。

    在训练奖励模型时,请将 stage 设置为 rm ,确保使用的数据集符合 偏好数据集 格式并且指定奖励模型的保存路径。 以下提供一个示例:

    python 复制代码
    ...
    stage: rm
    dataset: dpo_en_demo
    ...
    output_dir: saves/llama3-8b/lora/reward
    ...
  2. PPO

    在训练奖励完模型之后,我们可以开始进行模型的强化学习部分。

    与监督学习不同,在强化学习中我们没有标注好的数据。

    语言模型接受 prompt 作为输入,其输出作为奖励模型的输入。奖励模型评价语言模型的输出,并将评价返回给语言模型。确保两个模型都能良好运行是一个具有挑战性的任务。

    一种实现方式是使用 近端策略优化(PPO,Proximal Policy Optimization)。

    主要思想是:我们既希望语言模型的输出能够尽可能地获得奖励模型的高评价,又不希望语言模型的变化过于"激进"。

    通过这种方法,我们可以使得模型在学习趋近人类偏好的同时不过多地丢失其原有的解决问题的能力。

    在使用 PPO 进行强化学习时,请将 stage 设置为 ppo,并且指定所使用奖励模型的路径。 下面是一个示例:

    python 复制代码
    ...
    stage: ppo
    reward_model: saves/llama3-8b/lora/reward
    ...
  3. DPO

    既然同时保证两个语言模型与奖励模型的良好运行是有挑战性的,一种想法是我们可以丢弃奖励模型, 进而直接基于人类偏好训练我们的语言模型,这大大简化了训练过程。

    在使用 DPO 时,请将 stage 设置为 dpo,确保使用的数据集符合 偏好数据集 格式并且设置偏好优化相关参数。 以下是一个示例:

    python 复制代码
    ...
    ### method
    stage: dpo
    pref_beta: 0.1
    pref_loss: sigmoid  # choices: [sigmoid (dpo), orpo, simpo]
    dataset: dpo_en_demo
    ...

    原始论文

    摘要

    • 论文指出,大规模无监督语言模型(如大型 AI 助手)虽然能够学习广泛的世界知识和一些推理技能,但由于其训练的无监督性质,精确控制其行为非常困难。
    • 现有的方法通过收集人类对模型生成内容质量的标签,使用基于人类反馈的强化学习(RLHF)来微调这些模型,使其符合人类的偏好。
    • 然而,RLHF 过程复杂且通常不稳定,需要先拟合一个反映人类偏好的奖励模型,然后使用强化学习来微调模型,使其最大化这个估计的奖励。
    • 作者提出了 DPO 算法,它通过简单的分类损失直接优化策略,避免了在微调过程中从语言模型中采样或进行大量超参数调整的需要。
    • 实验表明,DPO 在调整语言模型以符合人类偏好方面,与现有方法一样有效或更有效,特别是在控制生成内容的情感方面。

    引言

    • 作者批评了现有的RLHF方法,指出其在实践中存在计算成本高昂、训练过程复杂等问题。

    • 引言部分介绍了DPO的核心思想直接优化语言模型以符合人类偏好,而无需显式建模奖励或使用强化学习。

    原理

    • DPO算法的核心将奖励模型的参数化形式重新表述为可以直接从偏好数据中提取最优策略的形式
    • 论文提出了一种新的理论框架,将语言模型策略和奖励函数联系起来,使得可以通过简单的交叉熵损失直接训练语言模型来满足人类偏好。
    • DPO算法通过增加对首选响应的相对对数概率,并减少非首选响应的相对对数概率来工作,同时使用动态的、每个样本重要性权重来防止模型退化。

    实验

    1. 预期奖励与参考策略 KL 的边界 以及 TL;DR 摘要胜率与人工编写的摘要的比较

      图 2:
      左:预期奖励与参考策略 KL 的边界。 DPO 为所有 KL 值提供最高的预期奖励,证明了优化的质量。
      右: TL;DR 摘要胜率与人工编写的摘要的比较,使用 GPT-4 作为评估器。 DPO 在汇总方面超过了 PPO 的最佳情况性能,同时对采样温度的变化更加稳健。

    2. 胜率比较

      表 2:比较人类和 GPT-4 在 TL;DR 摘要样本上的胜率和每次判断的一致性。人类与 GPT-4 的一致程度差不多。每个实验都将所述方法得出的摘要与 PPO 得出的摘要进行了比较,温度为 0.

  4. KTO

    KTO(Kahneman-Taversky Optimization) 的出现是为了解决成对的偏好数据难以获得的问题

    KTO使用了一种新的损失函数 使其只需二元的标记数据, 即只需标注回答的好坏即可训练,并取得与 DPO 相似甚至更好的效果

    在使用 KTO 时,请将 stage 设置为 kto ,设置偏好优化相关参数并使用 KTO 数据集。

    以下是一个示例:

    python 复制代码
    model_name_or_path: meta-llama/Meta-Llama-3-8B-Instruct
    ...
    stage: kto
    pref_beta: 0.1
    ...
    dataset: kto_en_demo

论文摘要

摘要

  • 论文指出,现有的基于人类反馈对齐LLMs的目标隐含地包含了人类的一些偏见,这些偏见在一定程度上可以解释这些目标的成功。
  • 作者提出了一种新的人类感知损失函数(HALO),它不依赖于偏好数据,而是直接最大化生成的效用,而不是最大化偏好的对数似然。
  • KTO方法只需要一个二元信号来指示某个输出对于给定输入是否理想,这使得它在现实世界中更容易使用,因为偏好数据稀缺且昂贵。

引言

  • 作者指出,现有的基于偏好的方法(如 RLHF 和 DPO)在实践中非常有效,但它们需要相对稀缺且难以收集的偏好数据

原理

  • 论文通过前景理论的视角来理解这些对齐方法,并展示了如何将这些方法表达为人类感知损失函数(HALO)。

  • 作者提出了KTO方法,它使用 Kahneman-Tversky 模型来直接优化生成的效用,而不是最大化偏好的对数似然。

实验

  1. 如果不 SFT 模型会有幻觉,KTO 没有这个问题

    图 5. 如果不先进行 SFT,与 DPO 一致的模型往往会滔滔不绝,使整个对话产生幻觉。KTO 则没有这个问题。

  2. 偏好数据对 不一定是 KTO 的数据来源

    图 6 即使舍弃了 90% 的理想示例而保留了所有不理想数据(导致理想数据与不理想数据的比例为 1:10),KTO 对齐的 Llama-7B 模型仍然优于其 DPO 对应模型。这意味着偏好对不一定是 KTO 数据的来源。

  3. 节省了 70% 的数据

    表 1 在对 OpenAssistant 数据集上的 Mistral-7B 进行配准时,我们发现使用 KTO 时,每个输入只有一个输出,尽管这种限制使训练数据量减少了 72%,但其效果仍然优于 DPO。给出的置信区间为 90%。

结论

  • 论文提出了一种新的对齐方法KTO,它基于前景理论,并展示了它在不同规模的模型上的有效性。
  • 作者强调,尽管KTO所需的数据更丰富、更便宜、更快速,但仍有许多工作要做,以发现每种设置下的最佳人类感知损失函数。
相关推荐
爱研究的小牛2 小时前
Runway 技术浅析(七):视频技术中的运动跟踪
人工智能·深度学习·计算机视觉·目标跟踪·aigc
DieYoung_Alive2 小时前
搭建深度学习框架+nn.Module
人工智能·深度学习·yolo
GOTXX2 小时前
修改训练策略,无损提升性能
人工智能·计算机视觉·目标跟踪
被制作时长两年半的个人练习生2 小时前
【pytorch】pytorch的缓存策略——计算机分层理论的另一大例证
人工智能·pytorch·python
霖大侠2 小时前
Adversarial Learning forSemi-Supervised Semantic Segmentation
人工智能·算法·机器学习
lexusv8ls600h3 小时前
AI - 如何构建一个大模型中的Tool
人工智能·langchain·llm
阿华的代码王国3 小时前
【算法】——前缀和(矩阵区域和详解,文末附)
java·开发语言·算法·前缀和
Sunyanhui13 小时前
力扣 LCR训练计划2(剑指 Offer 22. 链表中倒数第k个节点)-140
算法·leetcode·链表
yours_Gabriel3 小时前
【力扣】3274. 检查棋盘方格颜色是否相同
算法·leetcode
Chandler243 小时前
蓝桥杯经验分享
经验分享·算法·蓝桥杯