# Как свёрточные нейросети победили ручные признаки: лекция в Стэнфорде

Источник: https://www.youtube.com/watch?v=f3g1zGdxptI
Канал: Stanford Online
Опубликовано: 02.09.2025

---

В Стэнфордском университете в рамках знаменитого курса CS231N прошла лекция, посвящённая классификации изображений с помощью свёрточных нейросетей (CNN). Четвёртый преподаватель курса Джастин, основываясь на своём опыте работы в Facebook AI Research и стартапе World Labs, представил детальный разбор перехода от классических подходов к глубокому обучению. В центре внимания лекции — математические и практические основы свёрточных и пулинговых слоёв, которые долгое время оставались главным инструментом компьютерного зрения.

## 🔄 Итоги первой части: фундамент глубокого обучения
[[JUMP:1:12]]

Первый этап курса CS231N завершился формированием базового пайплайна глубокого обучения. Этот фундамент включает в себя использование линейных классификаторов, которые преобразуют входные тензоры пикселей в оценки классов. Для оценки качества работы модели применяются функции потерь, такие как Softmax и SVM. Поиск оптимальной матрицы весов $W$ происходит в процессе оптимизации, где алгоритм буквально спускается по многомерному ландлафту потерь к минимуму.

В мире оптимизаторов произошло важное символическое событие. Проводящаяся престижная конференция ICLR 2025 присудила награду Test of Time («Проверка временем») авторам фундаментальной статьи об оптимизаторе Adam. Эта работа была опубликована ровно 10 лет назад, в 2015 году, и по сей день Adam остаётся одним из самых популярных алгоритмов оптимизации в ИИ-сообществе.

Однако линейные классификаторы обладают критическими недостатками:

* Визуальный аспект: строка матрицы весов представляет собой единый шаблон для целого класса, из-за чего модель пытается усреднить все вариации объекта (например, превращая автомобиль в невнятное красное пятно, неспособное учесть синие или зелёные машины).
* Геометрический аспект: линейный классификатор разделяет пространство признаков гиперплоскостями, хотя реальные данные редко бывают линейно разделимыми.

Для преодоления этих ограничений инженеры перешли к полноценным нейросетям, накладывая матрицы весов друг на друга через нелинейные функции активации. Управление вычислениями в таких сетях организуется с помощью вычислительных графов. Прямой проход (forward pass) вычисляет функцию потерь, а обратный проход (backward pass) с помощью алгоритма обратного распространения ошибки (backpropagation) рассчитывает градиенты локально для каждого узла. Градиент функции потерь по тензору всегда имеет ту же форму, что и сам исходный тензор.

## 📜 Эволюция компьютерного зрения: от ручных признаков к свёрточным сетям
[[JUMP:12:15]]

Современное компьютерное зрение базируется на специализированных архитектурах, но так было не всегда. В период, который преподаватель иронично называет «тёмными веками» компьютерного зрения (примерно с начала 2000-х до 2011 года), доминировал подход извлечения признаков (feature representations). Вместо сырых пикселей в классификатор подавался вектор, сформированный вручную инженером-человеком.

Среди ключевых методов того времени выделялись два подхода:

* Цветовые гистограммы (color histograms): подсчитывают распределение цветов по корзинам (buckets), полностью уничтожая пространственную структуру изображения.
* Гистограммы ориентированных градиентов (HOG): игнорируют цвет, фиксируя лишь направления локальных границ и контуров (например, выделяя круговые структуры вокруг глаз лягушки).

Инженеры часто комбинировали эти признаки, просто конкатенируя их в один массивный вектор.

Главное отличие классического подхода от глубокого обучения заключается в том, какая часть системы проектируется человеком, а какая — обучается. По мнению Джастина, градиентный спуск является гораздо более эффективным «программистом», чем человек, а большие объёмы данных знают о задаче больше, чем её создатель. В свёрточных сетях вся цепочка от сырых пикселей до финальных оценок настраивается энд-ту-энд (end-to-end) с помощью данных и вычислений, что позволило этой парадигме одержать полную победу в индустрии.

