rlTD3Agent

Задержанный близнецами глубоко детерминированный агент обучения с подкреплением градиента политики

Описание

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

Использование rlTD3Agent создать один из следующих типов агентов.

  • Задержанный близнецами глубоко детерминированный градиент политики (TD3) агент с двумя Q-функциями-ценности. Этот агент предотвращает переоценку функции ценности путем изучения двух функций ценности Q и использования минимальных значений для обновлений политики.

  • Задержанный глубоко детерминированный градиент политики (задержал DDPG), агент с одной функцией ценности Q. Этот агент является агентом DDPG с целевым сглаживанием политики и задержанной политикой и целевыми обновлениями.

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

Создание

Описание

Создайте агента из спецификаций наблюдений и спецификаций действия

пример

agent = rlTD3Agent(observationInfo,actionInfo) создает агента TD3 для среды с заданным наблюдением и спецификациями действия, с помощью опций инициализации по умолчанию. Агент и представления критиков в агенте используют глубокие нейронные сети по умолчанию, созданные из спецификации наблюдений observationInfo и спецификация действия actionInfo.

пример

agent = rlTD3Agent(observationInfo,actionInfo,initOpts) создает глубокого детерминированного агента градиента политики для среды с заданным наблюдением и спецификациями действия. Агент использует сети по умолчанию, сконфигурированные с помощью опций, заданных в initOpts объект. Для получения дополнительной информации об опциях инициализации смотрите rlAgentInitializationOptions.

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

пример

agent = rlTD3Agent(actor,critics,agentOptions) создает агента с заданными представлениями актёра и критика. Создать a:

  • Агент TD3, задайте двухэлементный вектор-строку из представлений критика.

  • Задержанный агент DDPG, задайте одно представление критика.

Задайте опции агента

agent = rlTD3Agent(___,agentOptions) создает агента TD3 и устанавливает AgentOptions свойство к agentOptions входной параметр. Используйте этот синтаксис после любого из входных параметров в предыдущих синтаксисах.

Входные параметры

развернуть все

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

Можно извлечь observationInfo существующей средой или использованием агента getObservationInfo. Можно также создать технические требования вручную с помощью rlFiniteSetSpec или rlNumericSpec.

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

Поскольку агент DDPG действует в непрерывном пространстве действий, необходимо задать actionInfo как rlNumericSpec объект.

Можно извлечь actionInfo существующей средой или использованием агента getActionInfo. Можно также создать спецификацию вручную с помощью rlNumericSpec.

Опции инициализации агента в виде rlAgentInitializationOptions объект.

Представление сети Actor в виде rlDeterministicActorRepresentation объект. Для получения дополнительной информации о создании представлений актера смотрите, Создают Представления Функции ценности и политика.

Представления сети Critic в виде одного из следующего:

  • rlQValueRepresentation объект — Создает задержанного агента DDPG с одной функцией ценности Q. Этот агент является агентом DDPG с целевым сглаживанием политики и задержанной политикой и целевыми обновлениями.

  • Двухэлементный вектор-строка из rlQValueRepresentation объекты — Создают агента TD3 с двумя функциями ценности критика. Две сети критика должны быть уникальными rlQValueRepresentation объекты с теми же спецификациями наблюдений и спецификациями действия. Представления могут или иметь отличные структуры или ту же структуру, но различными начальными параметрами.

Для получения дополнительной информации о создании представлений критика смотрите, Создают Представления Функции ценности и политика.

Свойства

развернуть все

Опции агента в виде rlTD3AgentOptions объект.

