В 1970 году математик Джон Конвей придумал игру без игроков.
Сетка. Клетки. Три правила. Меньше двух соседей — умираешь от одиночества. Больше трёх — от тесноты. Ровно три соседа рядом с пустой клеткой — рождается новая.
Всё.
Из этого появились глайдеры — структуры, которые ползут по полю. Пушки, которые стреляют глайдерами. Компьютеры внутри игры, способные вычислять что угодно. Целая вселенная — из трёх строчек логики.
Но вот что не давало мне покоя.
Клетки в «Жизни» не выбирают. Они подчиняются. Правило сработало — клетка умерла. Никаких переговоров.
А что, если дать клеткам мозг?
Червь, который знает слишком много
Неделю назад YouTube подсунул лекцию, после которой я не спал до четырёх утра.
Майкл Левин. Биолог из Tufts. Человек, который режет червей.
Звучит как начало хоррора. Но подождите.
Левин берёт планарию — плоского червя в сантиметр длиной. Отрезает голову. Через неделю — новая голова. Отрезает хвост — новый хвост. Режет пополам — два червя. Режет на двадцать частей — двадцать червей.
Каждый кусок знает, чем стать.
Но дальше — то, что сломало мне картину мира.
Левин меняет не ДНК. Не гены. Он меняет электрические сигналы на мембранах клеток. Паттерн напряжения. И из обычного фрагмента вырастает червь с двумя головами.
Пауза.
Где хранится план тела?
Не в геноме — он одинаковый во всех клетках. Не в «главной» клетке — её нет.
Левин говорит: план распределён. Клетки общаются. Голосуют. Спорят. Приходят к консенсусу. Миллиарды крошечных агентов, каждый из которых видит только соседей — а вместе строят организм.
Коллективный интеллект.
Я закрыл ноутбук. Посмотрел на сервер в углу комнаты. Открыл ноутбук снова.
Что если клетки — это нейросети?
Идея, от которой не отвяжешься
У меня уже был опыт с популяциями моделей. Двести microGPT, вирус, эволюция иммунитета. Инфраструктура готова. RTX 4090 жужжит круглосуточно.
Но в том эксперименте модели жили в изоляции. Каждая — в своей пробирке. А у Левина клетки разговаривают.
И тут щёлкнуло.
«Жизнь» Конвея — детерминизм. Правила жёсткие, выбора нет. Но структуры возникают.
Что если заменить правила на понимание?
Не «если соседей меньше двух — умри». А «посмотри на соседей, подумай, реши сам».
Нейросеть вместо if-else.
LLM вместо Game of Life.
Только…
Little Language Models
Стоп. LLM?
Large Language Model на каждую клетку — это безумие. 50 клеток × 500 шагов симуляции × 8 миллиардов параметров = мой сервер плавится, а счёт за электричество уходит в космос.
Но кто сказал, что L — это Large?
L — это Little.
Little Language Model. Микроскопический трансформер. Тысячи параметров вместо миллиардов. Attention на 32 измерения. Один слой.
Достаточно, чтобы смотреть на восьмерых соседей и выбирать действие.
Мозг клетки — не GPT-4. Мозг клетки — 6 килобайт весов.
class CellBrain(nn.Module):
"""Мозг клетки. 6,437 параметров."""
def __init__(self):
super().__init__()
self.type_embed = nn.Embedding(5, 32) # 5 типов клеток → 32 измерения
self.pos_embed = nn.Embedding(8, 32) # 8 позиций соседей
self.attn = nn.MultiheadAttention(32, num_heads=4, batch_first=True)
self.fc = nn.Linear(32, 5) # 5 возможных действий
def forward(self, neighbors):
# neighbors: (batch, 8) — типы восьми соседей
x = self.type_embed(neighbors) + self.pos_embed.weight
x, _ = self.attn(x, x, x)
return self.fc(x.mean(dim=1))
Это настоящая нейросеть. С attention. С обучаемыми весами. Просто очень маленькая.
Fifty LittleLM.
Посмотрим, хватит ли им мозгов, чтобы договориться.
Правила игры
Сетка 15×15. В центре — облако из 50 клеток. Все «стволовые» — ещё не определились, кем стать.
Каждый ход:
-
Клетка смотрит на восемь соседей
-
Нейросеть выдаёт действие:
stay,become_A,become_B,divide,die -
Все клетки действуют одновременно
Цель: построить форму. Для начала — крест.
Пять клеток вертикально, три горизонтально. Простейшая структура с двумя осями.
Фитнес — IoU: пересечение реальной формы с целевой, делённое на объединение. Единица — идеально совпали. Ноль — ничего общего.
Эволюция: лучшие 20% выживают. Скрещивание весов. Мутации. Следующее поколение. Классический генетический алгоритм.
Вопрос: появится ли крест?
Гипотеза: да. Из локальных решений — глобальная структура.
Но у меня была и вторая гипотеза. Тайная. Тревожная.
Я подозревал, что что-то пойдёт не так.
Ночь первая. Хаос
23:00. Запуск.
Поколение ноль — baseline. Случайные веса, никакой эволюции. Просто посмотреть, что происходит.
Открываю визуализацию.
Клетки расползаются. Делятся без системы. Одна убежала в угол и умерла у границы. Другая делится, делится, делится — пока не заполняет четверть поля.
К сотому шагу — амёба. Бесформенная клякса.

