Ну что, вот оно долгожданное событие! Агент самостоятельно смог пройти 5 уровней в Atari Frostbite. Хотя бы на принципиальном уровне решена проблема, поднимавшаяся в #126, #125, #123, #121.

Всё произошло в рамках 18n_study_18.5e. Было три акта прохождения:

  • 18n_ppo_tr_frostbite_06:355
  • 18n_ppo_tr_frostbite_06:359
  • 18n_ppo_tr_frostbite_06:369

Обидно только, что это случилось в самом начале или в середине, а ближе к концу агенты даже немного деградировали. Но сам факт, что агент смог пройти 5 уровней - это то, над чем я бился несколько месяцев. Значит, ёмкость архитектуры позволяет агенту одолевать 5 уровней. Осталось только оптимизировать путь обучения и саму архитектуру, чтобы результат был стабильным.

Успех закреплён в 18n_study_19.6e, тут уже побогаче:

  • 18n_ppo_tr_frostbite_06:610 (два раза финальных)
  • 18n_ppo_tr_frostbite_06:607 (два раза)
  • 18n_ppo_tr_frostbite_06:609 (два раза)
  • 18n_ppo_tr_frostbite_06:613 (один раз)

Рефлексия по пройдённому пути с Atari Frostbite, что сработало:

  1. трансформер прекрасно заменяет stacked frames. Трансформе по сути - это работа с памятью.
  2. там, где можно сломать joint, надо ломать. Например, spatial encoding - лучше сделать два отдельных экондинга по X,Y (separate), чем один объединённый (joint). Так модели нужно меньше учиться и это усиливает обобщающую способность
  3. как можно быстрее переходить на работу с латентами (что-то типа идей JEPA). Граундиться на обзервейшны (RenderHead), особенно для предсказания - это дохлый номер.
  4. стохастичность. На первых уровнях можно искусственно увеличивать стохастичность, чтобы способоствовать лучшему изучению пространства состояний. На более поздних уровнях искусственная стохастичность может мешать, т.к. а) стохастичнотсть уже и так встроена и б) сами по себе поздние уровние (например, 5-ый) уже и так достаточно сложные. Получается, что можно создать трейн РАМ-ы, которые очень сложны в прохождении. Из-за чего агент может даже деградировать, т.к. начнёт терять путевондуню нить - поток награды
  5. прохождение пятого уровня на видео захвате не гарантирует, что агент научился его проходить уверенно. Многое зависит от random_seed. Например, для random_seed=64 агент будет проходить 5-ый уровень с 20% вероятность, а с random_seed=61 - уже только с 5% вероятностью. Поэтому чтобы агент уверенно проходил 5-ый уровень, надо чтобы при обучении он проходил 6-ой уровень. Это типа как с тренировками: если пробегаешь полумарафон, то пробежать 10км - вообще ни о чём.
  6. полноцветный материал лучше серого: (3, 84, 84) » (1, 84, 84). Обучаемость на полном цвете идёт явно бодрее
  7. очень помогла декомпозиция CNN + Transformer на CNN (VisionHead) + Encoder (Transformer) + Policy (Transformer). В первом случае вся тяжесть по кодированию обзов влетает в CNN, из-за чего его колбасит и агент забывает прошлый опыт при значительном переключении палитры (см. проблему дневной/ночной уровень). Во втором случае мы морозим VisionHead и заставляем тем самым перераспределить тяжесть логики вычисления латентного представления состояния на трансформеры.
  8. одного или двух запусков не хватает. Нужно минимум 10, а лучше больше, чтобы получить адекватное представление о распределении кривых эффективности агента. Есть является “зацепляемости” (traction) - взрывной роста эффективности агента случается при наступлении комбинации событий. А чтобы эту комбинацию поймать, нужно несколько запусков с разным рандом сид
  9. естественный отбор. Прошлый пункт сам собой предлагает путь, когда для обучения на следующем этапе отбираются самые эффективные агенты. Иначе так можно впустую жечь ресурсы. Да, всегда есть вероятность с водой выплеснуть и ребёнка (оставить не выбранным более агента, который бы себя позднее проявил), но это нерабочая схема из-за дороговизны ресурсов. Если бы ресурсов было бесконечно много, то можно было бы всех проверять, но это невозможно.