Понимание параметра total_timesteps в моделях стабильных базовых линий - PullRequest
1 голос
/ 21 июня 2019

Я читаю оригинальную бумагу PPO и пытаюсь сопоставить ее с входными параметрами модели stable-baselines PPO2 .

Одна вещь, которую я не понимаю, это параметр total_timesteps в методе learn.

В документе упоминается

Один стиль реализации градиента политики ... запускает политику для T временных шагов (где T намного меньше, чем длина эпизода)

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

(int) Общее количество образцов для обучения на

Поэтому я думаю, что T в документе и total_timesteps в документации - это один и тот же параметр.

Что я не понимаю, так это:

  • Всегда ли total_timesteps должно быть меньше или равно общему количеству доступных «кадров» (сэмплов) в среде (например, если у меня было конечное число кадров, например, 1 000 000). Если так, то почему?

  • Установив total_timesteps на число, меньшее количества доступных кадров, какую часть обучающих данных видит агент? Например, если total_timesteps=1000, видит ли агент только первые 1000 кадров?

  • Определяется ли эпизод как общее количество доступных кадров, или он определяется, как когда агент впервые «проигрывает» / «умирает»? Если последнее, то как вы можете знать заранее, когда агент умрет, чтобы иметь возможность установить total_timesteps на меньшее значение?

Я все еще изучаю терминологию, стоящую за RL, поэтому я надеюсь, что смог четко объяснить свой вопрос выше. Любая помощь / советы будут очень приветствоваться.

1 Ответ

2 голосов
/ 26 июня 2019

В соответствии с исходным кодом stable-baselines

  • total_timesteps - это количество шагов всего , которые агент выполнит для любой среды.Total_timesteps может быть в нескольких эпизодах, что означает, что это значение не ограничено каким-либо максимумом.
  • Допустим, у вас есть среда с более чем 1000 временными шагами.Если вы вызовете функцию обучения один раз, вы получите только первые 1000 кадров, а оставшаяся часть эпизода неизвестна.Во многих экспериментах вы знаете, сколько временных шагов должна длиться среда (т. Е. CartPole), но для сред с неизвестной длиной это становится менее полезным.НО.Если вы дважды вызовете функцию обучения и скажете, что эпизод среды имеет 1500 кадров, вы увидите полный эпизод + 50% от 2-го.
  • Эпизод определяется в той степени, в которой флаг терминала установлен наtrue (в тренажерном зале это также часто устанавливается после максимального временного шага). Многие другие реализации RL вместо этого используют total_episodes, так что вам не нужно заботиться о временном шаге, но, опять же, недостатком может быть то, что вы можете получить толькозапуск 1 эпизода, если вы попали в поглощающее состояние.

Аргумент общего временного шага также использует n_steps, где количество обновлений рассчитывается на основе следующего:

n_updates = total_timesteps // self.n_batch

, где n_batch - это n_steps timesколичество векторизованных сред.

Это означает, что если бы у вас была 1 среда, работающая с n_step, установленным в 32 и total_timesteps = 25000, вы бы сделали 781 обновление вашей политики во время вызова обучения (исключая эпохи, какPPO может сделать несколько обновлений в одной партии)

Урок:

  • Для envs неизвестного размера вам придется поиграть с этим значением.Возможно, создайте среднюю длительность эпизода и используйте это значение
  • Там, где известна длина эпизода, установите желаемое количество эпизодов, которые вы хотите обучить.Однако, это может быть меньше, потому что агент не может (вероятно, не достигнет) максимального количества шагов каждый раз.
  • TLDR воспроизводит значение (рассматривает его как гиперпараметр)

Надеюсь, что этопомогает!

...