train

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

Описание

пример

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

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

Примеры

свернуть все

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

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