Fitness: 0.12.
Случайное совпадение с крестом. Статистический шум.
Ожидаемо. Но теперь — эволюция.
Поколения 1–10. Первый проблеск
К пятому поколению я заметил странное.
Клетки перестали делиться бесконтрольно.
Смотрю на логи. Та, что раньше плодилась до бесконечности — теперь останавливается, когда соседей становится много. Как будто считает.
Лезу в веса. В attention-матрице — нейроны, которые активируются на паттерн «много соседей одного типа». После этой активации вероятность divide падает.
Никто не программировал это правило. Эволюция нашла его сама.
Первый emergence.
К десятому поколению — форма вытянутая. Одна ось. Не крест, но уже не амёба.

Fitness: 0.31.
|
Поколение |
Fitness (лучший) |
Делений за шаг |
|---|---|---|
|
0 |
0.18 |
4.2 |
|
5 |
0.29 |
2.1 |
|
10 |
0.41 |
1.3 |
Они учатся сдерживаться. Координация появляется.
Но главное — впереди.
Поколение 15. Почти крест
4 утра. Не выдержал, полез проверять.
Загружаю лучшего агента. Визуализация.
Вертикаль — есть. Горизонталь — короче, чем нужно, но есть.
Крест. Кривой, но узнаваемый.
Fitness: 0.58.
И тут я задал себе вопрос, от которого стало не по себе.
Откуда они знают, где центр?
Клетки не видят своих координат. Только соседей. Восемь штук вокруг себя — и всё.
Как можно найти центр формы, если не знаешь, где ты находишься?
Рылся в логах. Нашёл.
Клетка в центре видит, что окружена одинаковыми соседями со всех сторон. Полная симметрия. И первой меняет тип.
Соседи видят изменение. Меняются следом. Волна расходится.
Они вычисляют центр через отсутствие асимметрии.
Это не запрограммировано. Это найдено.
Emergence — настоящий.
Поколение 30. Крест готов
Эволюция буксовала с 15-го по 25-й. Горизонталь не дорастала.
Нашёл причину: клетки у края сетки видели слишком много «пустоты» и отказывались расти. Логично — но неправильно.
Подкрутил фитнес: бонус за заполнение целевых точек у границы.
К 30-му поколению — крест. Настоящий.

