Эпоха 3 · Взрыв deep learning · 2012

16 AlexNet

ImageNet Classification with Deep Convolutional Neural Networks · Krizhevsky, Sutskever & Hinton · NeurIPS
🟥 читать целиком~60–75 миноригинал ↗
Суть за 20 секунд. Глубокая CNN, выигравшая ILSVRC-2012 с разгромом (top-5 ошибка 15% против 26%). Связала воедино готовые ингредиенты — ReLU, GPU, dropout, аугментацию, ImageNet — и доказала: глубокое обучение работает. Момент, когда началась эра DL.

Контекст

К 2012-му всё было готово порознь: датасет ImageNet (#15), идея CNN (#9), backprop. Не хватало вычислительной мощи и пары трюков. Крижевский, Суцкевер и Хинтон собирают это вместе.

Идея и механизм

Глубокая CNN: 5 свёрточных + 3 полносвязных слоя, ~60M параметров. Что сделало её рабочей: ReLU (не насыщается → обучение в разы быстрее tanh), обучение на 2 GPU (модель разрезана между картами — иначе не влезала в 3 ГБ памяти), dropout в полносвязных слоях, аугментация данных (кропы, отражения, сдвиг цвета), overlapping max-pooling и local response normalization.

мат. анализ Почему ReLU победила сигмоиду: затухание градиента

Производная сигмоиды ограничена и насыщается:

σ′(z) = σ(z)(1 − σ(z)) ≤ 0.25,   σ′ → 0 при |z| ≫ 0

В глубокой сети backprop перемножает эти производные слой за слоем, поэтому градиент сжимается экспоненциально:

∏l=1L σ′l ≤ 0.25L → 0  (vanishing gradient)

У ReLU f(z) = max(0, z) производная равна 1 на активной части (z > 0) и 0 на неактивной. На активных нейронах градиент не сжимается — нет мультипликативного затухания сквозь глубину. Это и позволило обучать действительно глубокие сети. Плата — «мёртвые» нейроны (если z < 0 всегда, градиент 0 навсегда), что позже лечат вариантами вроде Leaky ReLU.

PyTorch Блок AlexNet-стиля
import torch.nn as nn

block = nn.Sequential(
    nn.Conv2d(3, 96, kernel_size=11, stride=4),  # крупные фильтры на входе
    nn.ReLU(inplace=True),                        # быстрее tanh, не насыщается
    nn.MaxPool2d(kernel_size=3, stride=2),        # overlapping pooling
)
# полная сеть: 5 conv-блоков + 3 fc, dropout в fc, ~60M параметров
img c1 c2 c3 c4 c5 fc6 fc7 1000 5 свёрточных слоёв (на 2 GPU) 3 fc + dropout
5 свёрточных слоёв извлекают признаки, 3 полносвязных классифицируют. Модель разрезана между двумя GPU, чтобы влезть в память.
Аналогия. Все детали гоночной машины существовали и раньше: мотор (CNN), топливо (ImageNet), трасса (конкурс). AlexNet — первый, кто собрал их в одну машину и завёл двигатель ReLU на турбонаддуве GPU. И сразу обогнал весь пелотон на круг.

Почему это важно

Момент, когда deep learning «взлетел». Эмпирически доказал: глубокие CNN + GPU + большие данные дают качество, недостижимое ручными фичами. После 2012 всё компьютерное зрение (а вскоре и остальной ML) переключилось на глубокие сети, и начался спрос на GPU — давший NVIDIA её нынешнюю роль.

Связи

← опирается на9. LeNet / CNN

Архитектурно AlexNet — это LeNet, выросший вглубь: те же свёртки + pooling, но больше слоёв, ReLU вместо сигмоиды и dropout. Идея 1998-го дождалась данных и железа — и выстрелила без изменения сути.

← зажжён15. ImageNet

Без масштаба ImageNet глубокая сеть переобучилась бы или не показала преимущества. Датасет — топливо, без которого двигатель не поехал бы; победа AlexNet задним числом оправдала ставку Фей-Фей Ли на данные.

→ ведёт к27. ResNet

AlexNet открыл гонку «глубже = лучше». Но просто складывать слои перестало работать (деградация). ResNet через три года решит эту проблему skip-связями и доведёт глубину до 152 слоёв — продолжение траектории, начатой здесь.

Вопросы пытливого ума

Что было решающим — ReLU, GPU, dropout или данные?

Все необходимы, но роли разные. GPU + ImageNet сделали глубину обучаемой на масштабе; ReLU сделал обучение быстрым; dropout и аугментация сдержали переобучение. Уберите любой — и результат разваливается. Самый глубокий enabler — встреча дешёвых параллельных вычислений (GPU/CUDA) с большими данными; трюки лишь сделали эту встречу продуктивной.

Почему именно 2012, если CNN существовали с 1998?

Идея ждала субстрата. В 1998-м не было ни датасета такого масштаба, ни GPU-вычислений, ни ReLU/dropout; глубокие CNN на слабом железе и маленьких данных проигрывали SVM. ImageNet и CUDA-карты сняли оба ограничения почти одновременно — и накопленная идея мгновенно реализовалась. Это типичный сюжет DL: правильная мысль ждёт данных и compute.

Разрезание на 2 GPU — фундаментальное решение или костыль?

Костыль под лимит памяти (3 ГБ на карту) — это ранний пример модельного параллелизма. Любопытно, что вынужденная слабая связь между «половинами» на разных GPU дала лёгкий регуляризующий эффект. Сегодня для одной AlexNet это не нужно, но тот же приём (разрезать модель между устройствами) сейчас обязателен для обучения гигантских LLM.

Что читать в оригинале

Короткий (9 стр.) и исторический — стоит прочитать целиком. Обратите внимание на инженерные детали (память, 2 GPU, ReLU): отличный пример, как системные ограничения формируют архитектуру.