rlValueRepresentation

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

Описание

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

Создание

Описание

пример

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 использование пользовательской основной функции как базовая аппроксимация. Первый входной параметр является ячейкой 2D элементов, в которой первый элемент содержит указатель basisFcn к пользовательской основной функции и второму элементу содержит начальный вектор веса W0. Этот синтаксис устанавливает свойство ObservationInfo critic к входу observationInfo.

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

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

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

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

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

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

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

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

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

Таблица Value в виде 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 объект. Доступные параметры включают оптимизатор, используемый в обучении и скорости обучения.

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

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

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

Примеры

свернуть все

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

obsInfo = rlNumericSpec([4 1]);

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

net = [imageInputLayer([4 1 1], '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).

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

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

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

numObservation = obsInfo.Dimension(1);
criticNetwork = [
    imageInputLayer([numObservation 1 1],'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 = [
    imageInputLayer([4 1 1], '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: [1×1 rl.util.rlNumericSpec]
            Options: [1×1 rl.option.rlRepresentationOptions]

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

v = getValue(critic,{[2 4 6 8]'})
v = 
  1×1 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