Представьте, что вы показываете другу фотографию кота. Друг видит пушистые уши, усы, зрачки — и мгновенно узнает животное. А теперь попробуйте объяснить это компьютеру. Как описать «котовость» в виде нулей и единиц? Обычные нейросети тут пасуют — они не различают кота, который сидит, от кота, который перевернулся вверх лапами. Но выход есть!
Мы разберем архитектуру, которая перевернула компьютерное зрение — сверточные нейронные сети (CNN). Они не просто «смотрят» на картинку, а сканируют её слоями, выделяя линии, углы, текстуры, а потом и целые объекты. Звучит как магия? На самом деле — это элегантная математика, упакованная в понятные блоки.
Почему CNN победили в распознавании лиц, медицинской диагностике и даже в играх? Как они учатся без учителя на каждом пикселе? И что общего у свертки с фильтром Instagram? Давайте засучим рукава и соберем собственное «цифровое зрение» — без лишней сложности, но со всеми важными деталями.
От нейрона к картинке: почему обычные сети не справляются с визуальными данными
Вы когда-нибудь пытались объяснить роботу, что такое «пушистость»? Нет? А если попробовать — это закончится миллионом багов. Обычная полносвязная нейросеть берет каждый пиксель изображения и подключает его к каждому нейрону следующего слоя. Для картинки 100×100 пикселей это 10 000 входов. Умножьте на следующий слой из 1000 нейронов — получите 10 миллионов весов. Проклятие размерности, да?
Но это ещё полбеды. Если кота сдвинуть на два пикселя вправо, для полносвязной сети это будет совершенно новый объект. Все веса пересчитываются заново, а инвариантности — ноль. А мы-то хотим, чтобы сеть узнавала кота в любом углу кадра. Тут на сцену выходят свертки.
Проклятие размерности: что не так с 1000×1000 пикселей
Давайте посчитаем. Изображение 1024×768 — почти 800 тысяч входных сигналов. Если мы строим слой из 500 нейронов, то имеем 400 миллионов параметров. Каждый параметр — число с плавающей точкой. Обучить такое чудовище на обычном ноутбуке? Забудьте. Свёртки снижают эту размерность, потому что используют локальные связи и общие веса.
Инвариантность к сдвигу и повороту — зачем она нужна
Представьте, что вы ищете ключи на столе. Ваш мозг не сканирует каждую точку стола отдельно — он замечает характерные формы (кольцо, металлический блеск). CNN делает то же самое: ищет один и тот же признак (например, угол в 45°) по всему изображению, используя один фильтр. Сдвиньте угол — фильтр всё равно его найдёт. Это и есть инвариантность.
Анатомия сверточной сети: из каких кирпичиков мы строим зрение
Построим CNN как конструктор Lego. Базовые детали — свёрточные слои, функции активации, пулинг и полносвязные слои. Схема простая: сначала несколько блоков «свёртка → ReLU → пулинг», а в конце — обычный классификатор.
Сверточный слой: маленькое окошко, которое сканирует всё
Возьмите лупу 3×3 пикселя и проведите ею по картинке. В каждой позиции вы умножаете значения пикселей под лупой на веса (ядро свёртки) и складываете результат. Это и есть свёртка. Вместо того чтобы связывать каждый пиксель с каждым, мы связываем только локальную область.
Ядро свёртки (фильтр) — что ищет нейросеть
Фильтр — это маленькая матрица весов, например 3×3. Один фильтр может искать вертикальные края, другой — горизонтальные, третий — пятна яркости. В процессе обучения эти веса автоматически подстраиваются под задачу.
Карта активаций (feature map) — след от фильтра
Результат скольжения одного фильтра — двумерная карта, где высокое значение означает «здесь фильтр сработал». Если у вас 32 фильтра в слое, вы получаете 32 карты активаций. Каждая — ответ на свой узор.

