rlStochasticActorRepresentation

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

Описание

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

Создание

Описание

Дискретное пространство действий актёра Стохастика

пример

discActor = rlStochasticActorRepresentation(net,observationInfo,discActionInfo,'Observation',obsName) создает стохастического актёра с дискретным пространством действий, используя глубокую нейронную сеть net как функциональная аппроксимация. Здесь, выходной слой net должно иметь столько элементов, сколько количество возможных дискретных действий. Этот синтаксис устанавливает свойства ObservationInfo и ActionInfo discActor к входам observationInfo и discActionInfo, соответственно. obsName должны содержать имена входных слоев net.

пример

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

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

Непрерывное пространство действий Гауссов Актёр

пример

contActor = rlStochasticActorRepresentation(net,observationInfo,contActionInfo,'Observation',obsName) создает Гауссова стохастического актёра с непрерывным пространством действий с помощью глубокой нейронной сети net как функциональная аппроксимация. Здесь, выходной слой net должно иметь в два раза больше элементов, чем количество размерностей непрерывного пространства действий. Этот синтаксис устанавливает свойства ObservationInfo и ActionInfo contActor к входам observationInfo и contActionInfo соответственно. obsName должны содержать имена входных слоев net.

Примечание

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

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

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

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

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

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

Для непрерывного стохастического актёра пространства действий, net должны иметь наблюдения как входные, так и один выходной слой, имеющий в два раза больше элементов, чем количество размерностей непрерывного пространства действий. Элементы выходного вектора представляют все средние значения, за которыми следуют все стандартные отклонения (которые должны быть неотрицательными) Гауссовых распределений для размерностей пространства действий.

Примечание

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

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

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

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

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

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

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

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

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

rlStochasticActorRepresentation устанавливает свойство ObservationInfo contActor или discActor в вход observationInfo.

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

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

Для дискретного актёра пространства действий, rlStochasticActorRepresentation устанавливает ActionInfo в вход discActionInfo, который должен быть rlFiniteSetSpec объект.

Для непрерывного актёра пространства действий, rlStochasticActorRepresentation устанавливает ActionInfo в вход contActionInfo, который должен быть rlNumericSpec объект.

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

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

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

rlACAgentАгент обучения с подкреплением актёра-критика
rlPGAgentАгент обучения с подкреплением с градиентом политики
rlPPOAgentПроксимальный агент обучения с подкреплением оптимизации политики
rlSACAgentМягкий агент обучения с подкреплением актёра-критика
getActionПолучите действие от агента или представления актера заданных наблюдений окружения

Примеры

свернуть все

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

obsInfo = rlNumericSpec([4 1]);

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

actInfo = rlFiniteSetSpec([-10 0 10]);

Создайте аппроксимацию глубокой нейронной сети для актёра. Вход сети (здесь называется state) должен принять вектор с четырьмя элементами (вектор наблюдения, только что заданный как obsInfo), и его выход (здесь называется actionProb) должен быть трехэлементным вектором. Каждый элемент выходного вектора должен быть между 0 и 1, поскольку он представляет вероятность выполнения каждого из трех возможных действий (как определено actInfo). Использование softmax в качестве выходного слоя принудительно применяет это требование.

net = [  featureInputLayer(4,'Normalization','none','Name','state')
         fullyConnectedLayer(3,'Name','fc')
         softmaxLayer('Name','actionProb')  ];

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

actor = rlStochasticActorRepresentation(net,obsInfo,actInfo,'Observation','state')
actor = 
  rlStochasticActorRepresentation with properties:

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

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

act = getAction(actor,{[1 1 1 1]}); 
act{1}
ans = 10

Теперь можно использовать актёра, чтобы создать подходящего агента, такого как rlACAgent, или rlPGAgent агент.

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

obsInfo = rlNumericSpec([6 1]);

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

actInfo = rlNumericSpec([2 1],'LowerLimit',-10,'UpperLimit',10);

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

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

% input path layers (6 by 1 input and a 2 by 1 output)
inPath = [ imageInputLayer([6 1 1], 'Normalization','none','Name','myobs') 
           fullyConnectedLayer(2,'Name','infc') ]; % 2 by 1 output

% path layers for mean value (2 by 1 input and 2 by 1 output)
% using scalingLayer to scale the range
meanPath = [ tanhLayer('Name','tanh'); % output range: (-1,1)
             scalingLayer('Name','scale','Scale',actInfo.UpperLimit) ]; % output range: (-10,10)

% path layers for standard deviations (2 by 1 input and output)
% using softplus layer to make it non negative
sdevPath =  softplusLayer('Name', 'splus');

% conctatenate two inputs (along dimension #3) to form a single (4 by 1) output layer
outLayer = concatenationLayer(3,2,'Name','mean&sdev');

% add layers to network object
net = layerGraph(inPath);
net = addLayers(net,meanPath);
net = addLayers(net,sdevPath);
net = addLayers(net,outLayer);

% connect layers: the mean value path output MUST be connected to the FIRST input of the concatenationLayer
net = connectLayers(net,'infc','tanh/in');              % connect output of inPath to meanPath input
net = connectLayers(net,'infc','splus/in');             % connect output of inPath to sdevPath input
net = connectLayers(net,'scale','mean&sdev/in1');       % connect output of meanPath to gaussPars input #1
net = connectLayers(net,'splus','mean&sdev/in2');       % connect output of sdevPath to gaussPars input #2

% plot network
plot(net)

Figure contains an axes. The axes contains an object of type graphplot.

Установите некоторые опции обучения для актёра.

actorOpts = rlRepresentationOptions('LearnRate',8e-3,'GradientThreshold',1);

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

actor = rlStochasticActorRepresentation(net, obsInfo, actInfo, 'Observation','myobs',actorOpts)
actor = 
  rlStochasticActorRepresentation with properties:

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

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

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

   -0.0763
    9.6860

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

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

obsInfo = rlNumericSpec([2 1]);

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

actInfo = rlFiniteSetSpec([7 5 3]);

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

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

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

Задайте матрицу начальных параметров.

W0 = rand(4,3);

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

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

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

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

v = getAction(actor,{rand(2,1)})
v = 1x1 cell array
    {[3]}

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

В данном примере вы создаете стохастического актёра с дискретным пространством действий с помощью рекуррентной нейронной сети. Можно также использовать рекуррентную нейронную сеть для непрерывного стохастического актёра с помощью того же метода.

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

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

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

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

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

actorOptions = rlRepresentationOptions('LearnRate',1e-3,'GradientThreshold',1);
actor = rlStochasticActorRepresentation(actorNetwork,obsInfo,actInfo,...
    'Observation','state', actorOptions);
Введенный в R2020a