Марковские процессы принятия решений. Итоги глубокого Q-обучения

Частично обозреваемые марковские процессы принятия решений

Здравствуйте и вновь добро пожаловать на занятия по теме «Глубокое обучение с подкреплением: глубокое обучение на языке Python, часть 7».

В этой заключительной статье данного раздела мы обсудим так называемые частично обозреваемые марковские процессы принятия решений (PO-MDP). В конце подведем итоги раздела глубокого Q-обучения.

Термин «частично обозреваемые» должен быть вполне интуитивно понятным – по сути, это значит, что наше состояние не включает полную информацию о среде и о чём мы знаем. Таким образом, в действительности частично обозреваемые марковские процессы принятия решений являются более реалистичной моделью.

Чтобы получить более ясное и интуитивно понятное представление, подумайте, как бы вы описали состояние комнаты, в которой находитесь. Для этого вы, скорее всего, повернёте голову и оглянетесь. Пока вы оглядываетесь, вы, надо полагать, отслеживаете увиденное и собираете эту информацию в уме – подобно тому, что мы делали в обычном глубоком Q-обучении, когда собирали наблюдения, чтобы получить более точное представление о состоянии, в котором находимся на самом деле. Ключевой концепцией тут является следующее: то, что мы видим в конкретный момент времени, не даёт нам полной информации о состоянии, но мы можем объединять это с тем, что видим в другие моменты времени, чтобы получить больше информации. Другими словами, мы объединяем наблюдения с течением времени.

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

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

Обсудим ряд возможных решений этой проблемы. Первое: мы можем как и прежде продолжать использовать буфер воспроизведения опыта; другими словами, каждый элемент в буфере воспроизведения опыта является последовательностью из четырёх наблюдений. Затем же вместо объединения четырёх наблюдений в одно изображение с четырьмя цветами мы можем рассматривать их как последовательность четырёх чёрно-белых изображений. Недостаток этого подхода заключается в том, последовательность будет ограничена в длине. Впрочем, можно использовать и более длинные последовательности, например 5, 6, 7 или 8; и хотя всё равно последовательность будет ограничена одним и тем же размером, зато это легче в реализации.

Можно сделать по-другому: производить случайную выборку из буфера опыта воспроизведения, однако затем использовать эти образцы не как индексы состояний, а как индексы n состояний. Так, например, предположим, что я случайным образом выбрал индекс 300 и хочу рассмотреть последовательность длиной 10. В таком случае я передаю все состояния от индекса 290 до индекса 300 в рекуррентную нейронную сеть. В этой ситуации также удобнее использовать последовательности постоянной длины. Преимуществом этого метода является то, что нам не нужно хранить четыре отдельных изображения в качестве частей каждого состояния, достаточно одного – то есть это экономит память.

Не забывайте, что в обычном Q-обучении состояние имеет избыточную информацию: состояние s(t) содержит изображения x(t), x(t-1), x(t-2) и x(t-3). Однако состояние s(t-1) уже содержит x(t-1), x(t-2), x(t-3) и x(t-4). Впрочем, эта избыточность облегчает реализацию во время обучения.

Ещё одна тема для размышлений состоит в том, что если мы будем рассматривать каждое состояние просто как отдельный кадр и постоянно добавлять их в буфер воспроизведения опыта, то не сможем просто и безыскусно отыскивать 10 предыдущих кадров, чтобы найти начало последовательности. Почему? Если вы выберем, скажем, пятый кадр с начала эпизода, то у него просто не будет 10 предыдущих, так что мы не сможем вернуться так далеко назад. Таким образом, вам понадобится ещё и способ отслеживать границы эпизода, если собираетесь использовать данный метод.

Раздел глубокого Q-обучения. Итоги

В этой лекции мы подведём итоги всему изученному в этой части, которая была посвящена глубокому Q-обучению.

Что удивительно в глубоком Q-обучении – так это то, что на самом деле мы не сделали ничего нового: все использовавшиеся методы были разработаны нами ранее. Единственные сделанные изменения – это изменения гиперпараметров и ещё ряд на удивление простых вещей.

Напомню, что на самом деле мы уже рассматривали Q-обучение в предыдущем курсе по обучению с подкреплением, так что вы знакомы с основами: мы берём ошибку TD(0) и выполняем по ней градиентный спуск. Мы это делали как с Q-таблицами, так и – в этом курсе – с методами приближений. Конечно, глубокое обучение также является методом приближений, но, как вы могли заметить, простая попытка подключить и использовать какую-либо старую нейронную сеть не приводит к удовлетворительному решению. Впрочем, мы смогли использовать такого типа нейронные сети, как сети радиальных базисных функций, которые имеют фиксированное представление признаков. Собственно, это всё, что мы сделали до этой части.

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

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

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

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

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