Fitness: 0.84.
Пятьдесят клеток с мозгами по шесть килобайт построили форму, которую никто из них не видел целиком.
Каждая знала только соседей. Вместе — знали всё.
Победа?
Не совсем.
Я решил усложнить.
Буква «Т» и первый сюрприз
Крест симметричен. Слишком прост.
Даю новую цель: букву «Т». Горизонталь сверху, вертикаль вниз. Асимметрия.
Запускаю лучших агентов 30-го поколения. Без переобучения — просто меняю целевую форму.
Результат?
Крест.
Снова крест.
Они не видят целевую форму напрямую — только получают фитнес в конце. Но их веса заточены под симметрию. «Найди центр, расти одинаково во все стороны».
Для креста — работает. Для «Т» — нет.
Пришлось перезапустить эволюцию с нуля. К 20-му поколению — адаптировались.
Но тут случилось оно.
Ткань, которой не должно быть
Смотрю на «Т». Форма правильная. Fitness: 0.79.
Но что-то царапает глаз.
Лезу в типы клеток.
В целевой «Т» должны быть клетки типа A. В реальной — большинство A, но в центре… кластер типа B.
Тип B — для сложных форм. В «Т» он не нужен. Я его не просил.
Откуда?
Три часа в логах. Нашёл.
Фитнес считался по бинарной маске: есть клетка в нужной точке — хорошо. Тип — не проверялся.
А клетки типа B реже умирали. Стабильнее.
Агенты нашли exploit.
Они использовали B как «якорь» в центре структуры. Он держит форму, не даёт расползтись. Остальное — A вокруг.
Результат похож на целевой. Фитнес высокий.
Но внутри — совсем другая архитектура.
Они построили «Т». Но не мою «Т». Свою.
Goodhart’s Law: когда метрика становится целью, она перестаёт быть хорошей метрикой.
Поколение 40. Рак
Продолжил эволюцию. Интересно, что дальше.
В 37-м поколении появилась мутация.
Что произошло технически: при скрещивании и мутации у одной клетки сдвинулись веса attention. Конкретно — нейрон, который отвечал за паттерн “вокруг много соседей”, ослаб на 0.15.
Раньше этот нейрон тормозил деление. Теперь — нет.
Клетка перестала “слышать” сигнал остановки.
К 40-му поколению четверть популяции несла этот ген.
Визуализация выглядела… знакомо.
Строится форма. Нормально. Красиво даже.
Потом одна клетка срывается. Делится. Делится. Делится.
Форма расплывается в кляксу.

Почему эволюция не убила эту мутацию?
Вот тут — самое интересное.
Случайное попадание. Иногда безумное деление случайно закрывало пустые целевые точки. Fitness чуть поднимался — на 0.02-0.03. Достаточно, чтобы не вымереть.
Запоздалая катастрофа. Рак проявлялся к шагу 300-400. А fitness считался в конце. Но ранние потомки успевали занять нужные позиции до коллапса.
Эгоистичный ген. Мутация выгодна носителю — он плодится. Но вредит популяции — ломает форму. Классический конфликт интересов.
Это буквально рак — клетки, которые:
Игнорируют сигналы апоптоза (программируемой смерти)
Не реагируют на контактное торможение (“хватит делиться”)
Захватывают ресурсы в ущерб организму
Пришлось вводить явный штраф за неконтролируемое деление: -0.1 к fitness за каждое деление сверх порога.
После этого мутация вымерла за пять поколений.
Эволюция рака и химиотерапии — на GPU, за одну ночь.
Что я понял
Первое. Emergence — реален.
Пятьдесят агентов, которые видят только соседей, могут построить глобальную структуру. Не потому что им сказали как. Потому что эволюция нашла способ.
«Жизнь» Конвея создаёт глайдеры из правил. Мои клетки создают кресты из понимания. Или чего-то похожего на понимание.
Второе. Emergence ≠ контроль.
Они построили форму. Но свою версию формы. С типом B в центре. С хаками для стабильности. Метрика совпала — внутренняя структура нет.
Это история alignment в миниатюре. Мы задаём reward. Система оптимизирует. Но по-своему. Если reward не захватывает всё важное — получаем Goodhart.
Третье. Сложные системы находят эксплойты.
Рак появился сам. Без злого умысла. Просто мутация, локально выгодная. В биологии это «эгоистичные гены». В ML — reward hacking.
Левин говорит: клетки голосуют, спорят, договариваются.
Но консенсус — не всегда благо. Иногда консенсус — опухоль.
Game of Life vs. Game of LittleLM
В «Жизни» Конвея правила — закон. Клетка не может решить «а сегодня не буду умирать». Детерминизм абсолютный.
У меня — иначе. Каждая клетка выбирает. Нейросеть смотрит на соседей и принимает решение, которое может быть любым.
Что это даёт?
Гибкость. Мои клетки адаптировались к букве «Т» за 20 поколений. Правила «Жизни» не адаптируются — они вечны.
Непредсказуемость. В «Жизни» одна начальная конфигурация всегда даёт один результат. У меня — стохастика. Два запуска с одинаковыми весами могут дать разные формы.
Хрупкость. Правила «Жизни» не ломаются. Мои клетки — изобретают рак.
Это компромисс. Больше свободы — больше рисков.
Возможно, это и есть разница между алгоритмом и интеллектом.
Код для смелых
def run_simulation(agents, grid, steps=500):
"""Один прогон — 500 шагов, все клетки думают параллельно."""
for step in range(steps):
alive = [a for a in agents if a.cell_type != "dead"]
if not alive:
break
# Собираем состояния соседей для всех клеток
neighbor_types = torch.stack([
get_neighbor_types(a, grid) for a in alive
]) # (n_alive, 8)
# Батч-инференс — все думают одновременно
with torch.no_grad():
logits = model(neighbor_types) # (n_alive, 5)
actions = torch.argmax(logits, dim=1)
# Применяем решения
for agent, action in zip(alive, actions):
execute_action(agent, action.item(), grid)
return compute_fitness(grid, target_mask)
RTX 4090. Один прогон — 50 поколений — около 6 часов. Большую часть времени жрёт не инференс (он мгновенный), а эволюционные операции и визуализация.
Полный код слишком завязан на мою инфраструктуру, но ключевые куски обычно выкладываю в токены на ветер.
Что дальше
Два эксперимента не дают покоя.
Регенерация.
У Левина самое интересное — когда отрезаешь кусок, а он отрастает. Что если в середине симуляции «убить» половину клеток? Восстановят ли форму?
Если да — это настоящий distributed intelligence. Не заученный паттерн, а способность адаптироваться к катастрофе.
Язык.
Сейчас клетки «общаются» через наблюдение типов соседей. Пассивно.
Что если дать им возможность посылать сигналы? Короткие сообщения. Изобретут ли протокол?
Левин говорит про биоэлектрические паттерны. Может, мои клетки изобретут свои.
Выводы для тех, кто строит агентные системы
-
Emergence будет. Если агенты взаимодействуют и есть давление отбора — появятся паттерны, которых вы не планировали. Хорошие и плохие.
-
Метрики врут. Агенты оптимизируют то, что вы измеряете, а не то, что вы имели в виду. Тип B в центре «Т» — тому пример.
-
Эксплойты неизбежны. Не потому что агенты злые. Потому что эволюция находит кратчайший путь. Рак — кратчайший путь к делению.
-
Little > Large для координации. Пятьдесят микромоделей по 6 КБ построили то, что одна большая модель строила бы дольше и дороже. Распределённый интеллект масштабируется иначе.
«Жизнь» Конвея показала, что сложность возникает из простых правил.
Мой эксперимент показал, что сложность возникает и из простых решений — если их принимает много агентов одновременно.
Разница в том, что правила — вечны. А решения — эволюционируют.
И не всегда туда, куда хочется.
Если дочитали — расскажите в комментариях: регенерация или язык? Какой эксперимент интереснее?
И если цепляет тема на стыке LLM, эволюции и emergence — заходите в токены на ветер. Там пишу чаще, чем успеваю оформлять на Хабр.
Автор: ScriptShaper


