train

Обучите агент изучения укрепления в заданной среде

Синтаксис

trainStats = train(agent,env,trainOpts)

Описание

пример

trainStats = train(agent,env,trainOpts) обучает агент изучения укрепления с заданной средой. После каждого учебного эпизода train обновляет параметры agent, чтобы максимизировать ожидаемое долгосрочное вознаграждение среды. Когда обучение останавливается, агент отражает состояние обучения при завершении.

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

Примеры

свернуть все

Сконфигурируйте учебные параметры и обучите агент изучения укрепления. Как правило, перед обучением, необходимо сконфигурировать среду и агент. В данном примере загрузите среду и агент, которые уже сконфигурированы. Среда является дискретной полюсной корзиной средой, созданной с rlPredefinedEnv. Агент является Градиентом политики (rlPGAgent) агент. Для получения дополнительной информации о среде и агенте, используемом в этом примере, смотрите Train Агент PG, чтобы Сбалансировать полюсную Корзиной Систему.

rng(0); % for reproducibility
load RLTrainExample.mat
env
env = 
  CartPoleDiscreteAction with properties:

                  Gravity: 9.8000
                 MassCart: 1
                 MassPole: 0.1000
                   Length: 0.5000
                 MaxForce: 10
                       Ts: 0.0200
    ThetaThresholdRadians: 0.2094
               XThreshold: 2.4000
      RewardForNotFalling: 1
        PenaltyForFalling: -5
                    State: [4×1 double]

agent
agent = 
  rlPGAgent with properties:

    AgentOptions: [1×1 rl.option.rlPGAgentOptions]

Чтобы обучить этот агент, необходимо сначала задать учебные параметры с помощью rlTrainingOptions. Эти параметры включают максимальное количество эпизодов, чтобы обучаться, максимальные шаги на эпизод и условия для завершения обучения. В данном примере используйте максимум 1 000 эпизодов и 500 шагов на эпизод. Сообщите обучению остановиться, когда среднее вознаграждение по предыдущим пяти эпизодам достигнет 500. Создайте набор опций по умолчанию и используйте запись через точку, чтобы изменить некоторые значения параметров.

trainOpts = rlTrainingOptions;

trainOpts.MaxEpisodes                = 1000;
trainOpts.MaxStepsPerEpisode         = 500;
trainOpts.StopTrainingCriteria       = "AverageReward";
trainOpts.StopTrainingValue          = 500;
trainOpts.ScoreAveragingWindowLength = 5;

Во время обучения команда train может сохранить агенты кандидата, которые дают хорошие результаты. Далее сконфигурируйте опции обучения, чтобы сохранить агент, когда вознаграждение эпизода превысит 500. Сохраните агент в папку под названием savedAgents.

trainOpts.SaveAgentCriteria  = "EpisodeReward";
trainOpts.SaveAgentValue     = 500;
trainOpts.SaveAgentDirectory = "savedAgents";

Наконец, выключите отображение командной строки. Включите Укрепление, Изучив менеджера по Эпизоду, таким образом, можно наблюдать учебный прогресс визуально.

trainOpts.Verbose = false;
trainOpts.Plots =   "training-progress";

Вы теперь готовы обучить агент PG. Для предопределенной полюсной корзиной среды, используемой в этом примере. можно использовать plot, чтобы сгенерировать визуализацию полюсной корзиной системы.

plot(env);

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

trainingInfo = train(agent,env,trainOpts);

Менеджер по Эпизоду показывает, что обучение успешно достигает условия завершения вознаграждения 500 усредненных по предыдущим пяти эпизодам. В каждом учебном эпизоде train обновляет agent с параметрами, изученными в предыдущем эпизоде. Когда обучение останавливается, можно моделировать среду с обученным агентом, чтобы оценить его производительность. График среды обновляет во время симуляции, как это сделало во время обучения.

simOptions = rlSimulationOptions('MaxSteps',500);
experience = sim(env,agent,simOptions);

Во время обучения train сохраняет на диск любые агенты, которые удовлетворяют условию, заданному с trainOps.SaveAgentCritera и trainOpts.SaveAgentValue. Чтобы проверить производительность любого из тех агентов, можно загрузить данные из файлов данных в папке, вы задали использование trainOpts.SaveAgentDirectory, и моделируйте среду с тем агентом.

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

свернуть все

Агент, чтобы обучаться, заданный как укрепление, изучая объект агента, такой как объект rlACAgent или rlDDPGAgent или пользовательский агент. Перед обучением необходимо сконфигурировать агента и представления критика агента. Для получения дополнительной информации о том, как создать и сконфигурировать агенты для изучения укрепления, смотрите, что Укрепление Изучает Агенты.

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

  • Предопределенный MATLAB® или среда Simulink®, созданная с помощью rlPredefinedEnv

  • Пользовательская среда MATLAB вы создаете с функциями, такими как rlFunctionEnv или rlCreateEnvTemplate

  • Пользовательское окружение Simulink вы создаете использование rlSimulinkEnv

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

