Вступ до методів Advantage Actor Critic: давайте пограємо у Їжачка Соніка!

З початку цього курсу ми вивчали два різні методи навчання для підкріплення:

  • Методи, засновані на цінностях (Q-навчання, глибоке Q-навчання): де ми вивчаємо функцію значення, яка відображає кожну пару дій стану у значення. Завдяки цим методам ми знаходимо найкращі дії для кожної держави - дії з найбільшою цінністю. Це добре працює, коли у вас є кінцевий набір дій.
  • Методи, засновані на політиці (ПІДСИЛИТИ за допомогою градієнтів політики): де ми безпосередньо оптимізуємо політику без використання функції значення. Це корисно, коли простір дій є безперервним або стохастичним. Основною проблемою є пошук хорошої функції оцінки, щоб обчислити, наскільки яка політика. Ми використовуємо загальну винагороду за серію.

Але обидва ці методи мають великі недоліки. Ось чому сьогодні ми будемо вивчати новий тип методу посиленого навчання, який ми можемо назвати «гібридним методом»: Актор Критик . Ми будемо використовувати дві нейромережі:

  • Критик, що вимірює, наскільки якісно зроблені дії (на основі цінності)
  • актор, який контролює поведінку нашого агента (на основі політики)

Оволодіння цією архітектурою є важливим для розуміння сучасних алгоритмів, таких як Proximal Policy Optimization (він же PPO). РРО базується на критиці актора переваги.

І ви реалізуєте агента Advantage Actor Critic (A2C), який навчиться грати Їжака Соніка!

Пошуки кращої моделі навчання

Проблема з градієнтами політики

Метод Policy Gradient має велику проблему. Ми опинилися в ситуації Монте-Карло, чекаючи до кінця епізоду, щоб розрахувати винагороду. Ми можемо зробити висновок, що якщо ми маємо високу винагороду ( R (t) ), усі наші дії були добрими, навіть якщо деякі були насправді поганими.

Як ми можемо бачити в цьому прикладі, навіть якщо A3 був поганою дією (призвів до негативних винагород), усі дії будуть усереднені як добрі, оскільки загальна винагорода була важливою.

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

Що робити, якщо замість цього ми можемо робити оновлення на кожному кроці часу?

Представляємо актора-критика

Модель «Актор Критик» - краща оцінна функція. Замість того, щоб чекати до кінця епізоду, як це робимо в Monte Carlo REINFORCE, ми робимо оновлення на кожному кроці (TD Learning).

Оскільки ми робимо оновлення на кожному часовому кроці, ми не можемо використовувати загальну винагороду R (t). Натомість нам потрібно навчити критичну модель, яка апроксимує функцію значення (пам’ятайте, що функція вартості обчислює, яка максимальна очікувана майбутня винагорода за станом та дією). Ця функція значення замінює функцію винагороди в градієнті політики, яка обчислює винагороду лише в кінці епізоду.

Як працює актор-критик

Уявіть, що ви граєте у відеоігру з другом, яка надає вам зворотній зв’язок. Ви актор, а ваш друг - критик.

На початку ви не знаєте, як грати, тому спробуєте якусь дію випадковим чином. Критик спостерігає за вашими діями та надає відгуки.

Вивчаючи цей відгук, ви оновите свою політику та будете краще грати в цю гру.

З іншого боку, ваш друг (Критик) також оновить свій власний спосіб надання зворотного зв'язку, щоб наступного разу це могло бути кращим.

Як бачимо, ідея Actor Critic полягає в тому, щоб мати дві нейронні мережі. Ми оцінюємо обидва:

Обидва працюють паралельно.

Оскільки у нас є дві моделі (Актор та Критик), які потрібно тренувати, це означає, що у нас є два набори ваг (? Для нашої дії та w для нашого Критика), які капелюх потрібно оптимізувати окремо:

Процес критики актора

На кожному часовому кроці t ми беремо поточний стан (St) із навколишнього середовища і передаємо його як вхід через наш Актор та наш Критик.

Наша Політика приймає стан, виконує дію (At) і отримує новий стан (St + 1) та винагороду (Rt + 1).

Завдяки цьому:

  • Критик обчислює значення здійснення цієї дії в такому стані
  • Актор оновлює свої параметри політики (ваги), використовуючи це значення q

Завдяки оновленим параметрам, Актор виробляє наступну дію при At + 1, враховуючи новий стан St + 1. Потім критик оновлює свої значення параметрів:

A2C та A3C

Представляємо функцію Advantage для стабілізації навчання

Як ми бачили у статті про вдосконалення глибокого Q-навчання, методи, що базуються на цінностях, мають велику мінливість.

Щоб зменшити цю проблему, ми говорили про використання функції переваги замість функції значення.

Функція переваги визначається так:

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

Якщо A (s, a)> 0: наш градієнт рухається в цьому напрямку.

Якщо A (s, a) <0 (наша дія робить гірше, ніж середнє значення цього стану), наш градієнт рухається в протилежному напрямку.

Проблема реалізації цієї функції переваг полягає в тому, що потрібні дві функції значення - Q (s, a) та V (s). На щастя, ми можемо використовувати помилку TD як хороший оцінювач функції переваг.

Дві різні стратегії: асинхронна або синхронна

У нас є дві різні стратегії реалізації агента, що відповідає за роль актора:

  • A2C (він же критик актора переваги)
  • A3C (він же асинхронний актор-критик)

