Янник Кильчер (Yannic Kilcher), известный исследователь в области машинного обучения, продемонстрировал уникальный проект: полностью функциональную и обучаемую аналоговую нейронную сеть, построенную в Minecraft. В отличие от большинства внутриигровых компьютеров, работающих на бинарной логике, эта система использует уровни сигнала Redstone для выполнения вычислений, имитируя работу биологического мозга и современных ML-моделей.
🧱 Основы аналоговых вычислений в Minecraft 1:45
Традиционно игроки используют Redstone для создания двоичных систем (включено/выключено), однако Янник Кильчер решил использовать его аналоговую природу . Сигнал Redstone в Minecraft имеет 16 уровней интенсивности — от 0 до 15 . При передаче по обычному проводу сигнал затухает на единицу за каждый блок пути, что исследователь использовал как основу для передачи данных .
Ключевыми компонентами системы стали:
- Компоратор (Comparator): позволяет считывать сигнал и передавать его без затухания, а также выполнять операцию вычитания .
- Кафедра (Lectern): служит источником входных данных; номер открытой страницы книги преобразуется в силу сигнала .
- Повторитель (Repeater): в отличие от компаратора, всегда усиливает сигнал до максимума (15), если на входе есть хотя бы единица .
- Делитель: Янник Кильчер спроектировал схему, которая делит силу сигнала на 4, что необходимо для удержания промежуточных вычислений в диапазоне 0–15 .
🧠 Память и умножение: архитектурные блоки 4:22
Для создания нейросети потребовались более сложные логические узлы. Первым из них стала ячейка памяти, состоящая из двух компараторов, образующих замкнутый цикл . Она способна бесконечно удерживать поданный на неё сигнал. Вариация этой схемы — затухающая ячейка памяти — постепенно снижает уровень сигнала при каждом цикле, что Кильчер использовал для реализации таймеров .
Самым сложным элементом стал аналоговый множитель . Янник Кильчер признаёт, что позаимствовал базовую конструкцию у автора канала rkf vaulter, но адаптировал её для своих нужд . Принцип работы множителя:
- Один входной сигнал определяет длительность работы поршня.
- Пока поршень активен, из второго сигнала (хранящегося в памяти) вычитается определенное значение.
- Количество вычитаний пропорционально первому сигналу, что в итоге дает результат умножения в аналоговом виде .
📉 Градиентный спуск и извлечение корня 7:11
Прежде чем строить полную сеть, исследователь создал прототип: устройство для поиска квадратного корня методом градиентного спуска . По утверждению Кильчера, это первое в истории Minecraft аналоговое устройство такого типа .
Система работает следующим образом:
- В ячейке памяти хранится текущая «догадка».
- Число умножается само на себя.
- Результат сравнивается с целевым значением (например, 9) .
- Схема вычисляет сигнал ошибки и активирует поршни, которые прибавляют или отнимают единицу от «догадки» в памяти .
- Цикл повторяется, пока система не сойдется к результату (например, к 3) . Если точного целого корня не существует, механизм начинает осциллировать между двумя ближайшими числами .
🕸 Структура глубокой нейронной сети 10:41
Итоговая нейросеть имеет архитектуру 2-2-1: два входных нейрона, скрытый слой из двух нейронов и один выходной нейрон . Все слои являются полносвязными (fully connected) .
Компоненты сети:
- Веса (Weights): хранятся в четырех ячейках памяти для первого слоя и двух — для второго .
- Нелинейность (ReLU): Янник Кильчер реализовал функцию активации ReLU, которая обрезает сигналы ниже значения 4 (поскольку отрицательных чисел в Redstone нет) . К выходу ReLU всегда добавляется единица, чтобы избежать «нулевого градиента» .
- Обратное распространение (Backpropagation): после прямого прохода система вычисляет разницу между выходом и целью, а затем пускает сигнал ошибки назад через сеть .
- Оптимизатор: специальные механизмы маршрутизации позволяют использовать те же множители для вычисления обновлений весов .
⚙️ Процесс обучения и настройки 12:39
Обучение происходит в автоматическом режиме и управляется сложной системой таймеров на базе затухающих ячеек памяти . Янник Кильчер предусмотрел возможность настройки скорости обучения (learning rate) с помощью отдельных книг на кафедрах, которые ограничивают максимальный шаг изменения веса поршнями .
Цикл работы сети:
- Прямой проход (Forward Prop): сигнал идет от входов через множители весов и функции активации к выходу .
- Вычисление ошибки: сравнение результата с целевым значением и определение направления коррекции (выше/ниже) .
- Обратный проход (Backprop): вычисление необходимых градиентов для каждого веса .
- Обновление весов: поршни наносят короткие импульсы (1-tick), физически меняя уровень сигнала в ячейках памяти весов .
Исследователь продемонстрировал, как сеть успешно «переобучается» (overfit) под конкретную задачу, постепенно меняя выходной сигнал с 6 до целевых 12 после нескольких итераций обновления весов . Янник Кильчер отмечает, что проект начинался как первоапрельская шутка, но превратился в сложнейшую инженерную задачу . Исходный мир Minecraft со всеми схемами автор выложил в открытый доступ на GitHub для дальнейшего изучения сообществом .