Суть проекта: Нейросети как игровой процесс
Разработчик mottopanikeiku представил проект Doomformer, в котором архитектура нейронной сети полностью скомпилирована в уровни DOOM. Ввод данных — это 28x28 пикселей, которые «чернила» марин оставляет на полу, удерживая кнопку огня. Сама сеть работает через механику игры:
- Входные данные: 784 тайла (пикселя) для MNIST или токены для текста.
- Нейроны: 1,345 «вуду-кукол» (voodoo dolls), которые перемещаются по конвейерам, лаве и лестницам, представляя активации и веса.
- Вычисления: Умножение матриц — это движение кукол по линиям лавы, повышающим уровень освещения. Attention-механизм — это прохождение кукол под сниженными потолками.
- Верификация: Каждый шаг проверяется против эталонных вычислений NumPy с допуском 0. Ошибка в 1 единицу приводит к провалу теста.
Производительность и метрики
Тестирование проводилось на 16-ядерной машине Linux с запуском до 8 экземпляров DOOM параллельно. Ниже приведены результаты выполнения различных задач:
| Режим (Сложность) | Задача | Команда | Время выполнения | Детали |
|---|---|---|---|---|
| I'm too young to die | Малый MLP (4-6-5-3) | doomformer hello | 3 сек | 60 кукол, 1,222 сектора. Точное совпадение 3 выходов + 22 скрытых узлов. |
| Hey, not too rough | Распознавание цифр MNIST | doomformer mnist | ~2 мин (real-time) 76-99 сек (headless) |
1,355 кукол, 158,550 секторов. 97.16% точность на 10,000 тестовых примерах. 248 значений проверяются на точность. |
| Hurt me plenty | Генерация названий уровней (Transformer) | doomformer demo | 20 сек | Обучен на 136 названиях. Генерирует новые имена (например, 'GHEER'). 10,462 кукол в 8 параллельных играх. |
| Ultra-Violence | QA-система по DOOM | doomformer ask | 7-11 мин | 2-слойный Transformer, 189 фактов. Ответы генерируются побуквенно (каждые ~20 сек). Все значения точны. |
| Nightmare! | Полный Transformer в одной карте | doomformer demo --nightmare | 2-4 мин | 106 карт, 56,390 кукол. Полная автономность без Python в цикле генерации. |
Технические детали реализации
Проект демонстрирует возможность выполнения сложных математических операций через игровые движки. Для режима --one-map вся архитектура (встраивание, attention, MLP, логиты) помещается в одну карту без участия Python между слоями. Это требует около 90 секунд на генерацию одного символа.
Используемые оптимизации включают:
- Softmax: Вычисление экспонент через лестницы с логарифмическим шагом и деление через подсчет сравнений.
- RMSNorm и ReGLU: Вычисление сумм квадратов (как сумма нечетных чисел) и целочисленного корня (через лестницу d·k²).
Для запуска требуется Python 3.11+, Linux/macOS, а также git, cmake и C-компилятор для сборки скриптов DOOM. Доступна также версия в Google Colab для быстрого тестирования без установки.
Источник: Github ↗
