1   2   3   4   5
Ім'я файлу: 2021_M_EOM_Suprunenko_M_Iu.pdf
Розширення: pdf
Розмір: 2211кб.
Дата: 30.05.2022
скачати
Пов'язані файли:
9._POKAZHCHIKI.doc
КОВИД КОРОНА.docx
104.doc
Лабораторная работа №1.docx
курсова робота Облік запасів (1).docx
Перескладання.docx
Лабораторна робота 2.docx
банковское страхование.docx
Стан ОП з розвитку музичних здібностей дітей.docx
Види конфіскації майна.docx
[UAReferats.com]_C39N1549.doc
Лекція 3.docx
Агент підтримує таблицю Q[S, A], де S – набір станів, а A – набір дій.
Q[s, a] представляє його поточну оцінку Q*(s,a).
Q-Table – це структура даних, яка використовується для обчислення максимальної очікуваної винагороди за дію в кожному стані. Таким чином,
ця таблиця направляє агента до найкращих дій при кожному кроці. Для вивчення кожного значення Q-таблиці використовується алгоритм Q-
Learning.
Другим кроком є вибір дії. Спочатку на основі Q-таблиці вибирається дія (a) у стані (s). Коли епізод починається спочатку, кожне значення Q має
бути 0. Потім оновлюється Q-значення, використовуючи рівняння Беллмана.
Для використання жадібної стратегії
пошуку використовуються алгоритм Epsilon. На початку значення Epsilon будуть високими. Агент досліджуватиме навколишнє середовище і випадковим чином вибирає дії,
оскільки агент нічого не знає про середовище. У міру того, як агент досліджує середовище, швидкість алгоритму Epsilon зменшується, і агент починає експлуатувати середовище [15, 16].

27
Четвертим кроком є вимір винагороди.
П’ятим кроком є обновлення значень для функції
Q(s,a).
Цей процес повторюється знову і знову, поки навчання не буде завершено.
Таким чином Q-Таблиця оновлюється, а функція Q максимізується. Тут
Q(стан, дія) повертає очікувану майбутню винагороду за цю дію в цьому стані (рисунок 2.5).
Рисунок 2.5 – Оновлення Q-таблиці
2.4 Deep Q-learning
В Deep Q-learning [14] використовується нейронна мережа для наближення функції Q-значення. Стан подається як вхід, а Q-значення всіх можливих дій генерується як вихід. Eтапи навчання з підкріпленням за допомогою мереж глибокого Q-навчання (DQN) наступні.
Весь минулий досвід зберігається користувачем в пам'яті.
Наступна дія визначається максимальним виходом Deep Q-learning network.
Функція втрат тут
є середньоквадратичною помилкою прогнозованого Q-значення та цільового Q-значення – Q*. Наведено порівняння між Q-learning та Deep Q-learning (рисунок 2.6).

28
Рисунок 2.6 – Порівняння принципів роботи Q-Learning та Deep Q-Learning
Для розрахунку функції витрат використаємо рівняння оновлення значення Q, отриманого з рівняння Беллмана (2.1):
(2.1)
Функція прогнозує власне значення, але оскільки R є винагородою,
мережа оновлює
свій градієнт, використовуючи backprogation,
щоб наблизитися до прогнозованого результату.
2.5 PyTorch
Фреймворки глибокого навчання часто зосереджені на зручності
використання або швидкості. PyTorch [8] – це бібліотека машинного навчання, яка забезпечує імперативний і Pythonic стиль програмування.
Бібліотека підтримує принцип «код як модель», налагодження та узгоджується з іншими популярними обчислювальними бібліотеками,

