В середине XIX века математики Чарлз Беббидж и Ада Лавлейс (дочь Джорджа Байрона) разработали проект механической программируемой машины. Лавлейс, которую можно считать самым первым программистом, указывала, что такая машина может работать не только с числами, но и выполнять другие операции, если их можно выразить манипуляциями с числами, например, сочинять музыку. К сожалению, построить машину Беббиджа не удалось, но в принципе она могла бы делать почти все то, что делают современные компьютеры.
Вероятно, не случайно еще Кеплеру принадлежит призыв к созданию вычислительной машины. Его работы в области движения небесных тел подняли механику до крайне высокого уровня. Начинало казаться, что она полностью описывает окружающий мир. Это дало основание Лапласу (1749–1827) высказать любопытную идею: некий «всеобъемлющий ум», знающий уравнения движения всех атомов Вселенной, мог бы, решая их, предсказать все будущие события, всю историю мира до последней мелочи, до шага и вздоха каждого человека!
Исходя из такого понимания устройства мира, и работали Беббидж и Лавлейс. По-видимому, они ждали от вычислительной машины очень многого… Однако окружающий мир оказался значительно сложнее. Его нельзя описать раз и навсегда заданными уравнениями. Многие явления и процессы, например, происходящие в микромире, не имеют четкой внутренней логики и не поддаются формальному описанию.
Вот, например, задача распознавания символов.
Пусть у вас есть лист с напечатанным на нем текстом и вы хотели бы перенести этот текст в компьютер, чтобы затем редактировать его. Как автоматизировать эту работу? Воспользоваться сканером? Как бы не так: полученное с его помощью оцифрованное изображение текста — это еще не сам текст. Это пока только картинка. Если же мы захотим загрузить этот текст в текстовый редактор, то сначала нужно, чтобы компьютер «опознал» каждый изображенный символ и сопоставил с ему соответствующим кодом.
Проблема же в том, что сложно четко и однозначно «объяснить» компьютеру, чем похожи и чем отличаются распознаваемые объекты. Например, буква «А» может быть напечатана разными шрифтами или небрежно написана от руки, качество печати принтера или 8 типографии может быть не очень высоким. Сами мы прекрасно опознаем эти изображения. Но объяснить, как это происходит, мы не в состоянии.
Бэббидж — профессор Люкасовской кафедры Кембриджского университета (1829).
Ада Августа Лавлейс.
Впрочем, задача распознавания гораздо шире, чем умение читать. Детали, проезжающие на конвейере перед телекамерой, среди которых надо обнаружить бракованные; полустертые отпечатки пальцев, обнаруженные следователем на месте преступления, голос преступника в записи телефонного разговора — это тоже образы. Остается прежней и суть задачи: умение правильно определять, в какому классу из числа уже известных относится тот или иной образ.
Аналогичны по своей неформализуемости и задачи предсказания будущего на основе прошлого опыта. Причем они вовсе не сводятся к гаданиям на картах или на кофейной гуще: ведь прогноз погоды или состояние экономики — это тоже предсказание будущего… Как же решать подобные задачи?
В конце 50-х годов XX века американский ученый Ф.Розенблат создал перцептрон — устройство для распознавания образов. В его основе было заложено подражание живой природе — это была простейшая модель глаза. У первого такого перцептрона «сетчатка глаза» состояла из ста фотоэлементов — аналогов зрительных клеток. К ним были подключены «нейроны» — усилители с изменяемыми коэффициентами усиления на входах. Причем входы каждого «нейрона» соединялись с фотоэлементами случайным образом, в том числе несколько фотоэлементов могли быть подключены к одному усилителю или же, наоборот, один фотоэлемент подключался к нескольким усилителям. Да и все изначальные коэффициенты усиления выбирались совершенно случайно. Каждый «нейрон» в устройстве Розенблата суммировал поданные на него сигналы с учетом их усиления, а затем полученные результаты суммировались и сравнивались с некоторым пороговым значением. Если их общая сумма превышала порог, то на выходе перцептрона появлялся сигнал «1», иначе же — сигнал «0».
Само по себе такое устройство, конечно же, еще ничего не умело — ведь по сути у него не было даже какой-то схемы, а только полный хаос. Перцептрон нужно было обучить выполнению поставленной задачи. Вот перед нами только что изготовленный перцептрон. Будем показывать ему букву «а» в различных начертаниях. Если на выходе появится единица, значит, перцептрон «угадал» правильный ответ. Если же нет, то уменьшаем коэффициенты усиления для тех «нейронов», которые активнее всего участвовали в формировании неверного ответа. А затем повторим процедуру снова и снова — до тех пор, пока перцептрон не станет надежно опознавать букву «а». Если же немного усложнить схему, то можно сделать и перцептрон, различающий разные буквы, тогда его требуется обучать не только правильно опознавать каждую букву, но и отличать их друг от друга.
И в этом главное отличие перцептрона от «классического» компьютера. Во-первых, мы изначально не закладываем в перцептрон никаких алгоритмов распознавания — ни в виде программы, ни схемотехнически; более того, мы даже можем не знать этого алгоритма. Наоборот, делая схему хаотичной, мы стараемся не закладывать в него изначально вообще никакой предварительной информации! А во-вторых, перцептрон необходимо долго «обучать» решению интересующей нас задачи на примерах-образцах. Только в отличие от школьника уже обученный перцептрон можно потом «растиражировать» в нужном количестве экземпляров. И чем дольше и тщательнее проводится «обучение», тем меньше ошибок допускать перцептров дальнейшей работе. Фактически алгоритм решения задачи рождается в процессе «обучения»!