Шрифт:
Интервал:
Закладка:
Победившая в 2010 году программа использовала так называемый метод опорных векторов, передовой в то время алгоритм распознавания изображений, который применял сложную математику, чтобы учиться присваивать категории входным изображениям. При точности топ-5 эта программа верно классифицировала 72 % из 150 000 тестовых изображений. Неплохо, но это значит, что, даже выдавая по пять категорий на изображение, программа ошиблась при классификации более 40 000 тестовых изображений, а следовательно, ей было куда расти. Стоит отметить, что среди лучших программ не оказалось нейронных сетей.
На следующий год лучшая программа – также использовавшая метод опорных векторов – показала достойное уважения, но скромное улучшение, верно классифицировав 74 % тестовых изображений. Большинство специалистов ожидали развития этой тенденции, полагая, что исследователи компьютерного зрения будут маленькими шажками продвигаться к цели, постепенно совершенствуя программы от конкурса к конкурсу.
Но в 2012 году на соревнованиях ImageNet их ожидания не оправдались, поскольку победившая программа справилась с классификацией целых 85 % изображений. Всех поразил такой скачок в точности. Мало того, победившая программа не использовала метод опорных векторов или любой другой из методов, преобладавших в то время в компьютерном зрении. Она представляла собой сверточную нейронную сеть. Эта сеть получила название AlexNet в честь своего главного создателя Алекса Крижевского, который в то время учился в аспирантуре Университета Торонто под руководством именитого специалиста по нейронным сетям Джеффри Хинтона. Работая вместе с Хинтоном и студентом Ильей Суцкевером, Крижевский создал более масштабную версию LeNet Лекуна из 1990-х годов. Тренировка такой большой сети стала возможной благодаря возросшим вычислительным мощностям. В AlexNet было восемь слоев и около шестидесяти миллионов весов, значения которых определялись методом обратного распространения ошибки при использовании более миллиона тренировочных изображений[114]. Группа из Торонто разработала хитроумные методы, чтобы усовершенствовать процесс тренировки сети, и примерно за неделю кластер мощных компьютеров натренировал AlexNet.
Успех AlexNet всколыхнул сферу компьютерного зрения и ИИ, неожиданно продемонстрировав людям потенциал сверточных нейронных сетей, исследования которых большинство специалистов не считало перспективными для развития современного компьютерного зрения. В опубликованной в 2015 году статье журналист Том Саймонайт приводит выдержки из своего интервью с Яном Лекуном о неожиданном триумфе сверточных нейронных сетей:
Лекун вспоминает, как люди, которые по большей части не принимали нейронные сети в расчет, до отказа заполнили зал, где победители выступали с докладом о своем исследовании. “Можно было видеть, как многие уважаемые люди в одночасье переменили свое мнение, – говорит он. – Они сказали: «Ладно, теперь мы вам верим. Делать нечего – вы победили»”[115].
Почти в то же время группа Джеффри Хинтона также продемонстрировала, что глубокие нейронные сети, натренированные на огромных объемах размеченных данных, справлялись с распознаванием речи гораздо лучше, чем другие программы, доступные в то время. Успехи группы из Торонто на соревнованиях ImageNet и в сфере распознавания речи запустили цепную реакцию. Через год маленькую компанию, основанную Хинтоном, купила Google, Хинтон и его студенты Крижевский и Суцкевер стали сотрудниками Google. Это приобретение мгновенно вывело Google в авангард глубокого обучения.
Вскоре после этого Яну Лекуну, который преподавал в Нью-Йоркском университете, предложили возглавить новую Лабораторию ИИ в Facebook. Вскоре все крупные технологические компании (и многие компании поменьше) принялись спешно расхватывать специалистов по глубокому обучению и их аспирантов. Глубокое обучение почти в одночасье стало главным направлением исследований ИИ, и знание глубокого обучения гарантировало специалистам по компьютерным наукам высокие зарплаты в Кремниевой долине или – что даже лучше – венчурное финансирование для стартапов в сфере глубокого обучения, которые стали расти как грибы.
Ежегодный конкурс ImageNet стал больше освещаться в прессе и быстро превратился из дружеского состязания ученых в статусный спарринг технологических компаний, коммерциализирующих компьютерное зрение. Победа на ImageNet гарантирует вожделенное уважение специалистов по компьютерному зрению, а также бесплатную рекламу, которая может привести к росту продаж и цены акций. Стремление создать программу, которая покажет лучший результат на соревнованиях, в 2015 году привело к скандалу, когда гигантская китайская интернет-компания Baidu попыталась сжульничать, неочевидным образом прибегнув к тому, что специалисты по машинному обучению называют подглядыванием данных (data snooping).
Случилось следующее: перед конкурсом ImageNet каждой команде выдали тренировочные изображения, размеченные верными категориями объектов. Им также выдали большое тестовое множество изображений, не вошедших в тренировочное множество и не имеющих меток. Обучив программу, команда могла проверить ее работу на тестовом множестве – это помогает понять, насколько хорошо программа научилась обобщать (а, например, не просто запомнила тренировочные изображения вместе с метками). В зачет идет только результат, показанный на тестовом множестве. Чтобы проверить, как программа справляется с задачей, командам необходимо было показать программе все изображения из тестового множества, собрать топ-5 категорий для каждого изображения и загрузить этот список на “тестовый сервер” – компьютер, обслуживаемый организаторами соревнования. Тестовый сервер сравнивал полученный список с (секретными) верными ответами и выдавал процент совпадений.
Каждая команда заводила на тестовом сервере учетную запись и использовала ее, чтобы проверять, насколько хорошо справляются с задачей разные версии ее программы, что позволяло им публиковать (и рекламировать) свои результаты до объявления официальных результатов соревнования.
Главное правило машинного обучения гласит: “Не используй тестовые данные для тренировки”. Все кажется вполне очевидным: если включить тестовые данные в процесс тренировки программы, невозможно будет получить точную оценку способностей программы к обобщению. Не сообщают же студентам задания экзаменационного теста заранее. Но оказывается, что существуют неочевидные способы ненамеренно (или намеренно) нарушить это правило, чтобы казалось, будто программа работает лучше, чем на самом деле.
Один из этих способов таков: нужно загрузить выданные программой категории для тестового множества на тестовый сервер и отрегулировать программу в зависимости от результата. Повторить категоризацию и снова загрузить результаты на сервер. Провести эту манипуляцию много раз, пока скорректированная программа не станет лучше справляться с тестовым множеством. Для этого не нужно видеть метки изображений из тестового множества, но нужно получать оценку точности работы программы и регулировать программу соответствующим образом. Оказывается, если повторить всю процедуру достаточное количество раз, она сможет значительно улучшить работу программы с тестовым множеством. Однако, используя информацию из тестового множества, чтобы настроить программу, вы лишаетесь возможности использовать тестовое множество для проверки способности программы к обобщению. Представьте, что студенты проходят итоговый тест много раз, каждый раз получая единственную оценку и пытаясь на ее основании скорректировать свои ответы в следующий раз. В итоге студенты сдадут на проверку преподавателю тот вариант ответов, который получил самую высокую оценку. Такой экзамен нельзя считать хорошим показателем усвоения материала, поскольку он показывает лишь то, как студенты подогнали свои ответы к конкретным заданиям теста.