Policy gradient і PPO: навчання безпосередньо політики
Стохастична політика як мережа, REINFORCE і теорема про градієнт політики, базовий рівень і перевага, actor-critic, PPO з обрізанням, написане з нуля на маятнику на візку, що стається без обрізання, і як PPO донавчило мовні моделі.
Серія Основи ШІ Частина 49 з 52
- Мапа штучного інтелекту: що є що і як усе це пов’язано
- Коротка історія штучного інтелекту: від Тюрінга до мовних моделей
- Дані, модель, тренування, інференс: основні поняття на одному прикладі
- Як читати математичний запис: символи, індекси, суми та квантори
- Множини й відношення: конструктор, з якого складаються означення в ШІ
- Функції й відображення: чому кожна модель у ШІ — це функція
- Логіка й доведення: правила, за якими міркують у ШІ
- Графи й дерева: структура, на якій тримаються пошук і нейронні мережі
- Лінійна алгебра для машинного навчання: вектори, матриці й чому ШІ передусім множить
- Похідні, градієнт і правило ланцюжка: як модель дізнається, у якому напрямку вчитися
- Градієнтний спуск: як навчається модель
- Що таке ймовірність: від кидка кубика до аксіом Колмогорова
- Умовна ймовірність і теорема Баєса: як змінити оцінку, коли дізнаєтеся щось нове
- Випадкова величина і функція розподілу: одна функція, яка каже про розподіл усе
- Функція щільності та функція маси ймовірності: чому неперервна величина має в точці ймовірність нуль
- Математичне сподівання, дисперсія і коваріація: де лежить розподіл, наскільки він широкий і що з чим пов’язано
- Огляд розподілів ймовірностей: Бернуллі, біноміальний, Пуассона, рівномірний, нормальний і експоненційний
- Закон великих чисел і центральна гранична теорема: чому середні поводяться так передбачувано
- Статистика й оцінювання параметрів: максимальна правдоподібність, MAP і довірчі інтервали
- Теорія інформації: ентропія, перехресна ентропія і KL-дивергенція — звідки беруться функції втрат
- Пошук у просторі станів: BFS, DFS, UCS і A* з анімаціями
- Ігри та суперник: мінімакс, альфа-бета відсікання і Monte Carlo tree search
- Задоволення обмежень: бектрекінг, поширення обмежень і AC-3 на судоку та мапі чеських країв
- Логіка й системи, засновані на знаннях: пряме і зворотне виведення, резолюція та експертні системи
- Планування: STRIPS, світ кубиків, евристики з релаксації та планування в AI-агентах
- Локальний пошук та імітація відпалу: комівояжер через обласні центри Чехії
- Генетичні алгоритми: популяція, схрещування, мутація і добір на рюкзаку для походу
- Еволюційні стратегії і генетичне програмування: від правила однієї п’ятої до закону Кеплера
- Оптимізація мурашиною колонією: як феромоновий слід знаходить короткий шлях
- Оптимізація роєм частинок: інерція, власний досвід і досвід рою
- Нейроеволюція: еволюція ваг і форми нейронних мереж та алгоритм NEAT
- Нечіткі множини й функції належності: як записати «трохи тепло»
- Нечітка логіка та ймовірність: чому «трохи тепло» не означає «імовірно тепло»
- Нечітка логіка: t-норми, імплікації та правила ЯКЩО–ТО
- Нечітке керування: Мамдані та Суґено від вентилятора до маятника на візку
- Нечітка кластеризація: алгоритм fuzzy c-means і точки між кластерами
- Нейро-нечіткі системи (ANFIS): нечіткі правила, які навчаються з даних
- Марковські ланцюги: матриця переходів, стаціонарний розподіл і PageRank
- Приховані марковські моделі: алгоритм Вітербі й нечесне казино
- Байєсівські мережі: чому трава мокра і що з цього випливає для дощувача
- Фільтр Калмана: як за неточними вимірюваннями оцінити, де авто і як швидко воно їде
- Види машинного навчання: з учителем, без учителя, з частковим залученням учителя та інші
- Промпти, контекст і RAG: як дати моделі правильну інформацію
- Варіаційні автокодувальники (VAE): нові зображення з неперервного латентного простору
- Генеративні змагальні мережі (GAN): фальшувальник проти детектива
- Дифузійні моделі: як із чистого шуму постає зображення
- Марковські процеси ухвалення рішень: стани, дії, винагороди й рівняння Беллмана
- Q-навчання і DQN: як навчитися цінності дій — від таблиці до нейронної мережі
- Policy gradient і PPO: навчання безпосередньо політики
- Як працює ШІ-агент: мовна модель у циклі з інструментами
- Програмування з AI-агентами: завдання, тести й перевірка
- Оцінювання і безпека систем ШІ: як вимірювати і як стежити
Повна програма серії Готово: 52 з 83 тем
- Як політика навчається безпосередньо з результатів, без таблиці цінностей.
- Чому допомагає відняти базовий рівень і що таке перевага.
- Чому обрізання в PPO таке важливе і як воно пов’язане з RLHF.
Що варто знати заздалегідь: Q-навчання і DQN: як навчитися цінності дій — від таблиці до нейронної мережі, Марковські процеси ухвалення рішень: стани, дії, винагороди й рівняння Беллмана
DQN з минулої частини вивчає, наскільки добра кожна дія, а політика випливає з цього лише опосередковано: обери дію з найбільшою цінністю. Друга велика родина методів іде навпростець: мережа отримує стан і повертає імовірності дій, а ми зсуваємо ці ймовірності так, щоб добрі дії траплялися частіше. З цієї родини походить PPO — алгоритм, який навчив роботів ходити, переміг професіоналів у грі Dota 2 і стояв за донавчанням ChatGPT. У цій частині ми напишемо його з нуля й порівняємо з простішими попередниками.
Продовжує частини Q-навчання і DQN, Марковські процеси ухвалення рішень та Softmax.
1. Навчати одразу політику
Означення — параметризована політика
Стохастична політика πθ(a | s) — це мережа з параметрами θ, яка для стану s повертає розподіл імовірностей на діях: для скінченної кількості дій — softmax виходів мережі, для неперервних дій — скажімо, середнє й дисперсію нормального розподілу. Мета — максимізувати очікувану віддачу J(θ) = Eπθ[G0] градієнтним підйомом (gradient ascent) θ ← θ + α ∇J(θ).
DQN веде таблицю «скільки балів за який хід» і грає хід із найбільшою кількістю балів. Політика натомість одразу каже: «у цій ситуації штовхай праворуч із 70 %, ліворуч — із 30 %». Переваги: працює й із неперервними діями (з якою силою, під яким кутом), випадковість убудована, тож агент сам пробує, а мала зміна параметрів означає малу зміну поведінки.
Приклад — віддача однієї спроби на маятнику на візку
Винагорода +1 за кожен крок, дисконт γ = 0,99. Якщо до кінця епізоду лишається T − t кроків, віддача — це геометричний ряд:
Gt = 1 + γ + γ² + … + γT−t−1 = (1 − γT−t) / (1 − γ).
На початку епізоду, який протримається всі 500 кроків: G0 = (1 − 0,99500) / 0,01 = 99,34. За двадцять кроків до падіння: G = (1 − 0,9920) / 0,01 = 18,21. Крок безпосередньо перед падінням: G = 1. Отже, віддача завжди додатна й ніколи не перевищить 1 / (1 − γ) = 100 — це знадобиться в розділі про базовий рівень.
2. REINFORCE: підсилюй те, що вдалося
Означення — теорема про градієнт політики і REINFORCE
Градієнт очікуваної віддачі можна записати як математичне сподівання, яке вдається оцінити з зіграних епізодів:
∇J(θ) = Eπθ[ ∑t ∇ log πθ(at | st) · Gt ].
REINFORCE (Рональд Вільямс, 1992) робить це буквально: зіграй епізоди, для кожного кроку обчисли віддачу Gt від цього кроку далі й зсунь θ у напрямку ∇ log π(at | st) · Gt. Для softmax ∇ log π(a) за виходами мережі — це просто (1a − π).
Зіграйте, подивіться, чим усе скінчилося, і кожен хід, який ви зробили, зробіть трохи ймовірнішим — тим більше, чим краще після нього все склалося. Ходи з вдалих ігор підсилюються більше, ніж ходи з невдалих. Нікому не треба казати, який хід був правильним; досить результату.
∇J(θ) = Eπθ[ ∑t ∇ log πθ(at | st) · Gt ]
- ∇J(θ)
- напрямок, у якому повернути параметри, щоб середня віддача зростала найшвидше; обчислити його безпосередньо не вдасться, бо віддача залежить від θ лише через випадкову гру й невідому фізику середовища
- Eπθ[ ∑t … ]
- середнє за епізодами, зіграними поточною політикою, — тому його можна замінити середнім за справді зіграними іграми; і тому даних від іншої політики (старішої, чужої) без поправки недостатньо
- ∇ log πθ(at | st)
- напрямок у просторі параметрів, який робить зіграну дію ймовірнішою; ∇ log π = ∇π / π ділить на ймовірність, тож часта дія, яка часто трапляється в даних, не отримує додаткового підсилення лише тому, що вона часта
- Gt
- вага: наскільки добре все склалося після дії; лише винагороди від кроку t далі, бо дія не може вплинути на винагороди, які вже випали
Теорема — звідки береться формула (трюк із логарифмом)
Епізод τ = (s0, a0, s1, a1, …) за політики πθ має ймовірність Pθ(τ) = p(s0) ∏t πθ(at | st) P(st+1 | st, at) і віддачу G(τ). Тоді
∇J(θ) = ∇ ∑τ Pθ(τ) G(τ) = ∑τ Pθ(τ) · ∇ log Pθ(τ) · G(τ) = Eτ ∼ πθ[ ∇ log Pθ(τ) · G(τ) ],
бо ∇P = P · ∇ log P. Доведення (ескіз): логарифм перетворює добуток на суму, log Pθ(τ) = log p(s0) + ∑t log πθ(at | st) + ∑t log P(st+1 | st, at). Від θ залежить лише середня сума, тож фізику середовища P знати не потрібно: ∇ log Pθ(τ) = ∑t ∇ log πθ(at | st). Нарешті для кожного at відкидаємо винагороди до кроку t: вони не залежать від at, тому їхній внесок має нульове математичне сподівання (див. теорему в наступному розділі). Лишається Gt. ∎ (Точне формулювання для дисконтованої віддачі дещо тонше; тут спрощено.)
Приклад — один крок REINFORCE із softmax
Дві дії, виходи мережі z = (0; 0), тож π = softmax(z) = (0,50; 0,50). Агент зіграв дію 1 («праворуч»), і віддача від цього кроку склала G = 10. Для softmax ∇z log π(a) = 1a − π, отже
∇z log π(1) · G = ((0; 1) − (0,50; 0,50)) · 10 = (−5; 5).
Крок підйому з α = 0,1: z ← (0; 0) + 0,1 · (−5; 5) = (−0,5; 0,5). Нова політика π = (e−0,5; e0,5) / (e−0,5 + e0,5) = (0,269; 0,731). Дія, яка вдалася, тепер імовірніша. (У справжній мережі змінюються ваги θ, а до z градієнт доходить зворотним поширенням; напрямок той самий.)
θ = випадкові ваги мережі політики
повторюй:
грай цілі епізоди політикою π_θ, доки не набереться щонайменше 2 000 кроків
для кожного епізоду з кінця: # G = 0 після кінця епізоду
G_t = r_(t+1) + γ · G_(t+1)
g = середнє за всіма кроками ∇ log π_θ(a_t | s_t) · G_t
θ = θ + α · g # підйом; у нас кроком Adam
дані викинь — наступного разу вони вже від іншої політики
3. Дисперсія і базовий рівень
Означення — базовий рівень (baseline) і перевага
Від Gt можна відняти довільну функцію стану b(st), не змінивши математичного сподівання оцінки градієнта, бо E[∇ log π(a | s)] = 0. Зате дисперсія оцінки може помітно зменшитися. Найкращий поширений вибір — цінність стану V(s), яку вивчає друга мережа; різницю A(s, a) = Q(s, a) − V(s) називають перевагою (advantage). Методи з вивченою політикою («актор») і цінністю («критик») називають actor-critic (актор–критик).
На маятнику на візку агент отримує +1 за кожен крок, тож кожна віддача додатна — REINFORCE, отже, підсилює кожен хід, лише деякі більше. Сигнал «це було краще, ніж зазвичай» губиться в шумі. Якщо відняти очікуваний рівень, він перетворюється на «цей хід вийшов на 20 балів кращим, ніж у цій ситуації очікували», — а гірші ходи отримують від’ємний знак.
∇J(θ) = E[ ∑t ∇ log πθ(at | st) · (Gt − b(st)) ], A(s, a) = Q(s, a) − V(s)
- ∇ log πθ(at | st)
- напрямок «зіграну дію частіше», так само як у REINFORCE
- Gt, Q(s, a)
- що після дії справді настало (Gt), або скільки вона дає в середньому (Q — математичне сподівання Gt); саме по собі майже завжди додатне, тож не відрізнить добру дію від середньої
- b(st), V(s)
- планка: скільки в цій ситуації очікують незалежно від дії; після віднімання гірші за середні дії отримують від’ємний знак. Може залежати лише від стану, не від дії, — інакше градієнт зміститься (теорема нижче)
- A(s, a)
- перевага: наскільки дія a краща за середню дію політики в s; саме та інформація, яку ми хочемо підсилювати
Теорема — базовий рівень не зміщує градієнт
Для кожного стану s виконується Ea ∼ πθ[∇ log πθ(a | s)] = 0, а отже E[∇ log πθ(a | s) · b(s)] = 0 для довільної функції b, яка не залежить від a.
Доведення: ∑a πθ(a | s) ∇ log πθ(a | s) = ∑a ∇πθ(a | s) = ∇ ∑a πθ(a | s) = ∇1 = 0. Член b(s) для фіксованого s — стала, тож її можна винести за знак суми. ∎
Приклад — те саме середнє, інша дисперсія
Один стан, дві дії з π = (0,5; 0,5). Дія 1 дає віддачу 12, дія 0 — віддачу 10; обидві додатні, як на візку. Компонента оцінки градієнта за виходом z1 з однієї вибірки — це (1a=1 − 0,5) · (G − b).
Без базового рівня (b = 0): якщо випаде дія 1, оцінка 0,5 · 12 = 6; якщо дія 0, то −0,5 · 10 = −5. Середнє (6 − 5) / 2 = 0,5, дисперсія ((6 − 0,5)² + (−5 − 0,5)²) / 2 = 30,25.
З базовим рівнем b = 11 (середня віддача): 0,5 · (12 − 11) = 0,5 і −0,5 · (10 − 11) = 0,5. Середнє й далі 0,5, дисперсія 0.
Справжній градієнт — π1(1 − π1) · (12 − 10) = 0,25 · 2 = 0,5. Обидві оцінки в середньому цілять правильно, але без планки одна вибірка промахується на ±5,5, а з планкою — зовсім ні. Насправді дисперсія до нуля не падає (віддачі випадкові, а станів багато), але принцип той самий.
Ми виміряли це на початку навчання: 40 незалежних пакетів по 1 000 кроків тієї самої випадкової політики, з кожного — градієнт REINFORCE. Уже саме віднімання середньої віддачі (сталий базовий рівень) зменшує суму дисперсій компонент градієнта з 0,177 до 0,131, тобто на 26 %. Вивчена цінність V(s), яка розрізняє добрі й погані ситуації, допомагає більше.
Означення — сума дисперсій компонент градієнта
З K = 40 пакетів маємо оцінки градієнта ĝ(1), …, ĝ(K) (вектори всіх ваг мережі). Для кожної компоненти j обчислюємо дисперсію за пакетами й підсумовуємо:
∑j (1/K) ∑k (ĝj(k) − ḡj)², ḡj = (1/K) ∑k ĝj(k).
Це слід коваріаційної матриці оцінки — одне число, яке показує, наскільки оцінка тремтить. Спад: 1 − 0,131 / 0,177 = 0,26, тобто 26 %.
Вивчена V потрібна й PPO нижче. Перевагу воно при цьому оцінює не різницею Gt − V(st), а компромісом між нею та однокроковою оцінкою з частини про Q-навчання:
Ât = ∑l≥0 (γλ)l δt+l, δt = rt+1 + γ V(st+1) − V(st)
- Ât
- оцінка переваги кроку t (GAE, Джон Шульман та ін., 2015) — те, на що множать ∇ log π
- δt
- TD-похибка: наскільки один крок вийшов кращим, ніж очікувала V; однокрокова оцінка переваги з малою дисперсією, але зміщена, якщо V помиляється
- rt+1
- винагорода, яка справді надійшла, — єдиний шматок реальності в δ
- V(s)
- вивчена планка; у st+1 замінює решту віддачі оцінкою, у st віднімається як базовий рівень (після падіння V(st+1) = 0)
- (γλ)l
- як швидко забувати віддаленіші кроки. λ = 0 дає лише δt; λ = 1 після підсумовування (члени V взаємно скорочуються) дає точно Gt − V(st) — незміщену оцінку, але з великою дисперсією. У нас λ = 0,95
4. PPO: малі, безпечні кроки
REINFORCE має ще одну слабкість: кожен зіграний досвід він використовує лише для одного кроку градієнта, а потім викидає. Якби ми на тих самих даних зробили більше кроків, політика могла б віддалитися від тієї, що зібрала дані, і оцінка градієнта перестала б бути чинною — навчання завалиться. PPO за цим стежить.
Означення — Proximal Policy Optimization (PPO)
PPO (Джон Шульман та ін., OpenAI, 2017) збирає пакет переходів старою політикою πold, обчислює переваги Ât, а потім кілька епох максимізує обрізану ціль
L(θ) = Et[ min( rt(θ) Ât, clip(rt(θ), 1 − ε, 1 + ε) Ât ) ], rt(θ) = πθ(at | st) / πold(at | st),
зазвичай з ε = 0,2. Щойно ймовірність дії зміниться більш ніж на ε в напрямку, який покращує ціль, градієнт від цієї вибірки зникає. Переваги зазвичай оцінюють методом GAE (generalized advantage estimation) — зваженим середнім TD-похибок із параметром λ.
Тренер після матчу каже: «Роби це частіше». Гравець повторює це на тренуванні — але лише доти, доки не робить це на п’яту частину частіше, ніж раніше. Далі він уже не вчиться, доки не зіграє наступний матч і не з’ясує, чи це досі працює. Кроки досить великі, щоб швидко вдосконалюватися, і досить малі, щоб не збожеволіти.
L(θ) = Et[ min( rt(θ) Ât, clip(rt(θ), 1 − ε, 1 + ε) Ât ) ]
- L(θ)
- замінна (сурогатна) ціль, яку кілька епох максимізують на старому пакеті; її градієнт у точці θ = θold — це точно градієнт політики з REINFORCE з перевагою
- rt(θ) = πθ / πold
- відношення нової та старої ймовірності зіграної дії. Дані зібрала стара політика; помноживши на це відношення, з них можна оцінити, як би впоралася нова (вибірка за значущістю, importance sampling). На початку r = 1
- Ât
- перевага з GAE: знак каже, чи дію підсилити (+), чи придушити (−)
- clip(r, 1 − ε, 1 + ε)
- відношення, затиснуте в смугу (на рисунку зеленим); поза смугою воно стале, тож жодного градієнта з нього немає — далі штовхати політику цією вибіркою не вийде
- min
- із двох оцінок гірша (песимістична): обрізання діє лише там, де покращення виглядало б підозріло добрим. Коли ж дія, навпаки, погіршилася, min лишає необрізаний член і помилку виправляє
Приклад — три вибірки й обрізання з ε = 0,2
Стара політика дала зіграній дії ймовірність 0,5. Після кількох кроків навчання це 0,65, тож r = 0,65 / 0,5 = 1,3 і clip(1,3; 0,8; 1,2) = 1,2.
Перевага +2: min(1,3 · 2; 1,2 · 2) = min(2,6; 2,4) = 2,4. Переміг обрізаний член, який від θ не залежить, — градієнт від цієї вибірки нульовий. Дія вже на 30 % частіша, і більше не буде.
Перевага −2 (те саме відношення): min(−2,6; −2,4) = −2,6. Переміг необрізаний член: політика помилково зробила погану дію ймовірнішою, тож градієнт і далі тягне її назад.
Перевага +2, але ймовірність упала до 0,35: r = 0,7, min(1,4; 0,8 · 2 = 1,6) = 1,4. Знову необрізаний член — добра дія, яку політика придушила, повертається. Обрізання гальмує лише ті кроки, які покращили б ціль «занадто».
повторюй:
π_old = π_θ; збери 2 000 кроків політикою π_old, збережи π_old(a_t | s_t)
для кожного епізоду з кінця: # V(s_(t+1)) = 0 після падіння
δ_t = r_(t+1) + γ · V(s_(t+1)) − V(s_t)
Â_t = δ_t + γλ · Â_(t+1) # GAE, γ = 0,99, λ = 0,95
ціль_t = Â_t + V(s_t); нормалізуй Â до середнього 0 і дисперсії 1
10 разів (епоха):
перемішай кроки й розбий їх на мініпакети по 100
для кожного мініпакета:
r_t = π_θ(a_t | s_t) / π_old(a_t | s_t)
θ: крок угору за середнім min(r_t · Â_t, clip(r_t, 0,8, 1,2) · Â_t)
V: крок униз за середнім (V(s_t) − ціль_t)²
5. Експеримент: маятник на візку
Той самий маятник на візку, що й у DQN, винагорода +1 за кожен крок, епізод закінчується падінням або після 500 кроків. Політика — мережа 4 → 32 → 32 → 2 із softmax, цінність стану — друга мережа такої самої форми. Усі чотири методи отримують 100 000 кроків у середовищі, пакетами по 2 000. REINFORCE робить на пакеті один крок градієнта, PPO — десять епох на мініпакетах по 100. Варіант «без обрізання» — це PPO, у якому ми вимкнули обрізання.
| метод | коли вперше середнє ≥ 475 (прогін 1 · 2 · 3) | наприкінці (прогін 1 · 2 · 3) |
|---|---|---|
| REINFORCE | — · — · — | 463 · 333 · 348 |
| REINFORCE з базовим рівнем | 90 000 · 80 000 · — | 488 · 500 · 404 |
| PPO | 30 000 · 20 000 · 20 000 | 500 · 500 · 500 |
| PPO без обрізання | 100 000 · 30 000 · 50 000 | 494 · 44 · 500 |
PPO в усіх трьох прогонах утримує жердину всі 500 кроків уже після 30 000, 20 000, 20 000 кроків і більше цього не втрачає. REINFORCE вдосконалюється повільно й до кінця не впорується; з базовим рівнем він трохи швидший і у двох прогонах із трьох доходить до мети. Увага: порівняння не зовсім чесне за кількістю обчислень — PPO робить на кожному пакеті вдесятеро більше кроків градієнта. Проте воно чесне в тому, що в навчанні з підкріпленням важить найбільше, — у кількості досвіду, який агент мусить зібрати у світі.
А що станеться, коли те саме багаторазове навчання на пакеті запустити без обрізання? Довжини епізодів стрибають угору й униз, прогін 2 закінчився на 44 кроках. Чому — покаже те, наскільки далеко політика за одне оновлення віддаляється від тієї, що зібрала дані:
У PPO середня відстань становить 0,014 ната й ніколи не перевищує 0,06. Без обрізання це в середньому 5,5, а часом аж 25 натів — політика після одного оновлення робить щось зовсім інше, ніж та, з якої вона навчалася. Дані тоді нічого про неї не кажуть, а покращення стає лотереєю. Обрізання — дрібна зміна у формулі, але воно робить з нестабільного алгоритму надійний.
Означення — оцінка KL між старою і новою політикою
KL-дивергенція з частини про теорію інформації, тут із натуральним логарифмом (одиниця — нат; 1 нат = 1 / ln 2 ≈ 1,44 біта), усереднена за станами з пакета:
DKL(πold ‖ πθ) = Es, a ∼ πold[ log πold(a | s) − log πθ(a | s) ] ≈ (1/N) ∑i=1N [ log πold(ai | si) − log πθ(ai | si) ].
Дії ai зіграла стара політика, тож середнє за пакетом — незміщена оцінка. Це середній логарифм відношення, а отже e−D — середнє геометричне відношення πθ / πold за зібраними діями.
Що це означає в числах: у PPO щонайбільше 0,06 ната, e−0,06 = 0,94 — дії зі старого пакета зазвичай на кілька відсотків менш імовірні, дані й далі щось кажуть про нову політику. Без обрізання аж 24,9 ната: e−24,9 ≈ 1,5 · 10−11, нова політика майже ніколи не зіграла б дій, з яких щойно навчалася.
6. PPO і мовні моделі
У частині про RLHF ми згадували, що InstructGPT і перший ChatGPT донавчали навчанням із підкріпленням. Це було саме PPO: політика — мовна модель, стан — дотеперішній текст, дія — наступний токен, а винагороду наприкінці відповіді дає модель винагороди, вивчена з людських уподобань. Штраф за віддалення від вихідної моделі (KL) відіграє ту саму роль, що й обрізання, — не дає політиці втекти туди, де винагороді не можна довіряти.
Означення — винагорода при донавчанні мовної моделі за допомогою PPO
Для запиту x і відповіді y, згенерованої моделлю πθ, яку донавчають, PPO отримує винагороду
R(x, y) = rφ(x, y) − β · log [ πθ(y | x) / πref(y | x) ],
де rφ — модель винагороди, πref — заморожена модель після донавчання на прикладах (SFT), а β — сила штрафу (так це записує InstructGPT, Лонг Оуян та ін., 2022). Математичне сподівання другого члена за відповідями — це точно β · DKL(πθ ‖ πref). Епізод — одна відповідь, дії — токени, винагорода rφ надходить лише після останнього токена; решта — це PPO саме так, як описано вище.
Для великих моделей PPO, однак, дороге: окрім самої моделі, йому потрібна так само велика мережа цінності. Тому з’явилися спрощення. DPO з частини про RLHF узагалі обходиться без навчання з підкріпленням. GRPO (DeepSeek, 2024) відкидає мережу цінності й як базовий рівень бере середню винагороду кількох відповідей на те саме запитання — саме той сталий базовий рівень, який ми вимірювали вище. Так навчають моделі, що «міркують» над математикою й кодом, де правильність відповіді можна перевірити.
Âi = (ri − середнє(r1, …, rG)) / sd(r1, …, rG)
- Âi
- перевага i-ї відповіді; її отримують усі токени цієї відповіді, і далі вона йде в обрізану ціль PPO
- ri
- винагорода i-ї з G відповідей на те саме запитання, скажімо, 1 = результат збігається, 0 = не збігається
- середнє(…)
- базовий рівень замість мережі цінності: наскільки добре модель зазвичай відповідає на це запитання — легке запитання має високу планку, важке — низьку
- sd(…)
- стандартне відхилення групи; вирівнює масштаб, щоб запитання з великою й малою дисперсією винагород тягнули однаково сильно (як нормалізація переваг у нашому PPO)
Приклад — переваги GRPO для чотирьох відповідей
Модель відповідає на задачу чотири рази, правильно лише вперше: винагороди (1; 0; 0; 0). Середнє 0,25, стандартне відхилення √((0,75² + 3 · 0,25²) / 4) = √0,1875 = 0,433.
Переваги: (1 − 0,25) / 0,433 = 1,732 для правильної відповіді і (0 − 0,25) / 0,433 = −0,577 для кожної з трьох неправильних. Сума дорівнює нулю: правильна підсилюється, неправильні придушуються. Якби всі чотири відповіді були правильні (або всі неправильні), усі переваги нульові й запитання нічого не навчить — модель учиться лише із запитань, на які вона іноді влучає, а іноді ні. (Ділимо на G; деякі реалізації ділять на G − 1, і тоді числа трохи відрізняються.)
7. Підсумок
- Policy gradient навчає безпосередньо ймовірності дій; працює й для неперервних дій і сам собою пробує нове.
- REINFORCE підсилює дії пропорційно віддачі, яка настала після них; він простий, але оцінка градієнта має велику дисперсію.
- Віднімання базового рівня зменшує дисперсію без зміни математичного сподівання (у нас на 26 % уже зі сталою); з вивченою V(s) виникає actor-critic.
- PPO використовує кожен пакет кілька разів і обрізанням відношення ймовірностей тримає політику близько до тієї, що зібрала дані.
- На маятнику на візку: PPO справляється з 500 кроками після 20–30 тисяч кроків в усіх прогонах; без обрізання політика віддаляється аж на 25 натів, і навчання коливається.
- PPO донавчало перший ChatGPT; його спрощення (GRPO) сьогодні навчає «міркувальні» моделі.
Хочете спробувати самі? Попросіть ШІ-агента запустити PPO з бібліотеки Stable-Baselines3 у середовищі LunarLander і змінювати ε в обрізанні (0,05; 0,2; 0,5) — а потім намалювати, як змінюються швидкість і стабільність навчання.
Маєте іншу думку? Напишіть на support@coden-app.com.