Эволюционирующие программы

Oct 28, 2018 10:01

Лет 10 назад основным вопросом в развитии интернета (а по сути основным направлением прогресса) была децентрализация сети, а основной опасностью - её монополизация. Я тогда об этом размышлял.

С тех пор оба эти направления обострились, ярко проявились и вошли в нашу жизнь.
Децентрализация в виде блокчейна и криптовалют, монополизация в виде социальных сетей и их влияния на политические события (выборы Трампа, brexit и т.д.). И хотя эта тема ещё не потеряла актуальность (всё ещё имеет смысл строить децентрализованную социальную сеть, поисковик и вообще интернет, а монополии вроде facebook и google всё больше влияют на социальные процессы), здесь всё стало более-менее понятно. Будут новые проекты децентрализованых сетей, и будет сопротивление этому со стороны корпораций и государств.

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

1. Бессмысленно делать случайные изменения в исходном тексте программы или в её бинарном коде, ожидая получить улучшение. Случайное изменение человеческого тела будет травмой, зачастую несовместимой с жизнью, но никак не улучшением. Чтобы была возможна эволюция, нужен специальный язык кодирования алгоритмов более крупными "кирпичиками" (аналог генов и ДНК), над которыми уже можно будет делать мутации и рекомбинации, чтобы они с большей вероятностью приводили к осмысленным результатам. Технически это, видимо, должны быть классы, объекты и методы операций над ними. Условно говоря, если в шахматный компьютер наугад тыкнуть паяльником, он, скорее всего, перестанет работать, а если случайно изменить алгоритм, то он в определённой позиции сделает ход слоном, а не конём.

2. Эволюционное создание программ требует значительных вычислительных ресурсов и хорошо распараллеливается: возможных изменений много, и полезность каждого из них нужно проверить. И вот тут оказывается, что эти ресурсы уже созданы, есть целые огромные датацентры, которые "роют копытом землю", в смысле, занимаются бессмысленными вычислениями, перебирая хеши в блоках биткоина и других криптовалют и получая за это премии. Впрочем, не только за перебор хешей, но и за выполнение "смартконтрактов" - специальных программ, живущих в блокчейне. Там, правда, сейчас нет распараллеливания, все узлы выполняют одинаковые действия, но сделать так, чтобы они выполняли разные действия, а премию получал тот узел, который случайно нашёл наилучший вариант (например, получил лучшего игрока в шахматы), кажется не слишком революционным изменением в мире криптовалют.

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

В итоге создание программ будет происходить следующим образом: "программист" на специальном языке задаёт классы и методы, из которых может быть создана результирующая программа (например, интернет-магазин с рекомендательной системой или диагностика болезней или автопилот для автомобиля) и критерии, позволяющиие оценить качество результата (сравнением двух вариантов или измерением качества каждого отдельного варианта). Потом он оплачивает ресурсы по эволюционному совершенствованию и через некоторое время получает результат. А владельцы ресурсов получают премию за нахождениие этого результата подобно тому, как сейчас они получают премию за угадывание хеша в блоках криптовалют.

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

This entry was originally posted at https://gul-kiev.dreamwidth.org/67462.html.
Previous post Next post
Up