книга не поможет; дождь усиливается, зонт я наверняка потерял, а звонить жене только затем, чтобы испортить настроение, не стоит; лучше позвоню шефу и извинюсь.

Каждая мысль в этой последовательности, в свою очередь, есть результат вывода на основании более общих знаний. Например, человек должен знать, что такое дождь, что такое промокнуть, почему надо защищаться, и т. д. Все факты и знания, необходимые для поиска ответа, хранятся в памяти интеллекта.

Очевидно, если ситуация повторяется достаточно часто, то полученное несколько раз решение сохраняется в памяти и затем вызывается аналогично условному рефлексу без длинного вывода. У организованного человека «лето – дождь – зонт» срабатывает автоматически, не говоря о том, что портфель с книгой оказывается в руке сам собой. Перед шефом если и придется извиняться, то не за малодушие, а за настырность.

4. Искусственный интеллект

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

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

5. Основное противоречие программирования

Итак, современный компьютер интеллектом не обладает – он не имеет встроенной логики и не может самостоятельно выводить решения. Компьютер программируется человеком-программистом. Это означает, что вывод решений берет на себя программист, а компьютер получает готовые решения в виде программ и выполняет их по запросу.

Рассмотрим задачу поиска пути через лес, в котором пересекается множество дорог. Пусть каждому пересечению соответствует свой номер. Тогда путь через лес можно представить списком номеров, который начинается с номера входа в лес и заканчивается номером выхода из леса, а любые два последовательных номера связаны между собой. Другими словами, для того чтобы пройти через лес необходимо следовать от номера к номеру в соответствии с этим списком.

Например, если связи номеров сети из 99 пересечений представить множеством фактов типа:

связаны (1, 2),

связаны (2, 5),

связаны (9, 17),

……

связаны (81, 99),

то путь через лес можно представить списком номеров – (1, 2, 5, …, 9, 17, …, 81, 99).

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

найти_путь (Начало, Конец, Путь), если связаны (Начало,

Конец), Путь = Начало. Конец. найти_путь (Начало, Конец, Путь), если связаны (Начало,

Ближний) и найти_путь (Ближний, Конец, Путь).

Первое предложение фиксирует тот факт, что если Начало и Конец связаны, то их список и есть искомый Путь. В противном случае во втором предложении выбирается Ближний узел и уже от него строится Путь до узла Конец. Имея перечисленные выше факты и знания, можно задать запрос: найти_путь (1, 99, Путь) и получить соответствующий список номеров.

Если человек видит лес сверху, он может сразу построить путь и в готовом виде ввести его в компьютер. Это равносильно тому, что человек решает задачу и вводит решение в компьютер.

Итак, существует два подхода к программированию компьютера, составляющие основное противоречие программирования – составление программ и представление знаний.

В первом случае инженер знаний представляет знания о ситуации или предметной области в виде предложений на языке логики, используя которые, компьютер выводит необходимый результат. Инженер знаний пытается описать лес со всеми его тропинками в виде набора деклараций, а поиск тропинки, ведущей в необходимое место, оставляет компьютеру. Логический способ представляет необходимость. При таком подходе достигается максимальное обобщение, но время получения решения непредсказуемо.

Во втором случае программист решает задачу и составляет программу (последовательностей команд на алгоритмическом языке), выполняя которую, компьютер получает необходимый результат. Программист находит одну тропинку и представляет ее в виде программы – набора императивов. Алгоритмический способ представляет свободу. Конкретные решения легче представляются алгоритмами, а алгоритм всегда можно эффективно запрограммировать.

Противоречие между составлением программ и представлением знаний составляет основное противоречие между свободой и необходимостью в программировании и является основной причиной развития его методологии.

В настоящее время преобладает составление программ. Основные причины:

– архитектура компьютера до сих пор ориентирована на выполнение программ;

– программа всегда выдает результат намного быстрее, чем любой логический интерпретатор;

– программистов намного больше, чем инженеров знаний, так как для представления знаний требуется более высокий уровень, чем для составления программ;

– практическое использование логического подхода свелось к логическому программированию, основные особенности которого – рекурсия и управление бэктрекингом (сокращение пространства перебора) – сложны в освоении и, к сожалению, существенно снижают именно логическое содержание.

Тем не менее, будущее за балансом между логическим (представлением) и алгоритмическим (исполнением). Хороший программист старается максимально обобщить конкретный случай. С одной стороны, в алгоритмическом программировании доля декларативного постоянно увеличивается, что способствует ограничению свободы в составлении программ и устранению связанных с ней недостатков. Именно декларативность лежит в основе его эволюции, включающей в себя модульное, структурное, объектно-ориентированное, сервис-ориентированное программирование и т. д. С другой стороны, в логические представления вводятся алгоритмические элементы, сокращающие перебор вариантов во время вывода. Они нарушают логику, но позволяют создавать эффективные программы.

Вряд ли Бог стал бы составлять программы поведения для всех объектов – на Его уровне, наверное, можно описать общие законы существования Вселенной, включающие и правила поведения объектов, и принципы эволюции, и даже правила составления программ поведения конкретных объектов и т. д.

Вопрос: чем Бог отличается от программиста?

Ответ: Бог надеется, что он никогда не станет программистом.

Профессиональный опыт

Непрерывной математики я не понимал, и вся моя учеба была практически бесполезной с точки зрения получения полезных знаний – университет дал последний импринтинг интеллекту, без которого молодые

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату