Основные концепции и кодовая реализация обучения с подкреплением

искусственный интеллект алгоритм Нейронные сети игра
Основные концепции и кодовая реализация обучения с подкреплением

Мы можем найти обучение с подкреплением во многих современных приложениях ИИ, от AlphaGo до беспилотных автомобилей. Как эта технология медленно учится выполнять задачи с нуля и вырастает в экспертов «выше человеческого уровня»? В этой статье будет краткое введение. Выбрано из DeepLearning4j, составленного Heart of the Machine.

Нейронные сети ответственны за наши недавние прорывы в компьютерном зрении, машинном переводе и прогнозировании временных рядов, и их также можно комбинировать с алгоритмами обучения с подкреплением для получения потрясающих результатов, таких как AlphaGo (см.:Программа го следующего поколения DeepMind, AlphaGo Zero, снова на природе без человеческого ведома).

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

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

Два алгоритма обучения с подкреплением Deep-Q Learning и A3C были реализованы в библиотеке Deeplearning4j, и теперь она может играть в Doom.

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

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

Начало работы с обучением с подкреплением (docs.Резервуарное переселение.Любовь/docs?__Huasheng Tiancheng…)


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

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

  • Агент: интеллектуальное существо, способное действовать, например, дрон, который может доставить груз, или Супер Марио, который движется к цели в видеоигре. Алгоритм обучения с подкреплением является агентом. В реальной жизни этим агентом являетесь вы.

  • Действие: A — это набор действий, которые может предпринять агент. Действие почти сразу становится очевидным, но следует отметить, что агент выбирает из списка возможных действий. В видеоигре этот список действий может включать бег вправо или влево, прыжки вверх или вниз, приседание или стояние на месте. На фондовом рынке этот список действий может включать покупку, продажу или владение любыми ценными бумагами или их вариантами. При работе с воздушными дронами варианты действий включают в себя большую скорость и ускорение в трехмерном пространстве.

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

  • Состояние (State, S): Состояние — это конкретное мгновенное состояние, в котором находится агент; то есть конкретное место и время, которое представляет собой конкретную мгновенную конфигурацию, которая может ассоциировать агента с другими важными вещами, такими как инструменты, враги. и/или награды. Это текущая ситуация, возвращенная окружающей средой. Вы когда-нибудь оказывались не в том месте не в то время? Это, несомненно, государство.

  • Вознаграждение (Reward, R): Вознаграждение — это обратная связь, которую мы измеряем в отношении успеха или неудачи действий агента. Например, в видеоиграх, когда Марио касается золотых монет, он получает очки. Столкнувшись с любым заданным состоянием, агент выводит действие в среду, а среда возвращает новое состояние для агента (на это новое состояние влияют действия, основанные на предыдущем состоянии) и вознаграждение (если есть какое-либо вознаграждение), если) . Награды могут быть немедленными или отсроченными. Они могут эффективно оценивать действия агента.

  • Политика (policy, π): политика — это политика, которую агент использует для выполнения следующего действия на основе текущего состояния.

  • значение (значение, V): ожидаемая долгосрочная доходность со скидкой, а не краткосрочная доходность R. Мы определяем Vπ(s) как долгосрочное вознаграждение, основанное на политике π, когда текущее состояние равно s.

  • Q-Value или Action Value (Q): Q-Value (Q-Value) аналогичен приведенному выше значению, за исключением того, что он использует другой параметр — текущее действие a. Vπ(s) относится к долгосрочному вознаграждению, основанному на текущем состоянии s, действии a и политике π.

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



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

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

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

  • В реальном мире целью робота может быть перемещение из точки А в точку Б, и каждый дюйм, пройденный роботом из точки А в точку Б, считается очками.

Обучение с подкреплением можно отличить от обучения с учителем и без учителя по интерпретации входных данных. Мы можем проиллюстрировать, чем они отличаются, описав «вещи», которые они изучают.

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

  • Обучение под наблюдением: это «двойной чизбургер». (метки, имена контактов и лица...) Эти алгоритмы обучения с учителем изучают ассоциации между экземплярами объектов данных и их метками, то есть алгоритмы обучения с учителем должны иметь помеченный набор данных. Эти метки используются для «контроля» и исправления алгоритма, поскольку алгоритм может делать неверные предположения при прогнозировании метки.

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


Выбор домена для обучения с подкреплением

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

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


Пары состояние-действие и сложные распределения вероятности вознаграждения

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

  • Если действие здесь относится к вступлению в брак с кем-то, то женитьба на 35-летнем в 18 лет может сильно отличаться от женитьбы на 35-летнем в 90 лет, оба результата могут иметь разные мотивы, которые в дальнейшем приводят к разным результатам.

  • Если действие здесь представляет собой крик «Огонь», то в переполненном театре это означает разные вещи, чем в толпе боевиков. Мы не можем предсказать последствия действий, не зная конкретного контекста.

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

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

