rlValueRepresentation

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

Описание

Этот объект реализует аппроксимацию функции ценности, которая будет использоваться в качестве критика в агенте обучения с подкреплением. Функция ценности является функцией, которая преобразует наблюдение в скалярное значение. Это выход представляет ожидаемое общее долгосрочное вознаграждение, когда агент начинает с заданного наблюдения и предпринимает лучшее возможное действие. Критикам функции ценности поэтому нужны только наблюдения (но не действия) в качестве входов. После создания rlValueRepresentation критик, используйте его, чтобы создать агента, полагающегося на функцию ценности критика, такого как rlACAgent, rlPGAgent, или rlPPOAgent. Пример этого рабочего процесса см. в разделе Создание представлений актёра и критика. Дополнительные сведения о создании представлений см. в разделах Создание политики и Представления функции ценности.

Создание

Описание

пример

critic = rlValueRepresentation(net,observationInfo,'Observation',obsName) создает функцию ценности, основанную на critic от глубокой нейронной сети net. Этот синтаксис устанавливает свойство ObservationInfo critic в вход observationInfo. obsName должны содержать имена входных слоев net.

пример

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

пример

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

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

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

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

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

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

rlValueRepresentation объекты поддерживают рекуррентные глубокие нейронные сети.

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

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

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

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

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

При создании представления критика функции ценности ваша функция базиса должна иметь следующую сигнатуру.

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

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

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

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

Свойства

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

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

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

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

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

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

rlACAgentАгент обучения с подкреплением актёра-критика
rlPGAgentАгент обучения с подкреплением с градиентом политики
rlPPOAgentПроксимальный агент обучения с подкреплением оптимизации политики
getValueПолучите расчетное представление функции ценности

Примеры

свернуть все

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

obsInfo = rlNumericSpec([4 1]);

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

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

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

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

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

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

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

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

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

В данном примере создайте представления актёра и критика для агента, который может быть обучен против тележки с шестом, окружением описано в Train AC Agent для балансировки системы тележки с шестом. Во-первых, создайте окружение. Затем извлеките наблюдения и спецификации действия из окружения. Вам нужны эти спецификации, чтобы задать представления агента и критика.

env = rlPredefinedEnv("CartPole-Discrete");
obsInfo = getObservationInfo(env);
actInfo = getActionInfo(env);

Для критика функции значения состояния, такого как используемые для агентов AC или PG, входами являются наблюдения, и выход должен быть скалярным значением, значением состояния. В данном примере создайте представление критика с помощью глубокой нейронной сети с одним выходом и с сигналами наблюдения, соответствующими x, xdot, theta, и thetadot как описано в Train AC Agent для балансировки тележки с шестом. Можно получить количество наблюдений от obsInfo спецификация. Назовите входной параметр слоя сети 'observation'.

numObservation = obsInfo.Dimension(1);
criticNetwork = [
    featureInputLayer(numObservation,'Normalization','none','Name','observation')
    fullyConnectedLayer(1,'Name','CriticFC')];

Задайте опции для представления критика используя rlRepresentationOptions. Эти опции управляют обучением параметров сети критика. В данном примере установите скорость обучения равной 0,05, а градиентный порог равным 1.

repOpts = rlRepresentationOptions('LearnRate',5e-2,'GradientThreshold',1);

Создайте представление критика с помощью заданной нейронной сети и опций. Также укажите информацию о действии и наблюдении для критика. Установите имя наблюдения равным 'observation', который является частью criticNetwork входной слой.

critic = rlValueRepresentation(criticNetwork,obsInfo,'Observation',{'observation'},repOpts)
critic = 
  rlValueRepresentation with properties:

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

Точно так же создайте сеть для актёра. Агент AC решает, какое действие взять заданные наблюдения с помощью представления актера. Для актёра входами являются наблюдения, и выход зависит от того, дискретно ли пространство действий или непрерывно. Для актёра этого примера существует два возможных дискретных действия, -10 или 10. Чтобы создать актёра, используйте глубокую нейронную сеть с тем же входом наблюдений, что и критик, которая может вывести эти два значения. Вы можете получить количество действий от actInfo спецификация. Назовите выходной 'action'.

numAction = numel(actInfo.Elements); 
actorNetwork = [
    featureInputLayer(numObservation,'Normalization','none','Name','observation')
    fullyConnectedLayer(numAction,'Name','action')];

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

actor = rlStochasticActorRepresentation(actorNetwork,obsInfo,actInfo,...
    'Observation',{'observation'},repOpts)
actor = 
  rlStochasticActorRepresentation with properties:

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

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

agentOpts = rlACAgentOptions(...
    'NumStepsToLookAhead',32,...
    'DiscountFactor',0.99);
agent = rlACAgent(actor,critic,agentOpts)
agent = 
  rlACAgent with properties:

    AgentOptions: [1x1 rl.option.rlACAgentOptions]

Для дополнительных примеров, показывающих, как создать представления актёра и критика для различных типов агентов, смотрите:

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

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

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

vTable = rlTable(obsInfo);

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

vTable.Table
ans = 4×1

     0
     0
     0
     0

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

vTable.Table = reshape(1:4,4,1)
vTable = 
  rlTable with properties:

    Table: [4x1 double]

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

critic = rlValueRepresentation(vTable,obsInfo)
critic = 
  rlValueRepresentation with properties:

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

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

v = getValue(critic,{7})
v = 4

Теперь можно использовать критика (наряду с актером), чтобы создать агента, полагающегося на функцию ценности критика (такого как rlACAgent или rlPGAgent agent).

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

obsInfo = rlNumericSpec([4 1]);

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

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

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

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

W0 = [3;5;2];

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

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

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

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

v = getValue(critic,{[2 4 6 8]'})
v = 
  1x1 dlarray

  130.9453

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

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

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

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

criticNetwork = [
    sequenceInputLayer(numObs,'Normalization','none','Name','state')
    fullyConnectedLayer(8, 'Name','fc')
    reluLayer('Name','relu')
    lstmLayer(8,'OutputMode','sequence','Name','lstm')
    fullyConnectedLayer(1,'Name','output')];

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

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