29
залишаючись ефективним засобом. Підтримує апаратні прискорювачі, такі як графічні процесори. Pytorch використовує автоматичне диференціювання, що дозволило повністю автоматизувати обчислювання похідних. Це значно полегшує дослідження різних підходів машинного навчання, при цьому дозволяє виконувати ефективну оптимізацію на основі градієнта. Пакет autograd популяризував використання цієї техніки для масивів NumPy [11].
З появою вільного програмного забезпечення наукова спільнота відійшла від закритого програмного забезпечення, таке як Matlab і перейшла на екосистему Python з відкритим вихідним кодом з такими пакетами, як
NumPy, SciPy та Pandas. Це дозволило користуватися перевагами величезного сховища бібліотек, виконувати обробку великого набору даних,
статистичний аналіз, будувати графіки, тощо. Відкритість, сумісність та гнучкість вільного програмного забезпечення сприяли розвитку спільнот, які
може швидко задовольнити нові
потреби, розширивши
існуючу функціональність бібліотеки (рисунок 2.7).
Рисунок 2.7 – Компоненти бібліотеки PyTorch

30 2.6 Monte-Carlo tree search
MCTS [18, 20] використовує симуляцію Монте-Карло для накопичення оцінок вартості, щоб направляти агенту до ефективних траєкторій у дереві
пошуку.
MCTS складається з повторюваних
ітерацій
(обмежених обчисленням часу та ресурсів) і складається з 4 кроків: вибір, розширення,
моделювання та резервне копіювання [18].
При виконанні вибору використовується tree policy для побудови шляху від кореня до найбільш перспективного вузла листя (рисунок 2.8).
Рисунок 2.8 – Принцип роботи алгоритму Monte-Carlo tree search
Tree policy – це політика, яка використовується для вибору дії (вузла) у вершині (досліджена частина ігрового дерева на відміну від величезної
невивченої нижньої частини). Одним з важливих особливостей використання такої політики є баланс дослідження та експлуатації (exploration vs exploitation). Така політика є досить популярною в Reinforcement learning.

31
Наприклад, в алгоритмі AlphaGo використовується політика на основі
Upper Confidence Bound (UCB) [18]. Кожен вузол має пов'язане значення
UCB, і під час вибору завжди вибирається дочірній вузол з найвищим значенням UCB (2.2).
(2.2)
де
– середнє значення вузла,
– кількість візитів до ноди,

кількість візитів до попереднього вузла. Чим більше відвідується вузол , тим меншим стає друга частина в UCB, отже, зменшується його ймовірність повторного вибору.
Тому алгоритм UCB має вбудовану функцію дослідження та експлуатації. Алгоритм буде верхню досліджувати частину дерева, поки не буде досягнутий листовий вузол.
Наступним кроком є розширення. На етапі розширення випадковим чином вибирається недосліджений вузол листового вузла.
Наступним кроком є симуляція. Під час цього кроку розгортається одна або декілька моделей із винагородою, накопиченою за кожну симуляцію.
Політика розгортання зазвичай є простою, щоб її можна було швидко виконувати. Наприклад, перемога може призвести до винагороди +1, нічия –
0 і програш – 1.
Наступним кроком є резервне копіювання.
Використовуються накопичені нагороди моделювання для резервного копіювання та оновлення значень вузлів у верхній частині дерева. Значення вузлів не обновлюються під час кроків розгортання. Основною причиною виконання переднього кроку є зосередження на верхніх кореневих вузла, на основі яких приймається рішення про наступний крок. Тоді як значення за межами верхньої частини дерева не мають значення для такого рішення.

