День 22: Як створити бота для штучного інтелекту за допомогою OpenAI Gym та Universe

Погодьмось, ШІ є скрізь. Елон Маск і Марк Цукерберг розгортають очну битву щодо майбутнього ШІ. Є деякі, які це демонізують. А деякі, чиї утопічні погляди стверджують, що ШІ міг би бути майже богоподібним, допомагаючи людству. На якій би стороні ваші погляди не нахилялись, AI тут залишається.

"За допомогою штучного інтелекту ми викликаємо демона". - Ілон Маск "Побоюватися зростання вбивць-роботів - це все одно, що турбуватися про перенаселення на Марсі". - Ендрю Нг

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

Історія програмування ігор

Програмісти ігор використовували евристичні рішення типу-то-інакше, щоб робити освічені здогади. Ми бачили це в самих ранніх аркадних відеоіграх, таких як Pong та PacMan. Ця тенденція дуже довго була нормою. Але розробники ігор можуть передбачити лише стільки сценаріїв та крайніх випадків, щоб ваш бот не працював по колу!

Потім розробники ігор намагалися імітувати, як люди гратимуть у гру, і моделювали людський інтелект у ігровому боті.

Команда DeepMind зробила це, узагальнивши та моделюючи інтелект, щоб вирішити будь-яку гру Atari. Ігровий бот використовував нейронні мережі глибокого навчання, які не мали б конкретних ігрових знань. Вони перемагають гру на основі пікселів, які вони бачили на екрані, та своїх знань про управління грою. Однак частини DeepMind все ще не мають відкритих джерел, оскільки Google використовує його, щоб перемогти конкуренцію.

Демократизація ШІ

Щоб уникнути зосередження неймовірної сили ШІ в руках небагатьох, Ілон Маск заснував OpenAI. Він прагне демократизувати ШІ, роблячи його доступним для всіх. Сьогодні ми дослідимо OpenAI Gym та нещодавно випущений Всесвіт, який побудований на вершині Gym.

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

Існує тисячі середовищ. Вони варіюються від класичних ігор Atari, Minecraft та Grand Theft Auto до моделювання складки білка, яка може вилікувати рак. Ви можете створити бота і запустити його в будь-якому середовищі, використовуючи лише кілька рядків коду Python. Це занадто приголомшливо, щоб не спробувати!

Проект (1 година)

Ми збираємося створити ігровий бот для штучного інтелекту, який використовує техніку “Підкріплення навчання”. Поясню це пізніше. Він буде самостійно грати проти Atari Neon Race Car і перемагати його (ви можете вибрати будь-яку гру, яку хочете). Ми створимо цього ігрового бота, використовуючи бібліотеки GA та Universe OpenAI.

Крок 1: Встановлення

Переконайтеся, що у вас встановлений Python, або встановіть його за допомогою Homebrew. Ви можете завантажити спеціальний IDE Python, такий як PyCharm або блокнот iPython. Мені подобається робити це простим і використовувати Sublime. Нарешті, встановіть Gym, Universe та інші необхідні бібліотеки за допомогою pip.

// Install python using brewbrew install python3// Install the required OpenAI librariespip3 install gympip3 install numpy incrementalbrew install golang libjpeg-turbo pip install universe

Все у Всесвіті (середовища) працює як контейнери всередині Docker. Якщо у вас його ще немає, встановіть і запустіть Docker звідси.

Крок 2: Кодуйте ігрового бота

Game Bot кодується на Python, тому ми починаємо з імпортування лише двох необхідних залежностей: Gym та Universe.

import gymimport universe

Для цього ігрового бота давайте використаємо мою улюблену гру дитинства, Neon Race Cars, як тестове середовище. Ви можете знайти повний список інших середовищ / ігор, які ви можете вибрати тут.

Universe дозволяє вам паралельно запускати скільки завгодно середовищ. Але для цього проекту ми використаємо лише один.

env = gym.make(‘flashgames.NeonRace-v0’)env.configure(remotes=1) # creates a local docker container

Підкріплення навчання

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

Мета - зробити наступне спостереження кращим (у нашому випадку - максимізувати ігровий результат). Цю дію обирає та виконує агент (Game Bot) з метою максимізації балу. Потім наноситься на навколишнє середовище. Середовище фіксує отриманий стан та винагороду залежно від того, була дія вигідною чи ні (чи перемогла вона у грі?).

Тепер ми можемо отримати список спостережень для кожного середовища, ініціалізованого за допомогою методу env.reset ().

observation_n = env.reset()

Спостереження тут - це об’єкт, специфічний для довкілля. Він представляє те, що спостерігалося, наприклад, необроблені піксельні дані на екрані або статус / оцінка гри.

Наступним кроком є ​​створення ігрового агента за допомогою нескінченного циклу, який безперервно виконує певні дії на основі спостереження. У нашому боті, давайте визначимо одну дію багаторазового натискання стрілки вгору (Дурний бот! Не соромтеся еволюціонувати його до складного ...). Дія тут визначається типом події (KeyEvent), клавішею управління (стрілка вгору) та встановленням значення true для всіх спостережень, які бачить агент.

while True:action_n = [[('KeyEvent', 'ArrowUp', True)] for ob in observation_n]

Потім ми використовуємо env.step()метод, щоб використовувати дію, щоб рухатися вперед на один крок вперед. Це дуже базове здійснення посиленого навчання.

 observation_n, reward_n, done_n, info = env.step(action_n)

Тут кроковий метод повертає чотири змінні:

  1. observation_n: Спостереження за навколишнім середовищем
  2. reward_n: Якщо ваша дія була корисною чи ні: + 1 / -1
  3. done_n: Показує, закінчилася гра чи ні: Так / Ні
  4. info: Додаткова інформація, така як продуктивність та затримка для налагодження

Ви можете виконати цю дію одночасно для всіх середовищ, в яких ви тренуєте свого бота. Використовуйте метод env.render () для запуску бота.

env.render()

Тепер у вас є Game Bot, готовий конкурувати з навколишнім середовищем. Повний код цього базового бота, а також розширеної версії доступний у моєму репозиторії Github тут.

Крок 3: Запустіть ігрового бота

Тепер найцікавіша частина: переконайтеся, що Docker працює, і запустіть бота. Побачте, як він побиває інші машини або не робить цього. Якщо це не вдається, продовжуйте допрацьовувати свого бота, щоб перемогти його!

python gamebot.py

Продовжуйте займатися ШІ, і зрештою ви зможете розблокувати режим Бога! # 100DaysOfCode

Якщо вам сподобалось це, будь ласка, поплескайте ? s o це можуть бачити й інші! Слідуйте за мною у Twitter @H ariniLabs або M edium, щоб отримувати останні оновлення про інші історії або просто сказати Привіт :)

PS: Підпишіться на мій бюлетень тут, щоб першим отримати свіжий новий вміст, він наповнений порцією натхнення зі світу # WomenInTech, і так, чоловіки також можуть зареєструватися!