Создайте представления политики и функции ценности

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

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

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

Для получения дополнительной информации об агентах см. Раздел «Агенты обучения с подкреплением».

Представления актера и критика

Этот Пакет Reinforcement Learning Toolbox™ поддерживает следующие типы представлений:

  • V (S | θV) - критики, которые оценивают ожидаемое совокупное долгосрочное вознаграждение на основе заданного наблюдения S. Можно создать этих критиков, используя rlValueRepresentation.

  • Q (S, A | θQ) - Критики, которые оценивают ожидаемое совокупное долгосрочное вознаграждение для заданной дискретной A действий и заданной S наблюдений. Можно создать этих критиков, используя rlQValueRepresentation.

  • Qi (S, Ai | θQ) - критики с несколькими выходами, которые оценивают ожидаемое совокупное долгосрочное вознаграждение за все возможные дискретные действия Ai заданных S наблюдений. Можно создать этих критиков, используя rlQValueRepresentation.

  • μ (S | θμ) - актёры, которые выбирают действие на основе заданного наблюдения S. Можно создать этих актёров, используя любой из rlDeterministicActorRepresentation или rlStochasticActorRepresentation.

Каждое представление использует аппроксимацию функции с соответствующим набором параметров (θV, θQ, θμ), которые вычисляются в процессе обучения.

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

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

Представления в сравнении с аппроксимациями и агентами

ПредставлениеПоддерживаемые аппроксимацииПространство наблюденийПространство действийПоддерживаемые агенты

Критик функции ценности V (S), которую вы создаете используя

rlValueRepresentation

ТаблицаДискретныйНе применяетсяPG, AC, PPO
Глубокая нейронная сеть или пользовательская функция базисаДискретный или непрерывныйНе применяетсяPG, AC, PPO

Q-значение функции критика, Q (S, A), которую вы создаете используя

rlQValueRepresentation

ТаблицаДискретныйДискретныйQ, DQN, SARSA
Глубокая нейронная сеть или пользовательская функция базисаДискретный или непрерывныйДискретныйQ, DQN, SARSA
Глубокая нейронная сеть или пользовательская функция базисаДискретный или непрерывныйНепрерывныйDDPG, TD3

Мультивыход функции Q-значения критика Q (S, A), который вы создаете используя

rlQValueRepresentation

Глубокая нейронная сеть или пользовательская функция базисаДискретный или непрерывныйДискретныйQ, DQN, SARSA

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

rlDeterministicActorRepresentation

Глубокая нейронная сеть или пользовательская функция базисаДискретный или непрерывныйНепрерывныйDDPG, TD3

Актёр Стохастической политики (S), который вы создаете используя

rlStochasticActorRepresentation

Глубокая нейронная сеть или пользовательская функция базисаДискретный или непрерывныйДискретныйPG, AC, PPO
Глубокая нейронная сетьДискретный или непрерывныйНепрерывныйPG, AC, PPO, SAC

Для получения дополнительной информации об агентах см. Раздел «Агенты обучения с подкреплением».

Табличные аппроксимации

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

  • Таблицы значений, в которых хранятся вознаграждения для соответствующих наблюдений

  • Q-таблицы, в которых хранятся вознаграждения для соответствующих пар действия наблюдений

Чтобы создать представление таблицы, сначала составьте таблицу значений или Q-таблицу с помощью rlTable функция. Затем создайте представление для таблицы, используя rlValueRepresentation или rlQValueRepresentation объект. Чтобы сконфигурировать скорость обучения и оптимизацию, используемые представлением, используйте rlRepresentationOptions объект.

Аппроксимации глубоких нейронных сетей

Можно создать функциональные аппроксимации актёра и критика, используя глубокие нейронные сети. При этом используются функции программного обеспечения Deep Learning Toolbox™.

Входные и выходные размерности сети

Размерности ваших сетей актёра и критика должны совпадать с соответствующими спецификациями действий и наблюдений от объекта окружения обучения. Чтобы получить размерности действия и наблюдения для окружения env, использовать getActionInfo и getObservationInfo функций, соответственно. Затем получите доступ к Dimensions свойство объектов спецификации.

