exponenta event banner

rlSACAgent

Мягкий актерско-критический агент по обучению

Описание

Алгоритм soft actor-critic (SAC) - безмодельный, онлайн, внеполитический, актерско-критический метод обучения подкреплению. Алгоритм SAC вычисляет оптимальную политику, которая максимизирует как долгосрочное ожидаемое вознаграждение, так и энтропию политики. Политическая энтропия является мерой политической неопределенности, учитывая состояние. Более высокая величина энтропии способствует большему исследованию. Максимизация вознаграждения и энтропии уравновешивает разведку и разработку окружающей среды. Пространство действий может быть только непрерывным.

Дополнительные сведения см. в разделе Агенты Soft Actor-Critic.

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

Создание

Описание

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

пример

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

пример

agent = rlSACAgent(observationInfo,actionInfo,initOptions) создает SAC-агент с глубокими нейронными сетевыми представлениями, настроенными с использованием указанных опций инициализации (initOptions).

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

пример

agent = rlSACAgent(actor,critics) создает агент SAC с указанными сетями актера и критика и параметрами агента по умолчанию.

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

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

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

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

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

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

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

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

Параметры инициализации представления, указанные как rlAgentInitializationOptions объект.

Представление сети актера, указанное как rlStochasticActorRepresentation объект.

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

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

  • rlQValueRepresentation object - создание агента SAC с одной функцией Q-значения.

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

Для агента SAC каждый критик должен быть одним выходом rlQValueRepresentation объект, принимающий как действие, так и наблюдения в качестве входных данных.

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

Свойства

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

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

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

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

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

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

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

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

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

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

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

Примеры

свернуть все

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

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

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

% rng(0)

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

agent = rlSACAgent(obsInfo,actInfo);

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

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

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

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

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

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

initOpts = rlAgentInitializationOptions('NumHiddenUnit',128);

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

% rng(0)

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

agent = rlSACAgent(obsInfo,actInfo,initOpts);

Извлеките глубокую нейронную сеть из актера.

actorNet = getModel(getActor(agent));

Извлеките глубокие нейронные сети из двух критиков. Обратите внимание, что getModel(critics) возвращает только первую критическую сеть.

critics = getCritic(agent);
criticNet1 = getModel(critics(1));
criticNet2 = getModel(critics(2));

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

criticNet1.Layers
ans = 
  10x1 Layer array with layers:

     1   'concat'               Concatenation       Concatenation of 2 inputs along dimension 1
     2   'relu_body'            ReLU                ReLU
     3   'fc_body'              Fully Connected     128 fully connected layer
     4   'body_output'          ReLU                ReLU
     5   'input_1'              Feature Input       2 features
     6   'fc_1'                 Fully Connected     128 fully connected layer
     7   'input_2'              Feature Input       1 features
     8   'fc_2'                 Fully Connected     128 fully connected layer
     9   'output'               Fully Connected     1 fully connected layer
    10   '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)})
ans = 1x1 cell array
    {[-0.9867]}

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

Создание среды и получение спецификаций наблюдения и действий. В этом примере загрузите среду, используемую в примере 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-значений. Сначала создайте критику глубокую нейронную сетевую структуру.

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');

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

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

Создать актерскую глубокую нейронную сеть. Не добавлять tanhLayer или scalingLayer в среднем выходном тракте. Агент SAC внутренне преобразует неограниченное гауссово распределение в ограниченное распределение для правильного вычисления функции плотности вероятности и энтропии.

statePath = [
    featureInputLayer(numObs,'Normalization','none','Name','observation')
    fullyConnectedLayer(400, 'Name','commonFC1')
    reluLayer('Name','CommonRelu')];
meanPath = [
    fullyConnectedLayer(300,'Name','MeanFC1')
    reluLayer('Name','MeanRelu')
    fullyConnectedLayer(numAct,'Name','Mean')
    ];
stdPath = [
    fullyConnectedLayer(300,'Name','StdFC1')
    reluLayer('Name','StdRelu')
    fullyConnectedLayer(numAct,'Name','StdFC2')
    softplusLayer('Name','StandardDeviation')];

concatPath = concatenationLayer(1,2,'Name','GaussianParameters');

