rlTRPOAgent

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

Описание

Доверительная оптимизация политики области (TRPO) является без моделей, онлайн, на политике, методом обучения с подкреплением градиента политики. Этот алгоритм предотвращает значительные отбрасывания эффективности по сравнению со стандартными градиентными методами политики путем хранения обновленной политики в доверительной области близко к текущей политике. Пространство действий может быть или дискретным или непрерывным.

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

Создание

Описание

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

пример

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

пример

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

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

пример

agent = rlTRPOAgent(actor,critic) создает агента TRPO с заданным агентом и критиком, с помощью опций по умолчанию для агента.

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

пример

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

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

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

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

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

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

Для дискретного пространства действий необходимо задать actionInfo как rlFiniteSetSpec объект.

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

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

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

Агенты TRPO не поддерживают рекуррентные нейронные сети. Поэтому initOpts.UseRNNдолжен быть false.

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

Представления актера для агентов TRPO используют только UseDevice опция в rlRepresentationOptions объект. Поэтому, если вы используете центральный процессор для расчетов глубокой нейронной сети, можно использовать опции представления по умолчанию.

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

Свойства

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

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

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

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

Примеры

свернуть все

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

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

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

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

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

% rng(0)

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

agent = rlTRPOAgent(obsInfo,actInfo);

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

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

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

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

env = rlPredefinedEnv("SimplePendulumWithImage-Continuous");

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

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

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

initOpts = rlAgentInitializationOptions('NumHiddenUnit',128);

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

% rng(0)

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

