Skip to content

Модуль 09 · Практика багатоагентного навчання

Що робити, коли політика не вчиться: діагностика типових збоїв, чесний протокол вимірювання й прийоми, які реально економлять час.

Криві навчання: інформативна в одноагентній задачі й неінформативна у грі з нульовою сумою

Джерело: Albrecht, Christianos, Schäfer, Multi-Agent Reinforcement Learning, MIT Press, 2024, рис. 10.2.

Зміст лекції

Попередні модулі давали методи. Цей — інженерну дисципліну, без якої методи не доводяться до результату.

ЧастинаПро що
1. Інтерфейс середовищащо має вміти середовище і як обрати, де перевіряти
2. Пам'ять агентастек спостережень, рекурентна мережа чи нічого
3. Однорідність роюспільні параметри, коли вони коректні, і що робити з ролями
4. Обмін досвідомальтернатива спільним параметрам
5. Чесне вимірюваннякриві навчання, скільки прогонів, бюджет пошуку
6. Діагностикачому політика не вчиться: тринадцять типових причин і що з ними робити

Частина 6 — головна. Її варто тримати відкритою під час лабораторних робіт.

Результати навчання

Після лекції ви зможете:

  • прочитати опис просторів спостережень і дій багатоагентного середовища й сказати, скільки в ньому агентів;
  • обрати середовище під те, що саме хочете перевірити;
  • обрати між стеком спостережень, рекурентною мережею й відсутністю пам'яті, спираючись на властивості задачі;
  • відрізнити слабко однорідних агентів від сильно однорідних і сказати, коли parameter sharing коректний;
  • пояснити, чому спільний буфер сам собою нічого не прискорює;
  • побудувати криву навчання так, щоб за нею можна було порівнювати алгоритми;
  • назвати, чому порівняння двох алгоритмів може бути недійсним навіть за однакових графіків;
  • пояснити на числах, чому стандартизація винагород може перетворити «виконати місію швидше» на «літати довше»;
  • за симптомом визначити ймовірну причину того, що політика рою не вчиться.

Частина 1 · Інтерфейс середовища

Перше, з чим стикається кожен, хто береться за багатоагентне навчання: єдиного інтерфейсу середовищ у MARL немає, на відміну від одноагентного випадку. Різні фреймворки домовляються по-різному, і алгоритм, який працює з усіма, написати важко.

Мінімум, який має вміти середовище

Попри різнобій, базова пара функцій та сама, що в одноагентному випадку: reset() повертає початкове спостереження, step() просуває середовище на крок і повертає наступне спостереження, винагороду й ознаку завершення. Плюс середовище описує простори спостережень і дій.

python
import gymnasium as gym

env = gym.make("Foraging-8x8-2p-1f-v3")

env.observation_space
# >> Tuple(Box(..., 15), Box(..., 15))
env.action_space
# >> Tuple(Discrete(6), Discrete(6))

observations, info = env.reset(seed=0)
actions = env.action_space.sample()
observations, rewards, terminated, truncated, info = env.step(actions)
ЕлементЩо означає в цьому прикладі
Tuple(...) довжини 2простори — кортежі по агентах; довжина 2 означає двох агентів
Box(..., 15)спостереження одного агента — вектор із 15 чисел
Discrete(6)шість дій: чотири напрямки, взяти предмет, нічого не робити
terminated / truncatedзавершення за правилами задачі проти обриву за лімітом часу

Цього мінімуму досить, щоб описати частково спостережувану багатоагентну задачу. Складніші інтерфейси лише додають: обмеження доступних дій по ходу епізоду, видачу повного стану середовища для централізованого критика. Середовища з іншим інтерфейсом підключають обгортками.

Де перевіряти: критерії вибору середовища

Питання ставлять не «яке середовище найкраще», а які саме здібності треба перевірити. Релевантні властивості:

  • надійна збіжність до конкретної концепції розв'язку;
  • ефективність масштабування за числом агентів;
  • робота за великих просторів станів і дій, за часткової спостережуваності та за розріджених винагород (винагорода нульова більшу частину часу).

