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

Преамбула (или как я наткнулся на генетические алгоритмы и обучение с подкреплением)

Странно думать, что в начале 2017 года мои знания о машинном обучении в основном ограничивались методами, используемыми в экономике: GLM, анализом временных рядов и различными статистическими показателями. Цель экономики состоит в том, чтобы найти модели, которые достаточно хорошо согласуются с данными, но, что более важно, предоставить какой-то способ объяснить, что происходит в «реальном мире» (во многих случаях давая ложные объяснения, которые в лучшем случае допускают продолжительное обсуждение или в худшем случае поддерживать некоторые предварительные убеждения с помощью выбранных переменных). Мое увлечение машинным обучением связано с его обратным подходом — поиском модели, которая лучше всего предсказывает невидимые данные, не уделяя особого внимания их объяснению. Другими словами, сосредоточить внимание на том, что работает, а не на том, что можно объяснить. Это кажется бесконечно более полезным, даже если это не позволяет мне звучать так же умно.

Замечательный преподавательский состав статистического факультета Кейптаунского университета в сочетании с отличными онлайн-материалами в свободном доступе (в частности, курсами Эндрю Нг на Coursera и deeplearning.ai) помогли мне быстро освоить основные контролируемые и неконтролируемые подходы и инструменты, необходимые для создавать полезные модели и анализы. Но было кое-что, чего я так и не понял: как машина учится, если у нее нет набора размеченных данных (примеров правильного ответа)? Это казалось гораздо более фундаментальным вопросом, потому что он так сильно напоминает проблемы, с которыми мы сталкиваемся как личности.

В то время я читал Ген Сиддхарты Мукерджи (книгу, которую я рекомендую как доступный способ узнать о генетике и о себе). Что меня поразило, так это сложность эволюционного процесса, потому что мутации происходят на генетическом уровне, но эти гены проявляются непредсказуемым образом с отображением «многие ко многим» между генотипами и фенотипами. Вы не можете обратно сконструировать физический признак в последовательность пар оснований, и вы не можете создать последовательность пар оснований и точно предсказать физический признак. Что вы можете сделать, так это наблюдать, как естественный отбор отфильтровывает признаки, которые не помогают организму выживать и размножаться.

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

Обучение с подкреплением

Во многих отношениях обучение с подкреплением (RL) более интуитивно понятно, чем обучение с учителем, хотя в ряде подходов RL используются методы обучения с учителем. RL аналогичен тому, как мы учимся: мы исследуем, делаем ошибки или принимаем правильные решения и корректируем наше будущее поведение на основе этого опыта. Как правило, мы используем RL при наличии следующих условий:

  • Нет помеченных примеров, на которых можно было бы учиться в начале
  • Существует некоторая возможная функция вознаграждения, которая измеряет, хорошо ли выполняется задача.
  • Действия могут не иметь немедленного вознаграждения, но влиять на результат через какое-то время в будущем.

В своей диссертации я использовал среду Pong с платформы OpenAI Universe — это простая игра, в которой вам нужно перемещать ракетку вверх или вниз, чтобы попытаться переместить мяч мимо другого игрока (например, пинг-понг). Вот версия, в которую можно поиграть самостоятельно. Как игрок игры вы сталкиваетесь с условиями, описанными выше: вы не видели ни одной пары скриншотов и хороших действий; есть счетчик очков, который увеличивается, когда вы набираете очко; вы нажимаете вверх и вниз много раз между последовательными точками. Разница, когда человек играет в эту игру по сравнению с агентом RL, заключается в том, что у человека уже есть интуитивное понимание физики, лежащей в основе игры, но агент RL знает только пиксели на экране, действия, которые он предпринимает, и счет. он получил. Так как же он узнает, что делать?

В моей диссертации использовалось обучение с подкреплением A3C, которое является аббревиатурой от Asynchronous Advantage Actor-Critic — это проще, чем кажется! Подход можно разбить на составные части:

  • Критика: модель, которая анализирует прошлые действия, а затем формирует представление о том, какие действия лучше всего подходят для новой ситуации.
  • Актер: модель, которая выбирает, какое действие предпринять (сам агент).
  • Преимущество: обратная связь критика с актером о том, как актер мог бы сделать лучший выбор и насколько лучше этот выбор мог быть.
  • Асинхронный: настоящий прорыв A3C — множество агентов параллельно изучают игру и асинхронно обновляют опыт друг друга.

