[В этом посте рассказывается о моем стремлении стать более современным в области глубокого обучения с подкреплением в виде резюме соответствующих концепций и статей. Любопытно, почему все эти посты связаны с днями месяца? Проверьте это объяснение здесь]

День 21: Основы обучения с подкреплением

Это резюме не относится к какому-либо отдельному документу, а является результатом чтения нескольких источников и объединения их в общее понимание.

Сначала немного важной терминологии. В обучении с подкреплением мир представляет собой соединение состояний (S), возможных действий (A) и вознаграждения, которое вы получаете за выполнение этого действия в зависимости от вашего предыдущего состояния. Цель состоит в том, чтобы найти путь с наивысшим общим вознаграждением (т. е. вознаграждением, полученным на каждом этапе пути, хотя и немного сниженным, чтобы сделать награды в отдаленном будущем менее ценными). Политика — это ваша стратегия того, что вы будете делать в каждом состоянии. V(s) — это ценность состояния S, определяемая как награда, которую вы получите, если начнете с состояния S и будете принимать наилучшее возможное решение в каждой точке после этого. Q(s, a) — это ценность действия a, начиная с состояния s. Здесь задается аналогичный вопрос: «Какова награда, которую я получаю от выполнения этого действия в этом состоянии, рассчитанная как вознаграждение за следующий этап плюс максимальное Q(s, a) из состояний, доступных мне в этот момент».

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

  • Для целей этой модели считается, что существует фиксированное перечислимое число состояний.
  • Важно: и значение, и итерация политики содержат важное допущение, без этих объяснений было бы запутанно. Оба предполагают, что основная структура среды, в которой они находятся, — матрица перехода из одного состояния в другое, обусловленное действием, и вознаграждение за выполнение данного действия в данном состоянии — им полностью известна. Это важное различие между этими двумя подходами и Q Learning, о котором я расскажу в последнюю очередь.

Во-первых, ценность итерации. Предпосылка итерации ценности заключается в том, что лучший способ сделать выбор в отношении наилучшего действия — это хорошо оценить «ценность» возможных следующих состояний, между которыми вы выбираете. Честно говоря, мне не очень нравится слово «ценность», потому что оно такое расплывчатое. Вместо этого мне нравится думать об этом как о «потенциале». Видите ли, основная вещь, которая усложняет вычисление «ценности», заключается в том, что «ценность» состояния заключается не только в его следующем действии/вознаграждении, но и во всем пути, который простирается после него. Может быть состояние с ужасной наградой за следующий шаг, но с возможностью доступа к более ценным состояниям позже. Итерация значений работает путем случайного присвоения значений всем вашим состояниям. Затем для каждого состояния, для каждого действия анализируются награды за следующий шаг от этого действия, а также наша текущая оценка ценности попадания в любое следующее состояние, которое вы получили от действия. Примечание: это наша текущая оценка, та матрица, которую мы только что инициализировали случайным шумом или, возможно, нулями. Вначале наши оценки будут довольно плохими. Однако по мере того, как мы накапливаем информацию о вознаграждениях в следующем состоянии для различных функций, мы в конечном итоге сходимся к хорошей оценке ценности каждого состояния. Затем можно легко рассчитать политику, просто всегда выбирая переход к состоянию с наибольшим значением V (поскольку по определению это V теперь представляет нашу оценку наилучшего возможного пути, начинающегося с этого состояния).

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

Наконец, как упоминалось ранее, Q-обучение — это канонический подход, когда вам нужно изучить не только свою лучшую стратегию с учетом параметров среды, но и сами эти параметры. Это может быть «основано на модели» или «не основано на модели». Подходы на основе моделей пытаются оценить матрицы перехода и вознаграждения, а затем используют их для итерации ценности/политики. Не основанный на модели означает, что вы не пытаетесь узнать эти промежуточные параметры модели, а вместо этого пытаетесь узнать Q (s, a) напрямую. Подход, наиболее часто используемый исследователями машинного обучения, будет иметь тенденцию быть «не основанным на модели». На практике это означает множество повторений во время обучения, когда режим случайным образом выбирает действие и начальное состояние, а затем, выполняя лучшее действие, известное вам на данный момент, вы суммируете всю свою награду. Это используется в качестве обучающей метки для значения этих привычных Q и S, и затем мы обновляем модель/сеть, чтобы она стала лучше.