Шаг за шагом: как свёртка превращает пиксели в смыслы
Мы уже знаем теорию. Теперь наденем очки инженера.
Скользящее окно: стратегия (stride) и поля (padding)
Stride — через сколько пикселей мы двигаем окно. Stride=1 — окно сдвигается на один пиксель, карта активаций получается почти такого же размера, как вход. Stride=2 — пропускаем каждый второй пиксель, размер карты уменьшается вдвое.
Padding — добавляем границу из нулей вокруг картинки, чтобы краевые пиксели тоже участвовали в свёртке. Без padding размер картинки уменьшается после каждого слоя, и мелкие объекты быстро исчезают.
Зачем нам несколько фильтров в одном слое
Один фильтр — один признак. Но в реальном мире кота описывают десятки признаков: уши, усы, зрачки, форма головы. Каждый слой CNN учит от 32 до 1024 фильтров параллельно. Они не мешают друг другу, а дополняют.
ReLU — не просто функция, а выпрямитель сигнала
После свёртки мы пропускаем каждое значение через функцию f(x) = max(0, x). Зачем? Линейные свёртки складываются, а без нелинейности вся сеть превратилась бы в один гигантский линейный фильтр — бесполезно. ReLU убивает отрицательные активации (считайте, выключает неважное) и даёт нейронам уйти в насыщение.
Пулинг (Pooling): сжимаем масштаб, сохраняем главное
Вы когда-нибудь делали превью для фотоальбома? Пулинг — то же самое, но для карт активаций.
Макс-пулинг vs средний пулинг — битва за полезность
Берём окно 2×2 и выбираем из четырёх чисел одно: максимальное или среднее. Макс-пулинг сохраняет самую сильную активацию — он говорит: «здесь был край, и неважно, что рядом фон». Средний пулинг сглаживает, но теряет резкость. На практике выигрывает макс-пулинг: он даёт инвариантность к небольшим сдвигам и подчёркивает наиболее значимые признаки.
Как пулинг дарит устойчивость к мелким искажениям
Представьте, что кот пошевелил ухом на 3 пикселя. После макс-пулинга 2×2 и stride=2 ухо всё равно останется в той же «ячейке» пулинга — сеть не заметит дрожания. Это спасает от шумов и небольших смещений.
Собираем слои в этажи: классическая архитектура CNN
Хватит разрозненных кирпичей — пора строить дом.
Пример LeNet-5: первая ласточка от Янна ЛеКуна
В 1998 году Ян ЛеКун представил LeNet-5 для распознавания рукописных цифр (MNIST). Архитектура: вход 32×32 → свёртка 6 фильтров → пулинг → свёртка 16 фильтров → пулинг → полносвязный слой → выход на 10 классов. Всего 60 тысяч параметров — смехотворно мало по сегодняшним меркам, но она работала.
AlexNet: момент, когда CNN выиграли ImageNet
В 2012 году сеть Алекса Крижевского обошла все традиционные методы на конкурсе ImageNet с огромным отрывом. AlexNet содержала 8 слоёв: 5 свёрточных и 3 полносвязных. Она впервые широко использовала ReLU, dropout и аугментацию данных. Это был момент, когда мир поверил в глубокие свёртки.
Глубина решает всё: почему мы любим глубокие сети
Казалось бы, добавь больше слоёв — и точность поползёт вверх. Но нет. На глубине 20+ слоёв обычная сеть перестаёт обучаться — градиент затухает или взрывается.
Проблема затухающего градиента и как её побеждают
Когда мы распространяем ошибку обратно через много слоёв, градиент перемножается на маленькие числа (производные сигмоиды <0.25). К десятому слою градиент становится близок к нулю — веса на первых слоях почти не обновляются. Сеть учит только верхние слои, а нижние остаются случайными.
ResNet — шорткаты (shortcut), которые меняют правила игры
В 2015 году Кайминг Хэ предложил обходные соединения (skip connections): выход слоя прибавляется ко входу следующего через один-два слоя. Градиент теперь может течь по «шорткатам» прямиком к ранним слоям. ResNet из 152 слоёв побила все рекорды, а производные архитектуры (ResNeXt, DenseNet) до сих пор в топе.