Приведенные выше диаграммы помогают показать общий процесс A3C, но в этих рамках есть модели глубоких нейронных сетей, выполняющие обучение с учителем: они настраивают свои параметры на основе обратной связи, полученной в результате наблюдения за действиями агента в окружающей среде. Эти нейронные сети представлены синими прямоугольниками на диаграмме выше. Структура A3C — это то, что направляет их обучение, но они сами являются агентами. Они получают данные из окружающей среды в виде пикселей экрана (зеленые прямоугольники выше) и выводят информацию о том, какое действие следует предпринять, а также о том, насколько хорошим, по их мнению, является это действие (оранжевые прямоугольники выше).

Более простое представление о том, как агенты «прямой связи» выполняют действия и выводят значения этих действий, показано на рисунке выше. Кадры из игры обрабатываются нейронной сетью, оптимизированной для изображений (в основном сверточные слои, в зависимости от мутации), а затем передаются в рекуррентную нейронную сеть (LSTM), которая гарантирует, что память о предыдущих временных шагах включается в процесс принятия решений: это важно, потому что такая игра, как Pong, не удовлетворяет так называемому свойству Маркова, как это делает игра, такая как шахматы — не вся информация о возможных будущих состояниях содержится в одном кадре, в основном из-за движения ракеток и мяча.

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

Генетические алгоритмы

Многие люди использовали RL для обучения агентов хорошей игре в Pong или другие игры (включая гораздо более сложные игры). Однако дизайн архитектуры нейронной сети обычно создается вручную на основе опыта исследователя или зарождающейся эвристики в этой области. Иногда исследователь с достаточными вычислительными ресурсами может даже найти время для выполнения поиска по сетке, но даже это ограничивает, как показано на диаграмме ниже.

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

Одной из версий EA (эволюционного алгоритма) является GA (генетический алгоритм). Идея состоит в том, чтобы случайным образом сгенерировать популяцию генов, выраженную в виде списка гиперпараметров и слоев, отфильтровать их с помощью некоторой фитнес-функции, выбрать наиболее подходящие и создать новую популяцию путем их мутации. Затем каждая модель определяется хромосомой генов, но фенотип — это реальная архитектура, работающая в среде RL — существует разрыв между генетической мутацией и тем, что может произойти в «физической» среде. Основная цель ГА — отфильтровать неподходящие хромосомы в каждом поколении, чтобы можно было мутировать относительно подходящие хромосомы, чтобы лучше исследовать генетическое пространство вокруг них. Более слабые хромосомы все еще могут быть созданы в более поздних поколениях, поскольку это может быть очень небольшое генетическое изменение, которое проявляется как значительное фенотипическое изменение, но хромосомы должны развиваться, чтобы лучше выживать в окружающей среде и, в конечном итоге, давать подходящую и надежную модельную архитектуру.

(Примечание благодарности Эммануэлю ДюФурку и Брюсу Бассету за их прекрасную работу над ГА — см. EDEN)

Здесь есть пара небольших нюансов:

  • Вы можете определить, как выглядит «соответствие». В диссертации я оптимизировал для хорошей долговременной производительности в игре Pong, а также для стабильности производительности и эффективности работы модели.
  • Это хорошая идея, чтобы выбрать некоторые из более слабых хромосом, используя уровень случайности в процедуре отбора. Эти хромосомы могут быть всего в паре мутаций от очень подходящей хромосомы.

Как прошло?

Это было облегчением, когда после многих месяцев написания и настройки привередливого кода (и настройки сред для работы на AWS!), все заработало.

Было три основных аспекта результатов, которые мне показались интересными:

  1. Эволюционный процесс
  2. Понимание того, какие типы архитектуры нейронных сетей работают хорошо
  3. Поиск архитектур, которые работали лучше, чем те, которые OpenAI использовал в своих исследованиях

