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

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

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

Для получения дополнительной информации об агентах смотрите Агентов Обучения с подкреплением.

Функциональная аппроксимация

В зависимости от типа агента, которого вы используете, программное обеспечение Reinforcement Learning Toolbox™ поддерживает следующие типы функциональной аппроксимации:

  • V (S |θV) — Критики, которые оценивают ожидаемое долгосрочное вознаграждение на основе заданного наблюдения S

  • Q (S, A |θQ) — Критики, которые оценивают ожидаемое долгосрочное вознаграждение на основе заданного наблюдения S и действие A

  • Q (S, Ai |θQ) — Критики, которые оценивают ожидаемое долгосрочное вознаграждение для всего возможного дискретного заданного наблюдения действий S

  • μ (S |θμ) — Агенты, которые выбирают действие на основе заданного наблюдения S

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

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

Табличные представления

Можно создать два типа табличных представлений:

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

  • 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, размерности входных слоев должны совпадать с размерностями спецификаций наблюдения окружения. Размерности выходного слоя критика должны быть функцией скалярного значения.

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

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

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

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

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

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

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

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

Можно также создать собственные слои. Для получения дополнительной информации смотрите, Задают Пользовательские Слои Глубокого обучения (Deep Learning Toolbox). Программное обеспечение Reinforcement Learning Toolbox обеспечивает следующие пользовательские слои.

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

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

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

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

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

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

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

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

  • Функция ориентировочной стоимости выход path, 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 объект, и задает имена слоев сети, с которыми соединяются действия и наблюдения.

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

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

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

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

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

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

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

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

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

При создании представлений для использования с PPO или агентом DQN, можно использовать рекуррентные нейронные сети. Эти сети являются глубокими нейронными сетями по крайней мере с одним слоем, который скрыл информацию состояния, такую как lstmLayer. Для получения дополнительной информации и примеры, смотрите rlValueRepresentation, rlQValueRepresentation, rlDeterministicActorRepresentation, и rlStochasticActorRepresentation.

Представления линейного базиса функций

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

Для представлений критика, f скалярное значение и W вектор-столбец с той же длиной как B.

Для представлений актера с a:

  • Непрерывное пространство действий, размерности f совпадайте с размерностями спецификации действия агента, которая является или скаляром или вектор-столбцом.

  • Дискретное пространство действий, f вектор-столбец с длиной, равной количеству дискретных действий.

Для представлений актера, количества столбцов в W равняется числу элементов в f.

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

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

Задайте представления агента

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

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

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

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

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

Похожие темы