К старту курса о машинном и глубоком обучении знакомим читателей с panda-gym — это библиотека с открытым исходным кодом, предоставляющая среду обучения с подкреплением интегрированному с Gym роботу Franka Emika Panda. Поддерживаются среды игр Atari, настольных игр, физические симуляции в 2D и 3D и многое другое. Это позволяет обучать несколько агентов, сравнивать их или разрабатывать новые алгоритмы машинного обучения для задач обучения с подкреплением. Подробности, как всегда, под катом, а в конце вы найдёте ссылку на блокнот Google Colab.


При разработке интеллектуальной машины важную роль играют Reinforcement Learning и среда обучения машины. Применяемая для машинного обучения среда разработки не менее важна, чем применяемые в решении задачи прогнозного моделирования методы машинного обучения.

В задаче обучения с подкреплением среда составляет основные и фундаментальные элементы, поэтому важно понимать базовую среду, с которой агент RL будет взаимодействовать. Понимание среды помогает разработать правильный дизайн и методику обучения преподаваемого агента.

Среда — это мир агента, в котором он живёт; агент взаимодействует со средой, выполняя какие-то действия, но, выполняя эти действия, он не имеет права влиять на правила или динамику среды, подобно тому, как люди — агенты в земной среде и ограничены её законами.

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

В рамках обучения с подкреплением многие парадигмы достигают выигрышной стратегии, т. е. заставляют агента выполнять желаемое действие несколькими способами. В сложных ситуациях вычислить точную выигрышную стратегию или функцию вознаграждения сложно, особенно когда агенты начинают учиться на основе взаимодействия, а не из ранее приобретённого опыта.

Типов учебных сред несколько:

  • Детерминированная среда, где следующее состояние среды всегда определяется текущим состоянием и действиями агента.

  • Стохастическая среда обучения с подкреплением, где следующее состояние не всегда определяется текущим состоянием или действиями агента.

  • Одноагентная среда, где существует и взаимодействует со средой только один агент.

  • Многоагентная среда: Где присутствует более одного агента, взаимодействующего со средой.

  • Дискретная среда, пространство действий которой имеет дискретный характер.

  • Непрерывная среда, пространство действий которой непрерывно по своей природе.

  • Эпизодическая среда, где действия агента ограничены только конкретным эпизодом и не связаны с предыдущими действиями.

  • Последовательная среда, где действия агента связаны с его предыдущими действиями.

Что такое Gym Open AI? 

Gym — инструментарий для разработки и сравнения алгоритмов обучения с подкреплением с открытым исходным кодом. Работа с ним облегчается тем, что он позволяет структурировать среду при помощи всего нескольких строк кода и совместим с любой библиотекой вычислений, такой как TensorFlow или Theano.

Библиотека Gym — это коллекция тестовых задач и сред, которыми можно воспользоваться для обучения и разработки более эффективных моделей обучения с подкреплением. Представленные среды имеют общий интерфейс, позволяющий писать обобщённые алгоритмы. Gym предоставляет широкий спектр сред симуляции.

О Panda-Gym

В среде моделирования можно выполнять 5 задач: дотягиваться, толкать, скользить, подбирать, размещать и укладывать предметы в стопку. Она работает с многоцелевым фреймворком, что позволяет задействовать ориентированные на конкретные цели алгоритмы обучения с подкреплением.

В целях содействия открытым исследованиям используется физический движок PyBullet с открытым исходным кодом. Реализация, выбранная для этого пакета, позволяет легко определять новые задачи или даже создавать новых роботов.

Симуляция и её проблемы

Представленная среда состоит из роботизированной руки Panda, известной как Franka Emika1, которая широко применяется в симуляциях и реальных академических работах. Робот имеет 7 степеней свободы и параллельный пальцевый захват. Он моделируется с помощью физического движка PyBullet, который, обладая открытым исходным кодом, помогает продемонстрировать производительность моделирования. Среды интегрированы с OpenAI Gym, что позволяет работать со всеми основанными на её API алгоритмам обучения. 

Задача моделирования заключается в перемещении или захвате объектов в заданное положение и считается выполненной, если расстояние между перемещаемым объектом и целевой позицией менее 5 см.

Уровень сложности пяти представленных задач можно настроить. В задаче PandaReach-v1 необходимо достичь целевой позиции с помощью захвата; положение цели генерируется случайным образом в объёме 30 см × 30 см × 30 см.

В задаче PandaPush-v1 помещенный на стол кубик нужно подтолкнуть к целевой позиции на поверхности стола в условиях блокированного захвата. Здесь целевое и начальное положения кубика генерируются случайным образом в квадрате 30 × 30 см вокруг нейтрального положения робота.