День 23: Чем градиенты политики отличаются от Q Learning?

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

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

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

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

Градиент политики работает, генерируя набор путей (читай: действие, которое приводит к новому состоянию и вознаграждению, которое приводит к новому действию и т. д.) и отслеживая вознаграждение в каждой точке цепочки. Мы определяем градиент — направление движения в пространстве параметров — на основе обновления тета для увеличения вознаграждения. А затем мы обновляем все веса на основе этого градиента, используя лучший друг градиентного спуска.

Один интересный аспект градиентов политик и, судя по тому, что я обнаружил, наиболее заметное практическое отличие от чего-то вроде Q-обучения заключается в том, что градиенты политик — это подход «в соответствии с политикой», а не «вне политики». Различие между «политикой» и «неполитикой» связано с тем, зависит ли набор данных, на которых вы обучаетесь, от вашей текущей политики или независимо от нее. В случае градиентов политик, чтобы оценить изменения, которые вам необходимо внести для обновления этой политики, вам нужно запустить *эту конкретную политику* для многих траекторий и агрегировать ее вознаграждения для использования в цели. Это означает, что если ваша модель случайно «параметрически перескочит» в очень субоптимальное место, далекое от истинно оптимальной политики, эта плохая политика также повлияет на данные, которые вы смогли собрать, поскольку вы тренируетесь на траекториях, созданных запуск вашей политики на ряде входных данных. Это может привести к тому, что вы окажетесь в ситуации, когда, учитывая ваши наблюдения, будет сложно получить достаточный сигнал, чтобы вернуться в хорошую область политического пространства. Это значительно хуже, чем та нестабильность, которую вы можете наблюдать в обычных нейронных сетях, поскольку, какой бы серьезной ни была ошибка контролируемой сети, она всегда может надеяться «смыть» эту ошибку, получив дополнительные, независимо сгенерированные данные. исправлять дальше. Одним из преимуществ Q-обучения является то, что оно позволяет избежать этой проблемы; изучая ценность различных действий в состоянии, а не нашу реальную стратегию, мы можем обновить наши убеждения об этой модели мира, используя данные, которые не исходят из политики, которую мы изучили до сих пор. Тем не менее, возможна критика в другом направлении, что Q-обучение может тратить слишком много ресурсов на изучение информации о пространстве (состоянии, действии) в регионах, которые очень далеки от оптимальной политики, то есть они находятся в некотором смысл неэффективен.

День 24: Играем в Atari с Deep RL

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

Фактический алгоритм — это система обучения Q, подобная тем, которые я упоминал несколько раз в своих недавних сообщениях на RL. Это означает, что сеть учится предсказывать Q, который является функцией состояния (состояний) и доступного действия (а), и представляет собой число, которое говорит вам, насколько ценна каждая пара (состояние, действие), если вы предполагаете, что , после этого текущего действия агент выполняет наиболее оптимальное действие для остальной части траектории. Это предположение о «выполнении оптимального действия с этого момента» важно для целей рекурсии и, следовательно, управляемости. Причина в том, что согласно этому определению мы можем определить Q(s, a) как немедленную награду, которую агент получает за выполнение действия A в состоянии S, добавленную к максимально возможному Q, достижимому из нового состояния агента. Странным последствием этой настройки является то, что сеть фактически использует свои собственные выходные данные в качестве цели, пытаясь сопоставить сетевой вывод Q(s, a) с [ r + максимально возможный сетевой вывод Q(s', a')] , где s' — это состояние, в которое перешли после s.

Помимо применения Q-обучения в контексте сверточных нейронных сетей, которые способны изучать сложное представление состояния только из необработанных пикселей, еще одним нововведением, представленным в этой статье, является воспроизведение опыта. Основная идея заключается в том, что вы собираете так называемые «переходы», где один переход представляет собой набор из (s, a, s’, r): начальное состояние, действие, новое состояние, вознаграждение, полученное вместе с новым состоянием. Эти переходы собираются обычным способом: начиная с начального состояния и выполняя ряд действий, пока не дойдете до конечного состояния. Однако вместо того, чтобы изучать эти действия по порядку, начиная с первого перехода и заканчивая последним, система воспроизведения опыта случайным образом выбирает переходы из этой цепочки опыта. Обоснование этого заключается в том, что информация, которую обучает ваша модель, хорошо сбалансирована по всему пространству состояний; если бы мы учились в порядке цепочки, у нас было бы много шагов итерации, когда мы учитывали бы только состояния на левой стороне доски, что неявно дает модели искаженное представление об общем распределении данных. Еще одно преимущество воспроизведения опыта заключается в том, что, как только вы избавитесь от необходимости учиться на примерах в последовательности, вы получите возможность учиться на одном переходе более одного раза. На самом деле это более ценно, чем может показаться на первый взгляд, из-за зависимости целевого значения от оценки сети в следующий момент времени; если вы повторно используете образец, он может не измениться, но значение сети значения Q на следующем шаге может измениться, что будет означать наличие новой информации.

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