Найважчі задачі — це комбінація всіх трьох: великий простір, обмежена видимість і рідкий сигнал.

Окремий критерій, який зазвичай забувають: яких навичок середовище вимагає від агентів. Вони різні:

НавичкаДе перевіряється
коли й з ким кооперуватисязадачі збирання предметів удвох
якою інформацією ділитисязадачі з явним каналом зв'язку
як розподілити ролі в командікомандні задачі з різними позиціями

Алгоритм може блискуче справлятися з одним типом навичок і провалювати інший, тому одного бенчмарка не досить. Для рою БПЛА це означає: утримання строю, обхід перешкод і покриття території перевіряють різні здібності політики, і хороший результат на одному нічого не обіцяє на іншому.

Частина 2 · Пам'ять агента

Теоретично політику треба обумовлювати на всій історії спостережень — інакше в частково спостережуваному середовищі вона не має потрібної інформації. Але мережа має фіксований вхід.

Три варіанти пам'яті й як обрати

ВаріантКоли братиЦіна
Нічого, лише oitсередовище майже повністю спостережуваненуль
Стек останніх k спостереженьусе потрібне вміщується у фіксоване число кроківвхід росте в k разів
Рекурентна мережа (GRU, LSTM)потрібна інформація з далекого минулогозгасання градієнта, повільніше навчання

Рекурентна структура найближча до теоретично коректної, але на практиці страждає від згасання градієнта, через що інформація з далекого минулого все одно не використовується.

Питання, яке варто поставити собі перед вибором: наскільки важлива для розв'язку інформація з попередніх спостережень? Для висіння Crazyflie — майже не важлива, вистачає поточного стану. Для обстеження території, де треба пам'ятати, де вже був, — критично.

Частина 3 · Однорідність рою

Зі зростанням числа апаратів простір параметрів росте: окрема мережа на кожного означає, що навчати доводиться в n разів більше ваг. Природна ідея — навчати одну мережу на всіх. Питання в тому, коли це коректно.

Слабко й сильно однорідні агенти

Слабко однорідні: агенти можуть обмінятися політиками, і результат розв'язання задачі збережеться.

Ui(π)=Uσ(i)(πσ(1),,πσ(n))для будь-якої перестановки σ

Сильно однорідні: агенти слабко однорідні і оптимальна спільна політика складається з однакових індивідуальних політик.

Різниця не формальна. Уявіть два апарати й два різні орієнтири, до яких треба розлетітися. Політики можна поміняти місцями — задача розв'яжеться, отже агенти слабко однорідні. Але оптимальна поведінка різна: один летить ліворуч, другий праворуч. Сильної однорідності немає.

А якщо орієнтир один і обом треба до нього — агенти сильно однорідні.

Parameter sharing: коли він коректний

θshared=θ1==θnта/абоϕshared=ϕ1==ϕn

Формально це обмеження на спільну політику: вона зобов'язана складатися з однакових індивідуальних. Отже, parameter sharing коректний рівно тоді, коли агенти сильно однорідні.

Два виграші: число параметрів стале незалежно від розміру рою, і спільні ваги оновлюються досвідом усіх агентів одразу.

⚠️ Пастка: сильна однорідність — сильне припущення, і перевірити його важко. У прикладі з двома орієнтирами оптимальні політики різні й просто не можуть бути вивчені за такого обмеження.

Що робити з різними ролями:

  • індекс агента у спостереженні — теоретично дозволяє виробити різну поведінку, але на практиці ємності мережі може забракнути, щоб представити кілька різних стратегій;
  • обмін досвідом замість обміну параметрами — наступний розділ.

Виміряно на задачі збирання предметів: спільні параметри пришвидшують збіжність, але в тому експерименті не підвищили фінальну віддачу — усі варіанти зійшлися до схожої політики. Це спостереження на конкретній задачі, а не загальний закон.

Частина 4 · Обмін досвідом