32 2.7 Stacking
Stacking – це процедура, спрямована на покращення прогнозування шляхом змішування або комбінування прогнозів декількох моделей машинного навчання. Існує безліч методів для комбінування, від простих,
таких як voting, або находження середнього значення прогнозів, до побудови складних моделей навчання (логістичні регресії, градіїєтний бустинг).
Stacking прогнозів моделей машинного навчання дуже часто допомагає
отримати кращі результати і широко використовується для перемоги в змаганнях з Kaggle [19].
2.8 HandyRL
HandyRL [3] – це зручний і простий фреймворк, заснований на Python і
PyTorch для розподіленого навчання з підкріпленням, який можна застосувати до власного середовища. Для широкомасштабного навчання
HandyRL забезпечує підтримку паралельності відповідно до середовища.
HandyRL в основному надає алгоритм «Policy gradient algorithm with off-policy correction» та забезпечує можливість використовувати деякі off- policy варіанти методів оновлення від традиційних (Монте-Карло, TD(λ)) до нових (V-Trace, UPGO). HandyRL використовує архітектуру стилю learner- worker, як IMPALA [12]. Учень – це головний елемент навчання, який оновлює модель та контролює потоки. Потоки виконують дві ролі. Вони асинхронно генерують епізоди (траєкторії) та оцінюють навчені моделі. При генерації епізодів самовідтворення здійснюється за замовчуванням.
2.9 Кросс-валідація
Кросс-валідація
(cross-validation, CV)

процедура емпіричного оцінювання узагальнюючої здатності алгоритмів, яких навчають по

33
прецедентах [28]. Фіксується розбиття вихідної вибірки на дві підвибірки:
навчальну і контрольну. Для кожного розбиття виконується налаштування алгоритму за навчальною підвибіркою, потім оцінюється його середня помилка на об’єктах контрольної підвибірки. Оцінкою кросc-валідації
називається середня по всім розбиттям величина помилки на контрольних підвибірках.
Кросс-валідація є стандартною методикою тестування і порівняння алгоритмів класифікації, регресії і прогнозування. Можуть бути різні
варіанти змінного контролю, що відрізняються способами розбиття вибірки
(таблиця 2.2).
Таблиця 2.2 – Описання методів кросc-валідації
Назва
Описання
Hold-out
CV
Оцінка крос-валідації будується по одному випадковому розбиттю.
Leave One
Out (LOO)
Leave One Out (або LOO) – працює наступним чином. Кожна вибірка створюється шляхом взяття всіх крім одного. Цей один елемент з вибірки буде тестовим елементом. Таким чином,
маємо різні навчальні набори та різні набори тестових вибірок.
K-Fold
Fold ділить усі вибірки на підвибірки, які називаються фолдами рівних розмірів (якщо можливо). Функцію прогнозування вивчають за допомогою фолдів всіх фолдів крім одного, а відкинутий фолд використовують для тестування.
Якщо вибірка незалежна, то середня помилка кросс-валідації дає не зміщену оцінку ймовірності помилки. Це вигідно відрізняє її від середньої
помилки на навчальній вибірці, яка може виявитися зміщеною (оптимістично заниженою) оцінкою ймовірності помилки, що пов'язано з явищем перенавчання.

34 3 ПРОГРАМНА РЕАЛІЗАЦІЯ
3.1 Загальна структура проекту
Основним завданням проєкта є реалізація методів для забезпечення адаптивності ігрового агенту для ігри «Змійка». Щоб виконати це завдання потрібно слідувати за наступним алгоритмом:
- створення адаптивний ігровий агент на основі ШНМ;
- реалізація тестового середовища для гри «Змійка»;
- оцінка результатів, що отримані при тренуванні ігрового агента;
- аналіз роботи створеного агенту та конкурентів на тестовому
ігровому середовищу.
Кожен етап можливо додатково розділити на допоміжні етапи і з врахуванням цього створено архітектуру файлів вихідного коду проекту
(рисунок 3.1). Дана архітектура слідує методології CRISP-DM [27].
Створення ігрового агенту потребує виконання комплексних кроків по реалізації попередньої обробки даних, використання нейронної мережі, та
інтерпретації результатів для користувачів. Для ефективної реалізації
адаптивного ігрового агенту на основі штучної нейронної мережі виконано наступні кроки:
- побудова архітектури ШНМ;
- створення методів препроцесингу даних перед поданням їх для тренування нейроної мережі;
- налаштування ШНМ;
- налаштування конфігурації використання Monte-Carlo Search Tree для фільтрації малоефективних кроків алгоритму;
- реалізація базових методів візуалізації ефективності роботи нейронної мережі;
- оцінка ефективності роботи застосунку;

