exponenta event banner

rlStochasticActorRepresentation

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

Описание

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

Создание

Описание

Пространственно-стохастический актер дискретного действия

пример

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

пример

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

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

Пространство непрерывного действия Гауссов Актер

пример

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

Примечание

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

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

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

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

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

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

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

Примечание

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

Сетевые входные уровни должны быть в том же порядке и иметь тот же тип данных и те же размеры, что и сигналы, определенные в разделе «Информация о сети». Кроме того, имена этих входных слоев должны совпадать с именами наблюдений, указанными в 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). Выходные данные (здесь называемые 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