День 25: Двойное обучение Q

[слово для мудрых: это резюме, по сути, работает в серии с тремя резюме RL, которые я опубликовал на прошлой неделе, поэтому в нем используется терминология, такая как «функция Q», которую я не повторяю здесь исчерпывающе, но для которой более подробные объяснения можно найти в этих предыдущих сообщениях]

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

Эта статья представляет собой обновление начальной системы обучения Q, называемой «Обучение с двойным Q», которая пытается исправить источник начальной нестабильности в процедуре обучения исходного DQN. Прежде чем объяснять фактический механизм этого изменения, важно сначала выделить несколько аспектов процедуры обучения Q, которые помогают мотивировать изменение. Во-первых, фундаментальный факт обучения Q (и, по сути, многих разновидностей RL) заключается в том, что это оценка с начальной загрузкой. Под «самозагрузкой» я здесь просто подразумеваю, что цель, с которой мы сравниваем наши выходные данные на каждой итерации, сама является функцией текущей оценки, сделанной моделью. Для обучения Q мы сравниваем нашу текущую оценку Q [ Q(s, a) ] с суммой (вознаграждение, получаемое за выполнение действия a в состоянии s) и (наивысшее возможное значение Q, достижимое в новом состоянии, которое мы достигаем). после выполнения действия а). Это означает, что, хотя мы не можем скорректировать конкретный Q(s, a) по отношению к наземному значению истинности, мы можем скорректировать его так, чтобы он согласовывался со своим соседом на следующем шаге; со временем корректировки, которые мы вносим для учета вознаграждений, которые мы получаем в этих окнах между состояниями, подталкивают нас к более согласованной в глобальном масштабе оценке Q.

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