Буфер опыта в виде ExperienceBuffer объект. Во время обучения агент хранит каждое из своих событий (S, A, R, S') в буфере. Здесь:

  • S является текущим наблюдением за средой.

  • A является мерами, принятыми агентом.

  • R является вознаграждением за принимающий меры A.

  • S' является следующим наблюдением после принимающего меры A.

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

Функции объекта

trainОбучите агентов обучения с подкреплением в заданной среде
simСимулируйте обученных агентов обучения с подкреплением в заданной среде
getActionПолучите действие из агента или представления актера, данного наблюдения среды
getActorПолучите представление актера от агента обучения с подкреплением
setActorУстановите представление актера агента обучения с подкреплением
getCriticПолучите представление критика от агента обучения с подкреплением
setCriticУстановите представление критика агента обучения с подкреплением
generatePolicyFunctionСоздайте функцию, которая оценивает обученную политику агента обучения с подкреплением

Примеры

свернуть все

Создайте среду с непрерывным пространством действий и получите его спецификации наблюдений и спецификации действия. В данном примере загрузите среду, используемую в примере, Обучают Агента DDPG Управлять Двойной Системой Интегратора. Наблюдение средой является вектором, содержащим положение и скорость массы. Действие является скаляром, представляющим силу, применился к массе, располагаясь постоянно от-2 к 2 Ньютон.

% load predefined environment
env = rlPredefinedEnv("DoubleIntegrator-Continuous");

% obtain observation and action specifications
obsInfo = getObservationInfo(env);
actInfo = getActionInfo(env);

Функция создания агента инициализирует агента и сети критика случайным образом. Можно гарантировать воспроизводимость путем фиксации seed случайного генератора. Для этого не прокомментируйте следующую линию.

% rng(0)

Создайте агента TD3 из спецификаций наблюдений среды и спецификаций действия.

agent = rlTD3Agent(obsInfo,actInfo);

Чтобы проверять вашего агента, используйте getAction возвратить действие в случайное наблюдение.

getAction(agent,{rand(obsInfo(1).Dimension)})
ans = 1x1 cell array
    {[0.0087]}

Можно теперь протестировать и обучить агента в среде.

Создайте среду с непрерывным пространством действий и получите его спецификации наблюдений и спецификации действия. В данном примере загрузите среду, используемую в примере, Обучают Агента DDPG к Swing и Маятнику Баланса с Наблюдением Изображений. Эта среда имеет два наблюдения: 50 50 полутоновое изображение и скаляр (скорость вращения маятника). Действие является скаляром, представляющим крутящий момент, располагающийся постоянно от-2 к 2 Nm.

% load predefined environment
env = rlPredefinedEnv("SimplePendulumWithImage-Continuous");

% obtain observation and action specifications
obsInfo = getObservationInfo(env);
actInfo = getActionInfo(env);

Создайте объект опции инициализации агента, указав, что каждый скрытый полносвязный слой в сети должен иметь 128 нейроны (вместо номера по умолчанию, 256).

initOpts = rlAgentInitializationOptions('NumHiddenUnit',128);

Функция создания агента инициализирует агента и сети критика случайным образом. Можно гарантировать воспроизводимость путем фиксации seed случайного генератора. Для этого не прокомментируйте следующую линию.

% rng(0)

Создайте агента DDPG из спецификаций наблюдений среды и спецификаций действия.

agent = rlTD3Agent(obsInfo,actInfo,initOpts);

Уменьшайте скорость обучения критиков к 1e-3 и 2e-3.

critic = getCritic(agent);
critic(1).Options.LearnRate = 1e-3;
critic(2).Options.LearnRate = 2e-3;
agent  = setCritic(agent,critic);

Извлеките глубокие нейронные сети из агента.

actorNet = getModel(getActor(agent));

Извлеките глубокие нейронные сети от этих двух критиков. Обратите внимание на то, что getModel(critics) только возвращает первую сеть критика.

critics = getCritic(agent);
criticNet1 = getModel(critics(1));
criticNet2 = getModel(critics(2));

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

criticNet1.Layers
ans = 
  14x1 Layer array with layers:

     1   'concat'               Concatenation       Concatenation of 3 inputs along dimension 3
     2   'relu_body'            ReLU                ReLU
     3   'fc_body'              Fully Connected     128 fully connected layer
     4   'body_output'          ReLU                ReLU
     5   'input_1'              Image Input         50x50x1 images
     6   'conv_1'               Convolution         64 3x3x1 convolutions with stride [1  1] and padding [0  0  0  0]
     7   'relu_input_1'         ReLU                ReLU
     8   'fc_1'                 Fully Connected     128 fully connected layer
     9   'input_2'              Image Input         1x1x1 images
    10   'fc_2'                 Fully Connected     128 fully connected layer
    11   'input_3'              Image Input         1x1x1 images
    12   'fc_3'                 Fully Connected     128 fully connected layer
    13   'output'               Fully Connected     1 fully connected layer
    14   'RepresentationLoss'   Regression Output   mean-squared-error

Постройте сети агента и второго критика.

plot(actorNet)

plot(criticNet2)

Чтобы проверять вашего агента, используйте getAction возвратить действие в случайное наблюдение.

getAction(agent,{rand(obsInfo(1).Dimension),rand(obsInfo(2).Dimension)})
ans = 1x1 cell array
    {[0.0675]}

Можно теперь протестировать и обучить агента в среде.

Создайте среду с непрерывным пространством действий и получите его спецификации наблюдений и спецификации действия. В данном примере загрузите среду, используемую в примере, Обучают Агента DDPG Управлять Двойной Системой Интегратора. Наблюдение средой является вектором, содержащим положение и скорость массы. Действие является скаляром, представляющим силу, располагающуюся постоянно от-2 к 2 Ньютон.

env = rlPredefinedEnv("DoubleIntegrator-Continuous");
obsInfo = getObservationInfo(env);
numObs = obsInfo.Dimension(1);
actInfo = getActionInfo(env);
numAct = numel(actInfo);

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

statePath1 = [
    featureInputLayer(numObs,'Normalization','none','Name','observation')
    fullyConnectedLayer(400,'Name','CriticStateFC1')
    reluLayer('Name','CriticStateRelu1')
    fullyConnectedLayer(300,'Name','CriticStateFC2')
    ];
actionPath1 = [
    featureInputLayer(numAct,'Normalization','none','Name','action')
    fullyConnectedLayer(300,'Name','CriticActionFC1')
    ];
commonPath1 = [
    additionLayer(2,'Name','add')
    reluLayer('Name','CriticCommonRelu1')
    fullyConnectedLayer(1,'Name','CriticOutput')
    ];

criticNet = layerGraph(statePath1);
criticNet = addLayers(criticNet,actionPath1);
criticNet = addLayers(criticNet,commonPath1);
criticNet = connectLayers(criticNet,'CriticStateFC2','add/in1');
criticNet = connectLayers(criticNet,'CriticActionFC1','add/in2');

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

criticOptions = rlRepresentationOptions('Optimizer','adam','LearnRate',1e-3,... 
                                        'GradientThreshold',1,'L2RegularizationFactor',2e-4);
critic1 = rlQValueRepresentation(criticNet,obsInfo,actInfo,...
    'Observation',{'observation'},'Action',{'action'},criticOptions);
critic2 = rlQValueRepresentation(criticNet,obsInfo,actInfo,...
    'Observation',{'observation'},'Action',{'action'},criticOptions);

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

actorNet = [
    featureInputLayer(numObs,'Normalization','none','Name','observation')
    fullyConnectedLayer(400,'Name','ActorFC1')
    reluLayer('Name','ActorRelu1')
    fullyConnectedLayer(300,'Name','ActorFC2')
    reluLayer('Name','ActorRelu2')
    fullyConnectedLayer(numAct,'Name','ActorFC3')                       
    tanhLayer('Name','ActorTanh1')
    ];

Создайте детерминированное представление актера.

actorOptions = rlRepresentationOptions('Optimizer','adam','LearnRate',1e-3,...
                                       'GradientThreshold',1,'L2RegularizationFactor',1e-5);
actor  = rlDeterministicActorRepresentation(actorNet,obsInfo,actInfo,...
    'Observation',{'observation'},'Action',{'ActorTanh1'},actorOptions);

Задайте опции агента.

agentOptions = rlTD3AgentOptions;
agentOptions.DiscountFactor = 0.99;
agentOptions.TargetSmoothFactor = 5e-3;
agentOptions.TargetPolicySmoothModel.Variance = 0.2;
agentOptions.TargetPolicySmoothModel.LowerLimit = -0.5;
agentOptions.TargetPolicySmoothModel.UpperLimit = 0.5;

Создайте агента TD3 с помощью агента, критиков и опций.

agent = rlTD3Agent(actor,[critic1 critic2],agentOptions);

Можно также создать rlTD3Agent объект с одним критиком. В этом случае объект представляет агента DDPG целевым сглаживанием политики и задержанной политикой и целевыми обновлениями.

delayedDDPGAgent = rlTD3Agent(actor,critic1,agentOptions);

Чтобы проверять ваших агентов, используйте getAction возвратить действие в случайное наблюдение.

getAction(agent,{rand(2,1)})
ans = 1x1 cell array
    {[0.0304]}

getAction(delayedDDPGAgent,{rand(2,1)})
ans = 1x1 cell array
    {[-0.0142]}

Можно теперь протестировать и обучить любой агенты в среде.

Введенный в R2020a