Обучение с подкреплением — это попытка смоделировать сложные распределения вероятностей большого количества пар состояний и действий и связанных с ними вознаграждений. Это одна из причин, по которой обучение с подкреплением используется в сочетании с марковским процессом принятия решений (https://deeplearning4j.org/markovchainmontecarlo), методом выборки из сложного распределения для вывода метода его свойств. Это очень похоже на проблему, вдохновившую Стэна Улама на изобретение метода Монте-Карло, а именно на попытку определить шансы на выигрыш в данной руке в игре в покер.

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

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


Связь между машинным обучением и временем

Вы можете подумать, что алгоритмы обучения с подкреплением имеют другое отношение к практике, чем люди. Мы можем запускать алгоритм с разными действиями в одном и том же состоянии, пока не сможем сделать вывод, какое действие является лучшим для данного состояния. На самом деле мы даем алгоритмам свой собственный День сурка (http://www.imdb.com/title/tt0107048/0), и они начинают как дураки и постепенно набираются мудрости.

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


Глубокие нейронные сети и глубокое обучение с подкреплением

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

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

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


Фактически сверточная сеть ранжирует метки, которые лучше всего соответствуют изображению, на основе их вероятности. Получив изображение осла, сверточная сеть может определить его как осла в 80% случаев, лошадь в 50% случаев и собаку в 30% случаев.

В обучении с подкреплением сверточная сеть может дать изображение, представляющее состояние, и ранжировать действия, которые могут быть предприняты в этом состоянии; например, она может предсказать, что выполнение действия «Бежать правильно» принесет 5 баллов, а действие «Правильно». Прыжок принесет 7 очков, бег влево принесет 0 очков.


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

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

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

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

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

Как и у людей, Q-функция рекурсивна. Точно так же, как вызов функции мокрого тела human(), сама функция human() содержит другую функцию human(), и мы все результаты внутри, вызов функции Q для данной пары состояние-действие требует, чтобы мы вызывали встроенный набор Q-функций для предсказания значения следующего состояния, которое, в свою очередь, зависит от Q-функций последующих состояний и так далее.


код

Пример RL4J доступен здесь (GitHub.com/deep учиться в…). 

package org.deeplearning4j.examples.rl4j;

import java.io.IOException;
import org.deeplearning4j.rl4j.learning.HistoryProcessor;
import org.deeplearning4j.rl4j.learning.async.a3c.discrete.A3CDiscrete;
import org.deeplearning4j.rl4j.learning.async.a3c.discrete.A3CDiscreteConv;
import org.deeplearning4j.rl4j.mdp.ale.ALEMDP;
import org.deeplearning4j.rl4j.network.ac.ActorCriticFactoryCompGraphStdConv;
import org.deeplearning4j.rl4j.util.DataManager;

/**
 * @author saudet
 *
 * Main example for A3C with The Arcade Learning Environment (ALE)
 *
 */
public class A3CALE {

    public static HistoryProcessor.Configuration ALE_HP =
            new HistoryProcessor.Configuration(
                    4,       //History length
                    84,      //resize width
                    110,     //resize height
                    84,      //crop width
                    84,      //crop height
                    0,       //cropping x offset
                    0,       //cropping y offset
                    4        //skip mod (one frame is picked every x
            );

    public static A3CDiscrete.A3CConfiguration ALE_A3C =
            new A3CDiscrete.A3CConfiguration(
                    123,            //Random seed
                    10000,          //Max step By epoch
                    8000000,        //Max step
                    8,              //Number of threads
                    32,             //t_max
                    500,            //num step noop warmup
                    0.1,            //reward scaling
                    0.99,           //gamma
                    10.0            //td-error clipping
            );

    public static final ActorCriticFactoryCompGraphStdConv.Configuration ALE_NET_A3C =
            new ActorCriticFactoryCompGraphStdConv.Configuration(
                    0.00025, //learning rate
                    0.000,   //l2 regularization
                    null, null, false
            );

    public static void main(String[] args) throws IOException {

        //record the training data in rl4j-data in a new folder
        DataManager manager = new DataManager(true);

        //setup the emulation environment through ALE, you will need a ROM file
        ALEMDP mdp = null;
        try {
            mdp = new ALEMDP("pong.bin");
        } catch (UnsatisfiedLinkError e) {
            System.out.println("To run this example, uncomment the \"ale-platform\" dependency in the pom.xml file.");
        }

        //setup the training
        A3CDiscreteConv<ALEMDP.GameScreen> a3c = new A3CDiscreteConv(mdp, ALE_NET_A3C, ALE_HP, ALE_A3C, manager);

        //start the training
        a3c.train();

        //save the model at the end
        a3c.getPolicy().save("ale-a3c.model");

        //close the ALE env
        mdp.close();
    }
}

Оригинальная ссылка: