Пользователи сервиса вопросов и ответов Quora задались вопросом, почему компьютеры до сих пор не могут сами писать программы. Посетители сайта обсудили, почему учёные не могут применить уже известные им алгоритмы и элементы логики, составить библиотеку из уже написанных частей различных программ, и научить машины программировать себя самих.
На самом деле компьютеры могут программировать самостоятельно, просто не очень хорошо
Пользователь Quora Тихон Джелвис считает: для того, чтобы машины научились программировать, нужно больше данных, чем есть у учёных на сегодняшний момент, и, на самом деле, это лишь вопрос времени.
Джелвис видит две проблемы, которые мешают компьютерам программировать самостоятельно. Во-первых, не очень ясно, как рассказать машине, что именно нужно запрограммировать. Естественный язык тут не подходит, и учёные пока не могут прийти к единому мнению относительно решения этого вопроса.
Во-вторых, непонятно, как масштабировать полученные программы. Компьютеры могут писать код, решающий маленькие задачи, но написать программу, которая содержит в себе больше определенного количества инструкций, они не способны. Помимо того, что это число довольно маленькое (около сотни), на текст программы почти всегда должны быть наложены некие ограничения: например, не применять циклы.
Как объяснить компьютеру, что вам нужно
Основная сложность, по мнению Джелвиса, здесь в том, что пользователю должно быть проще рассказать компьютеру, что ему нужно, чем написать код самому — иначе в такой системе нет никакого смысла. Кроме того, у человека должна быть возможность убедиться, что машина занимается тем, чем ему нужно, и что код, который она выдаёт, написан правильно.

Есть очевидный способ объяснить компьютеру, что ему нужно сделать. Для этого нужно описать проблему на языке какой-нибудь формальной аксиоматической теории. Запрограммировать систему, считывающую вопрос и преобразующую его в текст, понятный машине, относительно просто. Однако далеко не все пользователи компьютера способны перевести задачу на язык математической логики. Поэтому такое решение не годится.
Другой подход — примерное описание алгоритма. Таким образом можно дать машине понять, чего от неё ждут. Компьютер сможет проанализировать полученные данные, «осознать», как должен работать алгоритм, и оптимизировать полученный код. Кроме того, текст, который пользователь отдаёт системе на обработку, совсем не обязательно должен быть правильный. Достаточно лишь приблизительно описать, что именно хочется получить человеку. Этот вариант гораздо сложнее реализовать, и пользователю всё равно будет нелегко сформулировать задачу — например, когда вообще неясно, как её решать.

Джелвис считает оптимальным следующий способ: пользователь передаёт в систему несколько пар вида (входные данные, выходные данные), а компьютер составляет алгоритм, который из входных данных получает выходные. Когда программа создана, она прогоняется на ещё нескольких парах, и так пока она каждый раз не будет выдавать нужные значения. К сожалению, пока реализовать такую схему невозможно.
В общем случае довольно сложно проверить написанный компьютером код на соответствие заданным условиям
На самом деле, слишком сложно, поясняет пользователь Quora Мариса Кирисаме. Задача разрешимости булевой функции NP-полна. Единственный на данный момент известный науке способ решить такую задачу — перебрать все возможные варианты.
Этот порог можно будет преодолеть — если математикам удастся доказать, что классы задач P и NP равны, однако наука занимается проблемой равенства классов уже много лет, и пока ответа на этот вопрос дать не удалось.
Кроме того, даже логика первого порядка является лишь полуразрешимой. Разрешимость — это свойство, позволяющее найти алгоритм, определяющий по аксиомам теории, принадлежит данная формула этой теории или нет. Полуразрешимость — более слабое свойство. Оно означает, что если формула не принадлежит теории, то работа подобного алгоритма никогда не завершится.

Конечно, существуют и разрешимые аксиоматические теории первого порядка — например, арифметика Пресбургера. Но сложность алгоритма, определяющего выводимость формулы в этой теории, экспоненциальная. Если точнее — O(2^(2^N)), где N — длина входных данных.
Кирасаме замечает: логика высказываний, которую нужно будет применять, чтобы распознать нужное решение, наверняка гораздо более высокого уровня, чем первого. И если даже она будет разрешимой, сложность нужного алгоритма, вероятно, окажется слишком большой.
Всё это значит, что компьютер может писать эффективные программы лишь для небольших задач. Для более глубоких вопросов это просто не имеет смысла — потому что проверить оптимальность, эффективность и правильность кода будет очень сложно.
Компьютеры не умеют программировать, потому что люди не хотят быть уничтоженными
Некоторые из пользователей Quora, высказавших своё мнение по этому вопросу, считают, что основная проблема — это неоднозначность самого существования искусственного интеллекта. Ведь, по сути, именно это и означает обучение машины программированию — таким образом в «мозг» компьютера будет заложена логика — то, что отличает робота от человека.

Если искусственный интеллект будет создан, совсем не факт, отмечает один из комментаторов по имени Сичу Лу, что люди продолжат своё существование на земле. Возможно, они будут уже не нужны компьютерам, которые смогут всем заниматься сами.
Источник: siliconrus.com