Предложенное решение состояло в том, чтобы создать две параллельные нейронные сети с оценкой добротности, Q1 и Q2, чередовать их и использовать информацию из одной для построения выходных данных для другой. Это работает следующим образом: в термине потерь вместо максимального количества действий Q1(s, a) для обновления Q1 вы вместо этого разделяете две части этого оператора, используя сеть Q1, чтобы найти, какое действие соответствует максимальному значению Q, согласно его текущей оценке. Затем это действие оценивается Q2, например. Q2(s, лучшее-действие-согласно Q1). Это значение (после добавления к вознаграждению, полученному при переходе от шага s к шагу s+1, которое сеть использует для обучения. Обратное происходит, когда обозначение Q1/Q2 останавливается, когда мы вместо этого обновляем Q2; мы выберите, какой из них будет обновлен случайным выбором.Предпосылка этого метода заключается в том, что он вытягивает выбросы, когда они вызваны проблемой случайной оценки, поскольку маловероятно, что (состояние, действие) будет иметь аномально высокие значения Q в обоих из Функции Q1/Q2, если бы это высокое значение было просто результатом переобучения, а не фактического осмысленного обучения.

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

День 26: Повтор приоритетного опыта

Эта статья — еще один значительный шаг вперед в RL, сделанный сразу после первоначального анонса DeepMind, и, как и в случае с Double Q Learning, для достижения существенного повышения производительности использовался простой метод.

В исходной статье DeepMind одним из ключевых нововведений было понятие воспроизведения опыта. В системе ER вместо того, чтобы применять обновления ошибок вашего перехода одну за другой, вы вместо этого отбираете некоторое количество K переходов, сохраняя их (Состояние, Действие, Новое-Состояние, Новое-Состояние-Награда), а затем подвыборку из этого k для создания мини-пакета переходов, которые сгруппированы вместе для расчета ошибки модели для обучения. Теория, лежащая в основе этого подхода, заключается в том, что он помог уменьшить корреляцию между переходами и сделать набор переходов, используемых для обучения, более репрезентативным для всего пакета, вместо того, чтобы иметь несколько повторяющихся выборок в одной и той же области пространства состояний, что было бы случае в онлайн-системе, где каждое состояние довольно близко к последнему.

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

  1. Прежде чем переход был оценен, например. до того, как будет рассчитана ошибка с задержкой*, переходу присваивается максимальный приоритет. Это стимулирует не позволять переходам томиться в неоцененном состоянии, а также побуждает использовать их вскоре после их сбора.
  2. После первой оценки перехода, что происходит при первом использовании его в обновлении, его приоритет устанавливается равным абсолютному значению его ошибки Time-Delay. Затем это отдает приоритет оценке переходов, которые в прошлый раз имели высокую абсолютную ошибку, чтобы вы могли «проверить», исправили ли обновления, которые вы внесли в свою оценку, ошибку, с которой они столкнулись ранее.

В документе предлагается превратить эти оценки приоритета в истинное распределение вероятностей (из которого вы можете сделать выборку) двумя способами.

  1. Пропорциональный приоритет, когда вы используете значение ошибки напрямую
  2. Ранжированный приоритет, где значение приоритета равно 1/rank(), где ранг основан на отсортированном порядке значений ошибок (ранг 1 — наивысшее значение ошибки).

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

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

* Ошибка временной задержки — это разрыв между нашей текущей оценкой Q(s, a) и (наградой, полученной в результате действия A + наша текущая оценка наилучшего Q, которого вы можете достичь на следующем шаге после выполнения действия A). Идея здесь в том, что если бы у нас была идеальная оценка, эти две величины были бы совершенно эквивалентны, потому что Q в состоянии (s, a) должно учитывать вознаграждение, которое оно собирается получить.

День 27: Актер-критик Asynch Advantage

И теперь мы подошли к алгоритму с элегантным решением повторяющейся проблемы RL… но имя, которое я никогда не смогу правильно озвучить (я всегда заканчиваю тем, что говорю AC3 вместо A3C): Asynchronous Advantage Actor -Критик". Хотя я не должен так сильно критиковать название, потому что, по-видимому, в 90-х годах существовал алгоритм, инициалы которого были сокращены до «REINFORCE. У этого были бы некоторые проблемы с возможностями Google.

Я думаю, что самый ясный способ понять этот подход в целом — это разделить часть «Асинхронный» и часть «Преимущество актера-критика», потому что это действительно довольно разные идеи. Итак, начнем с «Асинхронного»:

Чтобы понять подход, предложенный в этой статье, полезно вернуться в далекое прошлое машинного обучения (под которым я имею в виду: 2015 год) к ключевому нововведению, которое положило начало возрождению интереса к RL на основе нейронных сетей: опыт. повтор. Причина, по которой воспроизведение опыта было полезным, заключается в том, что до того, как оно было введено, обучение с подкреплением, которое обучалось онлайн, обновления, которые увидел бы алгоритм, были бы нестационарными и сильно коррелированными. Это имеет смысл, если вы думаете о процессе исследования пространства: когда вы делаете одно движение, вы оказываетесь близко к тому месту, где вы были, и образцы, которые можно было бы получить из 10-секундного набора кадров прямо сейчас, вероятно, будут совсем другими. распределение на набор кадров аналогичного размера, который вы могли бы получить 40 секунд назад. Воспроизведение опыта помогло исправить это, потому что для любого заданного обновления градиента у вас будет смесь образцов из прошлого, которые в совокупности лучше отражают общую производительность вашего текущего набора оценок.

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

Чтобы исправить этот недостаток ER, команда, стоящая за этой статьей (гуглеры + люди из Deepmind, после того как DeepMind была куплена Google), предложила альтернативу: использование асинхронных акторов. Идея здесь заключается в том, что у вас есть несколько агентов, пересекающих среду, каждый из которых имеет несколько разные начальные условия*, но все используют одни и те же общие параметры. Каждый агент накапливает небольшой пакет переходов, а затем через некоторый заранее определенный интервал отправляет накопленный градиент этих переходов в центральный поток, задачей которого является получение обновлений от всех различных потоков акторов. Затем с некоторой другой частотой (набором гиперпараметров) он извлекает новый набор основных параметров из этого центрального агрегатора. Общий эффект этой схемы заключается в том, что, поскольку каждый актор находится в другой области пространства состояний в любой заданный момент времени, центральный поток агрегации видит смешанный, достаточно некоррелированный набор примеров, когда он выполняет градиентные обновления, но из С точки зрения каждого учащегося эти обновления по-прежнему применяются онлайн, поэтому мы не используем повторно переходы, которые произошли в старой политике. Это означает, что мы можем использовать алгоритмы политики в дополнение к алгоритмам вне политики в этой системе.

Итак, это касается бита «Асинхронный». Теперь к «Преимуществу актера-критика». Эта часть исходит от команды DeepMind, использующей свою асинхронную архитектуру на четырех различных, ранее изобретенных алгоритмах RL (SARSA, одношаговое Q-обучение, многоэтапное q-обучение и преимущество актера-критика), и преимущество актера-критика, которое происходит. лучший. Так вот, это действительно правда, что, поскольку актор-критик — это метод политики, вы не могли бы использовать его в среде воспроизведения опыта. Очень краткое изложение критики преимуществ актера заключается в том, что она сочетает в себе две основные парадигмы RL: парадигму ценности, когда вы оптимизируете свое понимание ценности различных состояний и выбираете оптимальную политику только в конце, и парадигму политики, где вы оптимизируете непосредственно свою стратегию, не изучая явную модель состояний и их значений. Это делается путем вычисления ожидаемого значения от следования текущей политике в данный момент и вычитания оценки среднего значения состояния в этой точке при средней политике. Таким образом, вы вычисляете «преимущество» или насколько хороша эта политика по сравнению с ожидаемым средним значением в данном состоянии. Этот подход рассматривается как сочетание «лучшего из обоих миров»: он сходится быстрее, чем алгоритм чистых значений, который пытается узнать о состояниях, которые ему не понадобятся в оптимальной политике, и имеет более низкую дисперсию, чем алгоритм чистой политики, который может иметь очень разные значения в разных состояниях, если вы не нормализуете.

* Я думаю, что разница заключается в стартовых условиях, но также было упомянуто, что у них разные «политики исследования»; Я не получил хорошего объяснения того, чем «политика разведки» отличается от старомодной политики политики, поэтому я немного не уверен в этом.

День 28: Alpha Go (оригинальный)

В котором слишком много сокращений

Эта статья AlphaGo мне интересна как на объектном уровне, так и на метауровне; последнее, потому что многие из способов, которыми он (по крайней мере, для меня) неинтуитивен и сложен, являются артефактами его статуса как перехода между полями, вытягивая некоторые методы, о которых я никогда не слышал (например, поиск по дереву Монте-Карло) и чередуя их с теми, с которыми я более знаком. У этого также есть ощущение собранности давайте возьмем уже существующий фреймворк и привяжем наши системы на основе нейронных сетей к этому фреймворку. И, не поймите меня неправильно, это работает очень хорошо. Но это немного сложно объяснить из-за множества различных компонентов и иногда неинтуитивных способов их взаимодействия друг с другом. Все это было сказано, чтобы немного извинить себя за то, что это немного сложно понять: давайте погрузимся.

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

  • В любом заданном состоянии игры запустите несколько симуляций. Цель этих симуляций, вообще говоря, «получить представление о ценности возможных ходов, которые вы могли бы сделать». Однако в игре с примерно 80 возможными ходами на каждом ходу и типичным вознаграждением за время до конца игры, равным 150 шагам, полный поиск на всю глубину каждого дерева в пространстве вычислительно невозможен. Таким образом, мы используем нейронные сети, чтобы помочь нам разумно выбирать действия для этих симуляций, а также предоставить оценку значения состояния без необходимости искать всю глубину этого дерева, пока не будет получено вознаграждение.
  • Насколько я понимаю, в любой момент симуляции алгоритм выбирает тот дочерний узел, который имеет наибольшее значение целевой функции, которая весит 1) некоторую начальную вероятность P(s, a) выбора этого действия в этом состоянии, 2 ) оценку значения состояния, в котором мы окажемся, и 3) склонность выбирать ходы, которые мы никогда не выбирали раньше, чтобы исследовать пространство более широко.
  • Механический способ моделирования заключается в том, что в этом дереве возможных ходов каждое ребро имеет «оценочное значение этого действия-состояния» [Q(s, a)] и «априорную вероятность этого действия-состояния» [P( s, a)] Обходит дерево возможных ходов, пока не дойдет до точки дерева, которой еще не достиг. В этот момент сеть хочет получить оценку того, насколько ценным будет состояние, полученное в результате этого неопробованного хода.
  • Для этого в алгоритме объединены два метода. Первый довольно прост: используйте простую и быструю политику для «развертывания» остальной части игры из этого состояния и далее, выбирая действие в соответствии с вашей «быстрой политикой» на каждом этапе и в конечном итоге получая некоторую награду ( +1 за победу, -1 за поражение). Вторая — это сеть извлеченных ценностей, v(s). Эти два результата, «вознаграждение за развертывание» и сеть ценности, объединяются в очень простую линейную комбинацию (буквально, эквивалентную 0,7 * ценность + 0,3 * развертывание, где параметр 0,3/0,7 является выбранным гиперпараметром).
  • Эта комбинированная оценка значения затем используется для обновления оценочного значения состояния-действия для состояния-действия, с которого мы начали весь этот процесс, что затем сделает этот путь более вероятным для выбора в будущих симуляциях.
  • После завершения симуляций сеть воспроизводит действие, которое было посещено наибольшее количество раз во всех симуляциях.

