Оригинал материала находится по адресу www.computerra.ru/152907/halt/
22.07.2016
В споре — конечно, теоретическом, ибо никто такое по сию пору не построил — о возможности удержать суперинтеллект «в узде», гарантировать его безопасность для человека, давно наблюдается редкостная свалка. Одна сторона обвиняет другую в нежелании мыслить глобально и стратегически, та напирает на безграмотность соперников в деталях, и всё это щедро приправлено авторитетными именами, эмоциями, паническими настроениями…
Собственно всё это вы знаете и сами, если следите за дискуссией. Но вам будет интересно узнать, что в старом споре прозвучала новая нотка: всплыл аргумент, который никогда не использовался широко, если использовался вообще. Речь о доказательстве нашей неспособности контролировать поведение суперинтеллекта, сделанное через теорему, сформулированную ровно 80 лет назад не кем иным, как Аланом Тьюрингом. В этой области он работал не один, но именно его взгляд на проблему вошёл в историю — благодаря вспомогательному инструменту, затмившему славой саму теорему. Инструментом этим была так называемая машина Тьюринга. А сама теорема носит название «проблемы останова» (по крайней мере с некоторых пор её так называют).
Формулировка простая: не существует универсального алгоритма, позволяющего определить, будет ли произвольная компьютерная программа работать бесконечно («зациклится») или остановится.
При всей своей простоте именно проблема останова стала основателем любопытного класса задач, не поддающихся вычислению. Однако для простого компьютерного пользователя ценность её стремится к нулю: ну какой смысл искать способ определить, не зациклится ли произвольно взятая программа, если любая программа в нашей власти? Зависла — жмёшь Ctrl-C и всё!
Впрочем даже такой, «обывательский», подход подразумевает, что выкладки Тьюринга однажды могут пригодиться: применительно к «умным» вещам, обладающим, как известно, некоторой свободой действий, инициативой. Поэтому давайте рассмотрим теорему о проблеме останова подробней — расписав её упрощённое доказательство (я позаимствовал его у Алекса Аллейна).
Предположим, что теорема неверна. Это означает, что возможно написать универсальную утилиту, которая способна определить, станет ли произвольный кусок кода, получивший некоторые вводные данные, работать без конца или однажды всё-таки остановится. Назовём такую утилиту DOES-HALT(A,B). Аргумент A — программа (исходный код), которая подвергается анализу. Аргумент B — вводные данные для анализируемой программы. Результат: «истина», если анализируемый код останавливается, и «ложь» в противном случае.
DOES-HALT уже сама по себе весьма ценная вещица (пригодится как минимум для тестирования программ!), но мы пойдём дальше. Давайте напишем ещё одну утилиту, SELF-HALT, задачей которой будет определять, не зациклится ли произвольный кусок кода, если в качестве вводных данных передать ему самого себя. Если код, получивший себя, зацикливается, пусть SELF-HALT остановится. И наоборот: если код, получивший себя, нормально прекращает работу, пусть SELF-HALT зациклится, то есть работает бесконечно. Вот как алгоритм SELF-HALT можно записать в условных инструкциях:
SELF-HALT(program)
{
если (DOES-HALT(program,program)), то вечный_цикл
иначе стоп
}
Не ищите тут глубокого смысла, SELF-HALT пригодится нам в качестве вспомогательной логической конструкции для мысленного опыта, который мы сейчас поставим. Давайте заставим SELF-HALT проанализировать саму себя. К чему это приведёт?
Результат легко предсказать логически. Если SELF-HALT отработает и остановится, то DOES-HALT должна вернуть для неё «истину». Но в таком случае третья строка SELF-HALT зациклится и останова не произойдёт. Парадокс! То же самое получается, если предположить, что SELF-HALT должна зациклиться: DOES-HALT вернёт «ложь» и случится останов. Снова противоречие.
Что же не так, почему работоспособный алгоритм оказывается парализован? В тексте SELF-HALT ошибок нет: она работает как задумано. Аргументы тоже ни при чём. Получается, виновата утилита DOES-HALT. И вина её только в том, что она не может быть написана. Это и есть доказательство средствами логики неразрешимости проблемы останова.
Насладившись этой головоломкой, подумайте вот о чём. Теорема о проблеме останова не утверждает, что для отдельно взятой программы (куска кода) нельзя придумать алгоритм, который определит — завершится программа или зациклится. Теорема утверждает только, что не существует универсального алгоритма, который решал бы эту задачу для любой программы. Отсюда следуют несколько интересных выводов — имеющих, кстати, самый непосредственный практический смысл. Например, теперь легко понять, почему невозможно создание идеального антивируса или идеального же фильтра порнографии. Но наш разговор о суперинтеллекте — и проблема останова вплотную к нему подводит.
Ориентируясь на логические построения Тьюринга, группа исследователей из Испании, США и Австралии, написала короткую, но занятную научную работу, препринт которой лежит сейчас на arxiv.org (замечательные миниатюры из неё иллюстрируют сегодняшнюю колонку). Главный вопрос: сможем ли мы гарантировать, что суперинтеллект — искусственный разум, превосходящий создателя — будет вести себя приемлемо для нас? Попросту, не устроит ли он глобальную зачистку Земли от людей?
Ответ, увы, отрицательный, причём получен он с помощью той же элементарной логики. Я не рискну излагать здесь доказательство, но упрощённо его суть в следующем. Суперинтеллект — всего лишь компьютерная программа. Значит, распечатав и проанализировав её, мы вроде бы сможем определить, поведёт ли она себя агрессивно («остановится» или «зациклится»). Но проблема в том, что суперинтеллект на то и «супер», чтобы уметь всё, что умеет человек и даже больше — иначе говоря, такая программа содержит в себе все написанные программы и в том числе ту, которая пытается выяснить, как суперинтеллект себя поведёт. Раз так, проблема становится невычисляемой.
Подобные игры с логикой выглядят скорее забавой для ума, нежели чем-то применимым на практике. Однако за ними проглядывает тот же самый вывод, который уже неоднократно делали другие исследователи: единожды сотворённый, суперинтеллект выйдет из под нашего контроля. А это, вообще говоря, значит, что его постройка теряет смысл. Представьте, что мы создадим машину настолько опасную, настолько непредсказуемую, что будем вынуждены лишить её любых контактов с окружающим: опасно делиться с ней информацией, опасно информацию от неё получать. Но ведь это всё равно, как если бы её не существовало вовсе!
Если же проявим слабость и сделаем изоляцию неполной, даже самые ярые оптимисты должны будут признать, что предсказать, как машина поведёт себя через минуту, час или день, невозможно. Посеял ветер — будь готов пожать бурю…
Алан_Тьюринг,проблема_останова,логика,алгоритм,ИИ,программирование,суперинтеллект