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

discActor = rlStochasticActorRepresentation(___,options) создает дискретное пространство действий, стохастический агент discActor использование дополнительных опций установило options, который является rlRepresentationOptions объект. Этот синтаксис устанавливает свойство Options 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 объект. Этот синтаксис устанавливает свойство Options contActor к options входной параметр. Можно использовать этот синтаксис с любой из предыдущих комбинаций входных аргументов.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Можно извлечь actionInfo существующей средой или агентом с помощью getActionInfo. Можно также создать спецификацию вручную с помощью rlFiniteSetSpec или rlNumericSpec.

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

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

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

Примеры

свернуть все

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

obsInfo = rlNumericSpec([4 1]);

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

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

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

net = [  imageInputLayer([4 1 1], '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). Выход (здесь названный myact) должен быть четырехмерный вектор (дважды количество размерностей, заданных actInfo). Элементы выходного вектора представляют, в последовательности, всех средних значениях и всех отклонениях каждого действия. Сеть имеет один путь для среднего значения (который масштабируется к выходной области значений), и другой путь для отклонения (где softplus слой осуществляет неотрицательность).

% observation 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') ];

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

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

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

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

% connect layers
net = connectLayers(net,'infc','tanh/in');              % connect output of inPath to meanPath input
net = connectLayers(net,'infc','splus/in');             % connect output of inPath to variancePath input
net = connectLayers(net,'scale','gaussPars/in1');       % connect output of meanPath to gaussPars input #1
net = connectLayers(net,'splus','gaussPars/in2');       % connect output of variancePath to gaussPars input #2

% plot network (the output obtained by concatenation is a 2+2 
plot(net)

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

actor = rlStochasticActorRepresentation(net, obsInfo, actInfo, 'Observation','myobs')
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 агент)

Создайте объект спецификации наблюдений (или альтернативно используйте 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: [1×1 rl.util.rlFiniteSetSpec]
    ObservationInfo: [1×1 rl.util.rlNumericSpec]
            Options: [1×1 rl.option.rlRepresentationOptions]

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

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

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

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

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

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