Роман Ямпольский, Ph.D,
профессор Луисвиллского университета, Кентукки, США

Оригинальная статья опубликована на сайте arxiv.org.
Программное обеспечение, которое способно улучшать себя, всегда было мечтой учёных-компьютерщиков. В данной работе мы даём определения Рекурсивно СамоУлучшающегося (РСУ) программного обеспечения, исследуем разные типы самоулучшающегося программного обеспечения, делаем анализ ограничений на вычисления, ограничивающие рекурсивное самоулучшение и рассматриваем теорию конвергенции РСУ, которая имеет своей целью предсказание общего поведения РСУ систем. И в итоге, мы обращаемся к последствиям для безопасности самоулучшающегося интеллектуального программного обеспечения.

С самого начала существования информатики специалисты-провидцы отрасли ждали создания самоулучшающейся интеллектуальной системы, в основном, в виде наиболее простого пути к созданию настоящего искусственного интеллекта. Алан Тьюринг уже в 1950-х годах заметил: «Вместо того чтобы создавать программу для моделирования ума взрослого человека, почему бы не попытаться создать программу, моделирующую ум ребёнка? Если подобную программу подвергнуть затем соответствующему обучению, то в итоге можно было бы получить мозг взрослого человека. Мозг ребёнка — предположительно,что-то вроде тетради из магазина канцелярских товаров. Очень простая вещь и много чистых страниц… Можно надеяться, что в мозге ребёнка есть совсем небольшое устройство, так что нечто, подобное такому устройству, можно довольно легко запрограммировать. Скорее всего, в первом приближении объём работы при обучении данного устройства такой же, как и для устройства в мозге ребёнка».
Подход Тьюринга к созданию искусственного (супер)интеллекта отозвался эхом в работах И. Дж. Гуда, М. Мински и Джона фон Неймана; все они писали об этом (причем, все трое одновременно - 1966-м году).
И. Дж. Гуд писал: «Пусть сверхинтеллектуальная машина определена как машина, которая может сильно превосходить всю интеллектуальную деятельность каждого человека, каким бы он умным ни был. Так как конструирование машин — это один из видов подобной интеллектуальной деятельности, то сверхинтеллектуальная машина могла бы создать даже лучшие машины; за этим, без сомнения, возник бы «взрыв интеллекта», а человеческий разум оказался бы далеко позади. Так, первая сверхинтеллектуальная машина станет последним изобретением, которое люди когда-либо сделают».
М. Мински писал: «В тот момент, когда человечество разработает программы с действительной способностью к самоулучшению, пойдет очень быстрый эволюционный процесс. Так как машина улучшает и себя, и модель себя, мы станем видеть явления, которые описываются такими терминами, как «интеллект», «интуиция» и «сознание». Сложно сказать, насколько мы к этому порогу близки, но в тот момент, когда мы его переступим, мир уже никогда не будет прежним».
Д. фон Нейман писал: «Таким образом, существует очень важное свойство сложности, такой критический размер, ниже которого синтез имеет дегенеративный характер, а выше — синтез, если его организовать правильно, может стать взрывным, иными словами, таким, когда синтез автоматов может действовать таким образом, что каждый автомат станет производить другие автоматы - которые более сложные и имеют более высокие возможности». Современные исследователи в настоящее время все ещё приводят похожие аргументы, и популярность области исследований РСУ все еще растет, хотя некоторые  считают, что для рекурсивного процесса самоулучшения требуются сверхчеловеческие возможности, чтобы поддерживать процесс, что является своего рода «Уловкой 22».
Большинство из нас интуитивно понимает, что для программного обеспечения означает быть самоулучшающимся, но мы полагаем, что очень важно это понятие точно определить и систематически исследовать разные типы самоулучшения программного обеспечения. Во-первых, нам необходимо определить понятие улучшения. Можно говорить о повышении эффективности — решении той же проблемы быстрее или с меньшей потребностью в вычислительных ресурсах (к примеру, памяти).
Также мы можем померить снижение уровня ошибок или построить более точное приближение к оптимальным решениям, по мере того, как наш алгоритм из поколения в поколение продолжает быть функционально эквивалентным. Повышение эффективности можно отнести или к реализации линейного улучшения в отношениях между разными алгоритмами того же класса сложности (к примеру, NP), или к реализации фундаментального улучшения в отношениях между разными классами сложности (к примеру, P по отношению NP). Также необходимо помнить, что класс сложности Big-O алгоритма может скрывать значительные постоянные факторы, которые, будучи неучтёнными теоретически, способны изменить относительный порядок эффективности при практическом использовании алгоритмов.
Данный тип анализа очень хорошо работает для алгоритмов, которые созданы для выполнения конкретной задачи, но не особо хорошо работает для интеллектуального программного обеспечения широкого назначения, потому что улучшение в одной области способно идти параллельно снижению производительности в другой области. Так что сложно утверждать, что обновлённая версия программного обеспечения на самом деле улучшенная. И вообще, сильное улучшение, требующееся от самоулучшения интеллектуального программного — это высокая степень интеллекта, которую можно упрощённо представить при помощи дружественных тестов машины на IQ со значительной корреляцией по G-фактору.
Особый тип самоулучшения, который известен как рекурсивноесамоулучшение (РСУ), принципиально отличается, так как требует, чтобы система не только со временемулучшаласьсама, но и чтобы процесс приобретения лучшего улучшался. Реальная система РСУ теоретически не может быть носителем убывающих отдач, а вместо этого будет продолжать делать значительные улучшения, и такие улучшениясо временембудут более существенными. Так что, система РСУ будет способна бесконечносамоулучшаться.
В отличие от стандартного самоулучшения, в РСУ— в ходе смены поколений — возможна замена исходного кода другим. Это поднимает вопрос о том, к чему относится в данном контексте«само-». Если это не исходный код, который описывает изначальную суть, то что это? Вероятно, можно переопределить РСУ как рекурсивное улучшение исходного кода – для того, чтобы избежать борьбы с данной философской проблемой. Вместо того чтобы себяулучшать, система будут пытаться создать другую систему, которая достигает тех же целейуспешнее, чем это делает исходная система. В самом общем случае, система попытается создать даже более умный искусственный интеллект.
В этой статье мы попытаемся определить понятие самоулучшения программного обеспечения, рассмотреть возможные типы самоулучшения, проанализировать поведение самоулучшающегося программного обеспечения и обсудить границы таких процессов.