35
- реалізація можливості зберігання налаштувань моделі при виконанні
кожних 100 епох в ШНМ в папці models, щоб відновити роботу тренування моделі, якщо память відеокарти закінчиться.
Після успішного виконання тренування результати агенту зберігаються папці game records.
Рисунок 3.1 – Функція запуску ігрового середовища та агентів
Щоб запустити агент потрібно створити для нього середовище виконання. Середовище представлене бібліотекою kaggle_envinroments, яка спрощує створення базових агентів та ігрового поля для клієнтів.
Бібліотека kaggle_envinroments має колекцію вже реалізованих різних агентів для ігри в «Змійку» з простим статичним штучним інтелектом
(рисунок 3.2). Наприклад, агент GreedyAgent використовує
алгоритм находження найкоротшого шляху до фруктів, але є слабким до взаємодії з другими змійками.

36
Важливим компонентом бібліотеки є модуль відображення ігри, що надає простий API по створенню ігрового поля та заданню базових налаштувань, таких як розмір ігрового поля. Також компонент дозволяє
оновлювати координати агентів (змійок) в залежності від результатів, що отримані від нейронної мережі створеного агенту.
Особливістю бібліотеки є процес генерування фруктів на ігровому полі. На кожні 2 агенту на ігровому полі бібліотека kaggle створює один фрукт. Якщо фрукт був підібраний однією з присутніх змійок, то елемент створить новий фрукт в довільному місці на ігровому полі.
Рисунок 3.2 – Архітектура бібліотеки kaggle_enviroments
Для оцінки результатів роботи агенту проведено сумісні ігри з іншими агентами. Результати ігор з кожним з агентів було збережено в папку battles.
Всі сумісні ігри виконуються на платформі kaggle так як сама платформа надає можливість ігри з агентами у вигляді зручного вікна (рисунок 3.3).

37
Рисунок 3.3 – Відображення ігрового процесу
Програма створена в середовищі програмування
PyCharm
і
використовуючи мову програмування Python для реалізації логіки. Програма складається із наступник файлів :
- neural_net.py;
- torus_net.py;
- environment.py;
- main.py;
- config.yaml.
Файл neural_net.py представляє собою ШНМ, що виконує розрахунок коефіцієнтів для прийняття рішень агенту.
Файл torus_net.py відповідає за шар нейронної мережі яка складається
із згорткового шару з модулем трансформації фільтра у вигляді торуса. Це основний компонент для нейронної мережі на основі якого виконується навчання та прогнозування агенту.
Файл environment.py відповідає за середовище, в якому працюють агенти. Дане середовище побудоване на основі бібліотеки HandyRL і
основним завданням середовища є кодування логіки поведінки агентів,
визначення кількості гравців на ігровому полі, використання нейронної
мережі для виконання та прийняття дії агенту.

38
Файл main.py відповідальний за виконання застосунку агентів і
середовища (рисунок 3.1), використовує клас від файлу environment.py для відображення ігрових агентів на одному полі і виконання агентів на ігровому полі.
Файл config.yaml – це конфігураційний файл для бібліотеки HandyRL.
Дана бібліотека надає можливість конфігурації необхідних параметрів для навчання з підкріпленням. Наприклад, вона має параметри для налаштування розміру пакету для навчання чи вибору методу для оптимізації функції
політики, наприклад, такої як MC.
Також проект має папки game_records, models та battles, які слугують як додаткові компоненти програми для зручності навчання та використання моделей.
Папка game_records зберігає файли, що пов’язані
з штучною нейронною мережею та її вагами. Це необхідно для встановлення стану
ШНМ під час тренування, якщо станеться непередбачувана ситуація,
оскільки навчання ШНМ потребує значних обчислювальних ресурсів. Кожен
із файлів в папці game_records має розширення .pickle та призначений для збереження статусу виконання Python-коду. Перевагою Pickle-файлів є
швидкість зберігання та зчитування статусу виконання штучною нейронною мережею.
В папці Models зберігається усі можливі та створені моделі ШНМ для
ігрового агенту. Програма використовує цю папку для зчитування моделі з пам’яті і прогнозування результату для кінцевого користувача. Також вона має в собі і моделі других ігрових агентів. Це необхідно, щоб проводити локально симуляції з іншими агентами та демонстрації порівняльної
характеристики між ними.
Папка battles складається з ноутбуків (файлів з розширенням .ipynb),
які слугують місцем для експериментів між агентами. Тут проводилися експерименти по порівнянню ефективності роботи створеного агенту в ході
кваліфікаційної роботи та інших ігрових агентів.

