用 PPO 进行训练

来自人类反馈的强化学习(RLHF)

Mina Parham

AI Engineer

用强化学习进行微调

RLHF 过程中初始 LLM 与奖励模型。

来自人类反馈的强化学习(RLHF)

用强化学习进行微调

完整的 RLHF 流程。

来自人类反馈的强化学习(RLHF)

用 PPO 微调语言模型

 

一个示意图:向 LLM 提交查询以生成续写。

来自人类反馈的强化学习(RLHF)

用 PPO 微调语言模型

 

一个示意图:向 LLM 提交查询,模型补全"we're half way there, oh livin' on a prayer"。

来自人类反馈的强化学习(RLHF)

用 PPO 微调语言模型

 

一个示意图:向 LLM 提交查询,模型补全"we're half way there, oh livin' on a prayer",另一个 LLM 评估该补全。

来自人类反馈的强化学习(RLHF)

用 PPO 微调语言模型

  • PPO:对模型逐步微调
  • 避免对反馈过拟合

一个机器人和一只蜗牛,表示算法的缓慢改进。

来自人类反馈的强化学习(RLHF)

用 TRL 实现 PPOTrainer

from trl import PPOConfig
config = PPOConfig(model_name="gpt2",learning_rate=1.4e-5)
from trl import AutoModelForCausalLMWithValueHead
model = AutoModelForCausalLMWithValueHead.from_pretrained(config.model_name)
tokenizer = AutoTokenizer.from_pretrained(config.model_name)
from trl import PPOTrainer
ppo_trainer = PPOTrainer(model=model,config=config,dataset=dataset,
                         tokenizer=tokenizer)
来自人类反馈的强化学习(RLHF)

启动训练循环

for epoch in tqdm(range(10), "epoch: "):


for batch in tqdm(ppo_trainer.dataloader):
# Get responses response_tensors = ppo_trainer.generate(batch["input_ids"])
batch["response"] = [tokenizer.decode(r.squeeze()) for r in response_tensors]
# Compute reward score texts = [q + r for q, r in zip(batch["query"], batch["response"])]
rewards = reward_model(texts)
stats = ppo_trainer.step(query_tensors, response_tensors, rewards) ppo_trainer.log_stats(stats, batch, rewards)
来自人类反馈的强化学习(RLHF)

让我们练习吧!

来自人类反馈的强化学习(RLHF)

Preparing Video For Download...