exponenta event banner

rlQValueRepresentation

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

Описание

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

Создание

Описание

Скалярный выходной Q-Value Critic

пример

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

пример

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

пример

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

Q-Value Critic пространство дискретного действия с множеством выходов

пример

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

пример

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

Варианты

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

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

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

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

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

Сетевые входные уровни должны быть в том же порядке и иметь тот же тип данных и те же размеры, что и сигналы, определенные в разделе «Информация о сети». Кроме того, имена этих входных слоев должны совпадать с именами наблюдений, перечисленными в 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-learning
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-value (например, 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-value (например, 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-value (например, 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-value (например, 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 - весовая матрица, которая должна иметь столько строк, сколько длина вывода базисной функции, и столько столбцов, сколько возможно действий.

Каждый элемент с является ожидаемым накопленным долгосрочным вознаграждением, когда агент начинается с данного наблюдения и принимает действие, соответствующее положению рассматриваемого элемента. Элементами 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-value (например, 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