Я реализовал несколько алгоритмов обучения с подкреплением, используя Tensorflow. Для непрерывных методов (например, DDPG, TD3) я запускал их на BipedalWalker ; для дискретных методов (например, DQN, Rainbow) я запускал их на играх Atari .
Я намеренно разделяю обучение и взаимодействие со средой, обучая сети в фоновом потоке (через стандартный модуль Python threading.Thread
). Я обнаружил, что это ускорило те методы, которые выполняются на BipedalWalker, но это повредило их в играх Atari. Что делает эти различия? Это как-то связано с питоном GIL ?
Одной из причин, по которой я могу предположить, является то, что фоновое обучение увеличивает частоту обучения, что делает его более подходящим для адаптации и застревания на местном оптимуме.