rlQValueRepresentation

Представление Q-функции критика для агентов обучения с подкреплением

Описание

Этот объект реализует аппроксимацию функции Q-значения, которая будет использоваться в качестве критика в агенте обучения с подкреплением. Функция Q-значения является функцией, которая преобразует пару наблюдение-действие в скалярное значение, представляющее ожидаемые общие долгосрочные вознаграждения, которые агент, как ожидается, накопит, когда он начнет с заданного наблюдения и выполняет данное действие. Поэтому критикам функции Q-значения нужны как наблюдения, так и действия в качестве входов. После создания rlQValueRepresentation критик, используйте его, чтобы создать агента, полагающегося на функции Q-значения критика, такого как rlQAgent, rlDQNAgent, rlSARSAAgent, rlDDPGAgent, или rlTD3Agent. Дополнительные сведения о создании представлений см. в разделах Создание политики и Представления функции ценности.

Создание

Описание

Скаляр выхода Q-значений

пример

critic = rlQValueRepresentation(net,observationInfo,actionInfo,'Observation',obsName,'Action',actName) создает функцию Q-значений critic. net - глубокая нейронная сеть, используемая в качестве аппроксимации, и должна иметь как наблюдения, так и действие в качестве входов и один скалярный выход. Этот синтаксис устанавливает свойства ObservationInfo и ActionInfo critic соответственно на входы observationInfo и actionInfo, содержащие наблюдения и спецификации действия. obsName должны содержать имена входных слоев net которые связаны со спецификациями наблюдений. Имя действия actName должно быть именем входного слоя net связанный со спецификациями действия.

пример

critic = rlQValueRepresentation(tab,observationInfo,actionInfo) создает функцию Q-значений на основе critic с дискретными пространствами действий и наблюдений из таблицы Q-значений tab. tab является rlTable объект, содержащий таблицу с таким количеством строк, как возможные наблюдения и столько столбцов, сколько возможных действий. Этот синтаксис устанавливает свойства ObservationInfo и ActionInfo critic соответственно на входы observationInfo и actionInfo, который должен быть rlFiniteSetSpec объекты, содержащие спецификации для дискретных наблюдений и пространств действий, соответственно.

пример

critic = rlQValueRepresentation({basisFcn,W0},observationInfo,actionInfo) создает функцию Q-значений, основанную на critic использование пользовательской функции базиса в качестве базовой аппроксимации. Первый входной параметр является камерой с двумя элементами, в которой первый элемент содержит указатель basisFcn в пользовательскую функцию базиса, а второй элемент содержит начальный вектор веса W0. Здесь функция базиса должна иметь как наблюдения, так и действие как входы и W0 должен быть вектор-столбец. Этот синтаксис устанавливает свойства ObservationInfo и ActionInfo critic соответственно на входы observationInfo и actionInfo.

Критик Q-значений дискретного пространства действий с несколькими выходами

пример

critic = rlQValueRepresentation(net,observationInfo,actionInfo,'Observation',obsName) создает мультивыход critic для дискретного пространства действий. net - глубокая нейронная сеть, используемая в качестве аппроксимации, и должна иметь только наблюдения как входной и один выходной слой, имеющий столько элементов, сколько количества возможных дискретных действий. Этот синтаксис устанавливает свойства ObservationInfo и ActionInfo critic соответственно на входы observationInfo и actionInfo, содержащие наблюдения и спецификации действия. Здесь, actionInfo должен быть rlFiniteSetSpec объект, содержащий спецификации дискретного пространства действий. Имена наблюдений obsName должны быть именами входных слоев net.

пример

critic = rlQValueRepresentation({basisFcn,W0},observationInfo,actionInfo) создает мультивыход critic для дискретного пространства действий с использованием пользовательской функции базиса в качестве базовой аппроксимации. Первый входной параметр является камерой с двумя элементами, в которой первый элемент содержит указатель basisFcn в пользовательскую функцию базиса, а второй элемент содержит начальную матрицу веса W0. Здесь функция базиса должна иметь только наблюдения в качестве входов, и W0 должно иметь столько столбцов, сколько возможных действий. Этот синтаксис устанавливает свойства ObservationInfo и ActionInfo critic соответственно на входы observationInfo и actionInfo.

Опции

critic = rlQValueRepresentation(___,options) создает функцию ценности, основанную на critic использование дополнительного набора опций options, который является rlRepresentationOptions объект. Этот синтаксис задает свойство Опций critic на options входной параметр. Можно использовать этот синтаксис с любой из предыдущих комбинаций входных аргументов.

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

расширить все

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

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

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

