Одной из самых трудных проблем в развитии искусственного интеллекта всегда было компьютерное зрение. Еще пять лет назад компьютеры ужасно плохо понимали, на что они смотрят. В этой области человеческий мозг работает несравнимо лучше, чем его кремниевые соперники. Мы способны бросить один быстрый взгляд на картинку и сразу сказать, что на ней изображено, или классифицировать разные участки изображения. Компьютер может проанализировать миллионы пикселей, но программистам оказалось очень трудно написать алгоритм, который смог бы обработать все эти данные и разобраться в них. Как создать нисходящий алгоритм, способный узнать кошку? Каждое изображение состоит из пикселей, расположенных абсолютно уникальным образом, и тем не менее человеческий мозг обладает поразительной способностью синтезировать эти данные и объединять входящие сигналы в один выходящий, дающий ответ «кошка».
Способность человеческого мозга распознавать визуальные образы используется для создания дополнительного уровня защиты в банках, а также помогает установить, что вы – не робот, прочесывающий интернет в поисках билетов. По сути дела, вам приходится проходить обратный тест Тьюринга.
Когда человеку показывают изображение или надпись, сделанную причудливым почерком, человек очень хорошо определяет, что там изображено или написано. Компьютеры не могли справиться со всем многообразием таких изображений. Но машинное обучение изменило это положение вещей.
Теперь, тренируясь на данных, состоящих из изображений кошек, алгоритм постепенно выстраивает иерархическую систему вопросов, которые он может задать относительно изображения и с высокой вероятностью установить, что это изображение кошки. Такие алгоритмы несколько отличаются от тех, о которых мы говорили в предыдущей главе: они не соответствуют одному из наших четырех критериев хорошего алгоритма. Они срабатывают не в 100 % случаев. Но в большинстве случаев они срабатывают. Задача заключается в том, чтобы сделать это «большинство» как можно больше. Переход от детерминистических алгоритмов, безошибочно работающих всегда, к алгоритмам вероятностным был для работающих в этой области большим психологическим скачком. В чем-то он был похож на переход от математического мышления к инженерному.
Можно спросить, почему же, если это так, нас по-прежнему просят распознавать фрагменты изображений, чтобы доказать, что мы люди, когда мы хотим купить билеты на популярный концерт. Но этим мы на самом деле помогаем в подготовке тренировочных данных, которые потом будут вводить в алгоритмы, чтобы научить их без лишних усилий делать то же, что делаем мы. Алгоритмам нужны данные, на которых они могли бы учиться. То есть на самом деле мы обучаем алгоритмы распознаванию визуальных образов.
Эти тренировочные данные используются, чтобы выучить, какие вопросы лучше всего задавать, чтобы отличать кошек от некошек. Каждый раз, когда алгоритм ошибается, он изменяется так, чтобы в следующий раз не допустить той же ошибки. Речь может идти об изменении параметров существующего алгоритма или внедрении в него новой функции для более точного различения изображений. Эти изменения не спускаются по нисходящему каналу программистом, заранее продумывающим все вопросы. Алгоритм создает сам себя снизу вверх в процессе взаимодействия со все новыми и новыми данными.
Я видел могущество такого восходящего процесса обучения своими глазами, когда зашел в лаборатории Microsoft в Кембридже, чтобы понять, как игровая приставка Xbox, которую мои дети используют дома, может распознавать, что они делают, когда они движутся перед ее видеокамерой. Этот алгоритм был создан, чтобы система могла отличать руки от голов и ноги от локтей. У Xbox есть камера под названием Kinect с функцией измерения глубины: она использует инфракрасные датчики для определения удаления препятствий от камеры. Если вы встанете перед такой камерой в своей гостиной, она установит, что ваше тело находится ближе к ней, чем задняя стена комнаты, а также сможет определить контуры вашего тела.
Но размеры и очертания фигур людей могут быть разными. Люди могут принимать весьма странные позы, особенно когда играют в Xbox. Компьютер должен распознавать 31 разную часть тела, от левого колена до правого плеча. Алгоритм Microsoft может сделать это по одному неподвижному изображению. Он не использует ваших движений (их анализ потребовал бы больших вычислительных мощностей и замедлил бы игру).
Как же ему это удается? Алгоритм должен решить, к какой части тела из тридцати одной принадлежит каждый пиксель изображения. По сути дела, он играет в «20 вопросов». Собственно говоря, для этой игры действительно существует один хитрый алгоритм, который гарантирует получение правильного ответа. Сначала нужно спросить: «В какой половине словаря – первой или второй – находится это слово?» Следующим вопросом область поиска в словаре нужно сузить еще более, спросив: «В какой половине той половины, которую вы назвали, оно находится?» За 20 вопросов эта стратегия делит словарь на 220 участков, что иллюстрирует могущество удвоения. А это более миллиона частей – гораздо больше, чем число статей в «Оксфордском словаре английского языка»: их в нем около трехсот тысяч.
Но какие вопросы следует задавать пикселям, если мы хотим определить, к какой части тела они принадлежат? В прошлом нам пришлось бы самим придумывать хитрую последовательность вопросов, которая позволила бы решить эту задачу. Но нельзя ли запрограммировать компьютер так, чтобы он нашел нам лучшие вопросы для ее решения? Взаимодействуя со все новыми данными – все новыми изображениями, – он находит набор вопросов, по-видимому наиболее эффективно приводящий к ответу. Именно так и работает машинное обучение.
Чтобы этот процесс не был обучением с совершенно чистого листа, нужно начать с каких-то вопросов-кандидатов, которые, как нам кажется, могли бы привести к решению задачи. Обучение происходит путем уточнения наших идей с формированием из них действенной стратегии. Какие же вопросы, по вашему мнению, могли бы помочь нам отличить руку от макушки?
Обозначим пиксель, который мы хотим распознать, буквой Х. Компьютеру известна глубина каждого пикселя, то есть его удаленность от камеры. Хитрая стратегия, которую придумали в Microsoft, состоит в «опросе» окружающих его пикселей. Например, если Х – пиксель, находящийся на макушке, то пиксели, расположенные выше Х, с гораздо большей вероятностью не будут относиться к телу и, следовательно, должны иметь большую глубину. Если же взять ближайшие к Х пиксели, расположенные ниже его, они должны быть пикселями лица и их глубина должна быть близка к глубине пикселя Х. Но если этот пиксель относится к руке, а рука эта вытянута, тогда будет существовать ось, направленная вдоль этой руки, по которой глубина будет оставаться практически неизменной, но смещение перпендикулярно этой оси будет быстро выводить пиксели за пределы тела – на стену, находящуюся на фоне изображения. Такие последовательно накапливающиеся – кумулятивные – вопросы о глубине окружающих пикселей могут позволить понять, к какой части тела принадлежит данный пиксель.
Такой кумулятивный опрос можно представить себе как процесс построения дерева решений. Каждый следующий вопрос образует новую ветвь этого дерева. Сначала алгоритм выбирает случайный набор исходных направлений и некое случайно взятое пороговое значение глубины: например, двигаться вверх; если изменение глубины меньше у, переходить на левую ветвь дерева решений; если больше – на правую ветвь и так далее. Мы хотим найти такие вопросы, которые дают новую информацию. Стартовав со случайного исходного набора вопросов и применив их к 10 000 помеченных изображений, мы начинаем получать некоторые результаты. Например, мы знаем, что пиксель Х на изображении 872 относится к локтю, а на изображении 3339 – к левой ступне. Каждую ветвь или каждую часть тела можно считать отдельной корзиной. Мы хотим, чтобы наши вопросы обеспечивали попадание всех изображений, на которых пиксель Х относится к локтю, в одну и ту же корзину. Вряд ли так получится при применении первого, случайного набора вопросов. Но с течением времени, по мере того как алгоритм начнет уточнять углы и пороговые уровни глубины, он станет все лучше распределять пиксели по корзинам.
Повторяя этот процесс, алгоритм изменяет значения и совершенствуется в различении пикселей. Важно помнить, что мы не стремимся добиться абсолютного совершенства. Если в конце концов в корзине оказываются 990 из 1000 изображений, на которых пиксель Х относится к локтю, это означает, что алгоритм распознает нужный элемент изображения в 99 % случаев.
К тому времени как алгоритм находит оптимальный набор вопросов, программисты уже понятия не имеют, как именно он пришел к этому выводу. Они могут посмотреть на любую точку дерева и увидеть, какие вопросы задаются перед нею и после нее, но дерево содержит в целом более миллиона разных вопросов и все они хоть немного, но отличаются друг от друга. Восстановить логику задним числом, понять, как именно алгоритм решил, что в данной точке дерева следует задать именно этот вопрос, очень трудно.
Представьте себе, что вы пытаетесь запрограммировать подобную систему вручную. Вам пришлось бы придумать более миллиона разных вопросов. Эта перспектива обескуражила бы и самых отважных из программистов, а вот компьютер справляется с такого рода числами легко и непринужденно. Удивительно, что эта система работает настолько хорошо. Программистам потребовалось приложить некоторые творческие усилия, чтобы поверить, что вопросов о глубине соседних пикселей действительно может быть достаточно, чтобы определить, на какую часть тела мы смотрим, – но вся последующая творческая работа была выполнена машиной.
Одной из проблем машинного обучения является так называемая «переподгонка»[27] (overfitting), или переобучение. Всегда можно придумать достаточно вопросов, чтобы распознать изображение по тренировочным данным, но не хотелось бы получить программу, слишком привязанную к тем данным, на которых она обучалась. Она должна уметь извлекать из этих данных нечто применимое в более широкой области. Пусть, например, мы пытаемся создать набор вопросов для идентификации граждан; у нас есть для этого имена и номера паспортов 1000 человек. Мы можем спросить: «Номер вашего паспорта – 834765489? Тогда вы, вероятно, Ада Лавлейс». Этот метод будет работать на имеющихся данных, но окажется совершенно непригоден за пределами исходной группы, так как ни у кого из граждан, не принадлежащих к ней, не будет паспорта с таким номером.