Это рецензия на проект Deep RL, основанный на проекте NVidia с открытым исходным кодом jetson-reinforcement, разработанном Dustin Franklin. Цель проекта - создать агента DQN и определить функции вознаграждения, чтобы научить роботизированную руку выполнять две основные задачи:

  1. Прикоснитесь любой частью руки робота к интересующему объекту с точностью не менее 90%.
  2. Только основание захвата манипулятора должно касаться объекта с точностью не менее 80%.

Настройка гиперпараметров была самой сложной и долгой частью проекта.

Функции вознаграждения

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

Награды для промежуточных состояний

Расстояние от захвата до стойки ворот измерялось методом distGoal(gripper, prop). Изменение расстояния до цели было названо delta = distGoal - lastGoal. Как очевидно, отрицательный delta подразумевает, что захват движется в сторону цели.

В функции вознаграждения использовалась экспоненциальная скользящая средняя дельты avgGoalDelta.

alpha = 0.7;
avgGoalDelta = avgGoalDelta * (1 - alpha) + delta * alpha;

Более высокое значение alpha означало меньший вес предыдущих значений распределения по сравнению с более поздними значениями.

reward = -C1 * avgGoalDelta
// -C1 is a negative constant

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

В случае положительного вознаграждения важно отметить, может ли агент накопить чрезмерное положительное вознаграждение без прекращения действия , просто оставаясь на своем месте. Этого не происходит, потому что, если дельта останется 0 (позиция не меняется), вознаграждение (плавно) станет 0. Таким образом, обучение с этой функцией вознаграждения не приведет к тому, что робот застрянет на позиции и по-прежнему будет накапливать большие вознаграждения.

Чем быстрее робот-захват движется к опоре, тем больше будет награда. Это потому, что значение delta будет выше. Таким образом, эта функция вознаграждения стимулирует быстрое столкновение захватного устройства и стойки робота.

Награды за конечные состояния

Для задачи 1 было 2 конечных состояния:

  1. Контакт с землей: эпизод был прерван, когда захват касался земли (или находился в пределах 0,05 метра от земли). Это был случай опасного исхода, так как столкновение с землей приведет к износу руки. Это было наказано REWARD_LOSS = -0.10.
  2. Столкновение с опорой: эпизод прекращается, когда какая-либо часть руки касается опоры ворот. Это был ожидаемый результат и, таким образом, получил награду в REWARD_WIN = 0.20.

Для задачи 2 было 3 конечных состояния:

  1. Контакт с землей. Как и в предыдущем случае, это наказывалось штрафом в размере REWARD_LOSS = -0.10.
  2. Столкновение не захватывающего устройства с опорой: когда часть руки, не предназначенная для захвата, сталкивается с опорой ворот, агент частично достигает ближайшей цели. Таким образом, это было дано вознаграждение в REWARD_WIN/2 = 0.10.
  3. Столкновение с захватом: когда захват касается стойки, это было в точности запланированное действие, и агент был вознагражден REWARD_WIN = 0.20.

Кроме того, если какой-либо эпизод достигал 100 кадров, он прерывался со штрафом REWARD_LOSS = -0.10.

Тип используемого совместного управления роботом

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

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

Совместное управление положением было хорошим компромиссом, потому что это был прямой способ управления рукой. Важно отметить, что агент был вознагражден не за его текущее расстояние от цели, а за разницу последовательных расстояний от цели (дельты). Это уменьшило вероятность того, что роботизированная рука застрянет, потому что это приведет к reward -> 0 (плавно) и агент, всегда пытающийся максимизировать совокупное вознаграждение, не застрянет в одной позиции.

Было использовано совместное управление положением, которое хорошо справилось с обеими задачами проекта.

Гиперпараметры

INPUT_WIDTH и INPUT_HEIGHT оставались равными размеру входного изображения, то есть 64 x 64.

Adam был опробован с различными параметрами, но RMSprop оказался лучше и использовался для достижения требуемой точности для обеих задач.

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

Однако степень случайности была установлена ​​на true, что было сделано с низким EPS_END, равным 0.005, чтобы агент агент не пробовал случайные траектории время от времени, требуя больше времени и эпизодов для достижения требуемой точности.

Большой размер партии приводит к сходимости к узким целевым вариантам. Это означает, что агент будет работать только в тех случаях, когда опора находится в узкой окрестности области обучения опоры. Агент не сможет сделать обобщение для широкого диапазона целевых позиций, с которыми он может столкнуться. Таким образом, меньший размер пакета использовался для обобщения для различных экземпляров целевого расстояния.

Размер LSTM был выбран в зависимости от длины последовательности, которую необходимо изучить. Эпизоды заканчивались на 100 кадрах эпизода, но агент смог прийти к окончательному результату (столкновение с землей или опорой) на 30–40 кадрах эпизода. Кроме того, увеличение размера, кратного 32, может немного ускорить тренировку. Таким образом, для этой задачи было использовано значение 64.

Полученные результаты

Первой задачей, которую нужно было решить, было:

Заставить роботизированную руку коснуться опоры ворот с точностью более 90%.

Снимок экрана с водяным знаком на графике точности задачи 1:

Чтобы достичь отметки 90% accuracy, потребовалось около 700 iterations. Он достиг 91.67% на 1285th iteration.

Задача 2 была более изощренной:

Обеспечение того, чтобы только роботизированный захват касался стойки ворот с точностью более 80%.

Это заняло больше времени и эпизодов, но для агента это была более значимая задача. Он коснулся отметки 80% accuracy примерно через 2400 iterations. Снимок экрана с водяным знаком на графике точности задачи 2:

К 2808th iteration точность была на 81.23%

Сборка из исходников (NVidia Jetson TX2)

Выполните следующие команды из терминала, чтобы собрать проект из исходного кода:

$ sudo apt-get install cmake
$ git clone http://github.com/udacity/RoboND-DeepRL-Project
$ cd RoboND-DeepRL-Project
$ git submodule update --init
$ mkdir build
$ cd build
$ cmake ../
$ make

На этапе cmake будет установлен Torch, поэтому это может занять некоторое время. Он загрузит пакеты и запросит ваш sudo пароль во время установки.

Будущая работа

Чтобы улучшить текущие результаты,

  • Найдите лучшую функцию вознаграждения.

В текущей функции вознаграждения до самого конца эпизода агент не знает, куда он направляется. В самом конце он может столкнуться с захватом (высокая награда) или землей (высокий штраф). Функция вознаграждения также должна учитывать текущее расстояние между захватом и землей.

  • Яркая окраска захвата и стойки.

Это упростит для алгоритма CNN в DQN поиск взаимосвязи положения захвата и опоры с полученным вознаграждением.

DQN - это новый агент сквозного обучения с подкреплением, который может выполнять широкий спектр задач со сверхчеловеческим уровнем мастерства без вмешательства человека. Это важный технический шаг в поисках общего ИИ. Как это ни парадоксально, но алгоритмы машинного обучения разрабатываются вручную. Вместо этого, если бы это обучение можно было автоматизировать, это могло бы открыть новые возможности. Learning to optimize и Learning to Learn by Thrun & Pratt, 2012) были шагом в этом направлении, который я хотел бы реализовать, поскольку они использовали RL для изучения оптимизатора.