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

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

Для критика функции значения состояния, такого как используемые для агентов AC или PG, входами являются наблюдения, и выход должен быть скалярным значением, значением состояния. В данном примере создайте представление критика с помощью глубокой нейронной сети с одним выходом и с сигналами наблюдения, соответствующими x,xdot,theta,thetadot как описано в Train AC Agent для балансировки тележки с шестом. Можно получить количество наблюдений от 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. Или можно создать спецификации вручную с помощью команды spec, такой как rlFiniteSetSpec или rlNumericSpec. Эта спецификация определяет такую информацию о наблюдениях, как размерности и имена сигналов наблюдения.

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

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

Спецификация действия, заданная как объект спецификации обучения с подкреплением. Можно извлечь actInfo из существующего окружения, используя getActionInfo. Или можно создать спецификацию вручную с помощью команды spec, такой как 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