exponenta event banner

rlDeterministicActorRepresentation

Детерминированное представление акторов для усиливающих обучающих агентов

Описание

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

Создание

Описание

пример

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

пример

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Свойства

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

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

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

rlDeterministicActorRepresentation устанавливает ObservationInfo имущество actor на вход observationInfo.

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

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

rlDeterministicActorRepresentation устанавливает ActionInfo имущество actor на вход observationInfo.

Вы можете извлечь ActionInfo из существующей среды или агента с использованием getActionInfo. Спецификацию можно также создать вручную.

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

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

rlDDPGAgentГлубокая детерминированная политика градиентного усиления обучающий агент
rlTD3AgentДвойная задержка глубокого детерминированного усиления градиента политики обучающий агент
getActionПолучить действие от агента или актора при наблюдении за окружающей средой

Примеры

свернуть все

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

obsInfo = rlNumericSpec([4 1]);

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

actInfo = rlNumericSpec([2 1]);

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

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

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

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

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

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

act = getAction(actor,{rand(4,1)}); act{1}
ans = 2x1 single column vector

   -0.5054
    1.5390

Теперь можно использовать актера для создания подходящего агента (например, rlACAgent, rlPGAgent, или rlDDPGAgent агент).

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

obsInfo = rlNumericSpec([3 1]);

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

actInfo = rlNumericSpec([2 1]);

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

myBasisFcn = @(myobs) [myobs(2)^2; myobs(1); 2*myobs(2)+myobs(1); -myobs(3)]
myBasisFcn = function_handle with value:
    @(myobs)[myobs(2)^2;myobs(1);2*myobs(2)+myobs(1);-myobs(3)]

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

Определите начальную матрицу параметров.

W0 = rand(4,2);

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

actor = rlDeterministicActorRepresentation({myBasisFcn,W0},obsInfo,actInfo)
actor = 
  rlDeterministicActorRepresentation with properties:

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

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

a = getAction(actor,{[1 2 3]'});
a{1}
ans = 
  2x1 dlarray

    2.0595
    2.3788

Теперь можно использовать актёра (вместе с критиком) для создания подходящего непрерывного агента пространства действия.

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

obsinfo = rlNumericSpec([4 1]);
actinfo = rlNumericSpec([2 1]);
numObs = obsinfo.Dimension(1);
numAct = actinfo.Dimension(1);

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

net = [sequenceInputLayer(numObs,'Normalization','none','Name','state')
            fullyConnectedLayer(10,'Name','fc1')
            reluLayer('Name','relu1')
            lstmLayer(8,'OutputMode','sequence','Name','ActorLSTM')
            fullyConnectedLayer(20,'Name','CriticStateFC2')
            fullyConnectedLayer(numAct,'Name','action')
            tanhLayer('Name','tanh1')];

Создайте детерминированное представление актера для сети.

actorOptions = rlRepresentationOptions('LearnRate',1e-3,'GradientThreshold',1);
actor = rlDeterministicActorRepresentation(net,obsinfo,actinfo,...
    'Observation',{'state'},'Action',{'tanh1'});
Представлен в R2020a