От картинки к вектору: полносвязные слои в конце пути
После нескольких сверточных и пулинговых слоёв мы получаем набор карт активаций — например, 512 карт размером 7×7. Что дальше?
Выпрямление последней карты активаций
Мы вытягиваем все значения в один длинный вектор: 512×7×7 = 25 088 чисел. Затем подаём этот вектор в обычный полносвязный слой (как в старом добром перцептроне).
Softmax — вероятности вместо «да/нет»
Выходной слой обычно имеет столько нейронов, сколько классов (например, 1000 для ImageNet). Функция softmax превращает сырые числа в вероятности: сумма всех выходов = 1. Класс с максимальной вероятностью — это и есть ответ сети.
Обучение CNN: как сеть учится отличать кошек от собак
Допустим, вы собрали архитектуру. Но веса-то у фильтров изначально случайные. Как заставить их находить края и уши?
Функция потерь (cross-entropy) и метод обратного распространения
Мы подаём картинку кота, сеть выдаёт вероятность 0,3 для класса «кот» (а должна 1,0). Функция потерь вычисляет, насколько сеть неправа. Потом метод обратного распространения (backprop) вычисляет вклад каждого веса в эту ошибку.
Свёртки тоже учатся — меняются веса фильтров
Магия в том, что градиент доходит до каждого фильтра в каждом слое. Если фильтр первого слоя искал вертикальные края, а сеть ошиблась, градиент немного подкрутит веса этого фильтра. После тысяч итераций фильтры эволюционируют от случайного шума до детекторов линий, углов, текстур, глаз и морд.
Вы слышали про трансферное обучение? Не начинайте с нуля
Вырастить CNN с нуля на миллионе изображений — удовольствие для гуглов с их TPU. А если у вас всего 500 фотографий редких птиц?
Fine-tuning готовой сети — экономия времени и данных
Берём предобученную на ImageNet сеть (например, ResNet-50). Она уже умеет находить края, простые формы и даже части животных. Заменяем последний полносвязный слой на новый, под наши 10 классов птиц, и дообучаем всю сеть с маленькой скоростью. Всего за пару эпох сеть адаптируется — точность подскакивает до 90%+.
CNN как feature extractor: замораживаем слои
Можно пойти дальше: заморозить все сверточные слои (не менять их веса) и использовать их выходы как готовые признаки для простого классификатора (например, SVM). Это быстрее, но менее гибко.
Под капотом: визуализируем, что видят сверточные слои
Любопытно, правда? Мы подаём картинку — а что именно активирует нейроны?
Активации первых слоев — линии и края
Исследователи показывали, что фильтры первого слоя в AlexNet напоминают фильтры Габора и детекторы цвета. Один фильтр «любит» зелёные горизонтальные линии, другой — красные пятна.
Глубокие слои — глаза, колёса, морды
На 4-5-м свёрточном слое, если мы посмотрим на самые сильные активации для конкретной картинки, обнаружим, что нейроны загораются на целые объекты: колесо автомобиля, глаз кошки, морда собаки. Сеть строит иерархию от простого к сложному.
Аугментация данных: кормим сеть миллионом вариаций
Сеть легко запоминает тренировочные примеры наизусть (переобучение), если их мало. Что делаем? Создаём новые данные из старых.
Повороты, сдвиги, отражения — честный способ усилить модель
Каждую картинку мы случайным образом поворачиваем на ±15°, сдвигаем, подрезаем, инвертируем цвета, добавляем шум. Для сети это разные примеры, хотя для нас — одна и та же кошка. Так сеть учится инвариантности к реальным искажениям.
Dropout и batch normalization — борьба с переобучением
Dropout случайно выключает 50% нейронов на каждом шаге обучения — сеть не может полагаться на конкретные нейроны, учится распределять внимание. Batch Normalisation нормализует активации внутри слоя, ускоряет сходимость и стабилизирует обучение. Сегодня BN есть почти в каждой CNN.
CNN не только для фоток: куда ещё мы применяем свертки
Зажмурьтесь и представьте, что свертка — это универсальный инструмент для любых данных с соседней структурой. Звучание музыки? Текст? Временные ряды? Да.
Обработка видео и временных рядов (1D CNN)
Видео — это последовательность кадров. Мы используем 3D свёртки (время + высота + ширина) или развёртываем кадры в 1D-последовательность. Для анализа ЭКГ или акций биржи применяют одномерные свёртки по оси времени — они находят локальные паттерны (удары сердца, ценовые скачки).
3D свертки для томографии и лидарных данных
Медицинские КТ-снимки — это трёхмерный куб вокселей. 3D CNN обрабатывают его целиком, находя опухоли. Лидарные облака точек проецируют на 2D, но есть и прямые 3D-методы на основе разреженных сверток.
Генеративные сверточные сети: когда CNN рисуют сами
Мы привыкли, что CNN что-то классифицируют. Но они умеют и создавать изображения с нуля.
Транспонированная свёртка (conv2d_transpose)
Обычная свёртка уменьшает картинку. А если мы хотим увеличить — используем транспонированную свёртку (иногда её ошибочно называют «деконволюцией»). Она принимает маленькую карту активаций и «размазывает» её обратно в большое изображение. Так работают генеративные модели, например вариационные автоэнкодеры (VAE).
U-Net — сегментация пиксель в пиксель
Для задач, где нужно обвести каждый пиксель (медицинская сегментация, удаление фона), придумали U-Net. Она сначала сжимает картинку свёртками и пулингом (кодировщик), а потом расширяет транспонированными свёртками (декодировщик) и добавляет обходные связи, чтобы не потерять мелкие детали. Результат — маска для каждого пикселя.
Современные архитектуры за 2023–2026 годы
Мы не в 2012 году. CNN эволюционировали, а на пятки наступают трансформеры. Но классические свертки живут и побеждают.
EfficientNet — баланс глубины, ширины и разрешения
Гугловский EfficientNet (2019) систематически масштабирует все три размера сети одновременно. Результат: выше точность при меньшем числе FLOPS. По сей день EfficientNetV2 — один из лучших выборов для приложений.
ConvNeXt — возвращение к чистым сверткам
В 2022 году исследователи из FAIR взяли архитектуру ResNet, но перетряхнули её: добавили нормализации как в ViT, увеличили размер ядер с 3×3 до 7×7, заменили пулинг на stride в свёртках. ConvNeXt превзошёл Swin Transformer на ImageNet, доказав, что свертки ещё не сдались.
Ограничения CNN: где свертки пасуют, а приходят трансформеры
Не будем хвалить CNN слепо. У них есть ахиллесова пята.
Зависимость от локального контекста
Фильтр 3×3 видит только 9 соседних пикселей. Чтобы связать далёкие области (например, нос и хвост кота), нужно много слоёв свёртки — эффективное рецептивное поле растёт медленно. Трансформеры за один шаг могут сравнить любые две точки изображения благодаря self-attention.
Vision Transformer (ViT) — новый король на горизонте?
В 2020 году свертки получили серьёзного соперника. ViT разбивает картинку на патчи 16×16 и обрабатывает их как последовательность слов. На больших датасетах ViT бьёт CNN, а на маленьких — уступает. Сегодня гибридные подходы (ConvNeXt, CoAtNet) стараются взять лучшее из двух миров.
Но не спешите хоронить CNN. Они остаются быстрее на обучении, требуют меньше данных и отлично работают на мобильных устройствах.
Заключение
Мы прошли долгий путь от одиночного фильтра 3×3 до современных гигантов вроде EfficientNet. Свёрточные сети научились видеть мир не как хаотичный набор пикселей, а как иерархию всё более сложных признаков — сначала линии, потом углы, текстуры, части объектов и, наконец, целые лица, автомобили или звёздные корабли. Да, у сверток есть ограничения (локальность, нехватка глобального контекста), и трансформеры уже дышат в спину. Но именно CNN проложили дорогу глубокому зрению, и они никуда не денутся из беспилотников, медицинских сканеров и вашего смартфона.
Теперь, когда вы видите, как Face ID разблокирует iPhone или как Яндекс.Картинки находит именно того рыжего кота, — вспомните о маленьких скользящих окошках, которые терпеливо перебирают каждый пиксель. И если вы захотите сами построить своего зрителя — начните с одного свёрточного слоя. А?
ЧаВо (FAQ)
- Чем сверточная нейросеть отличается от обычной полносвязной?
Обычная полносвязная сеть соединяет каждый вход с каждым нейроном — она не учитывает пространственную структуру и требует огромного количества весов. Свёрточная сеть использует локальные связи (окно 3×3) и общие веса для всей картинки, что резко сокращает число параметров и даёт устойчивость к сдвигам. - Обязательно ли использовать пулинг после каждого свёрточного слоя?
Нет, классическая схема «свёртка → ReLU → пулинг» — лишь один из вариантов. Современные архитектуры (например, ResNet или EfficientNet) часто заменяют пулинг свёртками с шагом (stride) больше 1. Пулинг уменьшает размерность, но теряет информацию — поэтому в задачах сегментации (U-Net) пулинга стараются избегать. - Как понять, сколько слоёв и фильтров нужно моей задаче?
Золотое правило эмпирики: начните с готовой предобученной сети (трансферное обучение). Если грустно — возьмите 3–4 свёрточных блока, увеличивая число фильтров: первый слой 32, второй 64, третий 128, четвёртый 256. Размер изображения подскажет глубину: для маленьких иконок (32×32) достаточно 2–3 слоёв, для 224×224 — 5–7 слоёв. - Правда ли, что CNN не работают с цветными картинками?
Работают отлично. Цветное изображение RGB — это три канала (красный, зелёный, синий). Фильтр CNN просто становится трёхканальным: он имеет размеры, например, 3×3×3 (высота, ширина, глубина по каналам). На выходе — одна карта активаций. Так сеть одновременно учитывает и цвет, и форму. - Зачем нужен ReLU, если есть другие функции активации (сигмоида, tanh)?
ReLU (max(0,x)) очень прост — он не насыщается для положительных значений, градиент всегда 1 (кроме нуля). Значит, проблема затухающего градиента меньше бьёт по сети. ReLU также создаёт разреженные активации (примерно половина нейронов замолкает), что помогает обобщению. Сигмоида и tanh хороши для выходного слоя binary классификатора, но внутри свёрток ReLU — король. - Можно ли использовать CNN для распознавания звуков?
Да! Превратите аудиосигнал в спектрограмму (картинка: время по горизонтали, частота по вертикали, яркость — амплитуда). Такая спектрограмма — обычное двухмерное изображение. CNN на ней отлично находит речевые фонемы, музыкальные инструменты или звук разбитого стекла. - Почему Vision Transformer (ViT) не убил CNN окончательно?
ViT требует огромных датасетов (лучше больше 14 млн картинок), иначе он обучается медленнее и хуже CNN. Кроме того, ViT потребляет больше памяти и не имеет естественной инвариантности к сдвигу — её приходится имитировать аугментацией. На небольших картинках (менее 64×64) свёртки всё ещё быстрее и точнее. Поэтому в 2025 году промышленные решения часто берут гибрид: первые слои CNN (для извлечения локальных паттернов), а дальше — attention.