Компроміс: тримати окремі параметри на кожного агента, але ділити траєкторії. Припущення сильної однорідності при цьому не потрібне, і політики можуть вийти різними.

Спільний буфер і чому сам собою він не працює

Для off-policy усе просто: замість n буферів один спільний, агент може вчитися на переході, зібраному сусідом.

⚠️ Але проста заміна буферів нічого не змінить. Число зразків на навчання лишилося тим самим. Виграш спільного буфера в тому, що в ньому більше й свіжішого досвіду, — і щоб ним скористатися, треба збільшити число кроків зворотного поширення.

Для on-policy потрібна корекція важливісною вибіркою — так влаштований SEAC:

L(ϕi)=Advilogπ(aithit;ϕi)λkiπ(akthkt;ϕi)π(akthkt;ϕk)Advklogπ(akthkt;ϕi)

λ керує вагою чужого досвіду: 1 — як власний, 0 — обміну немає. Важлива деталь: обидві переваги рахує критик агента i — і власну Advi, і чужу Advk, тобто агент оцінює чужу траєкторію своєю функцією цінності. Дріб перед нею — вага важливісної вибірки: наскільки ймовірною була та дія за політикою агента i проти політики агента k, який її насправді зробив.

Спільні параметриОбмін досвідом
Припущеннясильна однорідністьне потрібне
Число параметрівсталеросте з n
Обчислення на крокменшедорожче: батч більший
Фінальна віддачаобмежена однаковістю політикможе бути вищою

Менш очевидний виграш обміну: він вирівнює темп навчання агентів. Відстаючий швидко наздоганяє, вчачись на траєкторіях тих, у кого політика вже краща, — а коли агенти йдуть в одному темпі, у них більше шансів дослідити дії, які вимагають координації.

Частина 5 · Чесне вимірювання

У багатоагентному навчанні порівнювати важче, ніж в одноагентному, з двох причин: висока чутливість до гіперпараметрів і до зерен, і концепції розв'язку, що не зводяться до одного числа.

Крива навчання: що по осях і скільки прогонів

По осі абсцис — накопичені кроки середовища, а не епізоди. Інакше порівняння перекошується: алгоритм, який на ранніх епізодах досліджував більше, зробив більше кроків і більше оновлень за те саме число епізодів, і його крива росте «швидше» з причини, не пов'язаної з якістю.

По осі ординат — та величина, на яку навчали. Але корисно поруч показати й недисконтовану віддачу: її легше інтерпретувати. Якщо апарат покрив десять комірок, недисконтована віддача дорівнює десяти, а дисконтована — щось менше, і зрозуміти за нею число комірок важко.

Скільки прогонів. Однозначної норми немає, є практика: у дешевих табличних задачах автори підручника беруть від п’ятдесяти до ста незалежних прогонів, у дорогих глибоких — п'ять, і завжди показують середнє зі смугою розкиду. У ваших лабораторних мінімум — п'ять.

⚠️ Смуга на графіку має бути підписана: стандартне відхилення й похибка середнього — різні речі, і читач мусить знати, що бачить.

Правило чесного порівняння

Порівняння двох алгоритмів, де один отримав ширший пошук гіперпараметрів, нечесне.

Це головне правило розділу, і порушують його постійно — зазвичай ненавмисно: свій алгоритм крутили тиждень, чужий узяли зі значеннями за замовчуванням.

Практика пошуку: grid search за кількома комбінаціями і кількома зернами, потім вибір найкращої комбінації за метрикою кривої. Починати варто біля значень, про які відомо, що вони розумні, і зосередитися насамперед на гіперпараметрах, що керують дослідженням — коефіцієнті ентропії передусім.

Максимум чи середнє по кривій. Максимум каже, чи розв'язав алгоритм задачу хоч колись; середнє — наскільки швидко й стабільно він учився. Якщо кілька алгоритмів дійшли до одного максимуму, розрізнити їх дозволяє саме середнє.

Код: чому стандартизація може змінити задачу