Уровень сетевого выхода должен иметь совпадающий тип данных и размерность как сигнал, заданный в ActionInfo. Его имя должно быть именем действия, заданным в actName.

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

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

Имена наблюдений, заданные как массив ячеек из строк или векторов символов. Имена наблюдений должны быть именами входных слоев в net.

Пример: {'my_obs'}

Имя действия, заданное как одноэлементный массив ячеек, содержащий вектор символов. Это должно быть имя выходного слоя net.

Пример: {'my_act'}

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

Пользовательская функция базиса, заданная как указатель на функцию MATLAB, заданную пользователем. Определяемая пользователем функция может быть либо анонимной функцией, либо функцией на пути MATLAB. Выходные выходы критика c = W'*B, где W - вектор или матрица веса, содержащая настраиваемые параметры, и B - вектор-столбец, возвращаемая пользовательской функцией базиса.

Для критика с одним выводом Q-значения, c является скаляром, представляющим ожидаемое совокупное долгосрочное вознаграждение, когда агент начинает с заданного наблюдения и принимает данное действие. В этом случае ваша функция базиса должна иметь следующую подпись.

B = myBasisFunction(obs1,obs2,...,obsN,act)

Для выхода Q-значений с дискретным пространством действий, c является вектором, в котором каждый элемент является ожидаемым совокупным долгосрочным вознаграждением, когда агент начинает с заданного наблюдения и принимает действие, соответствующее положению рассматриваемого элемента. В этом случае ваша функция базиса должна иметь следующую подпись.

B = myBasisFunction(obs1,obs2,...,obsN)

Здесь, obs1 на obsN являются наблюдениями в том же порядке и с совпадающим типом данных и размерностями, что и сигналы, заданные в observationInfo и act имеет тот совпадающий тип данных и размерности, что и спецификаций действия в actionInfo

Пример: @(obs1,obs2,act) [act(2)*obs1(1)^2; abs(obs2(5)+act(1))]

Начальное значение весов базисных функций, W. Для критика с одним выводом Q-значения, W - вектор-столбец, имеющая ту же длину, что и вектор, возвращенный функцией базиса. Для выхода Q-значений с дискретным пространством действий, W - матрица, которая должна иметь столько строк, сколько длина выхода базовой функции, и столько столбцов, сколько количества возможных действий.

Свойства

расширить все

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

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

rlQValueRepresentation устанавливает ObservationInfo свойство critic в вход observationInfo.

Можно извлечь ObservationInfo из существующего окружения или агента, используя getObservationInfo. Можно также создать спецификации вручную.

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

rlQValueRepresentation устанавливает ActionInfo свойство critic в вход actionInfo.

Можно извлечь ActionInfo из существующего окружения или агента, используя getActionInfo. Можно также создать спецификации вручную.

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

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

rlDDPGAgentАгент глубокого детерминированного градиента обучения с подкреплением политики
rlTD3AgentАгент обучения с подкреплением с двумя задержками в глубоком детерминировании политики
rlDQNAgentАгент обучения с подкреплением глубокой Q-сети
rlQAgentАгент обучения с подкреплением Q-обучения
rlSARSAAgentАгент обучения с подкреплением SARSA
rlSACAgentМягкий агент обучения с подкреплением актёра-критика
getValueПолучите расчетное представление функции ценности
getMaxQValueПолучите максимальную оценку функции состояния для представления функции Q-значения с дискретным пространством действий

Примеры

свернуть все

Создайте объект спецификации наблюдений (или альтернативно используйте getObservationInfo для извлечения объекта спецификации из окружения). В данном примере задайте пространство наблюдений как непрерывное четырехмерное пространство, так что одно наблюдение является вектором-столбцом, содержащей четыре двойки.

obsInfo = rlNumericSpec([4 1]);

Создайте объект спецификации действия (или также используйте getActionInfo для извлечения объекта спецификации из окружения). В данном примере задайте пространство действий как непрерывное двумерное пространство, так что одно действие является вектором-столбцом, содержащей два двойника.

actInfo = rlNumericSpec([2 1]);

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

% observation path layers
obsPath = [featureInputLayer(4, 'Normalization','none','Name','myobs') 
    fullyConnectedLayer(1,'Name','obsout')];

% action path layers
actPath = [featureInputLayer(2, 'Normalization','none','Name','myact') 
    fullyConnectedLayer(1,'Name','actout')];

% common path to output layers
comPath = [additionLayer(2,'Name', 'add')  fullyConnectedLayer(1, 'Name', 'output')];

