Биоробот с ДНК лягушки: ксеноботы и эволюционные алгоритмы
Мы решили написать небольшой «развлекательный материал» на тему биороботов в контексте искусственного интеллекта и отвлечься от технической части наших статей
Подход искусственного интеллекта не предполагает имитацию человеческого мозга или любого другого животного. Лишь некоторые «специфические» проекты стремятся к репликации нейронных процессов/когнитивных способностей.
Хотя и классические MLP вдохновлены активациями и построением нейронных связей внутри нашего мозга, биоробот — синтез робототехники и органических тканей. И этот синтез — сложен. Достаточно трудно добиться адекватной формы тела животного для воссоздания важных функций типичных живых представителей нашего мира.
Однако машинное обучение находит себя и в научных достижениях этой области. Например, в кейсе создания биоробота с днк-лягушки, форму которого подбирала ИИ. Для чего? — самой плодотворной репликации.
Ученые из Университета Вермонта, Университета Тафтса и Института биологической инженерии Висса при Гарвардском университете создали первых в мире самовоспроизводящихся живых роботов — ксеноботов. Их из клеток лягушек, сами «роботы» спроектированы с использованием алгоритмов ИИ.
ИИ смог протестировать миллиарды форм тела, чтобы найти наиболее эффективные конструкции для репликации, в результате чего появились организмы в форме Pac-Man, которые могут собирать клетки для создания «детенышей» ксеноботов. Причем эти мини-роботы могли подбирать полезный груз, например, лекарство; могли бы регенерировать клетки.
В свое время Майкл Левин, руководитель проекта, доказывал всем, что маленькие пакмены уничтожат
Важно отметить, что это в отличие от других биовариантов робототехники, ксеноботы могут размножаться — своего рода новые живые существа, слепленные человеком. И вот вам кажется: эта новость точно не могла пройти мимо меня! Но разработка прошла еще в 2020 году. А ведь сотни генеративных нейронок и тысячи пузырчатых стартапов еще не вырвались в свои первые Seed-раунды. Хайп нейронок только начинался.
С момента зарождения сельского хозяйства человечество использовало манипуляции с организмами для собственной выгоды.
В последние десятилетия широкое распространение получила технология генетического редактирования, а недавно были созданы несколько искусственных организмов, имитирующих формы известных животных. Тут важная особенность исследования —
Однако в ходе данного исследования впервые создаются «полностью биологические машины с нуля».
Сэмом Кригманом, аспирантом и ведущим автором работы, использовала эволюционный алгоритм для создания тысяч проектов-кандидатов для новых форм жизни.
В рамках своих исследований на суперкомпьютерном кластере Deep Green в Vermont Advanced Computing Core UVM, они стремились решить задачи, поставленные учеными, такие как передвижение в одном направлении. Суперкомпьютер многократно собирал из моделируемых клеток различные формы и конфигурации тел.
Программы, основанные на базовых принципах биофизики и возможностях клеток кожи и сердца лягушки, постепенно отбирали наиболее успешные проекты, в то время как неудачные варианты отбрасывались. После сотен запусков алгоритма были отобраны самые перспективные проекты для дальнейшего тестирования.
Следующий этап работы был осуществлен командой в Тафтском университете под руководством Майкла Левина и с участием микрохирурга Дугласа Блэкистона. Эти ученые перенесли проекты, созданные на компьютере, в реальную жизнь.
Они использовали стволовые клетки, полученные из эмбрионов африканских лягушек Xenopus laevis, благодаря чему организмы получили название «ксеноботы». Клетки разделялись и инкубировали по отдельности. Затем, применяя миниатюрные щипцы и электрод, клетки разрезали и соединяли под микроскопом, создавая структуры, заданные компьютером.
Собранные в формы, не существующие в природе, клетки начали функционировать совместно. Клетки кожи образовали пассивную структуру, а сокращения сердечных мышц стали упорядоченными, создавая движение вперед. Это движение было направляемо компьютерным дизайном и поддерживалось спонтанными самоорганизующимися шаблонами, что позволило ксеноботам самостоятельно передвигаться.
Та же команда, которая создала первых живых роботов («ксеноботов», собранных из клеток лягушки — об этом сообщалось в 2020 году), обнаружила, что эти спроектированные на компьютере и собранные вручную организмы могут заплывать в свою крошечную чашку.
И находить отдельные клетки, собирать их вместе сотнями и собирать «детенышей» ксеноботов внутри своего «рта» в форме Pac-Man, которые через несколько дней становятся новыми ксеноботами, которые выглядят и двигаются так же, как они сами.
Эволюционный алгоритмы: виды и пример оптимизации параметров нейросетью
Эволюционные алгоритмы представляют собой класс методов, вдохновленных биологической эволюцией, и включают несколько основных видов, каждый из которых имеет свои уникальные механизмы и области применения. Рассмотрим основные виды эволюционных алгоритмов, их принципы работы и ключевые технические аспекты.
Генетические алгоритмы (GA). Генетические алгоритмы являются одним из наиболее известных видов эволюционных алгоритмов. Они оперируют популяцией кандидатов решений, которые кодируются в виде генотипов (обычно в виде строк или массивов). Основные операторы включают отбор, кроссовер и мутацию.
Эволюционные стратегии (ES). Эволюционные стратегии акцентируют внимание на процессах мутации и отбора. В отличие от генетических алгоритмов, ES используют числовые векторы для представления индивидов и применяют гауссовские распределения для мутации. Основные параметры: размер популяции, параметры мутации и правила отбора.
Генетическое программирование (GP). Где индивиды представляют собой программы или выражения, обычно выраженные в виде деревьев синтаксического анализа.
Основные операторы включают кроссовер и мутацию, аналогичные тем, что используются в GA, но применяемые к деревьям программ. GP используется для автоматического создания программ, алгоритмов и выражений, а также для решения задач регрессии и классификации.
Эволюционный алгоритм, реализованный на суперкомпьютерном кластере Deep Green в Vermont Advanced Computing Core UVM, функционирует посредством имитации принципов биологической эволюции для оптимизации новых форм жизни.
Этот процесс включает несколько ключевых этапов, которые взаимодействуют и совершенствуются посредством механизмов, схожих с теми, что наблюдаются в естественном отборе.
Алгоритм стартует с генерации начальной популяции случайных конфигураций клеток, каждая из которых представляет собой потенциальное решение заданной задачи. Эти конфигурации могут быть связаны с различными параметрами и характеристиками, которые зависят от биофизических возможностей клеток.
После создания начальной популяции каждая конфигурация подвергается оценке на предмет её эффективности в выполнении заданной задачи.
Оценка основана на критериях, определённых учёными, таких как скорость передвижения или эффективность выполнения конкретных функций. Этот процесс аналогичен фенотипической оценке в биологии, где выраженные черты организма оцениваются на предмет их адаптивной ценности.
Конфигурации, показавшие наибольшую эффективность, отбираются для участия в дальнейших этапах алгоритма, в то время как менее успешные варианты отбрасываются. Этот отбор основывается на принципе выживания наиболее приспособленных, где только лучшие решения переходят на следующий этап.
Сохранённые конфигурации подвергаются процессу рекомбинации и мутации, что создаёт новые варианты конфигураций.
Рекомбинация аналогична половому размножению в биологии, где генетический материал двух родителей комбинируется для создания потомства с новыми свойствами. Мутация, в свою очередь, вводит случайные изменения в конфигурации, что позволяет исследовать новые возможности и потенциально находить более эффективные решения.
Процесс рекомбинации и мутации повторяется многократно, с каждым новым поколением конфигураций, подвергающихся той же процедуре оценки, отбора, рекомбинации и мутации.
На каждом этапе алгоритм стремится улучшить общую эффективность конфигураций, что аналогично накоплению адаптивных изменений в биологических популяциях.
В конечном итоге после многочисленных итераций, алгоритм выявляет наиболее оптимальные конфигурации клеток для выполнения заданных задач.
Технически, алгоритм управляется с помощью нейронных сетей, которые моделируют взаимодействия и поведение клеток на основе заданных биофизических правил. Нейронные сети обучаются распознавать и предсказывать наиболее успешные конфигурации, что повышает эффективность и точность алгоритма.
Они играют ключевую роль в процессе оценки и оптимизации, обеспечивая высокую степень адаптивности и способности к самоорганизации.
Суперкомпьютерный кластер Deep Green предоставляет необходимую вычислительную мощность для выполнения сложных вычислений и моделирования большого числа конфигураций, что позволяет осуществлять процесс эволюционной оптимизации с высокой скоростью и точностью.
Пример простейшего эволюционного алгоритма:
Рассмотрим принцип работы на примере языка программирования Python с использованием библиотеки DEAP (Distributed Evolutionary Algorithms in Python) для реализации эволюционного алгоритма, оптимизирующего параметры нейронной сети.
Инициализация популяции. Каждый индивидуум в популяции представляет собой набор параметров нейронной сети, включая архитектуру (количество слоев, количество нейронов в каждом слое) и параметры весов. В Python это может быть реализовано следующим образом:
import random
from deap import base, creator, tools, algorithms
import numpy as np
# Определение типа Fitness для минимизации функции ошибки
creator.create("FitnessMin", base.Fitness, weights=(-1.0,))
creator.create("Individual", list, fitness=creator.FitnessMin)
def create_individual():
# Пример создания нейронной сети с случайной архитектурой
num_layers = random.randint(1, 5)
layers = [random.randint(10, 100) for _ in range(num_layers)]
return layers
toolbox = base.Toolbox()
toolbox.register("individual", tools.initIterate, creator.Individual, create_individual)
toolbox.register("population", tools.initRepeat, list, toolbox.individual)
Оценка приспособленности (fitness evaluation). Каждый индивидуум (нейронная сеть) оценивается на предмет её способности выполнять заданную задачу, например, классификацию или регрессию.
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neural_network import MLPClassifier
from sklearn.metrics import accuracy_score
data = load_iris()
X_train, X_test, y_train, y_test = train_test_split(data.data, data.target, test_size=0.2)
def evaluate(individual):
# Создание и обучение нейронной сети с заданной архитектурой
layers = tuple(individual)
clf = MLPClassifier(hidden_layer_sizes=layers, max_iter=1000)
clf.fit(X_train, y_train)
predictions = clf.predict(X_test)
accuracy = accuracy_score(y_test, predictions)
return 1 - accuracy, # Для минимизации ошибки
toolbox.register("evaluate", evaluate)
Операторы кроссовера и мутации. Эти операторы генерируют новые решения на основе существующих, поддерживая генетическое разнообразие в популяции:
def mate(ind1, ind2):
# Одноточечный кроссовер для архитектуры нейронной сети
size = min(len(ind1), len(ind2))
cxpoint = random.randint(1, size - 1)
ind1[cxpoint:], ind2[cxpoint:] = ind2[cxpoint:], ind1[cxpoint:]
def mutate(individual):
# Мутация: случайное изменение количества нейронов в одном из слоев
if len(individual) > 0:
layer_idx = random.randint(0, len(individual) - 1)
individual[layer_idx] = random.randint(10, 100)
toolbox.register("mate", mate)
toolbox.register("mutate", mutate, indpb=0.2)
toolbox.register("select", tools.selTournament, tournsize=3)
Основной цикл эволюционного алгоритма. Алгоритм выполняется в течение нескольких поколений, каждый раз обновляя популяцию и улучшая параметры нейронных сетей:
population = toolbox.population(n=50)
ngen = 40
cxpb = 0.5 # Вероятность кроссовера
mutpb = 0.2 # Вероятность мутации
for gen in range(ngen):
# Оценка всех индивидуумов в популяции
fitnesses = list(map(toolbox.evaluate, population))
for ind, fit in zip(population, fitnesses):
ind.fitness.values = fit
# Отбор индивидов для участия в следующем поколении
offspring = toolbox.select(population, len(population))
offspring = list(map(toolbox.clone, offspring))
# Применение кроссовера и мутации
for child1, child2 in zip(offspring[::2], offspring[1::2]):
if random.random() < cxpb:
toolbox.mate(child1, child2)
del child1.fitness.values
del child2.fitness.values
for mutant in offspring:
if random.random() < mutpb:
toolbox.mutate(mutant)
del mutant.fitness.values
# Оценка нового поколения
invalid_ind = [ind for ind in offspring if not ind.fitness.valid]
fitnesses = map(toolbox.evaluate, invalid_ind)
for ind, fit in zip(invalid_ind, fitnesses):
ind.fitness.values = fit
# Замена старого поколения новым
population[:] = offspring
# Вывод текущего наилучшего решения
fits = [ind.fitness.values[0] for ind in population]
print(f"Generation {gen}: Best fitness {min(fits)}")
Надо понимать, что эволюционный алгоритм в контексте нейросети — про оптимизацию параметров эволюции, а не про полноценную реализацию отбора по Дарвина во всем алгоритме. Но здесь хочется выразить главную особенность, которую забывают современные стартапы — монопродуктивность ИИ. Оптимизация формы «новой лягушки» через нейросеть — идеальный вариант реализации ML в подобных проектах. Одна проблема — одна фича.