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)

Ayo berlatih!

人間のフィードバックによる強化学習(RLHF)

Preparing Video For Download...