Биоробот с ДНК лягушки: ксеноботы и эволюционные алгоритмы

18ee41600e75b71336bf06b0b996da23.png

Мы решили написать небольшой «развлекательный материал» на тему биороботов в контексте искусственного интеллекта и отвлечься от технической части наших статей

Подход искусственного интеллекта не предполагает имитацию человеческого мозга или любого другого животного. Лишь некоторые «специфические» проекты стремятся к репликации нейронных процессов/когнитивных способностей.

Хотя и классические MLP вдохновлены активациями и построением нейронных связей внутри нашего мозга, биоробот — синтез робототехники и органических тканей. И этот синтез — сложен. Достаточно трудно добиться адекватной формы тела животного для воссоздания важных функций типичных живых представителей нашего мира. 

Однако машинное обучение находит себя и в научных достижениях этой области. Например, в кейсе создания биоробота с днк-лягушки, форму которого подбирала ИИ. Для чего? — самой плодотворной репликации. 

Ученые из Университета Вермонта, Университета Тафтса и Института биологической инженерии Висса при Гарвардском университете создали первых в мире самовоспроизводящихся живых роботов — ксеноботов. Их из клеток лягушек, сами «роботы» спроектированы с использованием алгоритмов ИИ. 

8e59f030bebd5a958d7cde7a7b87895f.png

ИИ смог протестировать миллиарды форм тела, чтобы найти наиболее эффективные конструкции для репликации, в результате чего появились организмы в форме Pac-Man, которые могут собирать клетки для создания «детенышей» ксеноботов. Причем эти мини-роботы могли подбирать полезный груз, например, лекарство; могли бы регенерировать клетки. 

d1714aa567e7a0eaad04c818130049dc.png

В свое время Майкл Левин, руководитель проекта, доказывал всем, что маленькие пакмены уничтожат 

Важно отметить, что это в отличие от других биовариантов робототехники, ксеноботы могут размножаться — своего рода новые живые существа, слепленные человеком. И вот вам кажется: эта новость точно не могла пройти мимо меня! Но разработка прошла еще в 2020 году. А ведь сотни генеративных нейронок и тысячи пузырчатых стартапов еще не вырвались в свои первые Seed-раунды. Хайп нейронок только начинался.

С момента зарождения сельского хозяйства человечество использовало манипуляции с организмами для собственной выгоды.

 В последние десятилетия широкое распространение получила технология генетического редактирования, а недавно были созданы несколько искусственных организмов, имитирующих формы известных животных. Тут важная особенность исследования —

Однако в ходе данного исследования впервые создаются «полностью биологические машины с нуля». 

Сэмом Кригманом, аспирантом и ведущим автором работы, использовала эволюционный алгоритм для создания тысяч проектов-кандидатов для новых форм жизни. 

В рамках своих исследований на суперкомпьютерном кластере Deep Green в Vermont Advanced Computing Core UVM, они стремились решить задачи, поставленные учеными, такие как передвижение в одном направлении. Суперкомпьютер многократно собирал из моделируемых клеток различные формы и конфигурации тел. 

Программы, основанные на базовых принципах биофизики и возможностях клеток кожи и сердца лягушки, постепенно отбирали наиболее успешные проекты, в то время как неудачные варианты отбрасывались. После сотен запусков алгоритма были отобраны самые перспективные проекты для дальнейшего тестирования.

Следующий этап работы был осуществлен командой в Тафтском университете под руководством Майкла Левина и с участием микрохирурга Дугласа Блэкистона. Эти ученые перенесли проекты, созданные на компьютере, в реальную жизнь. 

Они использовали стволовые клетки, полученные из эмбрионов африканских лягушек Xenopus laevis, благодаря чему организмы получили название «ксеноботы». Клетки разделялись и инкубировали по отдельности. Затем, применяя миниатюрные щипцы и электрод, клетки разрезали и соединяли под микроскопом, создавая структуры, заданные компьютером.

f7f6d913189fc28c52f1bf6e7a43d6f9.png

Собранные в формы, не существующие в природе, клетки начали функционировать совместно. Клетки кожи образовали пассивную структуру, а сокращения сердечных мышц стали упорядоченными, создавая движение вперед. Это движение было направляемо компьютерным дизайном и поддерживалось спонтанными самоорганизующимися шаблонами, что позволило ксеноботам самостоятельно передвигаться.

Та же команда, которая создала первых живых роботов («ксеноботов», собранных из клеток лягушки — об этом сообщалось в 2020 году), обнаружила, что эти спроектированные на компьютере и собранные вручную организмы могут заплывать в свою крошечную чашку. 

И находить отдельные клетки, собирать их вместе сотнями и собирать «детенышей» ксеноботов внутри своего «рта» в форме Pac-Man, которые через несколько дней становятся новыми ксеноботами, которые выглядят и двигаются так же, как они сами.

Эволюционный алгоритмы: виды и пример оптимизации параметров нейросетью

