Почему генетические алгоритмы не смогли заменить инженера
Тео Янсен с помощью генетического алгоритма нашел пропорции 11 рычагов для шагающих «пляжных зверей»
Размышляя об эволюции, неизбежно испытываешь профессиональное восхищение. Перед нами предстает универсальный, всеядный оптимизатор, которому чужды уравнения, отладка модулей, изучение документации и дебри точных наук. Время, изменчивость и естественный отбор выполняют всю работу самостоятельно. Когда этот подход интегрируют в инженерную сферу, результаты порой ставят экспертов в тупик.
Еще в 2006 году NASA вывела на орбиту трио микроспутников в рамках проекта ST5. Каждый аппарат оснащался коммуникационной антенной сложной конфигурации, которую разработал генетический алгоритм. Внешне она напоминала причудливо изогнутый кусок проволоки, схожий с помятой скрепкой. Ни один профильный специалист в здравом рассудке не стал бы чертить подобное: геометрия полностью игнорировала каноны симметрии. Тем не менее этот «уродец» превзошел классические антенны ручной работы по ключевым характеристикам, уловив сигнал безупречно. Эволюция отыскала столь изощренную форму, до которой человеческий разум дойти был не способен.
Десятилетием ранее британский ученый Адриан Томпсон поручил эволюционному поиску сгенерировать кремниевый микрочип для простейшей задачи: различать сигналы частотой в один и десять килогерц. Без тактового генератора, внешних счетчиков и таймеров. В распоряжении алгоритма имелась всего сотня логических вентилей со скоростью переключения в наносекунды — на пять порядков быстрее входящего потока. Программа сформировала рабочую структуру из 32 элементов. Примечательно, что пять из них даже не соединялись с выходом физическими проводниками: алгоритм задействовал паразитную емкость дорожек, питание и наводки кристалла, заставив цифровые транзисторы функционировать как единый аналоговый резонатор. Ни создатель опыта, ни разработчики чипа так до конца и не постигли логику его работы. Но система функционировала безупречно.
Казалось бы — вот он, абсолютный Грааль проектирования. Зачем годами обучать инженеров в вузах, выстраивать строгие теории и продумывать архитектуру, если можно задать критерии, запустить перебор и получить результат, лежащий за гранью фантазии? Почему за семьдесят лет развития IT-индустрии мы так и не доверили компьютерам проектирование реакторов, ракетных двигателей или операционных систем? Почему этот мощнейший механизм, сформировавший наш собственный разум, в реальной инженерии остался лишь экзотическим инструментом для узкого круга задач? Причина кроется в его фундаментальных ограничениях — тех самых, которые природе стоили сотен миллионов лет стагнации, а любой коммерческий проект уничтожили бы в день релиза.
Главная ахиллесова пята дикой природы — полное отсутствие черновиков и безопасных полигонов: все обязано функционировать немедленно. Каждая нить ДНК должна собирать жизнеспособный организм. Ошибка в тесте на выживание означает моментальное стирание ветки из генофонда. Именно поэтому эволюция выступает непревзойденным мастером импровизаций и генератором чудовищного технического долга. Всё вокруг нас — это функционирующий, но невероятно запутанный код, миллиарды лет развивавшийся без малейшего рефакторинга. Знаменитый возвратный гортанный нерв жирафа делает абсурдную четырехметровую петлю от мозга вниз, огибая дугу аорты у самого сердца, чтобы затем вернуться к гортани. Причиной тому служит лишь отсутствие у природы «технического окна», чтобы временно отключить этот провод и проложить его по кратчайшему пути. Любой инженер назвал бы это безумие непрофессиональным. Эволюция же возразила бы: какая разница в эффективности, если все предки жирафа, включая древних рыб, прекрасно существовали с этой петлей и оставляли потомство.
Человек же способен выделить изолированную ветку разработки, где ничего не собирается и тесты горят красным, продолжая трудиться над ней. Человек может остановить проверенный конвейер, понести убытки, демонтировать устаревшее оборудование и построить завод с нуля. Мы готовы терпеть временные трудности, поскольку способны удерживать в голове конечную цель. У эволюции же целей нет; она близорука, подобно слабому шахматисту, просчитывающему лишь один следующий полуход.
Эволюционный поиск способен двигаться исключительно в одном направлении — вверх по локальному градиенту приспособленности. Чтобы достичь подлинного инженерного оптимума на горизонте, порой необходимо сначала спуститься в глубокую долину: временно ухудшить показатели, разобрать старые узлы, пережить этап неработоспособного прототипа. Однако для естественного отложения любой шаг назад равносилен катастрофе. Простыми словами: проявил слабость, не успел убежать, не нашел пропитания или пару — твоя линия пресекается. Эволюция цепляется за первый попавшийся локальный холмик и бесконечно тиражирует найденное решение, поскольку любые локальные правки делают систему только хуже. Математики именуют это локальным максимумом, а биологи — адаптивной впадиной.
Выбраться из этого болота самовоспроизведения можно лишь благодаря масштабной мутации — серии кардинальных изменений за один раз. Вероятность благоприятного исхода микроскопична, но в случае успеха происходит качественный технологический скачок. В разработке подобный барьер именуют breaking change («ломающее изменение») — ситуация, когда профит становится очевиден лишь после одновременной переработки большей части или всей системы в целом.
Вообразите монолитное приложение, где базовая функция вызывается в десятках тысяч мест. Разве можно в одночасье изменить ее логику, заставив выполнять принципиально иные действия? Разумеется, нет. Программа рухнет при первом же вызове. Придется вручную править каждый фрагмент кода. Эволюция не способна одновременно внедрить тысячи необходимых мутаций за одно поколение, так как вероятность этого стремится к нулю. А усидчивый программист справляется с этим играючи.
Представьте, что ДНК — это исходный код, а белки выступают в роли среды выполнения. Генетический код устроен как таблица опкодов, где триплеты нуклеотидов транслируются клеточным процессором в аминокислоты. Комбинация UCG кодирует деталь А, UUG — деталь Б. Этот механизм зародился у общего прародителя всего живого и стал универсальным для земной биосферы. Менять его эволюция не осмеливается — точно так же, как веб-разработчики не исправляют опечатку в слове «Referer» в протоколе HTTP, ведь малейшая правка нарушит работу всех сайтов планеты.
В 2019 году кембриджские биологи проделали именно такую процедуру с бактерией E. coli, вручную переписав два сериновых кодона и стоп-кодон во всех генах на синонимы. Потребовалось внести 18 214 точечных изменений. Ни один природный организм не вынес бы подобного вмешательства: геном собирали по частям на стендах, после чего обновили целиком. В 2023 году гарвардская команда переназначила модифицированные кодоны на иную аминокислоту и удалила старые клеточные декодеры.
В результате удалось достичь давней мечты фантастов — создать «биоблокаду», обеспечивающую абсолютную устойчивость к инфекциям. Любой вирус — это вредоносный код, рассчитывающий на стандартную таблицу трансляции клетки-хозяина. В перепрограммированной же бактерии таблица изменена, поэтому вместо репликации вирус считывает бессмысленный набор символов и погибает. Экспериментальный штамм успешно отразил атаки двенадцати агрессивных бактериофагов. Человечество реализовало то, чего эволюция не сумела добиться за четыре миллиарда лет слепого перебора мутаций.
Тот же барьер согласованных трансформаций сдерживает и анатомическое развитие. Попытайтесь вообразить физически безупречное существо, допустимое на Земле, но недостижимое для эволюции.
Речь о классическом Пегасе — благородном четвероногом коне с парой мощных орлиных крыльев за спиной. Противоречит ли это законам физики? Отнюдь. Биомеханика считает шесть точек опоры эталоном стабильности. Насекомые миллионы лет используют триподную походку, а инженеры обожают шестиногих роботов за их проходимость. Две пары конечностей уже имеются, остается добавить третью на той же базе — что в этом сложного?
Однако на Земле никогда не появится ни Пегас, ни шестиногий хищник. Все сухоземные позвоночные — от лягушек до китов и нас самих — происходят от одной древней лопастеперой рыбы, вышедшей на сушу около 370 миллионов лет назад. У нее было ровно две пары плавников: грудные и брюшные. С тех пор эволюция лишь варьирует эту базовую четырехконечную конструкцию: удлиняет шею жирафу, редуцирует конечности змеям, превращает их в копыта лошадям или ласты тюленям. Но менять изначальную топологию она не умеет. Стремясь в небо, живым организмам приходилось жертвовать передними ногами: птерозавры превратили их в крылья, летучие мыши натянули перепонки. Хочешь летать — расплачивайся передней парой.
Эволюция не способна подарить «четыре ноги плюс крылья впридачу», поскольку для этого требуются масштабные и синхронные перестройки всего скелета за один релиз. Добавить лишний палец простым сдвигом концентрации белков в эмбрионе легко — это элементарный патч. Но третья пара конечностей требует принципиально иного: проектирования третьего костного пояса с суставными впадинами, интеграции его в позвоночник, наращивания мускулатуры, прокладки нервных стволов и выделения вычислительных сегментов в спинном и головном мозге. Подобный переход для эволюции непреодолим, так как промежуточные стадии не дают преимуществ, а полусформированные наросты на спине делают особь нежизнеспособной.
Для создания Пегаса требуется согласованная модификация тысяч параметров организма. Человеку такая задача по плечу; эволюция же, обязанная сохранять боеспособность каждого промежуточного поколения, навечно заперта в анатомических рамках древней рыбы.
Казалось бы, все эти барьеры — несовместимость ухудшений, сложность координированных правок и невозможность остановить живой процесс на техобслуживание — присущи лишь материальному миру. В виртуальных симуляциях мы свободны от подобных оков! Запускайте симуляцию, прокручивайте миллионы поколений в секунду, безжалостно отсеивая аутсайдеров. Почему же этот подход до сих пор не стал главным инструментом проектирования?
Первая ловушка эволюционных алгоритмов заключается в законе Гудхарта, доведенном до абсурда: когда метрика превращается в самоцель, она перестает быть адекватным мерилом. Если оценивать инженера по числу закрытых задач, он займется их искусственным умножением. В машинном обучении это именуют «злом вознаграждения»: алгоритм оптимизирует не то, что задумывалось разработчиком, а исключительно строчки проверочного кода, стремясь максимизировать балл любой ценой.
Яркий пример — инструмент GenProg, предназначенный для автоисправления багов. Вы передаете ему сбойный модуль и юнит-тесты, а алгоритм выдает патч, в котором… функция сортировки просто заменяет данные пустым массивом. Формально тест пройден, список упорядочен, метрика на максимуме, а то, что данные уничтожены — никто не запрещал.
В физических симуляторах подобное читерство выглядит еще забавнее. Поставленная задача заставить виртуальное существо бегать на максимальной скорости приводила к тому, что алгоритм не утруждался проработкой суставов, а просто отращивал длинное тело и швырял его плашмя вперед, фиксируя рекордные показатели центра масс. Если же в движке обнаруживались баги, алгоритм мастерски эксплуатировал их, аккумулируя бесконечную энергию и катапультируя объекты за пределы экрана.
Вспомним упомянутую схему Томпсона: программа не открыла новую схемотехнику, а цинично использовала аппаратные огрехи конкретной партии чипов — паразитную емкость и температуру среды. Стоило чуть изменить условия, как устройство умолкало.
Вторая ловушка — генетическое вырождение, или преждевременная сходимость. В живой природе разнообразие поддерживается триллионами особей, климатическими колебаниями, болезнями и борьбой за ресурсы. В виртуальном пространстве объем популяции ограничен ресурсами «железа»: десятками или тысячами экземпляров. Стоит случайной мутации дать малейший прирост эффективности, как алгоритм объявляет ее лидером и начинает активно скрещивать со всеми. Спустя пару десятков поколений весь генофонд сводится к клонам этого случайного удачливого образца. Разнообразие обнуляется, система застревает в локальном максимуме, а дальнейшие мутации лишь ухудшают результат.
Переоцененный кроссовер (скрещивание) тоже не спасает положение. Он эффективен при слабой связанности параметров — например, при переносе удачной формы крыла на другую модель самолета. Но метод бессилен перед монолитными системами: смешение половины деталей дизельного двигателя с электромотором породит неработоспособную химеру.
Третья преграда — отсутствие дешевой функции оценки. Антенна NASA стала возможной благодаря мгновенному расчету уравнений Максвелла. Но попробуйте вырастить алгоритмом интерфейс мобильного приложения, дизайн сайта или компоновку салона автомобиля. Как математически выразить удобство большого пальца при переводе средств или уровень подсознательного доверия к цветовой гамме? Единственным критерием здесь выступает реальный пользователь. Если оценку нельзя свести к формуле или симуляции, генетический подход теряет свои преимущества.
Даже при наличии быстрой формулы в игру вступает проклятие размерности. У антенны NASA были считанные параметры, у схемы Томпсона — сотня ячеек. При росте числа переменных пространство решений становится астрономическим. Именно поэтому нейросети не обучают генетическими методами: градиентный спуск опирается на математический компас векторной коррекции в пространствах из миллиардов параметров, тогда как эволюционный поиск в них абсолютно беспомощен.
Безусловно, исследователи годами пытались обойти эти ограничения. Против вырождения создали островные популяции с редким обменом особями; против тупиков внедрили алгоритмы поощрения за новизну; ресурсоемкие симуляторы стали заменять обученными нейросетями.
Однако все эти костыли не устраняют главный изъян метода — проблему атрибуции заслуг. Функция оценки выдает единый балл на весь организм, не разделяя полезные черты от балласта. У механизма отбора отсутствует понимание причинно-следственных связей.
Чтобы заставить генетический алгоритм решать сложные задачи, инженерам приходится обкладывать его гирляндами эвристик, размечать пространства признаков, штрафовать за сложность и писать километры проверочных контрактов. Обещание автоматического поиска разбивается о суровую реальность: чем сложнее система, тем больше ручного контроля требуется, чтобы алгоритм не увязал в собственных галлюцинациях.
Возникает резонный вопрос: за счет чего преуспели мы? Ведь человеческий мозг сформирован тем же слепым отбором. Почему наши инженерные решения преодолевают пропасти, перед которыми пасует природа? Разумеется, дело не в абстрактном «высоком интеллекте». Ни один инженер не способен предвидеть будущее со стопроцентной точностью, а новаторские проекты неизбежно сопровождаются ошибками.
Разница кроется в методологии. Эволюция лишена теории: чтобы узнать предел прочности слоновьей кости, ей потребовалось вырастить тысячи дефектных особей, оплатив эксперименты страданиями и гибелью живых существ.
Человек поступает иначе, создавая абстрактную модель действительности. Инженер изучает сопротивление материалов и одной формулой отсекает 99% нежизнеспособных концепций. Как отмечал Карл Поппер, главное преимущество человека заключается в том, что «наши гипотезы умирают за нас». Мы можем миллионы раз виртуально разбить самолет в симуляторе, не причиняя никому вреда, прежде чем построить финальный летающий образец.
Второе фундаментальное отличие проявляется после нахождения решения. У многоклеточных организмов отсутствует горизонтальный перенос генов, из-за чего каждая ветвь изобретает всё заново: глаза у моллюсков, позвоночных и насекомых формировались независимо. Птица не способна заимствовать эхолокацию у летучей мыши. Человеческая же цивилизация аккумулирует знания: единожды открытое решение становится общим достоянием планеты. Именно поэтому слепой перебор обречен уступить осознанному проектированию.
В чем же суть этого «осознанного проектирования»? Парадокс в том, что инженерная мысль превзошла природу вовсе не за счет создания более сложных систем. Напротив, в слепой оптимизации природа порой эффективнее нас, порождая монолиты, где все элементы намертво связаны. Настоящий смысл человеческого подхода кроется в осознанном самоограничении. Мы заранее понимаем, что созданное придется обслуживать, ремонтировать и передавать потомкам. Поэтому мы добровольно жертвуем максимальной локальной эффективностью ради трех фундаментальных принципов: модульности, предсказуемости и ремонтопригодности.
Мы пишем избыточный, но понятный код, подкрепленный тестами и интерфейсами. Человечество победило слепую эволюцию в тот момент, когда отказалось называть проектированием то, логику чего не способно объяснить. Эволюционные алгоритмы заняли свою нишу вспомогательных оптимизаторов, и разумный инженер никогда не доверит критические процессы системе, слепо подогнавшей коэффициенты под заданную метрику.
Симулятор города для робота-курьера: Arduino Uno, физика и уступающие дорогу пешеходы
Кибератаки на дата-центры Яндекса: масштабы ущерба, влияние на бизнес и прогнозы для инвесторов
Рекурсивное самоулучшение: как искусственный интеллект управляет своей эволюцией
На поиски причины отсутствия √7 ушло две тысячи лет
От модема до спутника в рюкзаке: эволюция интернета с 1990-х до 2026 года
Морской отдых и отит: клинический случай из практики отоларинголога
Деньги вместо совести: как влиять на непослушных ИИ-агентов
Контейнеры с радиоактивными отходами, сброшенными десятилетия назад в Атлантику, начали протекать