Когда env является окружением Simulink, вызывая компиляции train и моделирует модель, сопоставленную со средой.

Учебные параметры и опции, заданные как объект rlTrainingOptions. Используйте этот аргумент, чтобы задать такие параметры и опции как:

  • Критерии конечного обучения

  • Критерии сохранения агентов кандидата

  • Как отобразить учебный прогресс

  • Опции для параллельных вычислений

Для получения дополнительной информации смотрите rlTrainingOptions.

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

свернуть все

Учебные данные об эпизоде, возвращенные как структура, содержащая следующие поля.

Числа эпизода, возвращенные как вектор-столбец [1;2;…;N], где N является количеством эпизодов в учебном выполнении. Этот вектор полезен, если вы хотите построить эволюцию других количеств от эпизода до эпизода.

Вознаградите за каждый эпизод, возвращенный в вектор-столбце длины N. Каждая запись содержит вознаграждение за соответствующий эпизод.

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

Среднее вознаграждение по окну усреднения, заданному в trainOpts, возвращенном как вектор-столбец длины N. Каждая запись содержит среднюю премию, вычисленную в конце соответствующего эпизода.

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

Оценка критика долгосрочного вознаграждения с помощью текущего агента и начальных условий среды, возвращенных как вектор-столбец длины N. Каждая запись является оценкой критика (Q 0) для агента соответствующего эпизода. Это поле присутствует только для агентов, которые имеют критиков, таких как rlDDPGAgent и rlDQNAgent.

Информация, собранная во время симуляций, выполняемых для обучения, возвращенного как:

  • Для обучения в средах MATLAB, структура, содержащая поле SimulationError. Это поле является вектор-столбцом с одной записью на эпизод. Когда опцией StopOnError rlTrainingOptions является "off", каждая запись содержит любые ошибки, которые произошли во время соответствующего эпизода.

  • Для обучения в окружениях Simulink вектор объектов Simulink.SimulationOutput, содержащих данные моделирования, зарегистрирован во время соответствующего эпизода. Записанные данные для эпизода включают любые сигналы и утверждают, что модель сконфигурирована, чтобы регистрировать, метаданные симуляции и любые ошибки, которые произошли во время соответствующего эпизода.

Советы

  • train обновляет агент, в то время как обучение прогрессирует. Чтобы сохранить исходные параметры агента для дальнейшего использования, сохраните агент в MAT-файл.

  • По умолчанию вызов train открывает Укрепление, Изучая менеджера по Эпизоду, который позволяет вам визуализировать прогресс обучения. Менеджер по Эпизоду, которого график показывает вознаграждению за каждый эпизод, рабочее среднее премиальное значение и критика, оценивает Q 0 (для агентов, которые имеют критиков). Менеджер по Эпизоду также отображает различный эпизод и учебную статистику. Чтобы выключить Укрепление, Изучая менеджера по Эпизоду, установите опцию Plots trainOpts к "none".

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

  • Обучение останавливается, когда условия, заданные в trainOpts, удовлетворены. Чтобы отключить происходящее обучение, в Укреплении, Изучая менеджера по Эпизоду, нажимают Stop Training. Поскольку train обновляет агент в каждом эпизоде, можно возобновить обучение путем вызова train(agent,env,trainOpts) снова, не теряя обученные параметры, изученные во время первого вызова train.

  • Во время обучения можно сохранить агенты кандидата, которые удовлетворяют условиям, которые вы задаете с trainOpts. Например, можно сохранить любой агент, вознаграждение эпизода которого превышает определенное значение, даже если полное условие для завершения обучения еще не удовлетворено. train хранит сохраненные агенты в MAT-файле в папке, которую вы задаете с trainOpts. Сохраненные агенты могут быть полезными, например, чтобы позволить вам тестировать агенты кандидата, сгенерированные во время продолжительного учебного процесса. Для получения дополнительной информации о сохранении критериев и сохранении местоположения, смотрите rlTrainingOptions.

Алгоритмы

В целом train выполняет выполняющие итеративные шаги:

  1. Инициализируйте agent.

  2. Для каждого эпизода:

    1. Сбросьте среду.

    2. Получите начальное наблюдение s 0 от среды.

    3. Вычислите начальное действие a 0 = μ (s 0).

    4. Установите текущее действие на начальное действие (a a0) и установите текущее наблюдение на начальное наблюдение (s s0).

    5. В то время как эпизод не закончен или отключен:

      1. Шаг среда с действием a, чтобы получить следующее наблюдение s' и вознаграждение r.

      2. Извлеките уроки из набора опыта (s, a, r, s').

      3. Вычислите следующее действие a' = μ (s').

      4. Обновите текущее действие со следующим действием (aa') и обновите текущее наблюдение со следующим наблюдением (ss').

      5. Повредитесь, если условия завершения эпизода, заданные в среде, соблюдают.

  3. Если учебное условие завершения, заданное trainOpts, соблюдают, оконечное обучение. В противном случае начните следующий эпизод.

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

Расширенные возможности

Введенный в R2019a

Для просмотра документации необходимо авторизоваться на сайте