exponenta event banner

rlDDPGAgent

Глубокая детерминированная политика градиентного усиления обучающий агент

Описание

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

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

Создание

Описание

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

пример

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

пример

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

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

пример

agent = rlDDPGAgent(actor,critic,agentOptions) создает агент DDPG с указанными участниками и критическими сетями, используя параметры агента DDPG по умолчанию.

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

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

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

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

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

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

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

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

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

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

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

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

Свойства

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

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

При создании агента DDPG с представлениями актера и критика по умолчанию, использующими повторяющиеся нейронные сети, значение по умолчанию 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)

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

agent = rlDDPGAgent(obsInfo,actInfo);

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

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

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

Создание среды с непрерывным пространством действий и получение ее характеристик наблюдения и действий. Для этого примера загрузите среду, используемую в примере 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 = rlDDPGAgent(obsInfo,actInfo,initOpts);

Сократите уровень обучения критиков до 1e-3.

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

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

actorNet = getModel(getActor(agent));
criticNet = getModel(getCritic(agent));

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

criticNet.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(criticNet)

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.0364]}

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

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

env = rlPredefinedEnv("DoubleIntegrator-Continuous");
obsInfo = getObservationInfo(env);
actInfo = getActionInfo(env);

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

% create a network to be used as underlying critic approximator
statePath = imageInputLayer([obsInfo.Dimension(1) 1 1],'Normalization','none','Name','state');
actionPath = imageInputLayer([numel(actInfo) 1 1],'Normalization','none','Name','action');
commonPath = [concatenationLayer(1,2,'Name','concat')
             quadraticLayer('Name','quadratic')
             fullyConnectedLayer(1,'Name','StateValue','BiasLearnRateFactor', 0, 'Bias', 0)];
criticNetwork = layerGraph(statePath);
criticNetwork = addLayers(criticNetwork, actionPath);
criticNetwork = addLayers(criticNetwork, commonPath);
criticNetwork = connectLayers(criticNetwork,'state','concat/in1');
criticNetwork = connectLayers(criticNetwork,'action','concat/in2');

% set some options for the critic
criticOpts = rlRepresentationOptions('LearnRate',5e-3,'GradientThreshold',1);

% create the critic based on the network approximator
critic = rlQValueRepresentation(criticNetwork,obsInfo,actInfo,...
    'Observation',{'state'},'Action',{'action'},criticOpts);

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

% create a network to be used as underlying actor approximator
actorNetwork = [
    imageInputLayer([obsInfo.Dimension(1) 1 1],'Normalization','none','Name','state')
    fullyConnectedLayer(numel(actInfo),'Name','action','BiasLearnRateFactor',0,'Bias',0)];

% set some options for the actor
actorOpts = rlRepresentationOptions('LearnRate',1e-04,'GradientThreshold',1);

% create the actor based on the network approximator
actor = rlDeterministicActorRepresentation(actorNetwork,obsInfo,actInfo,...
    'Observation',{'state'},'Action',{'action'},actorOpts);

Укажите параметры агента и создайте агент DDPG с помощью среды, исполнителя и критика.

agentOpts = rlDDPGAgentOptions(...
    'SampleTime',env.Ts,...
    'TargetSmoothFactor',1e-3,...
    'ExperienceBufferLength',1e6,...
    'DiscountFactor',0.99,...
    'MiniBatchSize',32);
agent = rlDDPGAgent(actor,critic,agentOpts);

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

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

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

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

env = rlPredefinedEnv("DoubleIntegrator-Continuous");

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

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

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

statePath = sequenceInputLayer(obsInfo.Dimension(1), 'Normalization', 'none', 'Name', 'myobs');
actionPath = sequenceInputLayer(numel(actInfo), 'Normalization', 'none', 'Name', 'myact');
commonPath = [concatenationLayer(1,2,'Name','concat')
              reluLayer('Name','relu')
              lstmLayer(8,'OutputMode','sequence','Name','lstm')    
              fullyConnectedLayer(1,'Name','StateValue','BiasLearnRateFactor', 0, 'Bias', 0)];
criticNetwork = layerGraph(statePath);
criticNetwork = addLayers(criticNetwork, actionPath);
criticNetwork = addLayers(criticNetwork, commonPath);
criticNetwork = connectLayers(criticNetwork,'myobs','concat/in1');
criticNetwork = connectLayers(criticNetwork,'myact','concat/in2');

Задайте некоторые параметры для критика.

criticOpts = rlRepresentationOptions('LearnRate',5e-3,'GradientThreshold',1);

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

critic = rlQValueRepresentation(criticNetwork,obsInfo,actInfo,...
    'Observation',{'myobs'},'Action',{'myact'},criticOpts);

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

Поскольку у критика есть повторяющаяся сеть, у актера должна быть и повторяющаяся сеть. Определите рецидивирующую нейронную сеть для актера.

actorNetwork = [
    sequenceInputLayer(obsInfo.Dimension(1), 'Normalization', 'none', 'Name', 'myobs')
    lstmLayer(8,'OutputMode','sequence','Name','lstm')
    fullyConnectedLayer(numel(actInfo), 'Name', 'myact', 'BiasLearnRateFactor', 0, 'Bias', 0)];

Задайте параметры актера.

actorOpts = rlRepresentationOptions('LearnRate',1e-04,'GradientThreshold',1);

Создайте актера.

actor = rlDeterministicActorRepresentation(actorNetwork,obsInfo,actInfo,...
    'Observation',{'myobs'},'Action',{'myact'},actorOpts);

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

agentOpts = rlDDPGAgentOptions(...
    'SampleTime',env.Ts,...
    'TargetSmoothFactor',1e-3,...
    'ExperienceBufferLength',1e6,...
    'DiscountFactor',0.99,...
    'SequenceLength',20,...
    'MiniBatchSize',32);
agent = rlDDPGAgent(actor,critic,agentOpts);

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

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

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

Представлен в R2019a