Задача симуляции PandaSlide-v1 такова: плоский цилиндр при заблокированном захвате нужно переместить в заданное положение на поверхности стола. Положение цели генерируется случайным образом в квадрате 50 × 50 см, этот квадрат расположен на 40 см перед роботом в нейтральном положении.

Поскольку целевые позиции находятся вне пределов досягаемости робота, объекту нужно придать импульс, а не просто толкнуть его. В симуляции PandaPickAndPlace-v1 необходимо привести куб в целевое положение, созданное в объеме 30 × 30 × 20 см над столом. Чтобы поднять кубик, нужно подцепить его пальцами захвата.

В задаче PandaStack-v1 два кубика должны быть уложены в заданную позицию на поверхности стола. Положение цели формируется в квадрате 30 × 30 см. Укладка должна быть выполнена правильно: красный кубик должен находиться под зелёным. Все эти задачи моделирования ещё исследуются и пока не имеют идеального решения.

Программируем

Попытаемся выполнить две симуляции из Panda Gym Challenge и понять, что требуется для разработки и настройки среды. Следующая реализация вдохновлена создателями panda-gym. Установим библиотеку, работая в Google Colab:

!pip install panda-gym

Импортируем зависимости:

#importing dependencies
 
import gym
import panda_gym

Установим среду и симуляцию:  

#assigning the simulation task to environment
env = gym.make('PandaPickAndPlace-v1')
state = env.reset()
#setting the environment
done = False
#rendering agent learnings
images = [env.render('rgb_array')]
while not done:
    action = env.action_space.sample()
    state, reward, done, info = env.step(action)
    images.append(env.render('rgb_array'))
env.close()

Чтобы настроить окружение, вы можете выполнить строки кода ниже. Гиперпараметры можно настроить в соответствии с требуемой производительностью; здесь проведём базовую, демонстрационную симуляцию. Далее установим библиотеку numpngw — это пакет, определяющий функцию write_png, которая записывает массив NumPy в файл PNG, а также write_apng — в последовательность массивов анимированного файла PNG (APNG).

#installing numpngw
!pip3 install numpngw
from numpngw import write_apng
write_apng('anim.png', images, delay = 100) # real-time rendering = 40 ms between frames

Отобразим результаты:

#rendering the simulation
from IPython.display import Image
Image(filename="anim.png")

Мы видим, что робот при помощи захвата перемещает блок! Кроме того, видно два положения блока. Хотя моделирование может оказаться не очень чётким, его можно дополнительно настроить гиперпараметрами или ради большей производительности рендеринга запустить на более совершенной вычислительной системе. Теперь моделируем задачу скольжения захвата и извлечём слайды её выполнения:

import gym
import panda_gym
env = gym.make('PandaSlide-v1')
state = env.reset()
done = False
images = [env.render('rgb_array')]
while not done:
    action = env.action_space.sample()
    state, reward, done, info = env.step(action)
    images.append(env.render('rgb_array'))
env.close()
!pip3 install numpngw
from numpngw import write_apng
write_apng('anim.png', images, delay = 70) # real-time rendering = 40 ms between frames
from IPython.display import Image
Image(filename="anim.png")

Время визуализации и другие параметры обучения и среды можно настраивать. Инструмент очень удобен для тестирования алгоритмов глубокого обучения с подкреплением. Иногда возникают ограничения, например ограничения в управлении захватом: он может управляться только высокоуровневыми действиями. Чтобы внедрить политику обучения, потребуются дополнительные усилия. Кроме того, симуляция не реалистична до конца; основная проблема — форма захвата объектов в среде у самого робота.

Ссылки

Заключение

Благодаря этой статье мы увидели сущность обучающей среды в области обучения с подкреплением. Мы также попытались понять задачу panda-gym и выполнили базовую демонстрационную симуляцию двух задач рендеринга роботизированной руки Franka Emika1. Реализацию можно найти в блокноте Google Colab. Приятного моделирования!

Такая простая среда, на грани умозрительной, уже способна завораживать. Можно представить, что будет через несколько лет, когда искусственный интеллект продвинется в приобретении здравого смысла, а мощностей станет ещё больше. ИИ превратится в неотъемлемую часть огромного множества областей, а в бизнесе станет необходимостью, которая обеспечивает способность конкурировать с другими. Это означает, что востребованность специалистов в глубоком и машинном обучении будет только расти. Если сфера искусственного интеллекта вам интересна, то вы можете обратить внимание на наш курс о машинном и глубоком обучении или на флагманский курс по Data Science, в конце которого сможете получить специализацию по ML. Также вы можете узнать, как начать карьеру с чистого листа или продолжить развиваться в других направлениях:

Data Science и Machine Learning

Python, веб-разработка

Мобильная разработка

Java и C#

От основ — в глубину

А также: