Growing Neural Cellular Automata __Alexander Mordvintsev, Ettore Randazzo, Eyvind Niklasson, Michael Levin__ Интерактивная статья + ссылки на код: https://distill.pub/2020/growing-ca/ Ноутбук для экспериментов: тут Эту старую, 2020 года, тему про нейронные клеточные автоматы (НКА) мы многократно упоминали, но нормально так и не разбирали. А стоило бы, особенно после темы про вычислительную жизнь. Авторы прекрасны, Майкла Левина вы и так знаете, вероятно и Александра Мордвинцева тоже, но если нет, то за его работами я рекомендую следить, у него много прекрасных тем про самоорганизацию, искусственную жизнь и рядом, а ещё, в частности, он соавтор старого доброго DeepDream. Для многих текущая волна генеративного искусства началась именно с него. Предыдущая волна, кажется, была про фракталы. В этой работе есть большой заход на тему про морфогенез и развитие организма из одной клетки, а также регенерацию. Она про то, что где-то там существуют правила на уровне клетки, каждая клетка принимает локальные решения исходя из своего окружения, и сообща они создают достаточно сложный “организм”. КА Всеми любимые клеточные автоматы (КА), включая игру Жизнь (мы когда-то разбирали один из свежих результатов с доказательством, что она омнипериодическая), работают просто. Есть набор клеток или ячеек, например на плоскости. В каждой выполняется одно и то же правило. Например, для игры жизнь это следующие правила: 1. Рождение: В пустой (мертвой) клетке зарождается жизнь (клетка становится живой), если у нее ровно три живых соседа. 2. Выживание: Живая клетка остается живой, если у нее есть два или три живых соседа. 3. Смерть (Одиночество/Перенаселение): Живая клетка умирает, если у нее меньше двух живых соседей (одиночество) или больше трех (перенаселение). Эти весьма простые правила приводят к потрясающе красивым результатам. В этой симуляции появляются стабильные элементы, есть движущиеся глайдеры, есть много разных других прекрасных конфигураций. Умельцы собирают на глайдерах даже компьютеры, подробнее тут. Про клеточные автоматы Вольфрам написал целую книгу, можно например почитать вот здесь. Есть также варианты перехода из дискретного пространства в непрерывное — мне кажется, самая известная здесь Lenia. Да и вообще область как таковая довольно древняя — сам Тьюринг экспериментировал с паттернами морфогенеза. НКА Обычно в КА играют в режиме, что сначала задают правила, а затем смотрят, к каким результатам они приводят. К КА можно подойти и с обратной стороны — задаться результатом (например, фенотипом организма) и найти (или выучить) КА, создающий его. Для того, чтобы задать КА надо решить, какие состояния у него могут быть (обычно это набор дискретных значений, но могут быть и непрерывные), а также задать функцию обновления состояния. Если взять непрерывные значения и позволить функции обновления быть дифференцируемой, то, вы уже понимаете, это можно выучить градиентным спуском, как нейросети. Например (переходим к деталям работы), можно задать состояние каждой клетки набором из 16 вещественных чисел (каналов в терминах изображений). Первые три задают RGB компоненты цвета, и ещё одно — альфу (которая равна нулю для фона и 1 для объекта). Эта альфа будет определять “живость” клетки: α>0.1 означает, что клетка жива и её соседи тоже. Все остальные клетки мертвы и их состояние устанавливается в ноль. Итого, клетки с α>0.1 — зрелые, а их соседи с α≤0.1 — растущие (и могут стать зрелыми, когда значение превысит 0.1). Остальные каналы не имеют предопределённого значения, правило обновления само решит как их использовать. Их можно интерпретировать как концентрацию различных веществ, электрические потенциалы или иные сигнальные механизмы, используемые клетками.