% add layers to network object
net = addLayers(layerGraph(obsPath),actPath); 
net = addLayers(net,comPath);

% connect layers
net = connectLayers(net,'obsout','add/in1');
net = connectLayers(net,'actout','add/in2');

% plot network
plot(net)

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

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

critic = rlQValueRepresentation(net,obsInfo,actInfo, ...
    'Observation',{'myobs'},'Action',{'myact'})
critic = 
  rlQValueRepresentation with properties:

         ActionInfo: [1x1 rl.util.rlNumericSpec]
    ObservationInfo: [1x1 rl.util.rlNumericSpec]
            Options: [1x1 rl.option.rlRepresentationOptions]

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

v = getValue(critic,{rand(4,1)},{rand(2,1)})
v = single
    0.1102

Теперь можно использовать критика (наряду с актером), чтобы создать агента, полагающегося на функции Q-значения критика (такого как rlQAgent, rlDQNAgent, rlSARSAAgent, или rlDDPGAgent агент).

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

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

Создайте объект спецификации наблюдений (или альтернативно используйте getObservationInfo для извлечения объекта спецификации из окружения). В данном примере задайте пространство наблюдений как непрерывное четырехмерное пространство, так что одно наблюдение является вектором-столбцом, содержащей четыре двойки.

obsInfo = rlNumericSpec([4 1]);

Создайте объект спецификации действия с конечным набором (или альтернативно используйте getActionInfo извлечь объект спецификации из окружения с дискретным пространством действий). В данном примере задайте пространство действий как конечное множество, состоящее из трех возможных значений (имя 7, 5, и 3 в данном случае).

actInfo = rlFiniteSetSpec([7 5 3]);

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

net = [featureInputLayer(4,'Normalization','none','Name','myobs') 
       fullyConnectedLayer(3,'Name','value')];

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

critic = rlQValueRepresentation(net,obsInfo,actInfo,'Observation',{'myobs'})
critic = 
  rlQValueRepresentation with properties:

         ActionInfo: [1x1 rl.util.rlFiniteSetSpec]
    ObservationInfo: [1x1 rl.util.rlNumericSpec]
            Options: [1x1 rl.option.rlRepresentationOptions]

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

v = getValue(critic,{rand(4,1)})
v = 3x1 single column vector

    0.7232
    0.8177
   -0.2212

Теперь можно использовать критика (наряду с актером), чтобы создать агента дискретного пространства действий, полагающегося на функции Q-значения критика (такого как rlQAgent, rlDQNAgent, или rlSARSAAgent агент).

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

obsInfo = rlFiniteSetSpec([7 5 3 1]);

Создайте объект спецификации действия с конечным набором (или альтернативно используйте getActionInfo извлечь объект спецификации из окружения с дискретным пространством действий). В данном примере задайте пространство действий как конечное множество с 2 возможными значениями.

actInfo = rlFiniteSetSpec([4 8]);

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

qTable = rlTable(obsInfo,actInfo);

Таблица хранит значение (представляющее ожидаемое совокупное долгосрочное вознаграждение) для каждой возможной пары действие-наблюдение. Каждая строка соответствует наблюдению, и каждый столбец соответствует действию. Вы можете получить доступ к таблице с помощью Table свойство vTable объект. Начальное значение каждого элемента равняется нулю.

qTable.Table
ans = 4×2

     0     0
     0     0
     0     0
     0     0

Можно инициализировать таблицу в любое значение, в этом случае массив, содержащий целое число от 1 через 8.

qTable.Table=reshape(1:8,4,2)
qTable = 
  rlTable with properties:

    Table: [4x2 double]

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

critic = rlQValueRepresentation(qTable,obsInfo,actInfo)
critic = 
  rlQValueRepresentation with properties:

         ActionInfo: [1x1 rl.util.rlFiniteSetSpec]
    ObservationInfo: [1x1 rl.util.rlFiniteSetSpec]
            Options: [1x1 rl.option.rlRepresentationOptions]

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

v = getValue(critic,{5},{8})
v = 6

Теперь можно использовать критика (наряду с актером), чтобы создать агента дискретного пространства действий, полагающегося на функции Q-значения критика (такого как rlQAgent, rlDQNAgent, или rlSARSAAgent агент).

Создайте объект спецификации наблюдений (или альтернативно используйте getObservationInfo для извлечения объекта спецификации из окружения). В данном примере задайте пространство наблюдений как непрерывное четырехмерное пространство, так что одно наблюдение является вектором-столбцом, содержащей 3 двойки.

obsInfo = rlNumericSpec([3 1]);

