exponenta event banner

rlDQNAgent

Агент обучения усилению глубокой Q-сети

Описание

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

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

Создание

Описание

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

пример

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

пример

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

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

agent = rlDQNAgent(critic) создает агент DQN с указанной сетью критиков, используя набор параметров по умолчанию для агента DQN.

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

пример

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

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

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

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

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

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

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

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

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

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

Ваше критическое представление может использовать рецидивирующую нейронную сеть в качестве аппроксиматора функции. Однако только множественное представление функции Q-значения поддерживает повторяющиеся нейронные сети. Пример см. в разделе Создание агента DQN с повторяющейся нейронной сетью.

Свойства

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

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

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

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

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

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

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

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

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

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

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

Примеры

свернуть все

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

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

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

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

% rng(0)

Создайте глубокий агент Q-сети на основе параметров наблюдения и действий среды.

agent = rlDQNAgent(obsInfo,actInfo);

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

getAction(agent,{rand(obsInfo(1).Dimension),rand(obsInfo(2).Dimension)})
ans = 1

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

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

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

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

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

initOpts = rlAgentInitializationOptions('NumHiddenUnit',128);

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

% rng(0)

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

agent = rlPGAgent(obsInfo,actInfo,initOpts);

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

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

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

criticNet = getModel(getCritic(agent));

Агент DQN по умолчанию использует мультивыходный критический аппроксиматор Q-значений. Многоотходный аппроксиматор имеет наблюдения в качестве входных данных и значения действия состояния в качестве выходных данных. Каждый выходной элемент представляет собой ожидаемое совокупное долгосрочное вознаграждение за принятие соответствующего дискретного действия из состояния, указанного входами наблюдения.

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

criticNet.Layers
ans = 
  12x1 Layer array with layers:

     1   'concat'               Concatenation       Concatenation of 2 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   'output'               Fully Connected     1 fully connected layer
    12   'RepresentationLoss'   Regression Output   mean-squared-error

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

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
    {[2]}

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

Создайте интерфейс среды и получите его спецификации наблюдения и действий. В этом примере загрузите предварительно определенную среду, используемую в примере Train DQN Agent to Balance Cart-Pole System. Эта среда имеет непрерывное четырёхмерное пространство наблюдения (положения и скорости как тележки, так и полюса) и дискретное одномерное пространство действия, состоящее из приложения двух возможных сил, -10N или 10N.

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

% get observation and action specification objects
obsInfo = getObservationInfo(env);
actInfo = getActionInfo(env);

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

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

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

% create a deep neural network approximator 
% the observation input layer must have 4 elements (obsInfo.Dimension(1))
% the action output layer must have 2 elements (length(actInfo.Elements))
dnn = [
    imageInputLayer([obsInfo.Dimension(1) 1 1], 'Normalization', 'none', 'Name', 'state')
    fullyConnectedLayer(24, 'Name', 'CriticStateFC1')
    reluLayer('Name', 'CriticRelu1')
    fullyConnectedLayer(24, 'Name', 'CriticStateFC2')
    reluLayer('Name','CriticCommonRelu')
    fullyConnectedLayer(length(actInfo.Elements), 'Name', 'output')];

% set some options for the critic
criticOpts = rlRepresentationOptions('LearnRate',0.01,'GradientThreshold',1);

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

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

agentOpts = rlDQNAgentOptions(...
    'UseDoubleDQN',false, ...    
    'TargetUpdateMethod',"periodic", ...
    'TargetUpdateFrequency',4, ...   
    'ExperienceBufferLength',100000, ...
    'DiscountFactor',0.99, ...
    'MiniBatchSize',256);

agent = rlDQNAgent(critic,agentOpts)
agent = 
  rlDQNAgent with properties:

        AgentOptions: [1x1 rl.option.rlDQNAgentOptions]
    ExperienceBuffer: [1x1 rl.util.ExperienceBuffer]

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

getAction(agent,{rand(4,1)})
ans = 10

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

Создайте интерфейс среды и получите его спецификации наблюдения и действий. В этом примере загрузите предварительно определенную среду, используемую в примере Train DQN Agent to Balance Cart-Pole System. Эта среда имеет непрерывное четырёхмерное пространство наблюдения (положения и скорости как тележки, так и полюса) и дискретное одномерное пространство действия, состоящее из приложения двух возможных сил, -10N или 10N.

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