actorNetwork = layerGraph(statePath);
actorNetwork = addLayers(actorNetwork,meanPath);
actorNetwork = addLayers(actorNetwork,stdPath);
actorNetwork = addLayers(actorNetwork,concatPath);
actorNetwork = connectLayers(actorNetwork,'CommonRelu','MeanFC1/in');
actorNetwork = connectLayers(actorNetwork,'CommonRelu','StdFC1/in');
actorNetwork = connectLayers(actorNetwork,'Mean','GaussianParameters/in1');
actorNetwork = connectLayers(actorNetwork,'StandardDeviation','GaussianParameters/in2');

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

actorOptions = rlRepresentationOptions('Optimizer','adam','LearnRate',1e-3,...
                                       'GradientThreshold',1,'L2RegularizationFactor',1e-5);

actor = rlStochasticActorRepresentation(actorNetwork,obsInfo,actInfo,actorOptions,...
    'Observation',{'observation'});

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

agentOptions = rlSACAgentOptions;
agentOptions.SampleTime = env.Ts;
agentOptions.DiscountFactor = 0.99;
agentOptions.TargetSmoothFactor = 1e-3;
agentOptions.ExperienceBufferLength = 1e6;
agentOptions.MiniBatchSize = 32;

Создание агента SAC с использованием актера, критиков и параметров.

agent = rlSACAgent(actor,[critic1 critic2],agentOptions);

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

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

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

В этом примере загрузите среду, используемую в примере 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')
    lstmLayer(8,'OutputMode','sequence','Name','lstm')
    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');

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

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

Создать актерскую глубокую нейронную сеть. Поскольку у критика есть повторяющаяся сеть, у актера должна быть и повторяющаяся сеть. Не добавлять tanhLayer или scalingLayer в среднем выходном тракте. Агент SAC внутренне преобразует неограниченное гауссово распределение в ограниченное распределение для правильного вычисления функции плотности вероятности и энтропии.

statePath = [
    sequenceInputLayer(numObs,'Normalization','none','Name','observation')
    fullyConnectedLayer(400, 'Name','commonFC1')
    lstmLayer(8,'OutputMode','sequence','Name','lstm')    
    reluLayer('Name','CommonRelu')];
meanPath = [
    fullyConnectedLayer(300,'Name','MeanFC1')
    reluLayer('Name','MeanRelu')
    fullyConnectedLayer(numAct,'Name','Mean')
    ];
stdPath = [
    fullyConnectedLayer(300,'Name','StdFC1')
    reluLayer('Name','StdRelu')
    fullyConnectedLayer(numAct,'Name','StdFC2')
    softplusLayer('Name','StandardDeviation')];

concatPath = concatenationLayer(1,2,'Name','GaussianParameters');

actorNetwork = layerGraph(statePath);
actorNetwork = addLayers(actorNetwork,meanPath);
actorNetwork = addLayers(actorNetwork,stdPath);
actorNetwork = addLayers(actorNetwork,concatPath);
actorNetwork = connectLayers(actorNetwork,'CommonRelu','MeanFC1/in');
actorNetwork = connectLayers(actorNetwork,'CommonRelu','StdFC1/in');
actorNetwork = connectLayers(actorNetwork,'Mean','GaussianParameters/in1');
actorNetwork = connectLayers(actorNetwork,'StandardDeviation','GaussianParameters/in2');

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

actorOptions = rlRepresentationOptions('Optimizer','adam','LearnRate',1e-3,...
                                       'GradientThreshold',1,'L2RegularizationFactor',1e-5);

actor = rlStochasticActorRepresentation(actorNetwork,obsInfo,actInfo,actorOptions,...
    'Observation',{'observation'});

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

agentOptions = rlSACAgentOptions;
agentOptions.SampleTime = env.Ts;
agentOptions.DiscountFactor = 0.99;
agentOptions.TargetSmoothFactor = 1e-3;
agentOptions.ExperienceBufferLength = 1e6;
agentOptions.SequenceLength = 32;
agentOptions.MiniBatchSize = 32;

Создание агента SAC с использованием актера, критиков и параметров.

agent = rlSACAgent(actor,[critic1 critic2],agentOptions);

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

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

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

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