rlTD3Agent

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

Описание

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

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

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

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

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

Создание

Описание

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

пример

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

пример

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

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

пример

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

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

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

Настройка опций агента

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

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

расширить все

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

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

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

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

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

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

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

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

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

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

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

Свойства

расширить все

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

Если вы создаете агента TD3 с представлениями актёра и критика по умолчанию, которые используют рекуррентные нейронные сети, значение по умолчанию AgentOptions.SequenceLength является 32.

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

  • S - текущее наблюдение за окружением.

  • A - это действие, предпринятое агентом.

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

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

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

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

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

Примеры

свернуть все

Создайте окружение с непрерывным пространством действий и получите его наблюдение и спецификации действия. В данном примере загружает окружение, используемую в примере Train DDPG Agent для управления системой Double Integrator System. Наблюдение от окружения является вектором, содержащим положение и скорость массы. Действие является скаляром, представляющим силу, приложенную к массе, постоянно варьируясь от - 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]}

Теперь можно тестировать и обучать агента в окружении.

Создайте окружение с непрерывным пространством действий и получите его наблюдение и спецификации действия. В данном примере загружает окружение, используемую в примере Train DDPG Agent to Swing Up and Balance Mendulum with Image Observation. Это окружение имеет два наблюдения: изображение полутонового цвета 50 на 50 и скаляр (скорость вращения маятника). Действие является скаляром, представляющим крутящий момент, постоянно варьирующийся от - 2 на 2 Нм.

% 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)

Figure contains an axes. The axes contains an object of type graphplot.

plot(criticNet2)

Figure contains an axes. The axes contains an object of type graphplot.

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

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

Теперь можно тестировать и обучать агента в окружении.

Создайте окружение с непрерывным пространством действий и получите его наблюдение и спецификации действия. В данном примере загружает окружение, используемую в примере Train DDPG Agent для управления системой Double Integrator System. Наблюдение от окружения является вектором, содержащим положение и скорость массы. Действие является скаляром, представляющим силу, постоянно варьирующуюся от - 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]}

Теперь можно тестировать и обучать любого из агентов в окружении.

В данном примере загружает окружение, используемую в примере Train DDPG Agent для управления системой Double Integrator System. Наблюдение от окружения является вектором, содержащим положение и скорость массы. Действие является скаляром, представляющим силу, постоянно варьирующуюся от - 2 на 2 Ньютон.

env = rlPredefinedEnv("DoubleIntegrator-Continuous");

Получите наблюдения и спецификации действия.

obsInfo = getObservationInfo(env);
actInfo = getActionInfo(env);

Получите количество наблюдений и количество действий.

numObs = obsInfo.Dimension(1);
numAct = numel(actInfo);

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

statePath1 = [
    sequenceInputLayer(numObs,'Normalization','none','Name','observation')
    fullyConnectedLayer(400,'Name','CriticStateFC1')
    reluLayer('Name','CriticStateRelu1')
    fullyConnectedLayer(300,'Name','CriticStateFC2')
    ];
actionPath1 = [
    sequenceInputLayer(numAct,'Normalization','none','Name','action')
    fullyConnectedLayer(300,'Name','CriticActionFC1')
    ];
commonPath1 = [
    additionLayer(2,'Name','add')
    reluLayer('Name','CriticCommonRelu1')
    lstmLayer(16,'OutputMode','sequence','Name','CriticLSTM');
    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 = [
    sequenceInputLayer(numObs,'Normalization','none','Name','observation')
    fullyConnectedLayer(400,'Name','ActorFC1')
    lstmLayer(8,'OutputMode','sequence','Name','ActorLSTM')
    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);

Укажите опции агента. Чтобы использовать агента TD3 с рекуррентными нейронными сетями, необходимо задать SequenceLength больше 1.

agentOptions = rlTD3AgentOptions;
agentOptions.DiscountFactor = 0.99;
agentOptions.SequenceLength = 32;
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(obsInfo.Dimension)})
ans = 1×1 cell array
    {[-0.0018]}

getAction(delayedDDPGAgent,{rand(obsInfo.Dimension)})
ans = 1×1 cell array
    {[-0.0014]}

Теперь можно тестировать и обучать любого из агентов в окружении.

Введенный в R2020a