Как всегда, название звучит сложно, но, поверьте, это определенно не так.

Прежде всего, что такое обучение с подкреплением?

Обучение с подкреплением - это подход машинного обучения, с помощью которого интеллектуальные программы, также известные как АГЕНТЫ, предпринимают ДЕЙСТВИЯ в известной или неизвестной СРЕДЕ, чтобы постоянно адаптироваться и учиться через ОБРАТНАЯ СВЯЗЬ о своих предыдущих действиях.

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

Так что это и зачем они нам нужны?

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

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

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

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

Резюме: агент стремится максимизировать вознаграждение, взаимодействуя с окружающей средой.

Мысли: контролируемое обучение и особенно глубокое обучение за последнее десятилетие знали ОГРОМНЫЙ прогресс с точки зрения результатов и популярности, этот прогресс был обеспечен крупными помеченными наборами данных, такими как ImageNet, эквивалент обучения с подкреплением. будет большой и разнообразный набор сред, чего сегодня нет, существующие среды с открытым исходным кодом не имеют достаточного разнообразия просто потому, что среды сложно настроить.

Мы никуда не денемся, если не знаем о марковских процессах или концепциях марковских цепей

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

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

Чтобы назвать систему марковским процессом, она должна удовлетворять очень простому марковскому свойству: состояние (t + 1) должно зависеть только от состояния (t). Это делает каждое состояние самодостаточным для описания будущего системы.

Матрица переходов

Предположим, у нас есть система с N состояниями, и эта система удовлетворяет свойству Маркова. Затем мы можем создать матрицу переходов, как показано ниже:

Каждая ячейка в строке i и столбце j содержит вероятность перехода системы из состояния i в состояние j .

Ниже другое представление марковского процесса (также широко используемое в представлении конечных автоматов):

Теперь давайте объединим то, что мы видели в первой части, и то, что мы только что видели:

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

Марковское вознаграждение

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

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

Резюме: мы наблюдаем цепочку переходов между состояниями в марковском процессе, это все еще относится к процессу марковского вознаграждения, но для каждого перехода у нас есть это дополнительное количество «НАГРАДА», так что теперь все наши наблюдения имеют ценность вознаграждения за каждый переход системы.

Ожидаемая доходность

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

Возврат в момент t:

T - последний временной шаг,

Итак, возвращаясь к понятию «эпизод», которое мы упоминали ранее, T будет продолжительностью эпизодов.

Есть некоторые взаимодействия агента и среды, которые естественным образом не разбиваются на эпизоды, а просто продолжаются без ограничений.

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

Чтобы решить эту проблему, мы добавляем коэффициент скидки Ɣ 'gamma' к уравнению ожидаемой доходности , который является числом от [0 до 1]. . Итак, что такое Ɣ и что оно означает?

Ожидаемая доходность со скидкой:

Уравнение возврата выглядит следующим образом:

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

С коэффициентом дисконтирования Ɣ, даже несмотря на то, что доходность в момент времени t представляет собой сумму бесконечного числа членов, сама доходность фактически конечна. (0≤Ɣ ‹1)

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

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

Почему метод кросс-энтропии?

Ну, потому что это просто и очень интуитивно понятно, а также позволяет нам снова использовать эволюционные алгоритмы (генетический алгоритм описан в моей последней статье ССЫЛКА).

Как это работает?

Агент, взаимодействуя с окружающей средой, либо награждается, либо наказывается, тогда цель состоит в том, чтобы максимизировать вознаграждение, выполняя ПРАВИЛЬНЫЕ действия.

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

Искусственные нейронные сети

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

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

на основе ошибки мы корректируем веса нейронной сети с помощью обратного распространения ошибки. Обратное распространение ясно объяснено

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

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

Давайте заглянем в черный ящик

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

Внутри нейрона

Некоторые из самых известных и наиболее часто используемых функций активации - это Sigmoid, ReLu, Tanh и Softmax. Функции активации объяснены.

Термин смещения: термин смещение используется для корректировки итоговой выходной матрицы, как и точка пересечения по оси Y. Например, в классическом уравнении y = mx + c, если c = 0, линия всегда будет проходить через 0. Добавление члена смещения обеспечивает большую гибкость и лучшее обобщение для нашего Модель нейронной сети. (определение взято из Stackoverflow).

Реализация метода кросс-энтропии в Python

Наше окружение :

Шест прикреплен к тележке, которая движется по бесконтактной дорожке, с помощью незадействованного шарнира. Система управляется приложением к тележке силы +1 или -1. Маятник запускается вертикально, и цель состоит в том, чтобы не допустить его падения. Награда +1 предоставляется за каждый временной шаг, на протяжении которого шест остается в вертикальном положении. Эпизод заканчивается, когда штанга отклоняется от вертикали более чем на 15 градусов или тележка перемещается более чем на 2,4 единицы от центра.

Ссылка: https://gym.openai.com/envs/CartPole-v1/

Https://gym.openai.com/videos/2019-10-21--mqt8Qj1mwo/CartPole-v1/original.mp4

Я уже упоминал ранее, что мы собираемся использовать своего рода эволюционный алгоритм, давайте поговорим об этом!

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

Я противоречу? Нет, мы используем эволюционные алгоритмы, контролируемое обучение в задаче обучения с подкреплением, разве не круто 😁?

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

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

Мы сохраняем эти серии по партиям. (Нам больше важны этапы и награды, чем сама серия).

Партии можно представить как коробки, в которых хранятся серии.

Часть естественного отбора

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

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

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

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

Это все о методе кросс-энтропии, поздравляю, если вы сделали это до сих пор💪.

Архитектура нашей нейронной сети

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

Часто задаваемый вопрос: Почему 64 нейрона и почему только один скрытый слой, а не более? На самом деле ведется много споров о том, как мы выбрали эти два параметра (Nb скрытых слоев, Nb нейронов в каждом Layer), и нет ЛУЧШЕГО способа сделать это, но мне нравится это делать, пробуя разные архитектуры, пока не получу удовлетворительные результаты, имейте в виду тот факт, что чем больше слоев, узлов вы добавляете, тем больше вычислений и памяти занимает.

Softmax и функция потерь кросс-энтропии

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

Когда это использовать:

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

Что он делает:

Во-первых, это формула функции активации Softmax:

Он принимает на вход вектор действительных чисел и выводит распределение вероятностей.

Мы можем видеть это так

или так

Это все о Softmax.

Функция потерь кросс-энтропии

Обычно softmax сочетается с так называемой кросс-энтропийной потерей, поэтому снова давайте посмотрим, что он делает и как.

Что он делает и как:

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

Математическая формула:

Например:

Затем, основываясь на значении потерь, мы корректируем веса посредством обратного распространения ошибки.

Это все о функции потерь кросс-энтропии.

Код и демонстрация

Демонстрация с использованием двух разных архитектур нейронной сети:

Репозиторий Github для кода Python: https://github.com/HamzaELHANBALI/DeepReinforcemnetLearning

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

Увидимся в следующем посте ✋.