Обучение с PPO

Обучение с подкреплением на основе обратной связи от людей (RLHF)

Mina Parham

AI Engineer

Тонкая настройка с обучением с подкреплением

Исходная LLM и модель вознаграждения в процессе RLHF.

Обучение с подкреплением на основе обратной связи от людей (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)

Реализация PPOTrainer с TRL

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...