Именно в этом аспекте и проявляется могущество алгоритма, способного продолжать учиться, изменяться и приспосабливаться к новым данным. Машинное обучение открыло перспективу появления алгоритмов, изменяющихся и взрослеющих так же, как люди.
6Алгоритмическая эволюция
Знание основывается не только
на истине, но и на заблуждении[28].
Нынешние алгоритмы непрерывно учатся. В особенности это относится к рекомендательным алгоритмам, которым мы доверяем выбирать то, что мы смотрим, читаем и слушаем. Когда новый пользователь взаимодействует с таким алгоритмом, сообщая ему о своих предпочтениях, алгоритм получает новые данные для обучения, которое помогает уточнять рекомендации для следующих пользователей. Мне было интересно испытать один из таких алгоритмов, чтобы проверить, насколько хорошо он может узнать мои вкусы. Поэтому, когда я исследовал алгоритм Xbox для Kinect в лабораториях Microsoft в Кембридже, я зашел к одному коллеге, чтобы посмотреть вживую, как работает один из рекомендательных алгоритмов.
Мне был выведен графический интерфейс с названиями приблизительно двухсот фильмов, случайным образом разбросанными по экрану. Если какой-то из этих фильмов мне нравился, я должен был перенести его в правую половину экрана. Я нашел там несколько фильмов, которые посмотрел с удовольствием. Поскольку я большой поклонник Уэса Андерсона, я перенес вправо «Академию Рашмор»[29]. Названия фильмов на экране тут же начали перемещаться. Некоторые сдвинулись вправо: это были фильмы, которые, как считал алгоритм, могли мне понравиться. Те фильмы, которые мне, возможно, не понравились бы, сдвинулись влево. По одному фильму многого не поймешь, так что большинство названий по-прежнему оставались в неопределенной зоне в середине экрана.
Я увидел один фильм, который терпеть не могу: меня ужасно раздражает Остин Пауэрс, поэтому я перенес этот фильм налево, в забракованные. Это дало программе новую информацию, и фильмы снова стали сдвигаться влево и вправо, что свидетельствовало о большей уверенности алгоритма. Теперь он предположил, что мне может нравиться «Манхэттен»[30] Вуди Аллена. Я подтвердил это предположение, что не вызвало больших изменений в рекомендациях. Но тут я увидел, что алгоритм считает меня поклонником фильма «Это – Spinal Tap»[31]. Этот фильм сместился довольно далеко вправо. Но я терпеть не могу «Spinal Tap», поэтому перенес его с правой половины экрана влево, в забракованные.
Поскольку алгоритм считал, что мне должен нравиться «Spinal Tap», мое сообщение о том, что это не так, дало ему много полезной информации. С учетом новых данных расположение фильмов на экране радикально изменилось. Но затем произошло и менее заметное изменение, касающееся основной программы, управляющей алгоритмом. Из данных, которые я ей дал, она узнала нечто новое. Эти новые сведения внесли очень небольшие изменения в параметры модели, вырабатывающей рекомендации. Заданная в ней вероятность того, что мне нравится «Spinal Tap», была сочтена слишком высокой, и параметры были изменены так, чтобы уменьшить эту вероятность. По опыту взаимодействия с другими любителями Уэса Андерсона и «Манхэттена» программа знала, что многие из них любят и этот фильм, но теперь она выяснила, что это правило действует далеко не всегда.
Именно таким образом наше взаимодействие с динамическими алгоритмами позволяет машине продолжать обучаться и приспосабливаться к нашим симпатиям и антипатиям. Теперь такого рода алгоритмы определяют многое из того, что мы выбираем в своей жизни, – от фильмов до музыки, от книг до потенциальных партнеров.
Основная идея алгоритма, рекомендующего фильмы, очень проста. Если вам нравятся фильмы А, В и С, а другой пользователь также перечисляет их в списке своих любимых фильмов, но ему к тому же нравится и фильм D, то велика вероятность, что фильм D понравится и вам. Разумеется, данные гораздо сложнее этого примитивного подбора. Возможно, фильмы А, В и С нравятся вам тем, что в них играет определенный актер, которого нет в фильме D, а второму пользователю – тем, что все они про шпионов.
Алгоритм должен уметь рассмотреть данные и понять, почему именно вам нравятся определенные фильмы. Затем он подбирает других пользователей, которые тоже выбрали те характеристики, которые нравятся вам. Как и во многих других случаях машинного обучения, начинать нужно с хорошего набора исходных данных. Один из важных компонентов машинного обучения состоит в том, что необходимо участие людей для классификации данных, чтобы компьютеры знали, что именно за информацию они рассматривают. Такая операция организации данных обеспечивает предварительную подготовку рабочей области, в которой алгоритм может затем выявить фундаментальные закономерности.
В случае с базой данных кинофильмов можно попросить кого-нибудь просмотреть ее и выбрать ключевые характеристики – например, отобрать романтические комедии или научно-фантастические фильмы или, скажем, фильмы определенных режиссеров или с определенными актерами. Но такого рода организация далеко не идеальна. Она отнимает много времени. Она может отражать личные пристрастия тех, кто занимается классификацией, и в результате может научить компьютер тому, что мы и так уже знаем, а не выявить новые скрытые тенденции. Она может привести к тому, что алгоритм усвоит взгляд на данные, присущий определенным людям. Лучше всего учить алгоритм распознавать и выявлять закономерности на совершенно сырых, необработанных данных.
Именно этого пыталась добиться компания Netflix, объявившая в 2006 году соревнование под названием Netflix Prize. Она разработала свой собственный алгоритм для предложения пользователям фильмов, которые должны им понравиться, но считала, что состязание может стимулировать изобретение более совершенных алгоритмов. К этому моменту у Netflix имелось огромное количество данных, полученных от пользователей, которые смотрели фильмы и выставляли им оценки от 1 до 5. Компания решила опубликовать 100 480 507 оценок 17 770 фильмов, поставленных 480 189 анонимными пользователями. Задача усложнялась тем, что названия этих 17 770 фильмов не разглашались. Каждый фильм был обозначен только номером. Узнать, какой фильм скрывается под номером 2666 – «Бегущий по лезвию»[32] или «Энни Холл»[33], – было невозможно. Доступ был открыт только к оценкам, которые поставили ему любые из 480 189 пользователей, если они вообще его оценивали.
Помимо 100 млн опубликованных оценок у Netflix осталась еще 2 817 131 оценка, державшаяся в секрете. Задачей участников состязания было создать алгоритм, который сумел бы предсказать эту 2 817 131 рекомендацию на 10 % точнее, чем собственный алгоритм Netflix. Исходя из показанных ему данных, алгоритм должен был суметь угадать, как пользователь номер 234 654 оценил фильм номер 2666. Чтобы сделать соревнование более острым, первой команде, алгоритм которой опередит алгоритм Netflix на 10 %, был обещан приз 1 000 000 долларов. Хитрость заключалась в том, что победитель был обязан опубликовать свой алгоритм и предоставить Netflix неисключительное право на его использование для выработки рекомендаций фильмов клиентам компании.
По пути к миллионному призу присуждалось несколько призов за продвижение к цели. Каждый год команда, добившаяся на этот момент самых лучших результатов, получала приз 50 000 долларов при условии, что она обошла прошлогоднего лауреата этого приза по меньшей мере на 1 %. Чтобы получить этот приз, участники также должны были обнародовать код, который они использовали в работе своего алгоритма.
Можно подумать, что эта задача была почти невыполнимой, раз нельзя было узнать даже, какого жанра фильм скрывается под номером 2666 – фантастика или романтическая комедия. Однако необработанные данные могут рассказать о себе поразительно много. Представим каждого пользователя точкой в 17 770-мерном пространстве, в котором каждое измерение соответствует какому-то одному фильму, а положение точки в каждом из измерений соответствует оценке, которую пользователь поставил этому фильму. Конечно, если вы не математик, представление пользователей точками в пространстве с 17 770 измерениями кажется задачей несколько непомерной. Но на самом деле это просто расширение графического представления пользователей, которое вы использовали бы, если бы речь шла об оценках всего лишь трех фильмов. Предположим, фильм № 1 – это «Король Лев», фильм № 2 – «Сияние», а фильм № 3 – «Манхэттен». Если некий пользователь поставил этим фильмам, соответственно, одну звезду, четыре звезды и пять звезд, мы легко можем представить этого пользователя точкой с координатами (1,4,5) в трехмерной координатной сетке, в которой по оси х отложены оценки фильма № 1, по оси у – оценки фильма № 2, а по оси z – оценки фильма № 3.
Хотя мы не можем изобразить 17 770-мерное пространство на графике, существуют математические методы, позволяющие представлять положение точек в таком пространстве. Точно так же фильм можно представить точкой в 480 189-мер-ном пространстве, в котором положение фильма в измерении, соответствующем каждому пользователю, соответствует оценке, которую этот пользователь поставил этому фильму. В первый момент трудно увидеть в таких точках, разбросанных по пространствам со столь огромным числом измерений, какие-либо закономерности. Нужно, чтобы алгоритм сообразил, существуют ли способы сжать эти пространства с точками до гораздо меньшего количества измерений, так, чтобы начали проявляться закономерности.
Чем-то это похоже на разные тени, которые отбрасывает голова человека. По некоторым теням можно узнать об этом человеке гораздо больше, чем по другим. Например, профиль Хичкока очень легко узнаваем, а тень, которая получается, если направить в лицо луч фонарика, дает мало информации. Идея заключается в том, что фильмы и пользователи подобны точкам лица. В тени, отбрасываемой под одним углом, все эти точки могут выстроиться в линию, а под другим углом никакой структуры не увидишь.