AlexNet: инженерия CUDA за прорывом 2012 года

В 2012 году прорыв AlexNet доказал, что глубокие нейронные сети в сочетании с GPU с поддержкой CUDA могут превзойти десятилетия традиционной инженерии компьютерного зрения. На соревновании ImageNet Large Scale Visual Recognition Challenge (ILSVRC) Алекс Крижевский, Илья Суцкевер и Джеффри Хинтон достигли частоты ошибок top-5 в 15,3%, обойдя занявшего второе место участника с результатом 26,2% почти на 11 процентных пунктов.
Аппаратное узкое место и его решение
В то время фреймворков глубокого обучения вроде PyTorch и TensorFlow не существовало, а потребительские GPU имели серьёзные ограничения памяти.
- Потребительское игровое оборудование: Команда обучала сеть в спальне, используя два потребительских GPU NVIDIA GTX 580. Каждая карта имела лишь 3 ГБ VRAM, чего было недостаточно, чтобы разместить всю сеть с 60 миллионами параметров на одном чипе.
- Параллелизм модели через CUDA: Алекс Крижевский написал пользовательские ядра CUDA C++ (cuda-convnet), чтобы разделить сеть вертикально между двумя GPU. Каждый GPU хранил половину нейронов и ядер в собственном 3-гигабайтном пуле памяти.
- Избирательная связь между GPU: Поскольку передача данных между GPU через шину PCIe материнской платы была медленной, Крижевский запрограммировал GPU на обмен данными только на определённых слоях (например, на слое 3). Остальные слои работали полностью независимо на каждой карте, минимизируя узкие места пропускной способности.
Ключевые архитектурные прорывы
Наличие чистой вычислительной мощности CUDA позволило команде объединить несколько критически важных техник, которые раньше было слишком медленно тестировать в масштабе:
- Глубокая архитектура: AlexNet объединила 8 обучаемых слоёв (5 свёрточных слоёв, за которыми следуют 3 полносвязных слоя), что было гораздо глубже предыдущих нейронных сетей.
- Функция активации ReLU: Вместо традиционной математики tanh или sigmoid они использовали Rectified Linear Units (ReLU). ReLU вычислительно проста в CUDA и позволила глубокой сети обучаться примерно в шесть раз быстрее без затухания градиентов.
- Аугментация данных и Dropout: Пока GPU выполняли матричные вычисления, CPU генерировал преобразования изображений в реальном времени (обрезки и отражения) для предотвращения переобучения. Они также применили Dropout, случайным образом отключая нейроны во время обучения, чтобы заставить сеть изучать устойчивые признаки.
Почему это запустило революцию глубокого обучения
До сентября 2012 года большинство исследователей компьютерного зрения полагались на вручную созданные алгоритмы (вроде SIFT и HOG) для обнаружения границ и форм, считая глубокие нейронные сети тупиковой теорией.
- Время обучения: Даже с пользовательской оптимизацией CUDA обучение AlexNet на 1,2 миллионах изображений высокого разрешения заняло от 5 до 6 дней. Без CUDA тот же эксперимент занял бы месяцы на CPU.
- Сдвиг в отрасли: Когда AlexNet сокрушила все традиционные методы на ImageNet, всё сообщество исследователей ИИ почти в одночасье отказалось от ручной разработки признаков. Исследователи бросились скупать GPU NVIDIA, что побудило NVIDIA переориентироваться на ИИ и выпустить cuDNN два года спустя.