actInfo = getActionInfo(env);
actDimensions = actInfo.Dimensions;

obsInfo = getObservationInfo(env);
obsDimensions = obsInfo.Dimensions;

Сети для критиков функции ценности (таких как используемые в агентах AC, PG или PPO) должны принимать только наблюдения в качестве входов и должны иметь один скалярный выход. Для этих сетей размерности входных слоев должны совпадать с размерностями спецификаций наблюдений окружения. Для получения дополнительной информации см. rlValueRepresentation.

Сети для критиков функции Q-значения с одним выводом (таких как используемые в агентах Q, DQN, SARSA, DDPG, TD3 и SAC) должны принимать как наблюдения, так и действия в качестве входов и должны иметь один скалярный выход. Для этих сетей размерности входных слоев должны совпадать с размерностями спецификаций окружения для наблюдений и действий. Для получения дополнительной информации см. rlQValueRepresentation.

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

Для сетей актёра размерности входных слоев должны совпадать с размерностями спецификаций наблюдений окружения.

  • Сети, используемые в актерах с дискретным пространством действий (таких как таковые в агентах PG, AC и PPO), должны иметь один слой выхода с размером выхода, равным количеству возможных дискретных действий.

  • Сети, используемые в детерминированных актерах с непрерывным пространством действий (таким как таковые в DDPG и агентах TD3), должны иметь один слой выхода с размером выхода, соответствующим размеру пространства действий, заданному в окружение спецификации действий.

  • Сети, используемые в стохастических актерах с непрерывным пространством действий (таких как таковые в агентах PG, AC, PPO и SAC), должны иметь один слой выхода с выходом размером, вдвое превышающим размерность пространства действий, заданного в спецификации окружения действия. Эти сети должны иметь два отдельных пути, первый производит средние значения (которые должны быть масштабированы до выходной области значений), а второй производит стандартные отклонения (которые должны быть неотрицательными).

Для получения дополнительной информации смотрите rlDeterministicActorRepresentation и rlStochasticActorRepresentation.

Создайте глубокую нейронную сеть

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

СлойОписание
featureInputLayerВводит данные признаков и применяет нормализацию
imageInputLayerВводит векторы и 2-D изображения и применяет нормализацию.
sigmoidLayerПрименяет сигмоидную функцию к входу таким образом, что выход ограничен интервалом (0,1).
tanhLayerПрименяет слой активации гиперболического тангенса к входу.
reluLayerУстанавливает все входные значения, которые меньше нуля, в ноль.
fullyConnectedLayerУмножает вектор входа на весовую матрицу и добавляет вектор смещения.
convolution2dLayerПрименяет скользящие сверточные фильтры к входу.
additionLayerДобавляет выходы нескольких слоев вместе.
concatenationLayerКонкатенации входов по заданному измерению.
sequenceInputLayerПредоставляет входные данные последовательности в сеть.
lstmLayerПрименяет слой длинной краткосрочной памяти к входу. Поддерживается для агентов DQN и PPO.

bilstmLayer и batchNormalizationLayer слои не поддерживаются для обучения с подкреплением.

Программное обеспечение Reinforcement Learning Toolbox предоставляет следующие слои, которые не содержат настраиваемых параметров (то есть параметров, которые изменяются во время обучения).

СлойОписание
scalingLayerПрименяет линейную шкалу и смещение к массиву входа. Этот слой полезен для масштабирования и перемены выходов нелинейных слоев, таких как tanhLayer и sigmoidLayer.
quadraticLayerСоздает вектор квадратичных мономов, созданных из элементов входного массива. Этот слой полезен, когда вам нужен вывод, который является некоторой квадратичной функцией его входов, например, для LQR- контроллера.
softplusLayerРеализует активацию softplus Y = журнал (1 + eX), что гарантирует, что выход всегда положительный. Эта функция является сглаженной версией выпрямленного линейного модуля (ReLU).

Можно также создать свои собственные пользовательские слои. Для получения дополнительной информации смотрите Задать Пользовательские Слои Глубокого Обучения.

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