Если вы подыгрывали дома, в приведенном выше объяснении есть 3 компонента, происхождение которых не было объяснено.

  1. Начальные вероятности, P(s, a)
  2. Функция ценности, v(s)
  3. Функция быстрой политики

И 3), и 1) были сетевыми моделями политик, обученными на наборе игр с участием человека-эксперта с контролируемым обучением (SL). Эти системы обновлялись, пытаясь повысить вероятность того, что действия, сделанные экспертами-людьми, с большей вероятностью будут совершаться в будущем. Разница в том, что первый (часто называемый в статье SL) является более сложным, с 13 слоями, извилинами и так далее. Быстрая политика по замыслу очень проста и быстра. Сам по себе он не очень успешен, выигрывает только в ~ 27% случаев. Но так как это в 15000 раз быстрее, чем небыстрая политика, эта быстрая политика весьма полезна для упомянутых ранее развертываний, поскольку очень быстро проходит от заданного состояния до конца сети. Более сложная система, SL, выводит распределение по возможным действиям при заданном состоянии, и они используются для определения априорных/начальных вероятностей каждого из переходов.

2) оценка стоимости обучается, пытаясь предсказать скалярное вознаграждение, когда две машины ИИ играют друг с другом; его цель — как можно точнее оценить эту награду в конце игры. Интересная особенность настройки AlphaGo заключается в том, что политика, используемая дуэльными сетями в этой настройке, на самом деле не является контролируемым обучением, упомянутым выше, а вместо этого является системой обучения с подкреплением, поскольку она берет решение SL в качестве основы и учится. оттуда, играя в игры против более старых версий самого себя.

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

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

