自我奖励的大语言模型——探索LLM 自身在学习过程中获得奖励

概述

论文地址:https://arxiv.org/abs/2401.10020
源码地址:https://github.com/lucidrains/self-rewarding-lm-pytorch.git

近年来,人们开展了大量研究,以提高大型语言模型(LLM)(如 ChatGPT)的性能,最近发现,使用偏好数据(公司与其客户共享的数据,其中包括预算和购买习惯等个人信息)对LLM 进行预训练,可以显著提高模型的性能。通过使用参考数据(公司与其客户共享的数据,其中包括预算和购买习惯等个人信息)对 LLM 进行预学习,可以显著提高模型的性能。

另一方面,这些方法的一个主要问题是**,数据的规模和质量是一个瓶颈,因为模型需要从人工准备的数据中进行训练**。

在此背景下,本文介绍了自奖励语言模型(Self-Rewarding Language Models)如何消除数据大小和质量的瓶颈,并在比较中优于许多现有模型。本节将介绍 一篇论文,其中实验表明它优于许多现有模型

LLM担任法官

首先,解释本文提出的方法中使用的LLM 即法官

LLM-as-a-Judge 是一种基于 LLM 的自动评估技术,近年来作为生成式人工智能的一种评估方法备受关注,本文中使用的是下图所示的提示形式。

该提示指示模型使用五项标准(相关性、覆盖面、有用性、清晰度和专业性)评估****给定答复的质量

自我奖励语言模型

本文提出的自我奖励语言模型概览如下图所示。

如图所示,"自我奖励语言模型 “包括两个步骤:创建 "自我指令 "和****训练后的 "指令”。

自学创作

在这一步中,模型 Mt接收新生成的提示(生成新提示),模型Mt从中生成高质量的回复(生成回复)。

此时,模型 Mt也会通过前述的 "LLM-as-a-Judge "提示来预测自己的奖励(生成奖励),并将其用于下一步。

培训后的指导

在这一步中,根据 LLM 即法官提示生成的数据创建一个新的数据集(偏好对),并通过 DPO(直接偏好优化)进行训练,从中生成模型Mt+1生成,并对模型进行下一次迭代训练。

从种子模型开始,这一步骤会重复多次,在每次迭代中,模型会针对新创建的提示生成候选答案,并分配相同的模型奖励。

作者在论文中指出,“这一过程消除了限制 LLM 模型的瓶颈”

实验装置

本文以 Llama-2-70B 为基础模型,使用两组数据(IFT 种子数据和****EFT 种子数据)进行了实验。

根据开放助手数据集,IFT 种子数据将从 3200 个会话实例中仅抽取高质量英语会话的第一个会话部分,并基于人工标注的等级。

此外,在本文中,仅使用这些数据对基础模型进行微调的模型被称为SFT 基准,并用于对比实验。

EFT 种子数据是开放助手数据集,分为训练集和评估集,并应用了 LLM-as-a-Judge。

此外,为了比较所提议的模型在两个轴上的性能–遵从指令的能力和作为奖励模型的能力–本文使用了AlpacaEval 评价提示,并根据现有的研究,对来自不同来源的 256 个测试提示进行了 GPT-4 测试。评价者作为评价工具。

此外,论文还报告了在AlpacaEval2.0 排行榜上对 805 条提示进行评估的结果。

结果

不同提示的实验结果如下图所示。(M1、M2、M3= 分别重复学习 1、2 和 3 次)。

实验结果表明,自我奖励M1的性能与 SFT 基准线相当。(30.5% vs 30.9%)

另一方面,自我奖励M2明显优于 SFT 基准(49.2% 对 14.5%)****,自我奖励M3差距更大(62.5% 对 9.8%(62.5% vs 9.8%)

此外,在M1 vsM3、M1 vsM2和M2 vsM3的结果中,训练迭代次数最多的模型分别获胜,这表明模型性能在每次迭代中都有显著提高

下表显示了 AlpacaEval2.0 排行榜上的实验结果。(胜率 = 对战 GPT-Turbo 的胜率)

从表中可以看出,每次重复研究的胜率都在提高:M1为 9.94%,M2为 15.38%,M3为 20.44%。

就M3机型而言,它的胜率超过了许多现有机型,包括克劳德 2、双子星 Pro 和 GPT-4 0613

代码用法

安装:

pip install self-rewarding-lm-pytorch

使用:

import torch
from torch import Tensor

from self_rewarding_lm_pytorch import (
    SelfRewardingTrainer,
    create_mock_dataset
)

from x_transformers import TransformerWrapper, Decoder

transformer = TransformerWrapper(
    num_tokens = 256,
    max_seq_len = 1024,
    attn_layers = Decoder(
        dim = 512,
        depth = 1,
        heads = 8
    )
)

sft_dataset = create_mock_dataset(100, lambda: (torch.randint(0, 256, (256,)), torch.tensor(1)))
prompt_dataset = create_mock_dataset(100, lambda: 'mock prompt')

def decode_tokens(tokens: Tensor) -> str:
    decode_token = lambda token: str(chr(max(32, token)))
    return ''.join(list(map(decode_token, tokens)))

def encode_str(seq_str: str) -> Tensor:
    return Tensor(list(map(ord, seq_str)))

trainer = SelfRewardingTrainer(
    transformer,
    finetune_configs = dict(
        train_sft_dataset = sft_dataset,
        self_reward_prompt_dataset = prompt_dataset,
        dpo_num_train_steps = 1000
    ),
    tokenizer_decode = decode_tokens,
    tokenizer_encode = encode_str,
    accelerate_kwargs = dict(
        cpu = True
    )
)

trainer(overwrite_checkpoints = True)

# checkpoints after each finetuning stage will be saved to ./checkpoints

总结

结果如何?在这篇文章中,我们介绍了自奖励语言模型(Self-Rewarding Language Models)这一自我补偿模型,在该模型中,语言模型本身在学习过程中通过 LLM-as-a-Judge 提示获得奖励,并进行迭代学习,从而消除了数据大小和质量的瓶颈,对比实验表明,它的性能优于许多现有模型。论文解释了它在对比实验中的表现如何优于许多现有模型。

虽然本文进行的实验证明,利用自我奖励模型进行迭代学习是有效的,但需要注意的是,本实验只进行了最多三次迭代

作者未来的研究议程包括:在增加迭代次数时,以及在不同环境下使用能力更强或更弱的语言模型时,了解缩放定律(即 LLM 参数数量和数据集规模越大,性能越高的定律)。下面提到的是

正如论文中提到的,虽然这种方法通过迭代提高的性能在现实场景中很可能趋于饱和,但它为在不受数据限制的情况下不断改进模型打开了一扇大门,未来的进展非常令人兴奋。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知来者逆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值