39 3.2 Модуль нейронної мережі
Розглянемо модуль створення нейронної мережі для виконання дій адаптивного агенту. Ця нейронна мережа написана на мові програмування
Python, яка використовує концепцію Q-learning і Deep Q Learning. Основною характеристикою нейронної мережі є розрахунок функції значення та функції
політики. Функція політики (policy) – це розподіл ймовірності для кожного стану на всі можливі дії. Функція цінності (value) дозволяє оцінити якість різних політик виданих нейронною мережею.
Агент представляє собою нейронну мережу побудовану на основі
декількох основних компонентів. Розглянемо один с компонентів нейронної
мережі – це торусна згортка (лістинг 3.1).
Лістинг 3.1 – Клас торусної згортки class TorusConv2d(nn.Module):
def __init__(self, input_dim, output_dim, kernel_size, bn):
super().__init__()
self.edge_size = (kernel_size[0] // 2, kernel_size[1] // 2)
self.conv = nn.Conv2d(input_dim, output_dim, kernel_size=kernel_size)
self.bn = nn.BatchNorm2d(output_dim) if bn else None def forward(self, x):
h =
torch.cat([x[:,:,:,-self.edge_size[1]:], x,
x[:,:,:,:self.edge_size[1]]], dim=3)
h = torch.cat([h[:,:,-self.edge_size[0]:], h,
h[:,:,:self.edge_size[0]]], dim=2)
h = self.conv(h)
h = self.bn(h)
if self.bn is not None else h return h
Клас наслідує клас nn.Module, що собою представляє оболонку з бібліотеки для будування нейронних мереж PyTorch.
Компонент
TorusConv2d здатний інкапсолювати декілька шарів нейронної мережі і надати простий інтерфейс для створення загальної
нейронної мережі.

40
Функція __init__ відповідальна за базову підготовку компоненту торусної згортки. Вона складається із наступних компонентів: двухрозмірної
згортки та шару нормалізації.
Параметрами функції налаштовується кількість вхідних нейронів,
кількість вихідних нейронів та розмір фільтра, що використаний згорткою для формування згорткового шару. Наступним шаром являється шар нормалізації, кількість вихідних нейронів дорівнює кількісті вихідних нейронів для згортки.
Нормалізація застосовує перетворення, яке змінює середню вихідну величину до 0, а вихідне стандартне відхилення – близько до 1. Це необхідно для швидкого навчання нейронної мережі та уникнення проблем, які можуть виникнути під час тренування.
Функція __forward__ відповідальна за тренування шарів нейронної
мережі (рисунок 3.4).
Рисунок 3.4 – Візуальне представлення торусної згортки

41
Розглянемо клас GeeseNet (лістинг 3.2), що представляє собою повноцінну нейронну мережу, яка складається із вхідного шару побудованих на основі торусної згортки з фільтром 3 на 3 та 12 внутрішніх блоків нейронної мережі на основі торусної згортки з фільтром 3 на 3. Виходом для нейронної мережі є значення, що необхідні для розрахунку дії агенту штучного інтелекту. Функцією активації для згорткових шарів та виходу політики є linear. Функцією активації для розрахунку функції цінності

1   2   3   4   5

скачати

© Усі права захищені
написати до нас