Порахуємо приклад із попередньої частини до кінця. Середовище з одного стану й двох дій: перша дає 1,0 і завершує епізод, друга дає 0,1 і завершує його з імовірністю 1 %.

python
import numpy as np

P_END = 0.01                        # імовірність завершення після дії 2
R1, R2 = -1.0, -0.1

steps_1 = 1.0                       # дія 1 завершує епізод одразу
steps_2 = 1.0 / P_END               # геометричний розподіл: у середньому 100

# Батч, який реально збирає реалізація: обидві винагороди трапляються.
batch = np.concatenate([np.full(500, R1), np.full(500, R2)])
mean, std = float(batch.mean()), float(batch.std())

std_1 = (R1 - mean) / std
std_2 = (R2 - mean) / std

Жодного трюку тут немає — це рівно те, що робить VecNormalize або будь-який власний код стандартизації.

Результат коду: перевага перевернулася

text
дія 1: винагорода -1.0 за крок, епізод 1 крок
дія 2: винагорода -0.1 за крок, епізод у середньому 100 кроків

віддача за епізод: дія 1 = -1.0, дія 2 = -10.0
обидві від'ємні, дія 1 краща → агент прагне завершити епізод якнайшвидше

батч із 1000 винагород: середнє -0.550, відхилення 0.450

після стандартизації:
  дія 1: -1.0  →  -1.00
  дія 2: -0.1  →  +1.00   ← стала ДОДАТНОЮ
порядок покрокових винагород збережено: -1.00 < +1.00

але віддача за епізод: дія 1 = -1.0, дія 2 = +100.0
тепер кожен зайвий крок ДОДАЄ винагороду, і вигідно тягнути епізод
перевага перевернулася: було краще завершити, стало краще жити довше

Зверніть увагу, що саме зламалося. Порядок покрокових винагород збережено1,00 усе ще менше за +1,00. Але віддача за епізод перевернулася з 1 проти 10 на 1 проти +100.

Причина в тому, що стандартизація перевела частину винагород у додатну область, а тривалість епізоду вона не чіпає. Поки всі винагороди від'ємні, кожен зайвий крок коштує; щойно вони стали додатними, кожен зайвий крок приносить.

Для рою це не абстракція: якщо ваша винагорода складена зі штрафів — відхилення від строю, зближення, витрата енергії, — стандартизація перетворює задачу «виконати місію швидше» на «літати довше». Саме тому в чек-листі відтворюваності стоїть окремий пункт про попередню обробку винагород.

Частина 6 · Чому політика не вчиться

Найпрактичніша частина курсу. Кожен рядок — симптом, який ви побачите в журналі навчання, і причина, яку варто перевірити першою.

Діагностика: симптом → причина → що робити

СимптомЙмовірна причинаЩо робити
Крива коливається, агент «забуває» вивчененестаціонарність: сусіди вчаться одночасноперейти до централізованого критика
Off-policy закріплює стратегію, яку сусіди вже контрятьбуфер зберігає застарілі політики сусідівменший буфер, ваги важливісної вибірки, hysteretic Q
Рій не намагається, щоб не бути оштрафованимвибір боязкої рівновагипереглянути співвідношення штрафу й бонусу
«Ледар» у рої вчиться не працюватиспільна винагорода не несе інформації про внесокконтрфактична базова лінія, декомпозиція цінності
Критик дає невірні оцінкикритик не бачить історії агента → зсувподавати hi обов'язково
Додали централізований критик — стало шумнішезайва інформація підвищує дисперсіюперевірити, чи не роздуто вхід
Спільні параметри не дають розійтися по роляхсередовище слабко, а не сильно одноріднеіндекс агента або обмін досвідом
Спільний буфер нічого не змінивчисло зразків лишилося тим самимзбільшити кроки зворотного поширення
Навчання розповзається, цінності не наближаютьсявинагороди охоплюють кілька порядківстандартизація віддач
Після стандартизації агент почав «тягнути час»стандартизація змінила природу задачідив. Модуль 06
Крива пласка, хоча агенти вчатьсягра з нульовою сумою: обидва ростуть разомфіксований опонент або пул минулих версій
Один алгоритм «перемагає» іншийнесумірний бюджет пошуку гіперпараметрівзрівняти бюджет
Немає прискорення від паралельних середовищсередовище — фізична система в одному екземпляріці прийоми незастосовні

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

