Перейти до вмісту
coden

Policy gradient і PPO: навчання безпосередньо політики

Стохастична політика як мережа, REINFORCE і теорема про градієнт політики, базовий рівень і перевага, actor-critic, PPO з обрізанням, написане з нуля на маятнику на візку, що стається без обрізання, і як PPO донавчило мовні моделі.

12 хвилин Matěj Žalmánek 2026-10-16

Серія Основи ШІ Частина 49 з 52
  1. Мапа штучного інтелекту: що є що і як усе це пов’язано
  2. Коротка історія штучного інтелекту: від Тюрінга до мовних моделей
  3. Дані, модель, тренування, інференс: основні поняття на одному прикладі
  4. Як читати математичний запис: символи, індекси, суми та квантори
  5. Множини й відношення: конструктор, з якого складаються означення в ШІ
  6. Функції й відображення: чому кожна модель у ШІ — це функція
  7. Логіка й доведення: правила, за якими міркують у ШІ
  8. Графи й дерева: структура, на якій тримаються пошук і нейронні мережі
  9. Лінійна алгебра для машинного навчання: вектори, матриці й чому ШІ передусім множить
  10. Похідні, градієнт і правило ланцюжка: як модель дізнається, у якому напрямку вчитися
  11. Градієнтний спуск: як навчається модель
  12. Що таке ймовірність: від кидка кубика до аксіом Колмогорова
  13. Умовна ймовірність і теорема Баєса: як змінити оцінку, коли дізнаєтеся щось нове
  14. Випадкова величина і функція розподілу: одна функція, яка каже про розподіл усе
  15. Функція щільності та функція маси ймовірності: чому неперервна величина має в точці ймовірність нуль
  16. Математичне сподівання, дисперсія і коваріація: де лежить розподіл, наскільки він широкий і що з чим пов’язано
  17. Огляд розподілів ймовірностей: Бернуллі, біноміальний, Пуассона, рівномірний, нормальний і експоненційний
  18. Закон великих чисел і центральна гранична теорема: чому середні поводяться так передбачувано
  19. Статистика й оцінювання параметрів: максимальна правдоподібність, MAP і довірчі інтервали
  20. Теорія інформації: ентропія, перехресна ентропія і KL-дивергенція — звідки беруться функції втрат
  21. Пошук у просторі станів: BFS, DFS, UCS і A* з анімаціями
  22. Ігри та суперник: мінімакс, альфа-бета відсікання і Monte Carlo tree search
  23. Задоволення обмежень: бектрекінг, поширення обмежень і AC-3 на судоку та мапі чеських країв
  24. Логіка й системи, засновані на знаннях: пряме і зворотне виведення, резолюція та експертні системи
  25. Планування: STRIPS, світ кубиків, евристики з релаксації та планування в AI-агентах
  26. Локальний пошук та імітація відпалу: комівояжер через обласні центри Чехії
  27. Генетичні алгоритми: популяція, схрещування, мутація і добір на рюкзаку для походу
  28. Еволюційні стратегії і генетичне програмування: від правила однієї п’ятої до закону Кеплера
  29. Оптимізація мурашиною колонією: як феромоновий слід знаходить короткий шлях
  30. Оптимізація роєм частинок: інерція, власний досвід і досвід рою
  31. Нейроеволюція: еволюція ваг і форми нейронних мереж та алгоритм NEAT
  32. Нечіткі множини й функції належності: як записати «трохи тепло»
  33. Нечітка логіка та ймовірність: чому «трохи тепло» не означає «імовірно тепло»
  34. Нечітка логіка: t-норми, імплікації та правила ЯКЩО–ТО
  35. Нечітке керування: Мамдані та Суґено від вентилятора до маятника на візку
  36. Нечітка кластеризація: алгоритм fuzzy c-means і точки між кластерами
  37. Нейро-нечіткі системи (ANFIS): нечіткі правила, які навчаються з даних
  38. Марковські ланцюги: матриця переходів, стаціонарний розподіл і PageRank
  39. Приховані марковські моделі: алгоритм Вітербі й нечесне казино
  40. Байєсівські мережі: чому трава мокра і що з цього випливає для дощувача
  41. Фільтр Калмана: як за неточними вимірюваннями оцінити, де авто і як швидко воно їде
  42. Види машинного навчання: з учителем, без учителя, з частковим залученням учителя та інші
  43. Промпти, контекст і RAG: як дати моделі правильну інформацію
  44. Варіаційні автокодувальники (VAE): нові зображення з неперервного латентного простору
  45. Генеративні змагальні мережі (GAN): фальшувальник проти детектива
  46. Дифузійні моделі: як із чистого шуму постає зображення
  47. Марковські процеси ухвалення рішень: стани, дії, винагороди й рівняння Беллмана
  48. Q-навчання і DQN: як навчитися цінності дій — від таблиці до нейронної мережі
  49. Policy gradient і PPO: навчання безпосередньо політики
  50. Як працює ШІ-агент: мовна модель у циклі з інструментами
  51. Програмування з AI-агентами: завдання, тести й перевірка
  52. Оцінювання і безпека систем ШІ: як вимірювати і як стежити