agent = rlTRPOAgent(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 = 
  11x1 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   'concat'         Concatenation     Concatenation of 2 inputs along dimension 1
     8   'relu_body'      ReLU              ReLU
     9   'fc_body'        Fully Connected   128 fully connected layer
    10   'body_output'    ReLU              ReLU
    11   'output'         Fully Connected   1 fully connected layer

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

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

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

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

env = rlPredefinedEnv("CartPole-Discrete");
obsInfo = getObservationInfo(env);
actInfo = getActionInfo(env);

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

% Create the network to be used as approximator in the critic.
criticNetwork = [
    featureInputLayer(4,'Normalization','none','Name','state')
    fullyConnectedLayer(1,'Name','CriticFC')];

% Set options for the critic.
criticOpts = rlRepresentationOptions('LearnRate',8e-3,'GradientThreshold',1);

% Create the critic.
critic = rlValueRepresentation(criticNetwork,obsInfo,'Observation',{'state'},criticOpts);

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

% Create the network to be used as approximator in the actor.
actorNetwork = [
    featureInputLayer(4,'Normalization','none','Name','state')
    fullyConnectedLayer(2,'Name','action')];

% Create the actor.
actor = rlStochasticActorRepresentation(actorNetwork,obsInfo,actInfo,...
    'Observation',{'state'});

Задайте опции агента и создайте агента TRPO с помощью среды, агента и критика.

agentOpts = rlTRPOAgentOptions(...
    'ExperienceHorizon',1024, ...
    'DiscountFactor',0.95);
agent = rlTRPOAgent(actor,critic,agentOpts)
agent = 
  rlTRPOAgent with properties:

    AgentOptions: [1x1 rl.option.rlTRPOAgentOptions]

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

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

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

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

env = rlPredefinedEnv("DoubleIntegrator-Continuous");
obsInfo = getObservationInfo(env)
obsInfo = 
  rlNumericSpec with properties:

     LowerLimit: -Inf
     UpperLimit: Inf
           Name: "states"
    Description: "x, dx"
      Dimension: [2 1]
       DataType: "double"

actInfo = getActionInfo(env)
actInfo = 
  rlNumericSpec with properties:

     LowerLimit: -Inf
     UpperLimit: Inf
           Name: "force"
    Description: [0x0 string]
      Dimension: [1 1]
       DataType: "double"

Поскольку действие должно содержаться в ограниченном диапазоне, установите верхнее, и нижний предел действия сигнализируют соответственно. Необходимо сделать так, когда сетевое представление для агента имеет нелинейный выходной слой, который должен масштабироваться, чтобы произвести выход в желаемой области значений.

actInfo.LowerLimit=-2;
actInfo.UpperLimit=2;

Создайте представление критика. Агенты TRPO используют rlValueRepresentation для критика. Для непрерывных пространств наблюдений можно использовать или глубокую нейронную сеть или пользовательское базисное представление. В данном примере создайте глубокую нейронную сеть как базовую аппроксимацию.

% create the network to be used as approximator in the critic
% it must take the observation signal as input and produce a scalar value
criticNet = [
    imageInputLayer([obsInfo.Dimension 1],'Normalization','none','Name','state')
    fullyConnectedLayer(10,'Name', 'fc_in')
    reluLayer('Name', 'relu')
    fullyConnectedLayer(1,'Name','out')];

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

% create the critic representation from the network
critic = rlValueRepresentation(criticNet,obsInfo,'Observation',{'state'},criticOpts);

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

Вход наблюдения (здесь названный myobs) должен принять двумерный вектор, как задано в obsInfo. Выход (здесь названный myact) должен также быть двумерный вектор (дважды количество размерностей, заданных в actInfo). Элементы выходного вектора представляют, в последовательности, всех средних значениях и всех стандартных отклонениях каждого действия (в этом случае существует только одно среднее значение и одно стандартное отклонение).

То, что стандартные отклонения должны быть неотрицательными, в то время как средние значения должны находиться в пределах выходной области значений, означает, что сеть должна иметь два отдельных пути. Первый путь для средних значений, и любая выходная нелинейность должна масштабироваться так, чтобы это могло произвести выходные параметры в выходной области значений. Второй путь для стандартных отклонений, и необходимо использовать softplus или relu слой, чтобы осуществить неотрицательность.

% input path layers (2 by 1 input and a 1 by 1 output)
inPath = [ 
    imageInputLayer([obsInfo.Dimension 1], 'Normalization','none','Name','state')
    fullyConnectedLayer(10,'Name', 'ip_fc')   % 10 by 1 output
    reluLayer('Name', 'ip_relu')              % nonlinearity
    fullyConnectedLayer(1,'Name','ip_out') ]; % 1 by 1 output

% path layers for mean value (1 by 1 input and 1 by 1 output)
% using scalingLayer to scale the range
meanPath = [
    fullyConnectedLayer(15,'Name', 'mp_fc1') % 15 by 1 output
    reluLayer('Name', 'mp_relu')             % nonlinearity
    fullyConnectedLayer(1,'Name','mp_fc2');  % 1 by 1 output
    tanhLayer('Name','tanh');                % output range: (-1,1)
    scalingLayer('Name','mp_out','Scale',actInfo.UpperLimit) ]; % output range: (-2N,2N)

% path layers for standard deviation (1 by 1 input and output)
% using softplus layer to make it non negative
sdevPath = [
    fullyConnectedLayer(15,'Name', 'vp_fc1') % 15 by 1 output
    reluLayer('Name', 'vp_relu')             % nonlinearity
    fullyConnectedLayer(1,'Name','vp_fc2');  % 1 by 1 output
    softplusLayer('Name', 'vp_out') ];       % output range: (0,+Inf)

% conctatenate two inputs (along dimension #3) to form a single (2 by 1) output layer
outLayer = concatenationLayer(1,2,'Name','mean&sdev');

% add layers to layerGraph network object
actorNet = layerGraph(inPath);
actorNet = addLayers(actorNet,meanPath);
actorNet = addLayers(actorNet,sdevPath);
actorNet = addLayers(actorNet,outLayer);

% connect layers: you must conect the mean value path to the first input of the concatenation layer
actorNet = connectLayers(actorNet,'ip_out','mp_fc1/in');     % connect output of inPath to meanPath input
actorNet = connectLayers(actorNet,'ip_out','vp_fc1/in');     % connect output of inPath to sdevPath input
actorNet = connectLayers(actorNet,'mp_out','mean&sdev/in1'); % connect output of meanPath to mean&sdev input #1
actorNet = connectLayers(actorNet,'vp_out','mean&sdev/in2'); % connect output of sdevPath to mean&sdev input #2

% plot network 
plot(actorNet)

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

Создайте стохастическое представление актера с помощью глубокой нейронной сети actorNet.

actor = rlStochasticActorRepresentation(actorNet,obsInfo,actInfo,...
    'Observation',{'state'});

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

agentOpts = rlTRPOAgentOptions(...
    'ExperienceHorizon',1024, ...
    'DiscountFactor',0.95);
agent = rlTRPOAgent(actor,critic,agentOpts)
agent = 
  rlTRPOAgent with properties:

    AgentOptions: [1x1 rl.option.rlTRPOAgentOptions]

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

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

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

Советы

  • Для непрерывных пространств действий этот агент не осуществляет ограничения, установленные спецификацией действия. В этом случае необходимо осуществить ограничения пространства действий в среде.

  • В то время как настройка скорости обучения сети агента необходима для агентов PPO, это не необходимо для агентов TRPO.

  • Для высоко-размерных наблюдений, такой что касается изображений, рекомендуется использовать PPO, SAC или агентов TD3.

Введенный в R2021b