Споры об опасности искусственного интеллекта, как и «умных» машин вообще, часто заканчиваются одним и тем же аргументом — столь же простым, сколь и невероятно сложным: мы не в состоянии контролировать машины, потому что не в состоянии их понять! Принять этот аргумент на веру готовы немногие. Мы привыкли и здравый смысл диктует нам, что построенные нами устройства известны нам и подконтрольны до последнего винтика, байта, транзистора. И даже если устройство очень сложное — ну, возьмите персональный компьютер, который большинством пользователей понимается, конечно, только поверхностно — всегда найдётся специалист, способный его электрическую/логическую схему объяснить.
Но вот ведь какая штука: развитие именно цифровой техники обещает перевести нас на следующую ступеньку, где создатель своего детища уже не поймёт — потому что машина с элементами ИИ способна усложняться самостоятельно, независимо от человека. Постоянные читатели знают, что в этом споре я на стороне тех, кто убеждён, что машины скоро станут нам неподвластны. Но не нужно верить мне на слово. Я предлагаю прямо сейчас поставить простой эксперимент, который наглядно продемонстрирует вам процесс самоусложнения машин и его неизбежную перспективу. Предстоит немного программировать. 😉
Нам потребуется какая-нибудь среда разработки — и, надеюсь, вы простите меня за то, что, как и в прошлые разы, я выберу BASIC. Уверен, далеко не каждый читатель «Компьютерры» сегодня силён в программировании, а бейсиковский текст легко понять даже неспециалисту, и в то же время возможностей этого языка вполне хватит для решения поставленной задачи. Так что вооружимся интерпретатором GW-BASIC (оригинал 30-летней давности можно отыскать в Сети; под MS Windows он запускается из командной строки, под Linux через dosbox) и вобьём в него следующую простую программу.
10 RANDOMIZE
20 DIM DNA[2000]
30 LENGTH=10
40 POSITION=1
50 M=RND
60 IF M<.5 THEN M=0 ELSE M=1
70 DNA[POSITION]=M
80 RESULT=0
90 FOR I=1 TO POSITION
100 IF DNA[I]=0 THEN RESULT=RESULT-1 ELSE RESULT=RESULT+1
110 NEXT I
120 IF RESULT<0 or="" result="">10 THEN GOTO 50
130 POSITION=POSITION+1
140 IF POSITION
150 PRINT "CODE:"
160 FOR I=1 TO LENGTH
170 PRINT DNA[I]" ";
180 NEXT I
Можете верить, можете проверить, но эта тривиальная программка из двух десятков строк — суть, аналог сложнейших систем эволюционного или, как ещё говорят, генетического программирования. Конечно, я сильно упростил структуру, но принцип остался тем же: эта программа сама ищет решение для предложенной ей задачи. Я поручил ей сгенерировать произвольное число в диапазоне от 0 до 10 и сделать это за десять шагов, начав с нуля и случайным образом прибавляя или вычитая на каждом шаге единичку. Если на каком-то шаге промежуточный итог выходит за ограничения (оказывается меньше 0 или больше 10), программа повторяет шаг, исправляя себя.
После того, как задача решена, «придуманный» алгоритм распечатывается на экране — в виде последовательности нулей и единиц: эта последовательность — сама по себе программа, в которой ноль означает инструкцию «вычесть из результата 1», а единица означает «прибавить к результату 1». Если угодно, о результате работы можно думать как о спирали ДНК, по которой живая клетка строит молекулу белка — только наша «клетка» строит не белок, а число от 0 до 10.
Не обращайте пока внимания на примитивность кода. Повторюсь, по сути, вся цифровая «генетика», да и искусственные нейросети тоже, функционируют похожим образом, только вместо тривиальной задачи генерации чисел они могут, например, распознавать образы, решать головоломки — искать решение для вообще любой задачи, поставленной перед ними. В замечательном (и, слава богу, пока фантастическом) фильме «Из машины», кадры которого иллюстрируют сегодняшнюю колонку, искусственный интеллект решает задачу побега из заточения. Так вот, сосредоточьтесь лучше на результатах работы нашей программы. 0>
10 RANDOMIZE
20 DIM DNA[2000]
30 LENGTH=10
40 POSITION=1
50 M=RND
60 IF M<.5 THEN M=0 ELSE M=1
70 DNA[POSITION]=M
80 RESULT=0
90 FOR I=1 TO POSITION
100 IF DNA[I]=0 THEN RESULT=RESULT-1 ELSE RESULT=RESULT+1
110 NEXT I
120 IF RESULT<0 or="" result="">10 THEN GOTO 50
130 POSITION=POSITION+1
140 IF POSITION
150 PRINT "CODE:"
160 FOR I=1 TO LENGTH
170 PRINT DNA[I]" ";
180 NEXT I
Можете верить, можете проверить, но эта тривиальная программка из двух десятков строк — суть, аналог сложнейших систем эволюционного или, как ещё говорят, генетического программирования. Конечно, я сильно упростил структуру, но принцип остался тем же: эта программа сама ищет решение для предложенной ей задачи. Я поручил ей сгенерировать произвольное число в диапазоне от 0 до 10 и сделать это за десять шагов, начав с нуля и случайным образом прибавляя или вычитая на каждом шаге единичку. Если на каком-то шаге промежуточный итог выходит за ограничения (оказывается меньше 0 или больше 10), программа повторяет шаг, исправляя себя.
После того, как задача решена, «придуманный» алгоритм распечатывается на экране — в виде последовательности нулей и единиц: эта последовательность — сама по себе программа, в которой ноль означает инструкцию «вычесть из результата 1», а единица означает «прибавить к результату 1». Если угодно, о результате работы можно думать как о спирали ДНК, по которой живая клетка строит молекулу белка — только наша «клетка» строит не белок, а число от 0 до 10.
Не обращайте пока внимания на примитивность кода. Повторюсь, по сути, вся цифровая «генетика», да и искусственные нейросети тоже, функционируют похожим образом, только вместо тривиальной задачи генерации чисел они могут, например, распознавать образы, решать головоломки — искать решение для вообще любой задачи, поставленной перед ними. В замечательном (и, слава богу, пока фантастическом) фильме «Из машины», кадры которого иллюстрируют сегодняшнюю колонку, искусственный интеллект решает задачу побега из заточения. Так вот, сосредоточьтесь лучше на результатах работы нашей программы.
Запустите её и проанализируйте выдачу. Каждый раз вы получите новую последовательность инструкций, но пока длина результата ограничена каким-то разумным числом (в нашем примере числом десять, см. строку 30), понять его нетрудно. Сгенерированную последовательность легко «выполнить» в уме — прибавляя или отнимая по единичке за шаг. Однако давайте усложним задачу: пусть «придумываемая» программа содержит уже не десять, а сто инструкций. Как много времени займёт у вас анализ этого кода? Проанализировать его «в лоб», т.е. «прогнать» в уме, уже не так просто. Впрочем, пока ещё можно попробовать применить математические методы сокращения сложности — ведь мы знаем, что вся последовательность составлена всего из двух инструкций: сложения и вычитания.
Но представьте теперь, что вместо двух инструкций в распоряжении машины оказались несколько десятков: арифметика, логика, матрицы, ветвление и т.п. И что генерируемая последовательность исчисляется уже не сотней, а миллионами шагов. И это вовсе не выдумки. Очень похожим на наш методом (синтетическая эволюция, направляемая генератором случайных чисел, с промежуточным «скрещиванием» лучших вариантов) нынче весной группа учёных в Штатах заставила компьютер сформулировать новую научную теорию, решившую загадку, мучившую биологов больше ста лет. Вообразите себе сложность исходных данных (Big Data) и результата!
Однако и это ещё не предел. В искусственных нейросетях, например, нет той строгой последовательности потока команд, которая присуща искусственной генетике. В нейросетях все элементы схемы (или по крайней мере значительная их часть) работают одновременно, так что даже для создателя нейросети уяснить смысл происходящего в ней сложно. Не невозможно, нет, можно попытаться описать нейросеть сложнейшей системой уравнений. Но практически уже на простейших пересечениях с биологией (вспомните цифровую модель червя Caenorhabditis elegans - О правах животных in silico) это едва ли осуществимо.
Но представьте теперь, что вместо двух инструкций в распоряжении машины оказались несколько десятков: арифметика, логика, матрицы, ветвление и т.п. И что генерируемая последовательность исчисляется уже не сотней, а миллионами шагов. И это вовсе не выдумки. Очень похожим на наш методом (синтетическая эволюция, направляемая генератором случайных чисел, с промежуточным «скрещиванием» лучших вариантов) нынче весной группа учёных в Штатах заставила компьютер сформулировать новую научную теорию, решившую загадку, мучившую биологов больше ста лет. Вообразите себе сложность исходных данных (Big Data) и результата!
Однако и это ещё не предел. В искусственных нейросетях, например, нет той строгой последовательности потока команд, которая присуща искусственной генетике. В нейросетях все элементы схемы (или по крайней мере значительная их часть) работают одновременно, так что даже для создателя нейросети уяснить смысл происходящего в ней сложно. Не невозможно, нет, можно попытаться описать нейросеть сложнейшей системой уравнений. Но практически уже на простейших пересечениях с биологией (вспомните цифровую модель червя Caenorhabditis elegans - О правах животных in silico) это едва ли осуществимо.
Поэтому — не тешьте себя ложной надеждой. Взгляните на только что «придуманный» вашим компьютером поток из сотни команд, и — признайте, что в какой-то момент человек будет не в состоянии понять, как работает построенная им же машина. А сделав этот шаг, придётся сделать и следующий: признать, что, не понимая, мы не в силах и предвидеть всех возможных последствий, а значит, не в силах «умную» машину контролировать, ею управлять.
Тут, конечно, кто-то возразит, что даже если мы не понимаем работу программы, то всегда можем ограничить её связи с реальностью. Грубо говоря, приварить пулемёт так, чтобы робот физически не смог повернуть его назад, направить на создателя. К сожалению, не всё можно свести к пулемётам. Если мы хотим, чтобы «умные» машины были ещё и полезными, нам придётся дать им свободу действий, сравнимую с той, какую имеем мы сами. А это автоматически равноценно тому, чтобы расписаться в собственном бессилии.
Потому что запретить машине не причинять вред создателю, конечно, можно. Но если создатель сам решит насадиться на нож, подставленный электронным слугой, тут уж ничего не попишешь…
Тут, конечно, кто-то возразит, что даже если мы не понимаем работу программы, то всегда можем ограничить её связи с реальностью. Грубо говоря, приварить пулемёт так, чтобы робот физически не смог повернуть его назад, направить на создателя. К сожалению, не всё можно свести к пулемётам. Если мы хотим, чтобы «умные» машины были ещё и полезными, нам придётся дать им свободу действий, сравнимую с той, какую имеем мы сами. А это автоматически равноценно тому, чтобы расписаться в собственном бессилии.
Потому что запретить машине не причинять вред создателю, конечно, можно. Но если создатель сам решит насадиться на нож, подставленный электронным слугой, тут уж ничего не попишешь…
computerra