Таксономия видов самоулучшения

Самоулучшающееся программное обеспечение может быть классифицировано по степени самомодификации, к которой приводит самоулучшение. В целом мы различаем три уровня улучшения: — модификация, — улучшение (слабое самоулучшение) и — рекурсивное улучшение (сильное самоулучшение).
Самомодификация не производит улучшения и, как правило, используется для запутывания7 кода с целью защиты программного обеспечения от обратной разработки или для маскировки самовоспроизводящихся компьютерных вирусов от обнаружения программным обеспечением. Хотя и известно, что существует ряд методов запутывания кода, например, самомодифицирующийся код, полиморфный код, метаморфический код, код переадресации, но ни один из них не предназначен для изменения основного алгоритма. Единственная цель таких подходов — изменение вида исходного кода для тех, кто пытается детально понять программное обеспечение, что оно делает.
Самосовершенствование или Самоадаптация — это желательное свойство многих видов программных продуктов, которое обычно позволяет некоторую оптимизацию или подстройку программного продукта к окружающей среде и к пользователям программного продукта. Типичные примеры такого программного обеспечения включают эволюционные алгоритмы, такие как генетические алгоритмы или генетическое программирование, которые оптимизируют параметры программного обеспечения по отношению к какой-либо хорошо понимаемой функции приспособленности и, возможно, преобразуют высокомодульный8 язык программирования с целью дать гарантию, что все изменения выражаются в виде программного обеспечения, которое может быть откомпилировано и оценено с точки зрения пригодности к цели.
Система может попытаться оптимизировать свои компоненты, создавая внутренние «турниры» между кандидатами решений. Стивен Омохундро предложил идею методов повышения эффективности самосовершенствующегося программного обеспечения. Так как один из таких методов — метод баланса, то самосовершенствующиеся системы будут, как правило, балансировать распределение ресурсов между своими различными подсистемами. Если система не сбалансирована, то общая производительность системы может быть увеличена путём перераспределения ресурсов от подсистем, дающих небольшой (незначительный) вклад в улучшение системы, к подсистемам, обеспечивающим больший вклад в результат работы системы. В то время как производительность программного обеспечения в результате такой оптимизации может быть улучшена, общий алгоритм вряд ли будет изменён на алгоритм с принципиально большими возможностями.
Кроме того, быстро вступает в действие закон убывающих отдач и после начального этапа значительного улучшения, характеризующегося доступом к «низко висящим плодам»9, дальнейшие улучшения могут быть менее частыми и менее значительным, демонстрируя кривую Белла для ценных изменений. Метаразмышление (размышление о размышлении), метаобучение (обучение обучению) и обучение на протяжении всей жизни — термины, которые часто используются в литературе по машинному обучению для описания самомодифицирующегося алгоритма обучения или процесса выбора алгоритма, который в области конкретной проблемы будет работать лучше всего. Юдковский называет такой процесс нерекурсивной оптимизацией — это ситуация, в которой один компонент системы проводит оптимизацию и другой компонент становится оптимизированным.
В области сложных динамических систем, описываемых т. н. теорией хаоса, хорошо известны системы с положительной обратной связью, которые в конечном итоге всегда приходят к тому, что известно как аттрактор — область в пространстве состояний системы, из которой система не может выбраться. Хороший пример сходимости к такому аттрактору — процесс мета- или суперкомпиляции, в котором программа разработана так, чтобы взять исходный код, написанный человеком-программистом, и оптимизировать его с точки зрения скорости, применив оптимизацию к своему собственному исходному коду. Это, вероятно, обеспечивает наиболее эффективное компилирование при первом применении, возможно, до 20%, второе — до 3%, а после нескольких рекурсивных итераций — сходится к фиксированной точке с нулевым улучшением.
Рекурсивное самоулучшение — это единственный тип улучшения, у которого есть возможность полной замены исходного алгоритма на совершенно иной подход и, что более важно, возможность сделать это несколько раз. На каждом этапе вновь созданное программное обеспечение должно лучше оптимизировать каждую будущую версию программного обеспечения по сравнению с исходным алгоритмом. На момент написания этой статьи это чисто теоретическая концепция без существующего, как известно, работающего программного обеспечения РСУ. Однако, поскольку многие предсказывали, что такие программы могут стать реальностью в 21 веке, то важно дать некоторый анализ свойств такого софта, который стал бы реальностью.
Самомодифицирующиеся и самоулучшающиеся программные системы уже хорошо понятны и широко распространены. Следовательно, мы сосредоточимся исключительно на системах с РСУ. В практической деятельности почти любая система может быть тривиальным образом улучшена добавлением дополнительных вычислительных ресурсов, таких как память, более высокое разрешение сенсора, более быстрый процессор или более высокая пропускная способности сети для доступа к информации.
Такое линейное масштабирование не подходит под определение рекурсивного улучшения, поскольку система не становится лучше с точки зрения самоулучшения. Чтобы удовлетворить определению рекурсивного улучшения, система должна была бы разработать более быстрый тип памяти, а не только «прикупить» побольше единиц памяти такого типа, к которой она уже имеет доступ. Общее усовершенствование «железа», вероятно, может ускорить работу системы, тогда как для достижения метаулучшений (улучшения процесса улучшений) необходимо улучшение программного обеспечения (новые алгоритмы).