exponenta event banner

rlRepresentation

(Не рекомендуется) Представление модели для агентов обучения усилению

rlRepresentation не рекомендуется. Использовать rlValueRepresentation, rlQValueRepresentation, rlDeterministicActorRepresentation, или rlStochasticActorRepresentation вместо этого. Дополнительные сведения см. в разделе Вопросы совместимости.

Описание

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

пример

rep = rlRepresentation(net,obsInfo,'Observation',obsNames) создает представление для глубокой нейронной сети net. Имена наблюдений obsNames - имена сетевых входных уровней. obsInfo содержит соответствующие спецификации наблюдения для среды обучения. Этот синтаксис используется для создания представления для критика, не требующего ввода действий, например, для критика rlACAgent или rlPGAgent агент.

пример

rep = rlRepresentation(net,obsInfo,actInfo,'Observation',obsNames,'Action',actNames) создает представление с сигналами действий, заданными именами actNames и спецификации actInfo. Используйте этот синтаксис, чтобы создать представление для любого актера или для критика, который принимает как наблюдение, так и действие в качестве входных данных, например критика для rlDQNAgent или rlDDPGAgent агент.

пример

tableCritic = rlRepresentation(tab) создает критическое представление для таблицы значений или таблицы Q tab. При создании табличного представления задаются параметры наблюдения и действия при создании tab.

critic = rlRepresentation(basisFcn,W0,obsInfo) создает представление линейной базисной функции с использованием маркера перемещения к пользовательской базисной функции basisFcn и исходный весовой вектор W0. obsInfo содержит соответствующие спецификации наблюдения для среды обучения. Этот синтаксис используется для создания представления для критика, не требующего ввода действий, например, для критика rlACAgent или rlPGAgent агент.

critic = rlRepresentation(basisFcn,W0,oaInfo) создает представление линейной базисной функции с использованием массива ячеек спецификации oaInfo, где oaInfo = {obsInfo,actInfo}. Используйте этот синтаксис, чтобы создать представление для критика, который принимает как наблюдения, так и действия в качестве входных данных, например критика для rlDQNAgent или rlDDPGAgent агент.

actor = rlRepresentation(basisFcn,W0,obsInfo,actInfo) создает представление линейной базисной функции с использованием заданных характеристик наблюдения и действия; obsInfo и actInfoсоответственно. Этот синтаксис используется для создания представления для актера, принимающего наблюдения в качестве входных данных и генерирующего действия.

пример

rep = rlRepresentation(___,repOpts) создает представление с помощью дополнительных опций, задающих параметры обучения для представления при обучении агента. Доступные варианты включают оптимизатор, используемый для обучения, и скорость обучения. Использовать rlRepresentationOptions для создания набора опций repOpts. Этот синтаксис можно использовать с любой из предыдущих комбинаций входных аргументов.

Примеры

свернуть все

Создайте представление актера и представление критика, которое можно использовать для определения агента обучения усилению, такого как агент критика актера (AC).

Для этого примера создайте представления актера и критика для агента, который может быть обучен работе с средой тележек, описанной в документе Train AC Agent to Balance Cart-Pole System. Сначала создайте среду. Затем извлеките спецификации наблюдения и действий из среды. Эти спецификации необходимы для определения представлений агента и критика.

env = rlPredefinedEnv("CartPole-Discrete");
obsInfo = getObservationInfo(env);
actInfo = getActionInfo(env);

Для критиков state-value-function, таких как используемые для агентов AC или PG, входами являются наблюдения, а выходом должно быть скалярное значение, значение состояния. Для этого примера создайте критическое представление с помощью глубокой нейронной сети с одним выходом и с сигналами наблюдения, соответствующими x,xdot,theta,thetadot как описано в документе «Подготовка агента переменного тока к балансированию системы тележек-полюсов». Количество наблюдений можно получить из obsInfo спецификация. Присвойте имя входному сигналу сетевого уровня 'observation'.

numObservation = obsInfo.Dimension(1);
criticNetwork = [
    imageInputLayer([numObservation 1 1],'Normalization','none','Name','observation')
    fullyConnectedLayer(1,'Name','CriticFC')];

Укажите параметры критического представления с помощью rlRepresentationOptions. Эти опции управляют параметрами сетевого обучения критиков, когда вы обучаете агента, который включает представление критиков. Для этого примера установите коэффициент обучения 0,05, а порог градиента - 1.

repOpts = rlRepresentationOptions('LearnRate',5e-2,'GradientThreshold',1);

Создайте критическое представление, используя указанную нейронную сеть и опции. Также укажите для критика информацию о действиях и наблюдениях. Задайте для имени наблюдения значение 'observation', которое используется при создании уровня сетевого ввода для criticNetwork.

critic = rlRepresentation(criticNetwork,obsInfo,'Observation',{'observation'},repOpts)
critic = 
  rlValueRepresentation with properties:

            Options: [1x1 rl.option.rlRepresentationOptions]
    ObservationInfo: [1x1 rl.util.rlNumericSpec]
         ActionInfo: {1x0 cell}