День 29: AlphaGo Zero

Чуть более месяца назад DeepMind выпустила статью, от которой захватывает дух, а также очевидный следующий шаг, учитывая их предыдущую работу и явные амбиции: нейронная сеть, которая победила самого известного в мире человека, играющего в го, полностью обученная правила игры, причем без человеческого ведома. Во многих отношениях вещи, которые делают это достижение таким поразительным, также значительно упрощают подведение итогов, чем вчерашнее оригинальное AlphaGo (Alpha Go Negative One? ). Там, где AGNO казался очень собранным, эта система выглядит совершенно элегантно, хотя и основана на некоторых схожих принципах.

Итак, в чем сходство и различие этих двух систем?

  • Оба генерируют свои ходы, используя процедуру поиска по дереву (MCTS), основанную на моделировании, где, начиная с текущего состояния доски, мы на каждом шаге предпринимаем действие, которое максимизирует сумму Q(s, a) [ожидаемое значение этого действие в этом состоянии] и U(s, a) [термин исследования, который делает действия, которые имеют высокую вероятность в соответствии с некоторой изученной политикой или которые не посещались в прошлом, имеют более высокие значения U]. Когда мы сталкиваемся с конечным узлом, мы получаем оценку вероятности его предыдущей политики P(s, a) и некоторую оценку оценочного значения состояния V(s).
  • Однако в AGNO это оценочное значение было создано путем объединения выходных данных отдельно обученной сети значений со значением, полученным в результате выполнения простой эвристической политики от рассматриваемого состояния до конца сети, чтобы увидеть полученное значение. В AGZ есть одна-единственная сеть, которая выводит как оценочное значение v, так и вероятности политики, и эвристические развертывания «играть до конца игры» не использовались.
  • В обеих сетях после оценки конечного узла обновляется информация обо всех более ранних ребрах дерева. N(s, a), которое представляет собой количество симуляций, которые прошли это ребро (здесь ребро — это конкретное действие из определенного состояния). Q(s, a) представляет собой среднее ожидаемое значение этого действия-состояния, которое обновляется с использованием оценочного значения v. Проще всего представить, что это делается с помощью промежуточного значения W, которое отслеживает общее вознаграждение. что прошло через этот узел; W обновляется, чтобы быть W + v, а затем Q обновляется, чтобы быть этим недавно обновленным значением W, деленным на недавно обновленный счетчик N.
  • Эти обновленные значения N и Q повлияют на решения, принимаемые при следующем моделировании, делая более вероятными действия с более точной оценкой позже.
  • После того, как все симуляции (это гиперпараметр; сеть в статье использовала 1600) были завершены, мы приходим к новому распределению «эмпирической вероятности действия», обозначаемому пи. (это был бы символ, если бы FB мог отображать LaTeX). Этот pi индексируется по состоянию и сообщает вам для данного состояния распределение по действиям, предпринятым всеми симуляциями. Таким образом, если бы было два возможных действия и 1200 симуляций выполнили действие A, а 400 — действие B, число пи было бы установлено равным (0,75, 0,25).
  • Сеть делает ход, который имеет наибольшее значение в распределении pi.
  • Затем противоположный игрок (тоже сеть) делает то же самое, и игра продолжается.
  • В AGNO сеть политик изначально была обучена опытным действиям человека (например, в заданном состоянии предсказать ход, который здесь сделал бы человек), а затем «точно настроена» с помощью самоигры. Сеть ценности была изучена с помощью самостоятельной игры в сети обучения с подкреплением. В AGZ политики и сети создания ценности обучаются вместе, используя самостоятельную игру. Самостоятельная игра работает, когда сеть играет сама и обновляет параметры после завершения каждой игры.
  • Эти обновления выполняются путем получения однородной выборки по всем временным шагам в игре (помещение обоих «игроков» в банк перед взятием выборки) и вычисления совместной функции потерь, которую A) пытается увеличить вероятности P(s, а) чтобы быть ближе к эмпирическим вероятностям pi, которые были сгенерированы в процессе моделирования MCTS, и Б) пытается приблизить оценку значения для каждого состояния к +1, если этот игрок в конечном итоге выиграл, находясь в этом состоянии, и ближе к -1, если игрок в конечном итоге проиграл, находясь в этом состоянии
  • Затем запускается другая самостоятельная игра с использованием этих недавно обновленных параметров.
  • Еще одним изменением между AGNO и AGZ, в основном ортогональным всей системе обучения с подкреплением, стал переход от «ванильной» сверточной сети к остаточной сверточной сети, которая продемонстрировала особенно отличную производительность в областях глубокого обучения, не связанных с RL. И эмпирически похоже, что значительная часть улучшения итогового рейтинга Эло связана именно с этим изменением.

В общей сложности эта система испытала 4,9 миллиона игр для самостоятельной игры в течение 3 дней, обученных на одном TPU (Tensor Processing Unit). Напротив, AGNO заняло несколько месяцев и было обучено на 48 TPU.

4,9 миллиона игр — это, несомненно, больше игр в го, чем может сыграть любой человек за всю свою жизнь; это заставляет меня задаться вопросом (слегка философски), правильно ли думать о превосходстве ИИ не столько в том, что они обладают превосходной вычислительной мощностью, а в том, что они способны очень быстро учиться на задачах, выполнение которых у людей занимает гораздо больше времени. Интересный момент: какие еще задачи обладают свойством моделировать очень быстро и качественно? Кажется, что полезными критериями этого свойства являются «включает в себя манипулирование миром или физикой таким образом, что вычислить конечное конечное состояние без участия человека тривиально» и «не включает взаимодействие с реальными трехмерными объектами в мире или с системы человека». Мне было бы очень интересно услышать ваши мысли о том, какие задачи, по вашему мнению, похожи на Go по соответствующим измерениям, а какие нет.