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

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

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

Эта статья (и, возможно, последующие) будут посвящены проблемам в OpenAI Gym, который предоставляет богатую площадку для тренировки искусственного интеллекта. В части I мы рассмотрим подход, а также некоторые случайные мысли/вопросы, которые у меня возникнут в процессе. Детали реализации будут в Части II. Отзывы очень ценятся, пожалуйста, не стесняйтесь делиться своим мнением или указывать на ошибки.

Итак, пришло время настоящего мяса!

Решений проблемы CartPole много. Я выбрал Deep Q-Network (DQN) в качестве своего подхода, так как я нахожу эту концепцию вдохновляющей. Дополнительную информацию о DQN можно найти в этой статье. Исходный код доступен здесь. В приведенном ниже обсуждении предполагается, что DQN является предварительным условием.

В контексте РЛ. Цель агента — получить максимально возможное общее вознаграждение за выполнение данной задачи. Среда — это черный ящик для агента. Поэтому внутренние состояния невидимы. Информация, предоставляемая агенту, — это наблюдаемое состояние, доступные действия и вознаграждение после выполнения каждого действия. Без каких-либо предварительных знаний о задаче агент должен взаимодействовать со средой, формировать интуицию/представление/модель среды. На основе полученной информации выберите действие, которое, по мнению агента, принесет максимальное вознаграждение в долгосрочной перспективе.

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

После каждого действия агент DQN записывает воспроизведение в следующем формате: [текущее_наблюдение, действие_предпринятое, новое_наблюдение, вознаграждение] и сохраняет его в пуле опыта (воспроизведение опыта). Позже агент обучил свой мозг (Q-Network), двухуровневую, полностью связанную нейронную сеть с этим опытом. Q-Network принимает [действие, наблюдение] в качестве входных данных и прогнозируемое общее вознаграждение в качестве выходных данных. Задача Q-сети состоит в том, чтобы дать агенту интуитивное представление о том, насколько хорошим/плохим может быть общее вознаграждение с учетом текущих наблюдений и действий, которые необходимо предпринять.

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

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

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

Во второй части будет обсуждаться реализация с использованием Tensorflow.