Одно дело думать, что ты знаешь, что такое эволюция и как она работает, и одно дело создавать и наблюдать за несколькими поколениями за короткий период времени. Приведенная ниже таблица немного громоздка, но я думаю, что она показывает, как хромосомы мутировали и выживали: каждая строка представляет собой хромосому, которая могла появиться в нескольких поколениях или более одного раза в одном поколении, и они упорядочены как ответвления от родительской хромосом, чтобы показать, как некоторые предки несут ответственность за большую часть конечной популяции, даже если они не были достаточно сильны, чтобы выжить сами. После того, как я увидел, как это происходит, у меня появилось так много идей и вопросов об эволюции — мой любимый — это то, как некоторые хромосомы могут умереть, но реинкарнировать через несколько поколений, когда потомок снова мутирует в них. Заставляет меня задуматься, случалось ли это когда-нибудь с человеком — точной копией человека из многих поколений назад, который ходит сегодня!

(Следующие пару абзацев содержат немного технических терминов… если вы не знакомы со сверточными нейронными сетями, перейдите к разделу «Заключительные мысли»)

Глядя на архитектуру нейронных сетей и гиперпараметры, которые работали хорошо и передавали генетический материал последующим поколениям, можно увидеть множество наблюдений, которые подтвердили некоторые эвристики в этой области, а некоторые — нет:

  • Очевидный: есть сладкое пятно скорости обучения, в котором, если вы не участвуете, агент либо ничего не узнает, либо полностью терпит неудачу (хуже, чем случайный).
  • Больше сверточных слоев не всегда лучше — в основном из-за уменьшения размерности вывода.
  • Несколько сверточных слоев могут работать так же, как сверточный слой и слой объединения, с точки зрения уменьшения размерности без потери слишком большого количества информации.
  • Функция ELU (экспоненциальная линейная единица) на сегодняшний день является наиболее успешным типом активации. ReLU работал довольно плохо, хотя Leaky ReLU был не так уж плох. Это был самый неожиданный для меня результат, потому что я не часто встречаю ELU в литературе.
  • Относительное количество фильтров на сверточный слой имеет значение. Лучше всего работает меньшее количество фильтров в более ранних слоях и больше в более поздних слоях. Это довольно известная эвристика: более ранним слоям требуется меньше параметров, потому что они собирают низкоуровневые функции, такие как края, но более поздние слои собирают более сложные функции, такие как компоненты человеческого лица или даже конкретных людей (при использовании аналогия с распознаванием лиц).

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

Хотя многие из хромосом, найденных в диссертации, работали лучше, чем дизайн OpenAI, первоначально использованный здесь, это соответствовало фитнес-функции, которую я разработал для эксперимента. Кроме того, архитектура OpenAI по-прежнему работает очень хорошо, что показывает полезность эвристики и некоторого поиска по сетке с огромными вычислительными ресурсами (не всем из нас так повезло!). В частности, эти более эффективные хромосомы показали себя лучше по трем причинам:

  1. Обыграйте игру в понг с интервалом в 100 игр с большей стабильностью.
  2. Менее шумное улучшение задачи к мастерству
  3. Для успешной работы требуется меньшая мощность модели, что означает более быстрое обучение и выполнение задачи.

Вот функция турнирного счета, где и β_1, и β_2 установлены на 0,5. Я думаю, что я, вероятно, слишком много оптимизировал для оценки игровых эпизодов и хотел бы попробовать новые параметры в другом прогоне, чтобы посмотреть, смогу ли я найти модели с еще меньшей емкостью.

Заключительные мысли

Моя личная цель при рассмотрении этой темы заключалась в том, чтобы попробовать что-то сложное и, надеюсь, узнать больше, чем обычно. В Интернете доступно так много отличных бесплатных материалов и отличных курсов по справедливой цене, что я смог быстро освоить многие из необходимых предметов первой необходимости. Но большая часть моего обучения происходила на периферии, где код не работал должным образом, а результаты были плохими — много часов чтения Stack Overflow, пробы новых подходов и простое обдумывание с чистым листом бумаги. Я действительно выиграл. Магистратура была полезной подталкивающей функцией для этого — интересное сочетание традиционного и онлайн-образования, которое очень хорошо сработало для меня.

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

Репозиторий проекта на Github (беспорядочный и плохо прокомментированный) находится здесь. Я добавлю окончательную версию диссертации, как только она получит отзывы от экзаменаторов, но представленная версия есть.

[Редактировать 12 октября 2019 г.: окончательная исправленная и принятая версия диссертации доступна в репозитории.]