Вплоть до недавнего времени создание программы, способной распознать по изображению что-либо, не говоря уже о раковых клетках, считалось задачей из области головоломных. Пусть нам самим не составляет ни малейшего труда догадаться, что нарисовано на картинке – но чертовски трудно, оказывается, объяснить толком, как мы это узнаем.
Представьте себе, будто вы пишете инструкцию для компьютера, которая позволит ему определить, есть на фото собака или нет. Можно начать с самых надежных критериев – различимы ли четыре ноги, висячие уши, шерсть и прочие признаки животного. А если собака на фото сидит? Или не все ее лапы видны? А что, если у нее уши с заостренными кончиками и стоят торчком? Или собака вовсе отвернулась от камеры? И как отличить лохматого пса от длинноворсового ковра, а также от нестриженой овцы и от травы?
Конечно, можно добавить команды для каждого такого случая, предусмотреть все вероятные типы собачьего уха и шерсти, различные позы, в которых сидят собаки, но прежде чем вы начнете кое-как отличать собак от других предметов и существ с четырьмя ножками или лапами и ворсом или шерстью, программа разрастется до неудобоваримого объема и станет непригодной для работы. Надо придумать что-то другое. Есть одна хитрость – можно отойти от подробно описанных процедур и взять на вооружение так называемую искусственную нейронную сеть, или просто нейросеть.
Нейросеть можно представить в виде колоссальной математической структуры со множеством рычажков и ручек настройки. Вы вводите в нее картинку, нейросеть пропускает ее через себя и на выходе выдает результат – что там изображено. Варианты ответа на каждом этапе: “Собака” или “Не собака”.
Поначалу нейросеть абсолютно бесполезна. У нее нет исходной информации, и она не имеет ни малейшего понятия, что является собакой, а что нет. Все рычажки и ручки повернуты как попало. Результаты сумбурны и лишены логики, машина не разглядела бы на фото собаку, даже если это было бы необходимо для бесперебойной работы ее источника питания. Однако с каждой следующей картинкой вы подстраиваете ручки и рычажки. Мало-помалу вы обучаете нейросеть.
Вы загружаете фотографию своего пса. После очередного ответа производятся математические действия, которые регулируют рычажки нейросети до тех пор, пока предварительная оценка не станет ближе к правильному ответу. Затем вы загружаете вторую картинку, третью и, если результат ошибочен, каждый раз что-то подправляете, закрепляете маршруты, которые ведут к цели, и отбрасываете те, что уводят в сторону. Информация об общих деталях разных изображений собаки распространяется по нейросети назад. Процесс продолжается до тех пор, пока – пусть после сотен и тысяч пропущенных через нейросеть фотографий – частота ошибок не сводится к минимально возможной. Рано или поздно вы покажете машине новую картинку, никогда прежде ей не попадавшуюся, и она с высокой степенью достоверности скажет вам, есть на фото собака или нет.
Удивительно, что операторы нейросетей обычно не понимают, как и почему алгоритм делает тот или иной вывод. Отбирая изображения собак, нейросеть не ищет те характерные особенности, которые мы с вами считаем собачьими. Степень сходства с определенной породой, будь то чихуахуа или дог, машину не интересует, она ориентируется на гораздо более абстрактные параметры, такие как контуры фигуры и светотень, которые человеку мало что говорят (взгляните на пример распознавания изображения из главы “Власть”, и вы поймете, что я имею в виду). Поскольку человеку трудно осмыслить этот процесс, операторы знают лишь, что они скорректировали свои алгоритмы так, чтобы те выдавали верные ответы, а подробности работы алгоритмов не всегда известны.
Это еще один метод машинного обучения, подобный алгоритму “случайного леса”, уже знакомому нам по главе “Правосудие”. Этот алгоритм выходит за рамки инструкций программистов, он умеет учиться самостоятельно по тем изображениям, которые ему предоставили. Именно способность алгоритма к самообучению дает нам основания говорить об искусственном интеллекте. Кроме того, множество уровней “рычажков и ручек” также делают структуру нейросети более глубокой и сложной, отсюда и взялся термин “глубокое обучение”.
Нейросети появились в середине XX века, но еще в недалеком прошлом нам не хватало мощных компьютеров, которые позволяли бы использовать весь потенциал нейросетей. Лишь в 2012 году, когда ученый-информатик Джеффри Хинтон и двое его студентов представили на конкурс по распознаванию изображений нейросеть нового типа, мир наконец встрепенулся и всерьез занялся искусственным интеллектом. Было дано задание: найти на картинках среди всего прочего собак. Программа Хинтона и его учеников посрамила самых сильных своих конкурентов и стимулировала широкомасштабное возрождение алгоритмов глубокого обучения.
От алгоритма, который сам принимает какие-то решения, как и почему – нам неведомо, попахивает нечистой силой, однако принцип его действия, возможно, не так уж далек от нашего с вами учебного процесса. Вот вам пример для сравнения. Недавно группа специалистов учила алгоритм различать на фотографиях волков и хаски. Как выяснилось, алгоритм подгонял свои настройки таким образом, что какие-либо признаки собак в качестве подсказки ему не требовались. Он принимал решения на основании того, был ли объект изображен на фоне снега или нет. Есть снег – волк. Нет снега – хаски.
Вскоре после того, как статья была опубликована, мне довелось побеседовать с профессором математики из Кембриджа Фрэнком Келли, и он пересказал мне свой разговор с четырехлетним внуком. По дороге в детский сад они увидали хаски. Мальчик сказал, что “собачка похожа на волка”. Фрэнк спросил его, откуда он знает – может, это и правда волк, и получил такой ответ: “Так она же на поводке”.