распространявшейся в Facebook в январе 2018 годаДано: список пассажиров и экипажа «Титаника», где 1502 из 2224 человек на борту погибли в день столкновения корабля с айсбергом, 15 апреля 1912 года. Подробности про каждого второго из них – пол, возраст, порт отправления, где и за какие деньги куплен билет, первым классом плыл или третьим, сколько членов семьи было на борту – собраны в таблицу.
Предсказать: кто утонет, а кто выживет, основываясь только на данных из таблицы. Психологические портреты, воспоминания современников и дневники, которые могли бы что-нибудь объяснить про мотивы спасшихся и рассказать конкретную историю спасения, использовать, конечно, нельзя. Все выводы нужно делать на основе голых анкетных характеристик.
Это учебная задача на сайте Kaggle.com, с которого часто начинается карьера разработчиков искусственного интеллекта. Обычно сюда приходят решать задачи за деньги – участвовать в конкурсах с призовым фондом в десятки или сотни тысяч долларов. Крупные компании, от банков до медицинских клиник и трубопрокатных заводов, выкладывают порции своих больших данных и предлагают придумать алгоритм, который сделает из них какие-нибудь полезные выводы. Например, случится ли поломка на конвейере, есть ли на рентгеновском снимке указания на рак, и стоит ли выдавать человеку кредит. В каждом таком конкурсе соревнуются сотни, а иногда и тысячи команд программистов и программистов-одиночек. Те, кто войдет в первую тройку, разделят между собой призовые деньги, а люди из первой десятки могут быть уверены, что в ближайшие дни после оглашения результатов им напишут рекрутеры крупных компаний, работающих с данными.
Что общего у таких практических задач с вопросом о жизни и смерти пассажиров «Титаника»? С математической точки зрения они ничем не отличаются. Есть таблица, где для каждого человека записаны какие-то его признаки, а напротив части записей стоит пометка «да» или «нет» (вернул кредит или не вернул, пережил кораблекрушение или не пережил). Алгоритм должен увидеть скрытые закономерности в примерах и научиться угадывать «да» или «нет» как можно чаще.
Можно сказать, что и алгоритмы Facebook решают задачу того же сорта. Вот два человека и разные характеристики конкретной записи их дружбы в цифрах – сколько комментариев они написали друг другу за месяц, лайкает ли первый второго, часто ли оба одновременно ставят галочку «пойду» на страничке какого-нибудь концерта – и нужен однозначный ответ, показывать одному свежую запись другого или не показывать. Искусственному интеллекту достаточно сказать «да» или «нет».
К слову, на сайте Kaggle – да и вообще среди тех, кто обучает алгоритмы, – словосочетание «искусственный интеллект» не слишком популярно. Вместо него предпочитают употреблять термин «машинное обучение». (Если вы заявляли в 1990-е, что занимаетесь «искусственным интеллектом», объяснял кто-то из классиков этой науки, вас автоматически записывали в философы или футурологи, которые любят поговорить об отвлеченных сущностях, и математики стали говорить про «машинное обучение», чтобы их с футурологами не путали.)
Нейросети – частный случай машинного обучения, и не всегда самый эффективный (например, в задаче про «Титаник»). Наверное, самый популярный способ решать задачи на Kaggle (которыми пользуются и Google, и Facebook в промышленных масштабах) – это алгоритмы под странноватым названием «ансамбли решающих деревьев» (справедливости ради, «лес» и «пень» – тоже популярные герои мира алгоритмов). А самый простой способ – линейные модели.
Проходной балл: линейные модели
Представьте себе тест вроде тех, которые печатали когда-то рядом с кроссвордами в газетах, где за каждый односложный ответ начисляют баллы. С пассажирами «Титаника» алгоритм – линейная модель – проделывает это так. Купили билет второго класса? 10 баллов. Первого класса? 100 баллов. Взошли на борт в английском порту Саутгемптон? 50 баллов. Во французском Шербуре? 5 баллов. (Этот признак не самый бесполезный для прогноза, потому что косвенно указывает, на каком языке – английском или французском – пассажир разговаривал, и легко ли ему было объясниться во время эвакуации с командой, состоящей преимущественно из англичан.) В конце концов баллы складываются, и если сумма больше пороговой, модель отвечает: «Выживет».
Откуда алгоритм знает, какую характеристику оценить в 500 баллов, а какую – всего в 10? Он начинает раздавать баллы наобум и потом уточняет их раз за разом на каждом примере, для которого известен правильный ответ, – это и есть обучение. Так выясняется, какие признаки важные, какие нет. Например, класс каюты: в первом выжили 63 % пассажиров, в третьем – всего 24 %. Или пол пассажира «Титаника»: среди женщин из списка – 74 % выживших, среди мужчин – всего 19 %.
В случае с записями в Facebook, про которые алгоритму надо ответить «показывать / не показывать», есть еще один небесполезный источник информации – это слова, из которых составлена запись. Если модель знает, что вы любите читать про ракеты, Марс и Илона Маска, то за каждое из этих слов выдаст много баллов, и случайные знакомые, делами которых вы не интересовались последние пять лет, имеют шанс пробиться к вам во френд-ленту со своими рассуждениями про запуск автомобиля в космос.
Рис. 8. Нейросети шестьдесят лет назад: американский математик Фрэнк Розенблатт придумал алгоритм под названием «персептрон» (его назвали бы однослойной нейросетью – или, что то же самое, линейной моделью) и построил способную обучаться вычислительную машину Mark I, не похожую на все остальные компьютеры. «Баллы» за каждый признак были реализованы в виде вращающихся стержней-резисторов, каждый из которых в процессе обучения подкручивал свой электромотор: чем сильнее стержень выкручен – тем больше баллов полагается за каждый признак