Помимо 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-мер-ном пространстве, в котором положение фильма в измерении, соответствующем каждому пользователю, соответствует оценке, которую этот пользователь поставил этому фильму. В первый момент трудно увидеть в таких точках, разбросанных по пространствам со столь огромным числом измерений, какие-либо закономерности. Нужно, чтобы алгоритм сообразил, существуют ли способы сжать эти пространства с точками до гораздо меньшего количества измерений, так, чтобы начали проявляться закономерности.
Чем-то это похоже на разные тени, которые отбрасывает голова человека. По некоторым теням можно узнать об этом человеке гораздо больше, чем по другим. Например, профиль Хичкока очень легко узнаваем, а тень, которая получается, если направить в лицо луч фонарика, дает мало информации. Идея заключается в том, что фильмы и пользователи подобны точкам лица. В тени, отбрасываемой под одним углом, все эти точки могут выстроиться в линию, а под другим углом никакой структуры не увидишь.
Может быть, можно найти способ получения такой двумерной тени этих многомерных пространств пользователей и фильмов, в которой отображения пользователей оказываются рядом с отображениями фильмов, нравящихся этим пользователям. Нужно только найти правильную тень, в которой будут видны основополагающие характеристики фильмов и пользователей. Ниже приведен пример такой тени, созданной на основе данных Netflix по 100 пользователям и 500 фильмам. Видно, что тень выбрана правильно, потому что две характеристики, которые она оценивает, по-видимому, выражаются весьма отчетливо. Это видно из того, что точки не разбросаны по всей плоскости. Тень выявляет в данных некую закономерность.
Если посмотреть на названия реальных фильмов, отображенных на графике, легко увидеть, что эта тень действительно отражает характеристики, которые мы посчитали бы ясными отличительными чертами фильма. В правом верхнем квадранте оказываются кинодрамы, а в левом нижнем – боевики.
Именно этот подход применила команда, которой в конце концов и достался в 2009 году приз Netflix. Ее члены решили попытаться выделить тень в 20 измерениях, соответствующих 20 независимым характеристикам фильмов, которые должны были помочь предсказывать, какие фильмы нравятся пользователям. Преимущество компьютера в том, что он может перебрать целый спектр разных теней и выбрать ту из них, которая лучше всего отражает структуру, чего наш мозг и наши глаза никак не могут сделать.
Интересно отметить, что некоторые из характеристик, которые выбрала эта модель, были вполне явными – например, выделение боевиков или кинодрам. Но другие были гораздо менее заметными и трудноопределимыми. Тем не менее компьютеру удалось найти в данных закономерность.
Как мне кажется, этим и интересны такие алгоритмы нового типа. Они могут сказать нам нечто новое о нас самих. В некотором смысле алгоритм глубокого обучения находит в нашем человеческом коде черты, которые мы пока что не умеем выразить словами. Как если бы мы не знали, что такое цвет, и не имели слов для различения красного и синего, но алгоритм, исходя из выражения наших симпатий и антипатий, распределял объекты, находящиеся перед нами, на две группы, соответствующие объектам синим и красным. Мы не можем внятно сказать, почему нам нравится тот или иной фильм, потому что это предпочтение определяется слишком большим числом параметров. Человеческий код, порождающий эти предпочтения, скрыт от нас. Компьютерный же код выявил характеристики, определяющие наши предпочтения, которые мы можем интуитивно ощущать, но не можем высказать.
26 июня 2009 года команда под названием BellKor’s Pragmatic Chaos предъявила результат, преодолевший 10 %-й порог: ее алгоритм показал улучшение на 10,05 %. Компания Netflix разделила засекреченные данные на две половины. Одна половина использовалась для оценки результатов команд. Другую придержали для выявления окончательного победителя. После преодоления 10 %-го порога другие команды получали еще месяц на улучшение своих результатов. 25 июля команда Ensemble представила алгоритм, добившийся улучшения на 10,09 %. На следующий день компания Netflix перестала принимать заявки. К этому моменту обе команды снова несколько усовершенствовали свои алгоритмы: BellKor’s Pragmatic Chaos дошла до 10,09 %, но Ensemble продвинулась еще чуть дальше – до 10,1 %. Приз должен был достаться команде, показавшей лучшие результаты на второй половине данных. В итоге результаты обеих команд оказались одинаковыми, но команда BellKor’s Pragmatic Chaos прислала свои на 20 минут раньше, и миллион долларов достался ей.