С помощью этих простых методов мы оказались способными объединить глубокое обучение и обучение с подкреплением, но не только. Мы смогли расширить из до гораздо более сложных игр вроде Breakout, и, конечно, как показали авторы, эти методы могут одинаково хорошо применяться и в ряде других игр Atari, таких как Pong, Space Invaders, Seaquest и Beamrider.

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

Обсудим ряд возможных решений этой проблемы. Первое: мы можем как и прежде продолжать использовать буфер воспроизведения опыта; другими словами, каждый элемент в буфере воспроизведения опыта является последовательностью из четырёх наблюдений. Затем же вместо объединения четырёх наблюдений в одно изображение с четырьмя цветами мы можем рассматривать их как последовательность четырёх чёрно-белых изображений. Недостаток этого подхода заключается в том, последовательность будет ограничена в длине. Впрочем, можно использовать и более длинные последовательности, например 5, 6, 7 или 8; и хотя всё равно последовательность будет ограничена одним и тем же размером, зато это легче в реализации.

Можно сделать по-другому: производить случайную выборку из буфера опыта воспроизведения, однако затем использовать эти образцы не как индексы состояний, а как индексы n состояний. Так, например, предположим, что я случайным образом выбрал индекс 300 и хочу рассмотреть последовательность длиной 10. В таком случае я передаю все состояния от индекса 290 до индекса 300 в рекуррентную нейронную сеть. В этой ситуации также удобнее использовать последовательности постоянной длины. Преимуществом этого метода является то, что нам не нужно хранить четыре отдельных изображения в качестве частей каждого состояния, достаточно одного – то есть это экономит память.

Не забывайте, что в обычном Q-обучении состояние имеет избыточную информацию: состояние s(t) содержит изображения x(t), x(t-1), x(t-2) и x(t-3). Однако состояние s(t-1) уже содержит x(t-1), x(t-2), x(t-3) и x(t-4). Впрочем, эта избыточность облегчает реализацию во время обучения.

Ещё одна тема для размышлений состоит в том, что если мы будем рассматривать каждое состояние просто как отдельный кадр и постоянно добавлять их в буфер воспроизведения опыта, то не сможем просто и безыскусно отыскивать 10 предыдущих кадров, чтобы найти начало последовательности. Почему? Если вы выберем, скажем, пятый кадр с начала эпизода, то у него просто не будет 10 предыдущих, так что мы не сможем вернуться так далеко назад. Таким образом, вам понадобится ещё и способ отслеживать границы эпизода, если собираетесь использовать данный метод.

Раздел глубокого Q-обучения. Итоги

В этой лекции мы подведём итоги всему изученному в этой части, которая была посвящена глубокому Q-обучению.

Что удивительно в глубоком Q-обучении – так это то, что на самом деле мы не сделали ничего нового: все использовавшиеся методы были разработаны нами ранее. Единственные сделанные изменения – это изменения гиперпараметров и ещё ряд на удивление простых вещей.

Напомню, что на самом деле мы уже рассматривали Q-обучение в предыдущем курсе по обучению с подкреплением, так что вы знакомы с основами: мы берём ошибку TD(0) и выполняем по ней градиентный спуск. Мы это делали как с Q-таблицами, так и – в этом курсе – с методами приближений. Конечно, глубокое обучение также является методом приближений, но, как вы могли заметить, простая попытка подключить и использовать какую-либо старую нейронную сеть не приводит к удовлетворительному решению. Впрочем, мы смогли использовать такого типа нейронные сети, как сети радиальных базисных функций, которые имеют фиксированное представление признаков. Собственно, это всё, что мы сделали до этой части.

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

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

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

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

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

С помощью этих простых методов мы оказались способными объединить глубокое обучение и обучение с подкреплением, но не только. Мы смогли расширить из до гораздо более сложных игр вроде Breakout, и, конечно, как показали авторы, эти методы могут одинаково хорошо применяться и в ряде других игр Atari, таких как Pong, Space Invaders, Seaquest и Beamrider.

Андрей Никитенко
Андрей Никитенко
Задать вопрос эксперту
Понравилась статья? Поделить с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: