Автор: Angel_Kitty
Источник: http://www.cnblogs.com/ECJTUACM-873284962/
1. Введение
В настоящее время для ученых всего мира вопрос «как освоить новый навык» стал фундаментальным исследовательским вопросом. Очевидно, почему мы решаем эту проблему в первую очередь, и если мы это поймем, мы сможем дать людям возможность делать вещи, о которых мы, возможно, и не думали раньше. В качестве альтернативы мы могли бы научиться выполнять больше «человеческой» работы, что часто является результатом истинной эпохи ИИ.
Хотя на приведенный выше вопрос у нас нет полного ответа для объяснения в настоящее время, но некоторые вещи понятны. Оставляя в стороне обучение навыкам, нам в первую очередь необходимо взаимодействовать с окружающей средой. Учимся ли мы водить машину или ребенок учится ходить, обучение основано на взаимодействии с окружающей средой. Обучение на основе взаимодействия является фундаментальной концепцией всех теорий интеллектуального развития и обучения.
2. Обучение с подкреплением
Сегодня мы обсудим обучение с подкреплением, которое представляет собой алгоритм обучения, основанный на взаимодействии среды друг с другом. Некоторые люди считают, что обучение с подкреплением — это настоящая надежда на создание сильного искусственного интеллекта. Это утверждение также верно, потому что потенциал обучения с подкреплением действительно огромен.
В настоящее время исследования в области обучения с подкреплением быстро развиваются, и для различных приложений создается большое количество алгоритмов обучения. Поэтому особенно важным становится знакомство с методами обучения с подкреплением. Если вы не очень хорошо знакомы с обучением с подкреплением, я предлагаю вам ознакомиться с моими предыдущими статьями об обучении с подкреплением и некоторых платформах обучения с подкреплением с открытым исходным кодом.
Как только вы освоите и поймете основы обучения с подкреплением, продолжайте читать эту статью. Прочитав эту статью, вы получите четкое представление об обучении с подкреплением и получите практическую реализацию кода.
Примечание. В разделе реализации кода мы предполагаем, что у вас уже есть базовые знания Python. Если вы еще не знаете Python, вам следует сначала ознакомиться с этим руководством.
1. Определите проблему обучения с подкреплением
Обучение с подкреплением — это изучение того, что делать и как действовать соответственно, на основе взаимодействия с окружающей средой. Конечным результатом является максимизация значения обратного сигнала системы. Учащемуся не говорят, какое действие выполнять, но ему предоставляется самому открыть, какое действие принесет наибольшую награду. Поясним это на простом примере:
Возьмем в качестве примера ребенка, который учится ходить.
Вот шаги, которые будет делать ваш ребенок, когда он учится ходить:
1. Первое, что заметит ребенок, это заметит, как вы ходите. Вы используете две ноги, шаг за шагом, шаг за шагом. Ребенок поймет концепцию и попытается подражать вам.
2. Но скоро он поймет, что перед ходьбой ребенок должен встать! Это может быть проблемой для детей, когда они учатся ходить. Так ребенок пытается встать самостоятельно, он все падает, но все время встает.
3. Однако есть еще одна проблема, которую необходимо решить. Встать относительно легко, но удержаться — еще одна проблема. В замкнутом пространстве, найдя опору, ребенку удается удержаться на ногах.
4. Теперь настоящая задача ребенка начать учиться ходить. Но научиться ходить легче сказать, чем сделать. Есть много вещей, которые нужно обработать в мозгу ребенка, например, балансировать тело и решать, какую ногу нужно поставить дальше и куда.
Звучит как сложная задача, верно? На самом деле очень сложно научиться стоять до того, как вы научитесь ходить. Однако теперь, когда мы все научились ходить, нас больше не будет беспокоить эта проблема. Теперь вы понимаете, почему это так сложно для детей.
Формализуем приведенный выше пример. Проблема, которую следует сформулировать в примере, — это «проблема ходьбы», когда ребенок является агентом, пытающимся манипулировать окружающей средой (ходьба по земле), совершая действие (ходьба), куда он пытается выйти из состояния (т.е. каждый раз, когда он/она ходит) шаг) для перехода в другое состояние. Когда он/она завершает подмодуль задания (т.е. ребенок проходит несколько шагов), ребенок получает вознаграждение (скажем, немного шоколада), но когда он/она не может ходить, он/она не получает никакого шоколада ( это процесс с отрицательной обратной связью). Это простое описание проблемы обучения на словах.
Вот хорошее вводное видео по обучению с подкреплением.
2. Сравнение с другими методами машинного обучения
Обучение с подкреплением — один из самых мощных алгоритмов машинного обучения. Ниже приводится описание типов алгоритмов машинного обучения.
Давайте сравним разницу между алгоритмами обучения с подкреплением и другими типами алгоритмов:
Обучение с учителем и обучение с подкреплением: в обучении с учителем есть «руководитель» снаружи, который обладает знаниями обо всей среде и делится этими знаниями с агентом, тем самым помогая агенту выполнить задачу. Но у этого есть некоторые проблемы, потому что в задаче так много комбинаций между подзадачами, что агент должен выполнить и достичь цели. Таким образом, создание «супервайзера» практически нецелесообразно. Например, в игре в шахматы можно сделать десятки тысяч ходов. Поэтому создание базы знаний выигрышного геймплея — утомительная задача. В этих вопросах разумнее и посильнее учиться на собственном опыте и набираться знаний. В этом основное отличие обучения с подкреплением от обучения с учителем. Как в обучении с учителем, так и в обучении с подкреплением существует соответствие между вводом и выводом. Но в обучении с подкреплением для агента существует функция обратной связи с вознаграждением, а не прямое сообщение агенту окончательного ответа, как в обучении с учителем.
Обучение без учителя против обучения с подкреплением: в обучении с подкреплением существует процесс отображения от ввода к выводу, но этот процесс не существует в обучении без учителя. В неконтролируемом обучении основная задача состоит в том, чтобы найти базовый паттерн, а не отображение. Например, если задача состоит в том, чтобы порекомендовать новостные статьи пользователю, алгоритм обучения без учителя сначала просматривает похожие статьи, которые человек читал ранее, и рекомендует их другим. Алгоритм обучения с подкреплением заключается в построении «графика знаний» с помощью некоторых статей пользователя и получении непрерывной обратной связи от пользователя, чтобы узнать любимые отношения между пользователем и статьей.
Существует четвертый тип машинного обучения, называемый полууправляемым обучением, который, по сути, представляет собой комбинацию контролируемого и неконтролируемого обучения. Это отличается от обучения с подкреплением, подобно тому, как контролируемое и полуконтролируемое обучение имеют прямые справочные ответы, а обучение с подкреплением - нет.
3. Основа решения задач обучения с подкреплением
Чтобы понять, как решить задачу обучения с подкреплением, давайте проиллюстрируем задачу обучения с подкреплением на классическом примере — игровом автомате с несколькими руками. Во-первых, нам нужно понять основные проблемы исследования и разработки, а затем определить основу для решения проблем обучения с подкреплением.
Tiger Machine изображен выше, если вы много играли с Tiger Machine.
Теперь вы хотите получить максимальную отдачу от Tiger Machine и как можно быстрее. Что бы вы сделали?
Наивная идея состоит в том, чтобы просто выбрать одну Tiger Machine и играть с ней весь день. Звучит очень скучно, но Tiger Machine может дать вам некоторую «плату», то есть позволить вам выиграть деньги. Используя этот метод, вероятность того, что вы выиграете, составляет около 0,00000…1. Тем не менее, большую часть времени вы, вероятно, будете терять деньги, сидя перед Tiger Machine. Формально это можно определить как чистый подход к разработке. Но лучший ли это вариант? Ответ, конечно, нет.
Давайте рассмотрим другой подход. Мы можем дернуть за рычаг на каждой Машине Тигра и молить Бога, чтобы мы сбили хотя бы одну. Конечно, это еще одна наивная идея, когда вы будете просто дергать за рычаг весь день, но просто заплатите вам немного. Формально говоря, этот метод является чисто исследовательским методом.
Ни один из методов не является оптимальным, и мы должны найти правильный баланс между ними, чтобы получить максимальную отдачу. Это известно как дилемма исследования и эксплуатации обучения с подкреплением.
Сначала мы формально определяем основу для решения задач обучения с подкреплением, а затем перечисляем возможные способы решения этой проблемы.
Марковский процесс принятия решений:
В контексте обучения с подкреплением математическая структура, с помощью которой мы определяем проблему, называется марковским процессом принятия решений. Это может быть оформлено как:
Государственная коллекция: S
Коллекция действий: А
Функция награды: R
Стратегия: π
Значение: В
Мы должны предпринять определенное действие (A), которое позволит нам перейти из начального состояния в конечное состояние (S). Каждый раз, когда мы совершаем действие, мы получаем что-то взамен. Конечно, характер полученного вознаграждения (положительный или отрицательный) определяется нашими действиями.
Наш набор политик (π) определяется нашим набором действий, а вознаграждения, которые мы получаем, определяют нашу ценность (V). Здесь наша задача состоит в том, чтобы максимизировать нашу ценность, выбрав правильную стратегию. Таким образом, мы должны максимизировать следующее уравнение:
За время t все возможные S.
задача коммивояжера
Проиллюстрируем на другом примере.
Эта задача относится к серии задач коммивояжера (TSP). Задача состоит в том, чтобы добраться из пункта A в пункт F с наименьшими возможными затратами. Число на каждой стороне между двумя буквами представляет стоимость расстояния между двумя местами. Если это значение отрицательное, это означает, что вам заплатят за проезд по этой дороге. Мы определяем ценность как общую ценность, которую вы получаете, когда проходите всю дистанцию с выбранной вами стратегией.
Вот символы:
Набор узлов состояния: {A,B,C,D,E,F}
Наборы действий передаются из одного места в другое: {A->B, C->D и т. д.}
Функция вознаграждения — это значение на краю
Функция стратегии относится к полному плану пути, например: {A -> C -> F}
Теперь предположим, что вы находитесь в месте А, и единственный способ, которым вы можете видеть, — это ваш следующий пункт назначения (то есть вы можете видеть только B, D, C, E), и вы не знаете других мест.
Вы можете использовать жадный алгоритм, чтобы получить наиболее благоприятный шаг в текущем состоянии, то есть вы выбираете метод {A->D} из {A -> (B,C,D,E)}. Точно так же теперь вы находитесь в точке D и хотите добраться до точки F. Вы можете выбрать метод {D -> F} из {D -> (B, C, F)}, который даст вам максимальную отдачу от затраченных средств. Поэтому мы идем по этому пути.
На данный момент наша стратегия состоит в том, чтобы взять {A -> D -> F}, и мы получаем результат -120.
Поздравляем! Вы только что реализовали алгоритм обучения с подкреплением. Этот алгоритм называется эпсилон-жадным алгоритмом. Это жадный алгоритм, который шаг за шагом проверяет решение проблемы. Теперь, если бы вы (продавец) хотели снова попасть из пункта А в пункт F, вы всегда шли бы по этому маршруту.
Другие способы путешествовать?
Можете ли вы угадать, к какой категории относится наша стратегия (чистое исследование или чистое развитие)? Обратите внимание, что выбранная нами стратегия не является оптимальной стратегией. Нам нужно немного «исследовать» и найти лучшую стратегию. Здесь мы используем подход изучения местной политики, где наша задача состоит в том, чтобы найти наилучшую политику среди всех возможных политик. Есть много способов решить эту проблему, здесь мы кратко перечислим некоторые из основных категорий:
Стратегия прежде всего: мы сосредоточены на поиске лучшей стратегии
Награды в первую очередь: наша цель — найти наилучшее значение вознаграждения, т. е. накопительное вознаграждение.
Действие прежде всего: мы сосредоточены на том, чтобы предпринимать наилучшие действия на каждом этапе
В будущих статьях я подробно расскажу об алгоритмах обучения с подкреплением. До тех пор вы можете обратиться к этой статье об исследовании алгоритмов обучения с подкреплением.
4. Внедрение обучения с подкреплением
Далее мы будем использовать алгоритм глубокого Q-обучения. Q-обучение — это алгоритм обучения, основанный на политике, с функциональными представлениями, аппроксимирующими нейронные сети. Этот алгоритм используется Google, и он превосходит игру Atari.
Давайте посмотрим на псевдокод Q-обучения:
1. Инициализировать таблицу значений 'Q(s, a)' 2. Наблюдать за текущим значением состояния 's' 3. Выбрать политику, основанную на действии (например, эпсилон-жадность) в качестве действия, выбранного для этого состояния 4 , Основываясь на этом действии, наблюдайте за значением вознаграждения «r» и следующим новым состоянием s.5 Используйте наблюдаемое вознаграждение и максимальное вознаграждение, полученное возможным следующим состоянием, для обновления значения состояния. Обновление в соответствии с приведенной выше формулой и параметрами. 6. Установите новое состояние и повторяйте описанный выше процесс, пока не будет достигнуто конечное состояние.
Простое описание Q-обучения можно резюмировать следующим образом:
Давайте сначала рассмотрим проблему Cartpole, а затем перейдем к написанию нашего решения.
Когда я был ребенком, я помню, как брал палку и пытался сбалансировать ее одним пальцем. Мы с другом устраивали соревнования, где тот, кто дольше удерживал палку в равновесии, награждался кусочком шоколада.
Вот простое видео, описывающее реальную систему Cart-Pole.
Приступаем к кодированию!
Прежде чем мы начнем писать, нам нужно установить несколько программ.
Шаг 1: Установите пакет keras-rl
В терминале вы можете запустить следующие команды:
git clone https://github.com/matthiasplappert/keras-rl.gitcd keras-rlpython setup.py install
Шаг 2: Установите зависимости среды CartPole
Мы предполагаем, что у вас уже установлен pip, тогда вам просто нужно установить его с помощью:
pip install h5pypip install gym
Шаг 3: Начните писать код
Сначала нам нужно импортировать некоторые модули, которые нам нужны
import numpy as np import gym from keras.models importSequentialfrom keras.layers importDense,Activation,Flattenfrom keras.optimizers importAdamfrom rl.agents.dqn importDQNAgentfrom rl.policy importEpsGreedyQPolicyfrom rl.memory importSequentialMemory
Затем установите соответствующие переменные
ENV_NAME = 'CartPole-v0'# Get the environment and extract the number of actions available in the Cartpole problem env = gym.make(ENV_NAME) np.random.seed(123) env.seed(123) nb_actions = env.action_space.n
После этого построим очень простую однослойную модель нейронной сети.
model =Sequential() model.add(Flatten(input_shape=(1,) + env.observation_space.shape)) model.add(Dense(16)) model.add(Activation('relu')) model.add(Dense(nb_actions)) model.add(Activation('linear'))print(model.summary())
Далее мы настраиваем и компилируем наш агент. Мы настроили нашу стратегию на жадный Эпсилон, а также настроили наше хранилище на хранение последовательности, так как нам нужно хранить результаты наших действий и вознаграждение за каждое действие.
policy =EpsGreedyQPolicy() memory = SequentialMemory(limit=50000, window_length=1) dqn = DQNAgent(model=model, nb_actions=nb_actions, memory=memory, nb_steps_warmup=10, target_model_update=1e-2, policy=policy) dqn.compile(Adam(lr=1e-3), metrics=['mae'])# Okay, now it's time to learn something! We visualize the training here for show, but this slows down training quite a lot. dqn.fit(env, nb_steps=5000, visualize=True, verbose=2)
Теперь давайте проверим нашу модель обучения с подкреплением.
dqn.test(env, nb_episodes=5, visualize=True)
Следующий рисунок является результатом работы модели:
Вуаля, вы только что построили бота для обучения с подкреплением!
5. Добавьте сложности
Теперь, когда вы ознакомились с базовой реализацией обучения с подкреплением, давайте начнем изучать новые задачи, каждый раз добавляя немного больше сложности.
Проблема с Ханойской башней
Для тех, кто не знаком с этой игрой, задача о Ханойской башне была придумана в 1883 году. Он состоит из 3 палочек и ряда дисков разного размера (например, 3 на картинке выше). Начните с крайнего левого стика и постарайтесь переместить крайний левый диск на крайний правый за наименьшее количество ходов.
Если мы собираемся разобраться с этим, давайте начнем с состояния:
Исходное состояние: все три диска находятся на крайнем левом джойстике (пронумерованы 1, 2, 3 сверху вниз)
Конечное состояние: все три диска находятся на крайнем правом джойстике (пронумерованы 1, 2, 3 сверху вниз)
Все возможные состояния:
Вот 27 состояний, которые мы можем получить:
Среди них (12)3* означает, что диск 1 и диск 2 находятся на крайней левой палочке (нумерация идет сверху вниз), диск 3 находится на средней палке, а крайняя правая палка не имеет диска.
Числовые награды:
Поскольку мы хотим решить эту задачу с наименьшим количеством ходов, мы можем дать вознаграждение за каждый ход -1.
Стратегия:
Теперь, если не учитывать никаких технических деталей, может быть несколько следующих состояний от предыдущего состояния. Например, когда числовое вознаграждение равно -1, состояние (123) перейдет в состояние (23)1 или состояние (23)1. Если теперь вы видите состояние, происходящее одновременно, каждое из 27 упомянутых выше состояний можно представить в виде графа, аналогичного задаче о коммивояжере, и мы можем найти оптимальное решение, экспериментируя с различными состояниями и путями.
3 х 3 кубик Рубика
Хотя я могу исправить это для вас, я хочу, чтобы вы поняли это сами. Вы можете следовать той же идее, о которой я упоминал выше, и вы сможете ее решить.
Начав с определения начального и конечного состояний, затем определите все возможные состояния и их переходы, а также вознаграждения и политики. В конце концов, вы сможете использовать тот же подход для создания собственного решения.
6. Глубокое понимание последних достижений в обучении с подкреплением
Как вы понимаете, кубик Рубика во много раз сложнее задачи о Ханойской башне. Теперь давайте представим количество состояний и стратегий, выбранных в шахматной игре, например, в го. Недавно Google DeepMind создал алгоритм глубокого обучения с подкреплением и победил Ли Седоля.
В последнее время с успехом в глубоком обучении. В настоящее время внимание постепенно переключается на применение глубокого обучения для решения проблем обучения с подкреплением. Последний поток новостей заключается в том, что алгоритм глубокого обучения с подкреплением, созданный Google DeepMind, победил Ли Седоля. Похожая ситуация возникла в видеоиграх, где были разработаны алгоритмы глубокого обучения с подкреплением, чтобы достичь человеческой точности, а в некоторых играх даже превзойти человеческую. Исследования и практика по-прежнему должны двигаться вперед вместе, а промышленность и академические круги должны координировать усилия по созданию более эффективных адаптивных обучающихся роботов.
Вот несколько основных областей, в которых применяется обучение с подкреплением:
- Теория игр и взаимодействие нескольких агентов
- робот
- компьютерная сеть
- Автомобильная навигация
- лекарство
- Промышленная логистика
Есть еще так много областей, которые еще не разработаны.В сочетании с нынешним применением глубокого обучения в обучении с подкреплением я верю, что в будущем будут прорывы!
End