Эволюционные алгоритмы представляют собой класс методов, вдохновленных биологической эволюцией, и включают несколько основных видов, каждый из которых имеет свои уникальные механизмы и области применения. Рассмотрим основные виды эволюционных алгоритмов, их принципы работы и ключевые технические аспекты.

Генетические алгоритмы (GA). Генетические алгоритмы являются одним из наиболее известных видов эволюционных алгоритмов. Они оперируют популяцией кандидатов решений, которые кодируются в виде генотипов (обычно в виде строк или массивов). Основные операторы включают отбор, кроссовер и мутацию. 

Эволюционные стратегии (ES). Эволюционные стратегии акцентируют внимание на процессах мутации и отбора. В отличие от генетических алгоритмов, ES используют числовые векторы для представления индивидов и применяют гауссовские распределения для мутации. Основные параметры:   размер популяции, параметры мутации и правила отбора. 

Генетическое программирование (GP). Где индивиды представляют собой программы или выражения, обычно выраженные в виде деревьев синтаксического анализа. 

Основные операторы включают кроссовер и мутацию, аналогичные тем, что используются в GA, но применяемые к деревьям программ. GP используется для автоматического создания программ, алгоритмов и выражений, а также для решения задач регрессии и классификации.

554b3786de58e8fa5d1f0f069154fda9.png

Эволюционный алгоритм, реализованный на суперкомпьютерном кластере Deep Green в Vermont Advanced Computing Core UVM, функционирует посредством имитации принципов биологической эволюции для оптимизации новых форм жизни. 

Этот процесс включает несколько ключевых этапов, которые взаимодействуют и совершенствуются посредством механизмов, схожих с теми, что наблюдаются в естественном отборе.

 Алгоритм стартует с генерации начальной популяции случайных конфигураций клеток, каждая из которых представляет собой потенциальное решение заданной задачи. Эти конфигурации могут быть связаны с различными параметрами и характеристиками, которые зависят от биофизических возможностей клеток.

После создания начальной популяции каждая конфигурация подвергается оценке на предмет её эффективности в выполнении заданной задачи. 

Оценка основана на критериях, определённых учёными, таких как скорость передвижения или эффективность выполнения конкретных функций. Этот процесс аналогичен фенотипической оценке в биологии, где выраженные черты организма оцениваются на предмет их адаптивной ценности.

Конфигурации, показавшие наибольшую эффективность, отбираются для участия в дальнейших этапах алгоритма, в то время как менее успешные варианты отбрасываются. Этот отбор основывается на принципе выживания наиболее приспособленных, где только лучшие решения переходят на следующий этап. 

Сохранённые конфигурации подвергаются процессу рекомбинации и мутации, что создаёт новые варианты конфигураций. 

Рекомбинация аналогична половому размножению в биологии, где генетический материал двух родителей комбинируется для создания потомства с новыми свойствами. Мутация, в свою очередь, вводит случайные изменения в конфигурации, что позволяет исследовать новые возможности и потенциально находить более эффективные решения.

Процесс рекомбинации и мутации повторяется многократно, с каждым новым поколением конфигураций, подвергающихся той же процедуре оценки, отбора, рекомбинации и мутации. 

На каждом этапе алгоритм стремится улучшить общую эффективность конфигураций, что аналогично накоплению адаптивных изменений в биологических популяциях. 

В конечном итоге после многочисленных итераций, алгоритм выявляет наиболее оптимальные конфигурации клеток для выполнения заданных задач.

Технически, алгоритм управляется с помощью нейронных сетей, которые моделируют взаимодействия и поведение клеток на основе заданных биофизических правил. Нейронные сети обучаются распознавать и предсказывать наиболее успешные конфигурации, что повышает эффективность и точность алгоритма. 

Они играют ключевую роль в процессе оценки и оптимизации, обеспечивая высокую степень адаптивности и способности к самоорганизации. 

Суперкомпьютерный кластер Deep Green предоставляет необходимую вычислительную мощность для выполнения сложных вычислений и моделирования большого числа конфигураций, что позволяет осуществлять процесс эволюционной оптимизации с высокой скоростью и точностью.

995e629446c9254b6a82cee9b8d3af3a.png

Пример простейшего эволюционного алгоритма:

Рассмотрим принцип работы на примере языка программирования Python с использованием библиотеки DEAP (Distributed Evolutionary Algorithms in Python) для реализации эволюционного алгоритма, оптимизирующего параметры нейронной сети.

  1. Инициализация популяции. Каждый индивидуум в популяции представляет собой набор параметров нейронной сети, включая архитектуру (количество слоев, количество нейронов в каждом слое) и параметры весов. В 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)
  1. Оценка приспособленности (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)
  1. Операторы кроссовера и мутации. Эти операторы генерируют новые решения на основе существующих, поддерживая генетическое разнообразие в популяции:

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)
  1. Основной цикл эволюционного алгоритма. Алгоритм выполняется в течение нескольких поколений, каждый раз обновляя популяцию и улучшая параметры нейронных сетей:

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 в подобных проектах. Одна проблема — одна фича. 

© Habrahabr.ru