Можно также создать глубокую нейронную сеть с помощью приложения Deep Network Designer. Для получения примера смотрите Создание агента с использованием Deep Network Designer и Train Использование наблюдений изображений.

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

Следующий код создает и соединяет следующие входные и выходные пути:

  • Входной путь наблюдения, observationPath, с первым слоем с именем 'observation'.

  • Входной путь действия, actionPath, с первым слоем с именем 'action'.

  • Расчетный выходной путь функции ценности, commonPath, который принимает выходы observationPath и actionPath в качестве входов. Конечный слой этого пути имеет имя 'output'.

observationPath = [
    imageInputLayer([4 1 1],'Normalization','none','Name','observation')
    fullyConnectedLayer(24,'Name','CriticObsFC1')
    reluLayer('Name','CriticRelu1')
    fullyConnectedLayer(24,'Name','CriticObsFC2')];
actionPath = [
    imageInputLayer([1 1 1],'Normalization','none','Name','action')
    fullyConnectedLayer(24,'Name','CriticActFC1')];
commonPath = [
    additionLayer(2,'Name','add')
    reluLayer('Name','CriticCommonRelu')
    fullyConnectedLayer(1,'Name','output')];
criticNetwork = layerGraph(observationPath);
criticNetwork = addLayers(criticNetwork,actionPath);
criticNetwork = addLayers(criticNetwork,commonPath);    
criticNetwork = connectLayers(criticNetwork,'CriticObsFC2','add/in1');
criticNetwork = connectLayers(criticNetwork,'CriticActFC1','add/in2');

Для всех входных путей наблюдений и действий необходимо задать imageInputLayer как первый слой в пути.

Вы можете просмотреть структуру глубокой нейронной сети, используя plot функция.

plot(criticNetwork)

Для агентов PG и AC конечными выходными слоями ваших представлений актера глубокой нейронной сети являются fullyConnectedLayer и softmaxLayer. Когда вы задаете слои для вашей сети, вы должны задать fullyConnectedLayer и вы можете опционально задать softmaxLayer. Если вы опускаете softmaxLayer, программное обеспечение автоматически добавляет один для вас.

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

Примите во внимание следующие советы при построении сети.

  • Для непрерывных пространств действий, связанных действий с tanhLayer за которым следует ScalingLayer, при необходимости.

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

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

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

  • Для агентов, основанных на политике (таковые, которые учатся только на опыте, собранном во время следования текущей политике), таких как агенты AC и PG, параллельное обучение работает лучше, если ваши сети большие (для примера, сеть с двумя скрытыми слоями с 32 узлами каждый, которая имеет несколько сотен параметров). Параллельные обновления политики предполагают, что каждый рабочий процесс обновляет разную часть сети, так же как в случае, когда они исследуют различные области пространства наблюдений. Если сеть является маленькой, обновления рабочих процессов могут коррелировать друг с другом и сделать обучение нестабильным.

Создайте и сконфигурируйте представление

Чтобы создать представление критика для глубокой нейронной сети, используйте rlValueRepresentation или rlQValueRepresentation объект. Чтобы создать представление актера для глубокой нейронной сети, используйте rlDeterministicActorRepresentation или rlStochasticActorRepresentation объект. Чтобы сконфигурировать скорость обучения и оптимизацию, используемые представлением, используйте rlRepresentationOptions объект.

Для примера создайте объект представления Q-значений для сети критика criticNetwork, указание скорости обучения в 0.0001. Когда вы создаете представление, передайте спецификации действий и наблюдений окружения в rlQValueRepresentation объект, и задавать имена слоев сети, с которыми связаны наблюдения и действия (в данном случае 'observation' и 'action').

opt = rlRepresentationOptions('LearnRate',0.0001);
critic = rlQValueRepresentation(criticNetwork,obsInfo,actInfo,...
        'Observation',{'observation'},'Action',{'action'},opt);

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

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

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

Кроме того, примите во внимание следующие советы при конфигурировании представления глубокой нейронной сети.

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

  • Для агентов DDPG и DQN содействие исследованию агента очень важно.

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

