Цифровые бактерии учатся узнавать цифры на фото
Сегодня будем обучать нейросеть. Но не ту, что с миллионами слоев и градиентным спуском, который вечно норовит увести нас в локальный минимум. Нет. Мы будем использовать Морфогенетический Нейро-Рой.
Звучит как название плохого фантастического фильма? Возможно. Но суть в том, что мы имитируем биологию, чтобы решить задачу, которую обычно решают чистой математикой.
Пассмотрим цифровую чашку Петри. В ней живут сотни крошечных, голодных, но очень целеустремленных BioAgent’ов. Их цель? Выжить. А еда? Рукописные цифры из классического датасета MNIST.
Да, мы заставим этих цифровых бактерий эволюционировать, чтобы они научились отличать «семерку» от «единицы». И это — без единого намёка на градиентный спуск!
Анатомия Цифровой Бактерии: Геном и Совесть
Наш главный герой — BioAgent. Это не просто нейрон. Это, по сути, одноклеточный организм, у которого есть:
Геном (W): Вектор весов размером 784. Это его «мысленный образ» того, как должна выглядеть идеальная цифра. В начале они слепы, веса инициализированы около нуля (типичный «Темный старт»).
Энергия (E): Валюта жизни. Угадал цифру — поел. Не угадал — плати за метаболизм. Классика капитализма, только в мире пикселей.
Привыкание (H): Вот тут начинается самое интересное. Это наша «цифровая совесть». Если агент слишком часто побеждает и жрёт, он «устаёт». Его чувствительность падает. Он становится ленивым и должен уступить дорогу молодым и голодным.
Ирония: Мы ввели в модель нечто, что заставляет самых успешных агентов замедляться. Потому что в реальной жизни, если ты слишком долго сидишь на одном месте, тебя съедает конкурент.
Подготовка Среды: Включаем Свет в Многомерном Пространстве
Прежде чем выпустить рой на охоту, нужно подготовить поле боя. Если просто скормить агентам сырые пиксели MNIST, они будут барахтаться в шуме.
Мы делаем трюк с предобработкой: центрирование данных.
X{input} = \frac{X{raw}}{||X{raw}||} - X{mean}
Что это значит на пальцах? Мы вычитаем из каждого изображения «среднюю картинку» всего датасета.
Представьте, что вы смотрите на кучу фотографий. Мы убираем из каждой из них общий фон и среднюю яркость. В результате, то, что было нулем (фоном), становится отрицательным (синим на визуализации), а сама цифра — положительной (красной).
Эффект? Векторы разных цифр становятся ортогональными. Они смотрят в совершенно разные стороны в 784-мерном пространстве. Для наших агентов это как если бы кто-то включил свет в тёмной пещере. Цифры стали выпуклыми и легко различимыми.
Цикл Жизни: 4 Фазы Эволюции (Без Учителя!)
Когда в среду попадает новая цифра X, запускается четырёхфазный цикл, который заменяет нам весь наш любимый градиентный спуск.
Фаза I: Восприятие и Штраф за Жадность
Каждый агент смотрит на X и считает свой Score. Но это не просто сходство. Мы вводим штраф за «привыкание» (H):
Score = (W X) - (beta H)
Если ты недавно много ел (высокий H), твой Score искусственно занижается. И ты не можешь просто так забрать всю еду. Конкуренция с совестью. (Или форма закона сохранения энергии, когда даже самое большое чудище, сидящее на ресурсе, не может одинаково легко и быстро расти бесконечно)
Фаза II: Питание и Эволюция (Правило Хебба в действии)
Победитель (максимальный Score) получает жирный кусок энергии (E \leftarrow E + R_{feed}). И тут же учится по правилу Хебба: «Neurons that fire together, wire together».
W{new} = W{old} + \eta (X - W_{old})
Он подтягивает свой геном к увиденному образу. Причем учатся и ближайшие соседи (Top-2, Top-3), но слабее. Так рождаются «банды» агентов, специализирующихся на одной и той же цифре, но с разными стилями написания.
Фаза III: Метаболизм (Естественный Отбор)
За всё надо платить. E \leftarrow E - E_{cost}. Если агент не смог найти свою нишу и не заработал достаточно, он умирает от голода (Апоптоз). Жестоко? Да. Эффективно? Ещё как!
Фаза IV: Динамика Популяции (Митоз)
Если агент накопил слишком много энергии (E > E_{threshold}), он делится. Но это не просто копирование!
Родитель отдает потомку половину энергии и веса с небольшой мутацией.
Ключевой момент: У родителя H высокий (он устал). У потомка H = 0.0 (он свежий, голодный и очень чувствительный).
Пока родитель «отдыхает» и ждет, пока его H спадет, потомок тут же бросается в бой, чтобы уточнить специализацию. Например, если родитель узнавал «восьмерку» с наклоном вправо, потомок может начать специализироваться на «восьмерке» с наклоном влево. Рой сам заполняет все возможные вариации данных!
Взгляд в Бактерии: Что там внутри?
Давайте посмотрим на результат. Перед нами снимок популяции выживших агентов после первой эпохи. (После показа системе 5000 изображений)
Помните про центрирование? Посмотрите на цвета в весах агента (например, G8 W65 — Агент 8-го поколения, 65 побед).
Красные/Желтые зоны: Возбуждение. Агент ожидает увидеть здесь чернила цифры.
Синий фон: Торможение. Агент ожидает увидеть здесь пустоту.
Этот агент — не просто набор чисел. Это фильтр, который настроен на конкретный паттерн. Если входящий пиксель совпадает с красным, а фон — с синим, происходит резонанс, и агент получает энергию. А рядом с ветеранами (W65) вы видите «шумных» новичков с W0. Они либо умрут в следующем цикле, либо найдут свою уникальную нишу, которую еще не заняли доминирующие кластеры.
Выводы: Эволюция лучше, чем градиент?
Почему этот Морфогенетический Нейро-Рой смог распознать цифры без всякого учителя?
Секрет в балансе:
Конкуренция за ресурсы (Энергия).
Механизм усталости (H), который не дает одному агенту монополизировать нишу.
Биологическое размножение с обнулением «совести» у потомства, что обеспечивает постоянное исследование новых вариаций.
Мы не учили систему, что такое «цифра 2». Мы просто создали среду, где выживание зависело от способности находить и уточнять уникальные паттерны в данных.
Мораль: Иногда, чтобы создать интеллект, нужно просто дать ему возможность проголодаться и заставить конкурировать за еду.
Если хотите посмотреть, как это всё работает в коде, загляните по ссылке: https://gitverse.ru/Nikas/NeuralNet.2025/commit/5075d6f248b2...
Что дальше?
Поле непаханное того, что можно сделать:
Разобраться как элегантно из кластеризатора сделать классификатор.
Определить точность с которой эта система классифицирует MNIST и скорость сходимости.
Вертикальный рост (в глубину). Можно создать агентов, которые смотрят не только на пиксели, а на агентов нижних слоев, исследуют глубинные архитектуры и пытаются найти такую топологическую конфигурацию, которая будет стабильно выживать.
Петлевые агенты (обратной связи) - которые смотрят на глубокие слои, находясь в нижних слоях.
Вариации на CNN. Ограничивать количество рассматриваемых агентом пикселей (чтобы он видел не всю матрицу, а только какую-то часть) Будет эффективнее по памяти и сможет находить более низкоуровневые фичи, чем готовые цифры.
Когда все предыдущее заработает можно поробовать классифицировать ImageNet
Увидимся в новой симуляции!




