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).

В данном примере создайте представления актёра и критика для агента, который может быть обучен против среды тележки с шестом, описанной в, Обучают Агента AC Балансировать Систему Тележки с шестом. Во-первых, создайте среду. Затем извлеките спецификации наблюдений и спецификации действия от среды. Вам нужны эти технические требования, чтобы задать представления критика и агент.

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

Для критика функции ценности состояния, такого как используемые для AC или агентов PG, входные параметры являются наблюдениями, и выход должен быть скалярным значением, значением состояния. В данном примере создайте представление критика с помощью глубокой нейронной сети с одним выходом, и с сигналами наблюдения, соответствующими x,xdot,theta,thetadot как описано в Обучают Агента AC Балансировать Систему Тележки с шестом. Можно получить количество наблюдений от 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. В данном примере загрузите среду, используемую в Обучении Пользовательского примера Агента LQR.

load myLQREnv.mat

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

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

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

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

n = 6;

Установите начальный вектор веса.

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

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

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

Функция, чтобы вычислить квадратичный базис из Обучает Пользовательского Агента LQR.

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. Для сетей критика этот слой является первым слоем входа path действия. Для агентов этот слой является последним слоем действия выход path.

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

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

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

Таблица Value или 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