## 🏗️ Архитектура CNN: новое слово в анализе изображений
[[JUMP:21:08]]

Обычные полносвязные сети не подходят для эффективной обработки графики, поскольку вытягивание картинки в одномерный вектор полностью разрушает двумерную пространственную структуру данных. Свёрточные нейросети (CNN) были разработаны специально для сохранения этой топологии. Стандартная CNN состоит из «тела» сети (чередование свёрток, пулинга и нелинейностей для извлечения признаков) и полносвязного классификатора на вершине.



[Image of convolutional neural network architecture]


История свёрточных сетей насчитывает несколько важных вех:

* 1998 год: Ян Лекун и Леон Ботту создают архитектуру LeNet для классификации цифр, однако отсутствие мощных GPU ограничивало её масштабирование.
* 2012 год: Появление AlexNet знаменует «взрывной бум» глубокого обучения благодаря использованию видеокарт и датасета ImageNet.
* 2012–2020 годы: Эра тотального доминирования CNN в таких задачах, как детекция объектов (выделение рамок), семантическая сегментация (попиксельная разметка), описание изображений текстом и ранняя генерация (включая Stable Diffusion в 2021 году).

Однако в 2021 году ситуация изменилась с приходом трансформеров (Transformers) в компьютерное зрение. Изначально созданные для обработки текста в 2017 году, трансформеры были адаптированы под изображения (Vision Transformers). По словам Джастина, сейчас во многих задачах замена CNN на трансформеры даёт лучший результат при масштабировании данных и вычислений. Тем не менее свёрточные слои остаются крайне востребованными для построения гибридных систем и формирования правильной интуиции работы с изображениями.

## 🧮 Анатомия свёрточного слоя: фильтры, параметры и нелинейность
[[JUMP:30:26]]

В полносвязном слое каждый элемент выходного вектора — это результат скалярного произведения строки матрицы весов и всего входного вектора, что по сути является поиском по шаблону (template matching). Свёртка развивает эту идею: вместо одного огромного шаблона размером со всё изображение модель обучается набору небольших локальных фильтров.

Входное изображение сохраняет свою трёхмерную структуру (высота $\times$ ширина $\times$ каналы, например, $32 \times 32 \times 3$ для RGB). Фильтр (например, размером $5 \times 5 \times 3$) обязательно имеет ту же глубину (количество каналов), что и входной тензор, но меньший пространственный размер. Этот фильтр скользит по всему изображению, в каждой точке вычисляется скалярное произведение, формируя двухмерную карту активации (activation map).

Для увеличения вычислительной мощности используется банк из множества фильтров. Если применить 6 фильтров размером $5 \times 5 \times 3$ к изображению $32 \times 32 \times 3$, на выходе сформируется тензор размером $6 \times 28 \times 28$, где 6 — это количество новых каналов признаков. К каждому фильтру также добавляется одномерный обучаемый вектор смещения (bias).

Джастин подчёркивает критически важное различие между параметрами и гиперпараметрами:

* Гиперпараметры (количество фильтров, их размер) задаются человеком до начала обучения и валидируются с помощью кросс-валидации.
* Параметры (внутренние веса самих фильтров) инициализируются случайно для деградации симметрии, после чего настраиваются исключительно градиентным спуском.

Если забыть добавить функцию нелинейности (например, ReLU) между свёрточными слоями, вся сеть схлопнется в один линейный оператор, потеряв свою репрезентативную мощность. Визуализация показывает, что первые слои CNN всегда самостоятельно обучаются искать простые цвета, цветовые контрасты и направленные границы (вертикальные, горизонтальные, диагональные). Более глубокие слои начинают реагировать на сложные геометрические структуры: круглые элементы, текст, фрагменты лиц или колёса.

## 📏 Геометрия свёртки: паддинг, страйд и рецептивное поле
[[JUMP:49:53]]

