exponenta event banner

rlValueRepresentation

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

Описание

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

Создание

Описание

пример

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

пример

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

пример

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Здесь obs1 кому obsN представляют собой наблюдения в том же порядке и с тем же типом данных и размерами, что и сигналы, определенные в поле «Информация о наблюдении».

Пример: @(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 to Balance Cart-Pole System. Сначала создайте среду. Затем извлеките спецификации наблюдения и действий из среды. Эти спецификации необходимы для определения представлений агента и критика.

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

Для критиков state-value-function, таких как используемые для агентов AC или PG, входами являются наблюдения, а выходом должно быть скалярное значение, значение состояния. Для этого примера создайте критическое представление с помощью глубокой нейронной сети с одним выходом и с сигналами наблюдения, соответствующими x, xdot, theta, и thetadot как описано в документе «Подготовка агента переменного тока к балансированию системы тележек-полюсов». Количество наблюдений можно получить из 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