exponenta event banner

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) создает агента с указанными представлениями актера и критика. Для создания:

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

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

Укажите параметры агента

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

Входные аргументы

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

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

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

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

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

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

Параметры инициализации агента, указанные как rlAgentInitializationOptions объект.

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

Критические сетевые представления, указанные как одно из следующих:

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

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

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

Свойства

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

Параметры агента, указанные как rlTD3AgentOptions объект.

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

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

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

  • A - это действие агента.

  • R - награда за принятие мер А.

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

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

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

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

Примеры

свернуть все

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

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

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

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

% 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 и Balance Pendulum 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);

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

% 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 to Control 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 to Control 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