% get observation and specification info
obsInfo = getObservationInfo(env);
actInfo = getActionInfo(env);

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

% create a deep neural network approximator 
% the observation input layer must have 4 elements (obsInfo.Dimension(1))
% the action input layer must have 1 element (actInfo.Dimension(1))
% the output must be a scalar
statePath = [
    featureInputLayer(obsInfo.Dimension(1), 'Normalization', 'none', 'Name', 'state')
    fullyConnectedLayer(24, 'Name', 'CriticStateFC1')
    reluLayer('Name', 'CriticRelu1')
    fullyConnectedLayer(24, 'Name', 'CriticStateFC2')];
actionPath = [
    featureInputLayer(actInfo.Dimension(1), 'Normalization', 'none', 'Name', 'action')
    fullyConnectedLayer(24, 'Name', 'CriticActionFC1')];
commonPath = [
    additionLayer(2,'Name', 'add')
    reluLayer('Name','CriticCommonRelu')
    fullyConnectedLayer(1, 'Name', 'output')];
criticNetwork = layerGraph(statePath);
criticNetwork = addLayers(criticNetwork, actionPath);
criticNetwork = addLayers(criticNetwork, commonPath);    
criticNetwork = connectLayers(criticNetwork,'CriticStateFC2','add/in1');
criticNetwork = connectLayers(criticNetwork,'CriticActionFC1','add/in2');

% set some options for the critic
criticOpts = rlRepresentationOptions('LearnRate',0.01,'GradientThreshold',1);

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

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

agentOpts = rlDQNAgentOptions(...
    'UseDoubleDQN',false, ...    
    'TargetUpdateMethod',"periodic", ...
    'TargetUpdateFrequency',4, ...   
    'ExperienceBufferLength',100000, ...
    'DiscountFactor',0.99, ...
    'MiniBatchSize',256);

agent = rlDQNAgent(critic,agentOpts)
agent = 
  rlDQNAgent with properties:

        AgentOptions: [1x1 rl.option.rlDQNAgentOptions]
    ExperienceBuffer: [1x1 rl.util.ExperienceBuffer]

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

getAction(agent,{rand(4,1)})
ans = 10

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

В этом примере загрузите предварительно определенную среду, используемую в примере Train DQN Agent to Balance Cart-Pole System.

env = rlPredefinedEnv('CartPole-Discrete');

Получение информации о наблюдениях и действиях. Эта среда имеет непрерывное четырёхмерное пространство наблюдения (положения и скорости как тележки, так и полюса) и дискретное одномерное пространство действия, состоящее из приложения двух возможных сил, -10N или 10N.

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

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

Для агентов DQN только множественное представление функции Q-значения поддерживает повторяющиеся нейронные сети. Для представлений функций с несколькими выходными Q-значениями число элементов выходного уровня должно быть равно числу возможных действий: numel(actInfo.Elements).

criticNetwork = [
    sequenceInputLayer(obsInfo.Dimension(1),'Normalization','none','Name','state')
    fullyConnectedLayer(50, 'Name', 'CriticStateFC1')
    reluLayer('Name','CriticRelu1')
    lstmLayer(20,'OutputMode','sequence','Name','CriticLSTM');
    fullyConnectedLayer(20,'Name','CriticStateFC2')
    reluLayer('Name','CriticRelu2')
    fullyConnectedLayer(numel(actInfo.Elements),'Name','output')];

Создайте представление для критика, используя повторяющуюся нейронную сеть.

criticOptions = rlRepresentationOptions('LearnRate',1e-3,'GradientThreshold',1);
critic = rlQValueRepresentation(criticNetwork,obsInfo,actInfo,...
    'Observation','state',criticOptions);

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

agentOptions = rlDQNAgentOptions(...
    'UseDoubleDQN',false, ...
    'TargetSmoothFactor',5e-3, ...
    'ExperienceBufferLength',1e6, ...
    'SequenceLength',20);
agentOptions.EpsilonGreedyExploration.EpsilonDecay = 1e-4;

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

agent = rlDQNAgent(critic,agentOptions);

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

getAction(agent,rand(obsInfo.Dimension))
ans = -10
Представлен в R2019a