Повна програма серії Готово: 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
У коді це обчислюють з кінця одним рядком: Ât = δt + γλ Ât+1.

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-похибок із параметром λ.

Простими словами

Тренер після матчу каже: «Роби це частіше». Гравець повторює це на тренуванні — але лише доти, доки не робить це на п’яту частину частіше, ніж раніше. Далі він уже не вчиться, доки не зіграє наступний матч і не з’ясує, чи це досі працює. Кроки досить великі, щоб швидко вдосконалюватися, і досить малі, щоб не збожеволіти.

−2−1012 00,511,52 відношення ймовірностей r (безрозмірне) обрізана ціль (кратні переваги A)
Обрізана ціль PPO залежно від відношення r = π_нова / π_стара (ε = 0,2; зеленим — смуга 1 ± ε) перевага A = +1: понад 1 + ε вже нічого не додає перевага A = −1: нижче 1 − ε вже нічого не додає

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 лишає необрізаний член і помилку виправляє
Підсилюй вигідні дії, але лише доки їхня ймовірність не зміниться більш ніж у 1 ± ε раза; далі вибірка мовчить.
Приклад — три вибірки й обрізання з ε = 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, у якому ми вимкнули обрізання.

0100200300400500 025 00050 00075 000100 000 крок навчання (кількість кроків у середовищі) довжина епізоду (кроки)
Середня довжина епізоду під час навчання (товсто — середнє трьох прогонів, тонко — окремі прогони) REINFORCEREINFORCE з базовим рівнемPPOPPO без обрізання
методколи вперше середнє ≥ 475 (прогін 1 · 2 · 3)наприкінці (прогін 1 · 2 · 3)
REINFORCE— · — · —463 · 333 · 348
REINFORCE з базовим рівнем90 000 · 80 000 · —488 · 500 · 404
PPO30 000 · 20 000 · 20 000500 · 500 · 500
PPO без обрізання100 000 · 30 000 · 50 000494 · 44 · 500

PPO в усіх трьох прогонах утримує жердину всі 500 кроків уже після 30 000, 20 000, 20 000 кроків і більше цього не втрачає. REINFORCE вдосконалюється повільно й до кінця не впорується; з базовим рівнем він трохи швидший і у двох прогонах із трьох доходить до мети. Увага: порівняння не зовсім чесне за кількістю обчислень — PPO робить на кожному пакеті вдесятеро більше кроків градієнта. Проте воно чесне в тому, що в навчанні з підкріпленням важить найбільше, — у кількості досвіду, який агент мусить зібрати у світі.

А що станеться, коли те саме багаторазове навчання на пакеті запустити без обрізання? Довжини епізодів стрибають угору й униз, прогін 2 закінчився на 44 кроках. Чому — покаже те, наскільки далеко політика за одне оновлення віддаляється від тієї, що зібрала дані:

10-410-310-210-1100101 025 00050 00075 000100 000 крок навчання (кількість кроків у середовищі) оцінка KL (нати, лог. шкала)
Відстань нової політики від старої після кожного пакета (оцінка KL, прогін 1, логарифмічно) PPO без обрізання

У 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 (Чжихун Шао та ін., DeepSeekMath, 2024): перевага відповіді = наскільки вона краща за інші відповіді на те саме запитання.
Приклад — переваги 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.

Агент на вашому комп’ютері, керований з телефона