Создайте объект спецификации действия (или также используйте getActionInfo для извлечения объекта спецификации из окружения). В данном примере задайте пространство действий как непрерывное двумерное пространство, так что одно действие является вектором-столбцом, содержащей 2 двойных.

actInfo = rlNumericSpec([2 1]);

Создайте пользовательскую функцию базиса, чтобы аппроксимировать функцию ценности в критике. Функция пользовательского базиса должна вернуть вектор-столбец. Каждый векторный элемент должен быть функцией наблюдений и действий, соответственно заданных obsInfo и actInfo.

myBasisFcn = @(myobs,myact) [myobs(2)^2; myobs(1)+exp(myact(1)); abs(myact(2)); myobs(3)]
myBasisFcn = function_handle with value:
    @(myobs,myact)[myobs(2)^2;myobs(1)+exp(myact(1));abs(myact(2));myobs(3)]

Выходом критика является скаляр W'*myBasisFcn(myobs,myact), где W - вектор-столбец веса, который должен иметь тот же размер пользовательского базиса выхода функции. Этот выход является ожидаемым совокупным долгосрочным вознаграждением, когда агент начинает с заданного наблюдения и принимает лучшее возможное действие. Элементы W являются настраиваемыми параметрами.

Задайте вектор начального параметра.

W0 = [1;4;4;2];

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

critic = rlQValueRepresentation({myBasisFcn,W0},obsInfo,actInfo)
critic = 
  rlQValueRepresentation with properties:

         ActionInfo: [1×1 rl.util.rlNumericSpec]
    ObservationInfo: [1×1 rl.util.rlNumericSpec]
            Options: [1×1 rl.option.rlRepresentationOptions]

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

v = getValue(critic,{[1 2 3]'},{[4 5]'})
v = 
  1×1 dlarray

  252.3926

Теперь можно использовать критика (наряду с актером), чтобы создать агента, полагающегося на функции Q-значения критика (такого как rlQAgent, rlDQNAgent, rlSARSAAgent, или rlDDPGAgent агент).

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

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

Создайте объект спецификации наблюдений (или альтернативно используйте getObservationInfo для извлечения объекта спецификации из окружения). В данном примере задайте пространство наблюдений как непрерывное четырехмерное пространство, так что одно наблюдение является вектором-столбцом, содержащей 2 двойки.

obsInfo = rlNumericSpec([2 1]);

Создайте объект спецификации действия с конечным набором (или альтернативно используйте getActionInfo извлечь объект спецификации из окружения с дискретным пространством действий). В данном примере задайте пространство действий как конечное множество, состоящее из 3 возможных значений (имя 7, 5, и 3 в данном случае).

actInfo = rlFiniteSetSpec([7 5 3]);

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

myBasisFcn = @(myobs) [myobs(2)^2; myobs(1); exp(myobs(2)); abs(myobs(1))]
myBasisFcn = function_handle with value:
    @(myobs)[myobs(2)^2;myobs(1);exp(myobs(2));abs(myobs(1))]

Выходом критика является вектор c = W'*myBasisFcn(myobs), где W - весовая матрица, которая должна иметь столько строк, сколько длина выхода базовой функции, и столько столбцов, сколько количества возможных действий.

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

Задайте матрицу начальных параметров.

W0 = rand(4,3);

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

critic = rlQValueRepresentation({myBasisFcn,W0},obsInfo,actInfo)
critic = 
  rlQValueRepresentation with properties:

         ActionInfo: [1x1 rl.util.rlFiniteSetSpec]
    ObservationInfo: [1x1 rl.util.rlNumericSpec]
            Options: [1x1 rl.option.rlRepresentationOptions]

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

v = getValue(critic,{rand(2,1)})
v = 
  3x1 dlarray

    2.1395
    1.2183
    2.3342

Теперь можно использовать критика (наряду с актером), чтобы создать агента дискретного пространства действий, полагающегося на функции Q-значения критика (такого как rlQAgent, rlDQNAgent, или rlSARSAAgent агент).

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

env = rlPredefinedEnv('CartPole-Discrete');
obsInfo = getObservationInfo(env);
actInfo = getActionInfo(env);
numObs = obsInfo.Dimension(1);
numDiscreteAct = numel(actInfo.Elements);

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

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

criticNetwork = [
    sequenceInputLayer(numObs,'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(numDiscreteAct,'Name','output')];

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

criticOptions = rlRepresentationOptions('LearnRate',1e-3,'GradientThreshold',1);
critic = rlQValueRepresentation(criticNetwork,obsInfo,actInfo,...
    'Observation','state',criticOptions);
Введенный в R2020a