Один оптимізатор на всіх. Багато реалізацій незалежного навчання заводять окремий екземпляр оптимізатора на кожного агента. Це гарантує незалежність, але дуже дорого й не використовує паралелізацію. Один оптимізатор, що охоплює всі параметри — навіть якщо агенти складаються з різних мереж, — істотно швидший: втрати просто складаються перед кроком.

python
params = list(net1.parameters()) + list(net2.parameters()) + list(net3.parameters())
opt = torch.optim.Adam(params)
...
loss = loss1 + loss2 + loss3
loss.backward()
opt.step()

Стандартна конфігурація мереж для задач такого масштабу: два прихованих шари по 64 нейрони, ReLU. Це відправна точка, а не догма.

Критерій вибору середовища. Питання не «яке середовище найкраще», а які саме здібності ви хочете перевірити: надійну збіжність до розв'язку, масштабування за числом агентів, роботу за часткової спостережуваності чи за розріджених винагород. Найважчі задачі — комбінація великого простору станів, обмеженої спостережуваності й розріджених винагород.

Висновки

  • Пам'ять агента обирають за питанням «наскільки важлива інформація з минулого», а не за замовчуванням: рекурентна мережа найближча до теорії, але страждає від згасання градієнта.
  • Parameter sharing коректний лише за сильної однорідності — коли оптимальні політики агентів однакові. Він пришвидшує збіжність, але не підвищує фінальну віддачу.
  • Обмін досвідом знімає це припущення ціною більших обчислень і вирівнює темп навчання агентів.
  • Спільний буфер сам собою нічого не прискорює: треба збільшити число оновлень.
  • По осі абсцис кривої — кроки середовища, не епізоди. Смуга розкиду має бути підписана.
  • Порівняння з несумірним бюджетом пошуку гіперпараметрів нечесне — це найчастіше порушуване правило галузі.
  • Більшість збоїв навчання в рої мають типову причину, і таблиця діагностики економить дні.

Перехід до Модуля 10

Апарат зібрано повністю: постановка, алгоритми, інваріантності, декомпозиція цінності й інженерна дисципліна вимірювання.

Модуль 10 · Конкретні задачі роїв прикладає все це до реальних місій: покриття території, пошук об'єкта, розподіл цілей, керований поділ рою — і показує, якими метриками замовник міряє результат.

Література та ресурси

  • Albrecht S. V., Christianos F., Schäfer L. Multi-Agent Reinforcement Learning: Foundations and Modern Approaches. MIT Press, 2024 — розділи 2.7 (криві навчання й вісь кроків), 8.2.8 (паралельні середовища), 9.7, 10.5, 10.6, 11.1. Вільний PDF
  • Christianos F., Schäfer L., Albrecht S. V. Shared Experience Actor-Critic for Multi-Agent Reinforcement Learning (SEAC). NeurIPS, 2020. arXiv:2006.07169
  • Christianos F., Papoudakis G., Rahman A., Albrecht S. V. Scaling Multi-Agent Reinforcement Learning with Selective Parameter Sharing. ICML, 2021. arXiv:2102.07475
  • Henderson P., Islam R., Bachman P. та ін. Deep Reinforcement Learning that Matters. AAAI, 2018. arXiv:1709.06560
  • Agarwal R., Schwarzer M., Castro P. S. та ін. Deep Reinforcement Learning at the Edge of the Statistical Precipice. NeurIPS, 2021. arXiv:2108.13264
  • Stable-Baselines3 · EPyMARL · PettingZoo

Матеріали курсу. Схеми із зовнішніх джерел належать їхнім авторам — посилання під кожною ілюстрацією.