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 объект.

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

Буфер опыта в виде 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 = 
  13x1 Layer array with layers:

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

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

plot(layerGraph(actorNet))

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

plot(layerGraph(criticNet2))

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

Чтобы проверять вашего агента, используйте 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]}

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

В данном примере загрузите среду, используемую в примере, Обучают Агента DDPG Управлять Двойной Системой Интегратора. Наблюдение средой является вектором, содержащим положение и скорость массы. Действие является скаляром, представляющим силу, располагающуюся постоянно от-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