Рекуррентные нейронные сети

При создании представлений для использования с любым агентом, кроме Q и SARSA, можно использовать рекуррентные нейронные сети (RNN). Эти сети являются глубокими нейронными сетями с sequenceInputLayer входной слой и, по меньшей мере, один слой, который имеет скрытую информацию о состоянии, например, lstmLayer. Они могут быть особенно полезны, когда окружение имеет состояния, которые не могут быть включены в вектор наблюдения.

Для агентов, у которых есть как актёр, так и критик, необходимо либо использовать RNN для них обоих, либо не использовать RNN для кого-либо из них. Вы не можете использовать RNN только для критика или только для актёра.

При использовании агентов PG длина траектории обучения для RNN является целым эпизодом. Для агента AC, NumStepsToLookAhead свойство is options object рассматривается как длина обучающей траектории. Для агента PPO длина траектории является MiniBatchSize свойство его опций объекта.

Для агентов DQN, DDPG, SAC и TD3 необходимо задать длину обучения траектории как целое число, больше единицы в SequenceLength свойство их опций объекта.

Обратите внимание, что генерация кода не поддерживается для непрерывных действий PG, AC, PPO и агентов SAC, использующих рекуррентную нейронную сеть (RNN), или для любого агента, имеющего несколько входных путей и содержащего RNN в любом из путей.

Для получения дополнительной информации и примеров о политиках и функциях ценности смотрите rlValueRepresentation, rlQValueRepresentation, rlDeterministicActorRepresentation, и rlStochasticActorRepresentation.

Пользовательские функциональные аппроксимации базиса

Пользовательские (линейные в параметрах) базисные функциональные аппроксимации имеют вид f = W'B, где W является массивом весов и B - это вектор-столбец выхода пользовательской функции базиса, которую вы должны создать. Настраиваемые параметры представления в виде линейного базиса функций являются элементами W.

Для представлений критика функции ценности (таких как используемые в агентах AC, PG или PPO), f является скалярным значением, так W должен быть вектором-столбцом с той же длиной, что и B, и B должен быть функцией наблюдения. Для получения дополнительной информации см. rlValueRepresentation.

Для представлений критика функции Q-значения с одним выводом (таких как используемые в агентах Q, DQN, SARSA, DDPG, TD3 и SAC), f является скалярным значением, так W должен быть вектором-столбцом с той же длиной, что и B, и B должен быть функцией как наблюдения, так и действия. Для получения дополнительной информации см. rlQValueRepresentation.

Для многозначных представлений функции Q-значения критик с дискретными пространствами действий (такими как используемые в агентах Q, DQN и SARSA), f является вектором с таким количеством элементов, как количество возможных действий. Поэтому W должна быть матрицей с таким количеством столбцов, как количество возможных действий и столько строк, сколько длина B. B должно быть только функцией наблюдения. Для получения дополнительной информации см. rlQValueRepresentation.

  • Для актёров с дискретным пространством действий (таким как таковые в агентах PG, AC и PPO), f должна быть вектор-столбец с длиной, равной количеству возможных дискретных действий.

  • Для детерминированных актёров с непрерывным пространством действий (таких как те, что в DDPG, и TD3 агентов), размерности f должен совпадать с размерностями спецификации действия агента, который является либо скаляром, либо вектором-столбцом.

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

Для любого представления актера, W должно иметь столько столбцов, сколько элементов в fи столько строк, сколько элементов в B. B должно быть только функцией наблюдения. Для получения дополнительной информации см. rlDeterministicActorRepresentation, и rlStochasticActorRepresentation.

Для примера, который обучает пользовательского агента, который использует представление в виде линейного базиса функций, смотрите Train Custom LQR Agent.

Создайте агент или укажите представления агента

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

agentOpts = rlPGAgentOptions('UseBaseline',true);
agent = rlPGAgent(actor,baseline,agentOpts);

Для получения дополнительной информации о различных типах агентов обучения с подкреплением смотрите Reinforcement Learning Agents.

Можно получить представления актёра и критика от существующего агента, используя getActor и getCritic, соответственно.

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

Похожие темы