rlDeterministicActorRepresentation

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

Описание

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

Создание

Описание

пример

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

пример

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

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

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

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

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

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