Для точного проектирования сетей необходимо уметь рассчитывать пространственные размеры тензоров после прохождения свёртки. Если входной размер имеет длину $W$, а размер ядра свёртки равен $K$, то без дополнительных ухищрений выходной размер составит $W - K + 1$. Это приводит к постоянному уменьшению (сжиманию) карт признаков на каждом слое, что неудобно для проектирования сложных архитектур.

Для решения проблемы сжатия применяется паддинг (padding) — добавление виртуальных нулевых пикселей по краям изображения. Чтобы сохранить исходный пространственный размер при шаге свёртки равном 1, для нечётного размера ядра $K$ значение паддинга $P$ выбирается по формуле $P = (K - 1) / 2$. По краям кадра это может вызывать артефакты, но на практике это не мешает качественному обучению.

Другим фундаментальным понятием является рецептивное поле (receptive field) — область исходного изображения, которая влияет на конкретную активацию глубоко внутри сети. При последовательном наложении базовых свёрток рецептивное поле растёт лишь линейно, что затрудняет сбор глобальной информации со всей картинки. Чтобы ускорить этот рост, используют страйд (stride) — шаг скольжения фильтра, отличный от единицы.

Общая формула расчёта выходного размера стороны тензора имеет вид:

$$O = \frac{W - K + 2P}{S} + 1$$

где $S$ — это шаг свёртки (stride). Использование страйда приводит к субдискретизации (downsampling), благодаря чему эффективное рецептивное поле начинает расти экспоненциально относительно глубины сети.

Преподаватель привёл конкретный математический пример вычислений. Для входного тензора $3 \times 32 \times 32$ и свёрточного слоя из 10 фильтров размером $5 \times 5$ со страйдом 1 и паддингом 2:

1.  Размер выхода составит $10 \times 32 \times 32$.
2.  Количество обучаемых параметров составит всего 760 (каждый фильтр имеет $3 \times 5 \times 5 = 75$ весов плюс 1 bias, что даёт 76 параметров на один фильтр, умноженное на 10 фильтров).
3.  Объём вычислений для этого слоя потребует примерно 768 000 операций умножения-сложения (FLOPs), так как для каждого из 10 240 выходных элементов выполняется скалярное произведение на 75 элементов.

## 🧊 Слой пулинга: дешёвое субдискретизирование и эквивариантность
[[JUMP:59:29]]

Хотя страйд-свёртка эффективно уменьшает размерность, сами свёрточные слои остаются крайне ресурсоёмкими с точки зрения вычислительных операций. Слой пулинга (pooling) служит альтернативным, крайне «дешёвым» способом уменьшения пространственного разрешения тензоров, не требующим обучаемых параметров. Пулинг извлекает каждый канал признаков независимо, уменьшает его масштаб и упаковывает обратно в стек.



Наиболее распространённым методом является макс-пулинг (Max Pooling). Он разделяет карту признаков на непересекающиеся области (например, плитками $2 \times 2$ со страйдом 2) и выбирает из каждого квадрата только максимальное значение. Существуют также усредняющий пулинг (Average Pooling) и сглаживающий пулинг, но именно макс-пулинг выполняет роль функции нелинейности, из-за чего после него можно не ставить ReLU. Паддинг в слоях пулинга обычно не применяется.

При работе с реальными продакшн-системами возникает проблема разного размера исходных изображений. Чтобы батчить данные для сети, инженеры используют три основных подхода:

* Принудительное изменение размера (resize) или дополнение нулями (pad) до фиксированного разрешения.
* Раздельное выполнение слоёв для картинок с разным соотношением сторон.
* Группировка по соотношению сторон (aspect ratio bucketing), когда каждая итерация обучения берёт батч картинок одинакового разрешения, но сами разрешения меняются от шага к шагу.

В завершение лекции Джастин затронул важное математическое свойство свёрток и пулинга — трансляционную эквивариантность (translation equivariance). Это свойство означает, что если мы сначала сдвинем изображение в пространстве, а затем применим свёртку, результат будет идентичен тому, как если бы мы сначала применили свёртку, а затем сдвинули полученную карту признаков. Такая особенность гарантирует, что извлекаемые признаки зависят только от контента изображения, а не от его абсолютных координат в кадре.