Алекс Крижевский, 2018
Но Алекс был не просто инженер. Он был тот редкий тип инженера, который умеет писать чудовищно быстрый низкоуровневый код. К 2011 году он уже написал на CUDA, графическом API компании Nvidia, библиотеку под названием cuda-convnet, позволявшую обучать свёрточные нейронные сети на одной видеокарте, и обучил с её помощью небольшую сеть для задачи распознавания изображений CIFAR-10 (шестьдесят тысяч картинок десяти категорий). Сеть работала и работала быстро. По меркам начала десятых годов это было заметное техническое достижение, потому что почти весь мир тогда обучал нейронные сети на центральных процессорах, и часами.
Гипотезу Ильи про размер Алекс воспринял со здоровым инженерным скепсисом. Если сеть будет достаточно большой, она, может быть, что-то и сможет, согласился он. Но кто сказал, что её получится обучить? На видеокартах с тремя гигабайтами памяти? За разумное время? На полутора миллионах картинок? Это всё очень сомнительно, сказал Алекс. Но если Илья настаивает, и Хинтон не против, можно попробовать.
Хинтон был не против. Хинтон сказал, что это, пожалуй, самая интересная вещь, которую им есть смысл сейчас делать. Дальше он отступил в роль научного руководителя, который не вмешивается в детали, а только спрашивает раз в неделю, как идут дела.
Архитектура, которую Алекс с Ильёй спроектировали, состояла из восьми слоёв: пять свёрточных и три полносвязных. По нынешним меркам это смехотворно мало, но по тогдашним — рекорд. Шестьдесят миллионов параметров. Шестьсот пятьдесят тысяч искусственных нейронов. Для сравнения: тогдашние «большие» нейросети имели по два-три слоя и сотни тысяч параметров.
AlexNet: восемь слоёв свёрток и полносвязных
В одну видеокарту GTX 580 с её тремя гигабайтами памяти эта сеть не помещалась. Алекс придумал хитрый трюк: разрезал сеть пополам, чтобы каждая половина обучалась на своей видеокарте, а в нескольких точках обе половины обменивались промежуточными результатами. Это потребовало нетривиальных правок в cuda-convnet и почти двух месяцев отладки. Алекс работал в спальне у родителей, в которой ещё с подростковых лет стоял его компьютер и куда он вернулся после ухода из академического общежития ради экономии. Видеокарты он купил на стипендию.
Помимо размера сети, авторы использовали несколько технических трюков, многие из которых стали потом стандартными. Функция активации под названием ReLU — простая, как штакетник, и в десять раз ускоряющая обучение по сравнению с тогдашней нормой. Регуляризация через случайное отключение нейронов под названием dropout, изобретённая в той же лаборатории Хинтона. Расширение обучающего набора через геометрические преобразования картинок. По отдельности всё это уже было известно, но в одной сети ещё никто не собирал.
Одно полное обучение сети занимало пять или шесть дней непрерывной работы двух видеокарт на максимальной нагрузке. Лето в Торонто было жаркое. Кондиционера в комнате не было. Алекс ставил вентилятор, потом второй, потом подключил пылесос. Иногда он садился ночью в кресло перед компьютером, смотрел, как медленно бежит на экране лог обучения, и засыпал прямо там. Иногда сеть переставала сходиться, и нужно было разбираться, почему, что-то менять, запускать заново, ждать пять дней. Через всё лето Алекс прошёл, наверное, тридцать или сорок таких полных циклов обучения.
Илья и Хинтон в это время в основном ждали и подбадривали. Раз в несколько недель собирались втроём в кабинете Хинтона, смотрели на цифры, обсуждали, что попробовать дальше. К концу лета цифры начали выглядеть невероятно.
Результаты ImageNet 2012 объявили в начале октября. Команда под названием SuperVision (Алекс, Илья, Хинтон) пришла первой. Top-5 error rate: 15,3 процента. Команда, занявшая второе место, использовала классические методы и получила 26,2 процента. Отрыв в десять с лишним процентных пунктов — в области, где обычно мерились десятыми долями процента, в области, где за год прогресс мерится одним-двумя процентами, в области, где никто никогда не выигрывал с таким отрывом.
Многие специалисты, узнав о результатах, поначалу не поверили. Решили, что в коде какая-то ошибка, что-то учтено неправильно, что-то протекло из тестового набора в обучающий. Алекс предоставил исходный код. Стороны разобрали его построчно. Никакой утечки не нашли. Сеть действительно работала так, как написано. Свёрточная нейронная сеть, обученная на потребительских видеокартах в спальне у аспиранта, разнесла все классические системы по этой задаче в пыль.