Соедините клеточные автоматы с нейронными сетями, и вы сможете вырастить саламандру или что-нибудь еще, что вам нравится. Эта работа Google AI проливает свет на сложную тему морфогенеза, как клетки организуются в формы.
Загадку того, как биологические клетки образуют сложные формы, которые мы, например, принимаем как должное, сложно даже начать. Мы можем понимать ДНК и генетический код, но мы очень плохо понимаем, как это определяет структуру многоклеточных животных. У нас есть некоторое представление о том, что все дело в химических градиентах, которые заставляют клетки вести себя по-разному, но пока мы не понимаем даже общих принципов.
Это новое исследование, проведенное Александром Мордвинцевым, создателем DeepDream, программы компьютерного зрения Google, возникло из идеи применения нейронных сетей для понимания регенерации и проектирования самоорганизующихся систем, предложенной Майклом Левином, директором Центра открытий Аллена в Тафтсе. Университет. Он сочетает в себе две из моих любимых тем — клеточные автоматы (CA) и нейронные сети, и его цель — изучить, как простые правила порождают сложную организацию. Идея проста, но гениальна, и о ней стоит знать только потому, что это весело.
Представляется разумным исследовать, чего можно достичь, если каждая сущность, ячейка, будет следовать одному правилу. Вопрос в том, какие правила можно использовать для получения заданного конечного результата. Например, если вы думаете о массиве черных или белых пикселей, отображающих квадрат или круг, вы можете преобразовать его в контур, указав каждому пикселю смотреть на цвет своих соседей — «если вы черный, у вас есть сосед, который будет белым, то останется черным, иначе изменится на белый «. Это единственное правило, которому подчиняется каждый пиксель, сразу же выделяет все пиксели границы или формы и таким образом преобразует их в контур. Обратите внимание, что каждый пиксель подчиняется одному и тому же правилу, но не все они делают одно и то же. Также обратите внимание, что, хотя нам удается выбрать то, что выглядит как глобальное свойство, то есть контур, каждый пиксель действует локально.
Такого рода единое правило характеризует клеточные автоматы. Каждой ячейке в сетке дается одно и то же правило, которое включает в себя состояние ячейки и состояние ячеек вокруг них. Такое правило носит локальный характер, но, как показывает «Игра жизни» Конвея, оно может привести к очень сложному организованному поведению. Вопрос в том, можем ли мы найти простые правила, которым подчиняется каждая клетка, которая может создать заданную сложную форму? Это и есть новое исследование.
Ключевая идея состоит в том, что система должна быть дифференцируемой, чтобы можно было получить градиент и использовать его для изменения правила, чтобы продвинуть систему к лучшему результату. Вот как работает обратное распространение и как нейронные сети обучаются, но это более общая идея, которая позволяет более сложным системам «учиться» и работать лучше.
В этом случае у нас есть сетка ячеек, и каждая из них имеет вектор состояния из 16 элементов, который представляет текущее физическое состояние ячейки. Первые четыре элемента — это спецификатор цвета RGBA, и именно значения RGB мы собираемся использовать для обучения системы поиску правила, которое создает заданную конфигурацию.
Альфа-канал используется довольно стандартным образом с 1 в качестве пикселя переднего плана и 0 в качестве фонового пикселя. Кроме того, ячейки с альфа менее 0,1 и без соседей с более высокими значениями считаются мертвыми, и их вектор состояния устанавливается на ноль на каждом временном шаге. Ячейки, у которых альфа <0,1, но есть живые соседи, считаются растущими и принимают участие в вычислениях. В результате образуется внешняя «кожа» или клетки, которые находятся в процессе созревания.
Теперь у нас есть массив ячеек с 16-мерным вектором состояния с первыми четырьмя элементами, создающими визуальный вид ячейки. Остальные 12 элементов предназначены для моделирования таких вещей, как концентрации химикатов, и именно они будут изменены правилом обновления таким образом, чтобы создать целевую форму, которую мы пытаемся создать.
Следующая часть процедуры - обучить нейронную сеть найти «правило», которое объединяет вектор состояния ячейки с векторами ее соседей для создания нового вектора состояния. Обратите внимание, что нейронная сеть представляет собой единое правило, применяемое ко всем клеткам одинаково - это тот тип правила клеточного автомата, который мы ищем.
В документе изложено множество практических деталей, но наиболее важным, если вы хотите получить общую идею, является то, что информация о соседях, которая отправляется в нейронную сеть, представляет собой разницу в векторах состояния плюс вектор состояния ячейки. . Градиент берется в направлениях x и y, и, таким образом, мы передаем нейронной сети 48-мерный вектор, суммирующий состояние каждой ячейки и градиент вокруг нее по очереди.
Нейронной сети предоставляется только информация о градиенте вектора состояния. Это предназначено для моделирования того факта, что биологические клетки часто реагируют на химические градиенты, а не на абсолютные значения. Нейронная сеть имеет 8000 параметров и поэтому способна изучать довольно сложную функцию соседних градиентов и состояния. Интересно спросить, какая часть этой сложности на самом деле используется для создания биологически правдоподобных конфигураций.
Системе дается целевая конфигурация и начальная «начальная» конфигурация, а затем градиентный спуск используется для изучения правила, которое превратит начальное значение в цель. Сообщается о трех основных вариантах первоначального эксперимента, в котором сеть обучается находить правило, которое развивает начальное значение до цели.
Первый вывод заключается в том, что простой обучающий эксперимент работает достаточно хорошо, но когда система повторяется за пределами точки достижения целевой конфигурации, формы продолжают расти или исчезать. Другими словами, усвоенное правило принимает форму, но не стабильно. В реальном мире это явно не годилось бы, если бы не было переключателя, отключающего правило, когда окончательная конфигурация была достигнута.
Второй эксперимент обращался к потребности в стабильной системе путем обучения за пределами точки, где была достигнута целевая конфигурация. Есть много мелких деталей о реализации, но, похоже, достигается правило, которое дает стабильный паттерн - правило, в котором цель выступает в качестве «аттрактора» для ее динамики.
Третий эксперимент также тренировал способность к регенерации. Когда целевой шаблон был достигнут, его части были повреждены, и сеть была обучена регенерировать цель. Это интересно, как правило, когда цель в качестве аттрактора, вероятно, будет обладать регенеративными свойствами.
Эта работа предлагает так много дополнительных вопросов, что это явно только начало чего-то. Он демонстрирует, что 16-мерного вектора состояния достаточно, чтобы позволить правилу CA-типа развиваться до сложных форм с хорошей степенью стабильности и регенерации. Что эти измерения могут представлять в реальном мире - вопрос к биологам. Что я хотел бы знать, так это сколько измерений необходимо для того, чтобы он вообще работал?
Прочтите статью и просмотрите живые примеры кода для получения более подробной информации.