Разработчик tinyworldformer запустил на Raspberry Pi Pico 2 W сразу две небольшие нейросети: модель мира предсказывает следующий кадр и награду по текущему кадру и действию, а сеть-актор выбирает действие по сгенерированному изображению. На микроконтроллере настоящая игровая логика не используется: обе сети взаимодействуют только друг с другом. Нажатие кнопки позволяет человеку самому играть внутри созданного моделью мира. Поддерживаются упрощённые Breakout, Doom-lite, Flappy Bird, Pong и Pac-Man. Модель мира содержит от 26 до 131 тысячи параметров и выполняет примерно 2–8 миллионов умножений с накоплением на кадр. Актору хватает 9–16 тысяч параметров. Обе сети работают на ядре RP2350, а второе ядро обслуживает USB и дисплей. Модель использует один блок transformer с повторным применением одних и тех же весов. Число проходов можно менять от одного до четырёх, выбирая между скоростью и точностью; на Pico обычно применяются два. Кадр разбивается на участки, которые превращаются в 36–80 токенов. Отдельные правила декодирования гарантируют, что мяч, игрок или привидение не появятся одновременно в нескольких копиях. Для Breakout такой подход поднял долю полностью точных кадров с 91,6% до 99,7% на одном из этапов работы. На отложенных данных при двух проходах полное совпадение кадров составило 99,99% для Breakout, 100% для Flappy Bird, 99,45% для Pong, 83,6% для Doom-lite и 86,4% для Pac-Man. Эти показатели исключают кадры сразу после случайных событий. Более строгая проверка во время игры актора сравнивала состояние и награду с настоящими правилами: Pac-Man оказался значительно менее надёжным остальных, а Flappy Bird не дал ошибок состояния за 5000 шагов. Обучение использует записи настоящих игр, квантование int8 и последующую дообучающую выборку из состояний, которые актор находит внутри модели. Это нужно потому, что агенты эксплуатировали ошибки сгенерированного мира: например, получали очки за несуществующие кирпичи. Актор обучается алгоритмом Stream AC(λ) без буфера повторного опыта и может начинать обучение с нуля на самой плате. Прошивка написана на no_std Rust, применяет статические буферы и умещается в 4 МБ flash и доступную SRAM. Самый крупный вариант Pac-Man занимает 600 КБ flash и 460 КБ RAM. Тот же движок компилируется в WebAssembly. При этом автор ещё не измерил частоту кадров на самом Pico, поэтому заявленные вычислительные затраты не равны подтверждённой скорости игры на устройстве.
Крошечная модель мира запускает игры на Raspberry Pi Pico
29.10.2026 20:32 · hackernews