Через це ми будемо працювати з A2C, а не з A3C. Якщо ви хочете побачити повну реалізацію A3C, перегляньте чудову статтю про Артур Джуліані про A3C та Doom.

В A3C ми не використовуємо відтворення досвіду, оскільки для цього потрібно багато пам’яті. Натомість ми асинхронно виконуємо різні агенти паралельно на декількох екземплярах середовища. Кожен працівник (копія мережі) буде асинхронно оновлювати глобальну мережу.

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

Вибираючи A2C або A3C?

Проблема A3C пояснюється в цій приголомшливій статті. Через асинхронну природу A3C деякі працівники (копії Агента) будуть грати зі старою версією параметрів. Таким чином, сукупне оновлення не буде оптимальним.

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

Як наслідок, навчання буде більш згуртованим та швидшим.

Реалізація агента A2C, який грає Їжачка Соніка

A2C на практиці

На практиці, як пояснюється в цій публікації Reddit, синхронний характер A2C означає, що нам не потрібні різні версії (різні працівники) A2C.

Кожен працівник в A2C матиме однаковий набір ваг, оскільки, на відміну від A3C, A2C оновлює всіх своїх працівників одночасно.

Насправді ми створюємо кілька версій середовищ (скажімо вісім), а потім виконуємо їх паралельно.

Процес буде таким:

  • Створює вектор з n середовищ за допомогою багатопроцесорної бібліотеки
  • Створює об'єкт-бігун, який обробляє різні середовища, виконуючись паралельно.
  • Має дві версії мережі:
  1. step_model: що генерує досвід із середовищ
  2. train_model: це тренує досвід.

Коли бігун робить крок (однокрокова модель), це виконує крок для кожного з n середовищ. Це дає багато досвіду.

Потім ми обчислюємо градієнт відразу, використовуючи train_model і наш пакет досвіду.

Нарешті, ми оновлюємо крокову модель новими вагами.

Пам'ятайте, що обчислення градієнта відразу - це те саме, що і збір даних, обчислення градієнта для кожного працівника, а потім усереднення. Чому? Оскільки підсумовування похідних (підсумовування градієнтів) - це те саме, що брати похідні від суми . Але другий - більш елегантний і кращий спосіб використовувати графічний процесор.

A2C з їжачком Сонік

Отже, тепер, коли ми розуміємо, як працює A2C загалом, ми можемо реалізувати наш агент A2C, граючи в Sonic! Це відео показує різницю в поведінці нашого агента між 10 хв тренування (ліворуч) та 10 год тренування (праворуч).

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

Ця реалізація є набагато складнішою, ніж попередні реалізації. Ми починаємо впроваджувати найсучасніші алгоритми, тому нам потрібно бути все більш ефективними з нашим кодом. Ось чому в цій реалізації ми розділимо код на різні об'єкти та файли.

Це все! Ви щойно створили агента, який вчиться грати Їжачка Соніка. Це круто! Ми бачимо, що, наприклад, за 10 годин навчання наш агент не розуміє циклу, тому нам потрібно буде використовувати більш стабільну архітектуру: PPO.

Потратьте час, щоб розглянути всі досягнення, які ви зробили з першого розділу цього курсу: ми перейшли від простих текстових ігор (OpenAI таксі-v2) до складних ігор, таких як Doom та Їжак Сонік, використовуючи все більш потужні архітектури. І це фантастика!

Наступного разу ми дізнаємось про проксимальні градієнти політики, архітектуру, яка перемогла у ретро-конкурсі OpenAI. Цього разу ми навчимо нашого агента грати Їжака Соника 2 та 3, і він закінчить цілі рівні!

Не забудьте реалізувати кожну частину коду самостійно. Насправді важливо спробувати змінити код, який я вам дав. Спробуйте додати епохи, змінити архітектуру, змінити швидкість навчання тощо. Експериментувати - найкращий спосіб вчитися, тож розважайтесь!

Якщо вам сподобалась моя стаття, натисніть на? нижче стільки часу, скільки вам сподобалась стаття, так що інші люди побачать це тут, на Medium. І не забудьте піти за мною!

Ця стаття є частиною мого курсу глибокого підкріплення з TensorFlow? ️. Перегляньте програму навчання тут.

Якщо у вас є якісь думки, коментарі, запитання, сміливо коментуйте їх нижче або надішліть мені електронне повідомлення: привіт [at] simoninithomas [точка] com, або напишіть мені в Twitter @ThomasSimonini.

Курс глибокого підкріплення:

Ми робимо відеоверсію навчального курсу глибокого підкріплення з Tensorflow ? де ми зосереджуємося на частині реалізації з тензорним потоком тут

Частина 1: Вступ до армійного навчання

Частина 2: Занурення глибше у Підкріплення навчання за допомогою Q-Learning

Частина 3: Вступ до Deep Q-Learning: давайте грати в Doom

Частина 3+: Покращення глибокого Q-навчання: дуель Double DQN, відтворення пріоритетного досвіду та фіксовані Q-цілі

Частина 4: Вступ до політичних градієнтів із Doom та Cartpole

Частина 6: Оптимізація проксимальної політики (PPO) із Соник-Їжаком 2 та 3

Частина 7: Навчання, спричинене цікавістю, стало простим. Частина I