Игрок Minecraft собрал в песочнице работающий ИИ-чатбот из 445 тысяч командных блоков без единого мода
Сообщество Minecraft давно освоило постройку графических калькуляторов, генераторов QR-кодов и даже Tetris внутри игры с помощью редстоуна и командных блоков.
Геймер, известный как Objz пошёл дальше и реализовал полноценную языковую модель, использовав 445 782 командных блока и не прибегая к модам, плагинам или датапакам. Сам создатель охарактеризовал работу коротко, назвав её "головной болью".
Модель получилась миниатюрной по современным меркам. В ней 64-мерное пространство эмбеддингов, скрытый слой на 256 нейронов и словарь всего из 2048 слов, а обучение проводилось на 11 118 диалогах из датасета DailyDialog. Общаться с чатботом можно через игровую команду "/dialog", а ответ выводится по одному слову за раз, как в привычных языковых моделях.
При этом Objz честно предупреждает, что нейросеть умеет лишь поддерживать беседу. Считать она не способна, широкими знаниями о мире не обладает и особой сообразительностью не блещет.
Главное достижение здесь именно в оптимизации. Изначальная версия с теми же возможностями занимала почти 2 миллиона блоков, и без ухищрений структура такого объёма данных и вычислений действительно потребовала бы миллионов кубов.
Веса в языковых моделях обычно хранятся в виде чисел с плавающей запятой, реализовать которые в Minecraft было бы чересчур сложно, так что автор ограничился тернарными значениями: -1, 0 и +1.
Команда "scoreboard" в Minecraft поддерживает умножение и деление, но работает только с целыми числами. Преобразование между целыми и дробными значениями добавило бы лишние операции, а квантизация до -1/0/+1 решила сразу две задачи, убрав ненужные команды и заметно сократив объём данных. Благодаря обилию нулевых весов каждая операция умножения с накоплением обходится в среднем в 0,67 команды.
Важная деталь в том, что Objz не просто округлил веса готовой модели после обучения. Квантизация применялась с самого начала при прямом проходе, а для обновления исходных чисел с плавающей запятой во время обратного распространения ошибки использовался straight-through estimator. Вместе с дополнительными оптимизациями это снизило перплексию, то есть вероятность выдать бессмысленное слово в последовательности ответа, с 48,7 до 38,8.
Из-за ограничений игры на количество одновременно выполняемых команд модель разбита на небольшие группы. Даже так на сервере с частотой 35 тиков в секунду генерация одного слова занимает около 1,8 секунды.
Создатель отмечает, что масштабировать такую архитектуру крайне дорого с вычислительной точки зрения – языковая модель на 135 миллионов параметров оказалась бы примерно в 200 раз больше нынешней постройки.
- ИИ рассчитал идеальную ферму тростника в Minecraft – она вмещает 61 растение вместо 54 у стандартной схемы
- Claude воссоздал Minecraft за 10 долларов с первой попытки
- Minecraft получила шквал критики за рекламу, где одиночных игроков назвали грустными и одинокими