Аналогично, создайте сеть для актера. Агент AC решает, какое действие следует предпринять для данных наблюдений, используя представление актера. Для актера входами являются наблюдения, а выход зависит от того, является ли пространство действия дискретным или непрерывным. Для актёра этого примера существует два возможных дискретных действия, -10 или 10. Таким образом, для создания актёра используйте глубокую нейронную сеть с тем же входом наблюдения, что и критик, которая может выводить эти два значения. Вы можете получить количество действий из actInfo спецификация. Назовите выходные данные 'action'.

numAction = numel(actInfo.Elements); 
actorNetwork = [
    imageInputLayer([4 1 1], 'Normalization','none','Name','observation')
    fullyConnectedLayer(numAction,'Name','action')];

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

actor = rlRepresentation(actorNetwork,obsInfo,actInfo,...
    'Observation',{'observation'},'Action',{'action'},repOpts)
actor = 
  rlStochasticActorRepresentation with properties:

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

Теперь можно использовать представление актера и критика для создания агента AC.

agentOpts = rlACAgentOptions(...
    'NumStepsToLookAhead',32,...
    'DiscountFactor',0.99);
agent = rlACAgent(actor,critic,agentOpts)
agent = 
  rlACAgent with properties:

    AgentOptions: [1x1 rl.option.rlACAgentOptions]

В этом примере показано, как создать представление таблицы Q:

Создайте интерфейс среды.

env = rlPredefinedEnv("BasicGridWorld");

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

qTable = rlTable(getObservationInfo(env),getActionInfo(env));

Создайте представление для таблицы Q.

tableRep = rlRepresentation(qTable);

В этом примере показано, как создать представление критика линейной базовой функции.

Предположим, что у вас есть среда, env. В этом примере следует загрузить среду, используемую в примере Train Custom LQR Agent.

load myLQREnv.mat

Получение спецификаций наблюдения и действий из среды.

obsInfo = getObservationInfo(env);
actInfo = getActionInfo(env);

Создайте пользовательскую базисную функцию. В этом случае используйте функцию квадратичного базиса из Train Custom LQR Agent.

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

n = 6;

Задайте начальный весовой вектор.

w0 = 0.1*ones(0.5*(n+1)*n,1);

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

critic = rlRepresentation(@(x,u) computeQuadraticBasis(x,u,n),w0,{obsInfo,actInfo});

Функция для вычисления квадратичного базиса от Train Custom LQR Agent.

function B = computeQuadraticBasis(x,u,n)
z = cat(1,x,u);
idx = 1;
for r = 1:n
    for c = r:n
        if idx == 1
            B = z(r)*z(c);
        else
            B = cat(1,B,z(r)*z(c));
        end
        idx = idx + 1;
    end
end
end

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

свернуть все

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

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

Имена наблюдений, заданные как массив ячеек векторов символов. Имена наблюдений - это имена сетевых входных слоев, задаваемые при создании net. Имена в obsNames должны быть в том же порядке, что и спецификации наблюдения в obsInfo.

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

Спецификация наблюдения, заданная как объект спецификации обучения армированию или массив объектов спецификации. Вы можете извлечь obsInfo из существующей среды с использованием getObservationInfo. Можно также создать спецификации вручную с помощью команды спецификации, например: rlFiniteSetSpec или rlNumericSpec. Эта спецификация определяет такую информацию о наблюдениях, как размеры и названия сигналов наблюдения.

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

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

Спецификация действия, заданная как объект спецификации обучения усилению. Вы можете извлечь actInfo из существующей среды с использованием getActionInfo. Кроме того, можно создать спецификацию вручную с помощью команды спецификации, например: rlFiniteSetSpec или rlNumericSpec. Эта спецификация определяет такую информацию о действии как размеры и имя сигнала действия.

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

Таблица значений или таблица Q для критика, указанная как rlTable объект. Обучаемые параметры представления таблицы являются элементами tab.

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

При создании:

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

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

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

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

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

    Здесь obs1 кому obsN являются наблюдениями в том же порядке и с тем же типом данных и размерами, что и спецификации наблюдения в первом элементе oaInfo, и act имеет тот же тип данных и размеры, что и спецификация действия во втором элементе oaInfo.

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

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

    Здесь, obs1 кому obsN являются наблюдениями в том же порядке и с тем же типом данных и размерами, что и спецификации наблюдения в obsInfo. Типы данных и размеры спецификации действия в actInfo влияют на тип данных и измерения f.

Пример: @(x,u) myBasisFunction(x,u)

Начальное значение для массива веса линейной базисной функции, W, указано как одно из следующих:

  • Вектор столбца - при создании критического представления или представления актера с непрерывным скалярным сигналом действия

  • Массив - при создании представления актера с помощью сигнала непрерывного действия вектора столбца или дискретного пространства действия.

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

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

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

свернуть все

Глубокое представление нейронной сети, возвращенное как rlLayerRepresentation объект. Это представление используется для создания агента для обучения усилению. Дополнительные сведения см. в разделе Усиление агентов обучения.

Значение или представление критика таблицы Q, возвращенное как rlTableRepresentation объект. Это представление используется для создания агента для обучения усилению. Дополнительные сведения см. в разделе Усиление агентов обучения.

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

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

Вопросы совместимости

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

Не рекомендуется начинать с R2020a

Представлен в R2019a