rlDQNAgent

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

Описание

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

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

Создание

Описание

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

пример

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 объект.

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

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

Свойства

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

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

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

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

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

  • A является мерами, принятыми агентом.

  • R является вознаграждением за принимающий меры A.

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

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

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

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

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

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

% 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 Nm обратился к качающемуся полюсу).

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

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

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

initOpts = rlAgentInitializationOptions('NumHiddenUnit',128);

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

% 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 = 
  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

Постройте сеть критика

plot(layerGraph(criticNet))

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

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

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

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

Создайте среду, соединяют интерфейсом и получают ее спецификации наблюдений и спецификации действия. Поскольку этот пример загружает предопределенную среду, используемую для Обучения Агента DQN Сбалансировать Системный пример Тележки с шестом. Эта среда имеет непрерывное четырехмерное пространство наблюдений (положения и скорости и тележки и полюса) и дискретное одномерное пространство действий, состоящее на приложении двух возможных сил,-10N или 10 Н.

% 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

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

Создайте среду, соединяют интерфейсом и получают ее спецификации наблюдений и спецификации действия. Поскольку этот пример загружает предопределенную среду, используемую для Обучения Агента DQN Сбалансировать Системный пример Тележки с шестом. Эта среда имеет непрерывное четырехмерное пространство наблюдений (положения и скорости и тележки и полюса) и дискретное одномерное пространство действий, состоящее на приложении двух возможных сил,-10N или 10 Н.

% 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

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

Поскольку этот пример загружает предопределенную среду, используемую для Обучения Агента DQN Сбалансировать Системный пример Тележки с шестом.

env = rlPredefinedEnv('CartPole-Discrete');

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

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