Классические CNN архитектуры: от LeNet до ResNet
🎯 Зачем это нужно?
Представь, что ты разрабатываешь приложение для распознавания еды по фото 📱. Открываешь камеру, наводишь на пиццу - и приложение говорит “Пицца Маргарита, ~350 ккал”. Или создаёшь фильтр в TikTok, который накладывает маску на лицо в реальном времени. Всё это работает благодаря сверточным нейронным сетям (CNN)!
🎮 Instagram Stories: автоматическое распознавание объектов для AR-масок 🏥 Медицина: диагностика рака кожи по фотографии родинки точнее врачей 🚗 Tesla: автопилот распознаёт пешеходов, знаки, разметку в реальном времени
📚 История вопроса
В 1989 году Ян ЛеКун в AT&T создал LeNet для распознавания рукописных цифр на почтовых конвертах. Сеть была крошечной по современным меркам, но произвела революцию! 📮
Потом на 20 лет CNN “забыли”… Пока в 2012 году AlexNet не выиграла ImageNet с огромным отрывом. Это был момент “WTF?!” 🤯 - точность подскочила с 74% до 85%! С тех пор каждый год появлялись всё более изощрённые архитектуры.
Интересный факт: создатели ResNet вдохновились… проблемами с интернетом! 🌐 Когда пакеты теряются, роутеры используют “обходные пути”. Так появились skip connections.
💡 Интуиция
Представь, что ты учишься рисовать портреты:
1️⃣ Сначала замечаешь простые формы: круглое лицо, овальные глаза
2️⃣ Потом видишь детали: форму носа, изгиб губ
3️⃣ Наконец улавливаешь тонкости: эмоции, характер
CNN работают точно так же! Первые слои ловят простые паттерны (линии, углы), средние - комбинируют их в формы (глаза, уши), последние - понимают весь объект целиком.
[МЕДИА: image_01] Описание: Иерархическое извлечение признаков в CNN - от простых краев до сложных объектов Промпт: “educational illustration showing CNN feature hierarchy, first layer detecting edges and lines, middle layers finding shapes like eyes and ears, final layer recognizing complete faces, modern clean visualization style, blue gradient background”
📐 Классические архитектуры
LeNet-5 (1989): Пионер 🏅
Структура: Conv → Pool → Conv → Pool → FC → FC → Output
# Современная реализация LeNet
class LeNet5(nn.Module):
def __init__(self):
super().__init__()
self.conv1 = nn.Conv2d(1, 6, 5) # 32×32 → 28×28
self.pool1 = nn.MaxPool2d(2) # 28×28 → 14×14
self.conv2 = nn.Conv2d(6, 16, 5) # 14×14 → 10×10
self.pool2 = nn.MaxPool2d(2) # 10×10 → 5×5
self.fc1 = nn.Linear(16*5*5, 120)
self.fc2 = nn.Linear(120, 84)
self.fc3 = nn.Linear(84, 10)
Главная идея: чередование свёртки и пулинга + полносвязные слои в конце
AlexNet (2012): Прорыв! 🚀
Что нового:
- Глубже: 8 слоёв против 5 у LeNet
- ReLU вместо tanh (в 6 раз быстрее обучение!)
- Dropout против переобучения
- Data Augmentation (повороты, отражения)
- GPU: распараллеливание на 2 видеокарты
Результат: ImageNet accuracy скачок с 74% до 85%
VGGNet (2014): Простота и глубина 🎯
Философия: используй только фильтры 3×3, но делай сеть ОЧЕНЬ глубокой
VGG-16 структура:
- 13 сверточных слоёв (все фильтры 3×3)
- 3 полносвязных слоя
- 5 max-pooling слоёв
Почему 3×3? Два фильтра 3×3 = один 5×5, но параметров меньше!
- 5×5 фильтр: 25 параметров
- Два 3×3: 9 + 9 = 18 параметров
[МЕДИА: image_02] Описание: Сравнение эффективности фильтров разных размеров в VGGNet Промпт: “technical diagram comparing 3x3 vs 5x5 filters efficiency, showing receptive field coverage, parameter count comparison, clean educational style with arrows and mathematical notations”
ResNet (2015): Революция skip connections ⚡
Проблема: глубокие сети (>20 слоёв) обучались хуже мелких. Парадокс!
Решение: Residual connections - “перепрыгиваем” через слои
# Residual блок
class ResidualBlock(nn.Module):
def __init__(self, in_channels, out_channels):
super().__init__()
self.conv1 = nn.Conv2d(in_channels, out_channels, 3, padding=1)
self.conv2 = nn.Conv2d(out_channels, out_channels, 3, padding=1)
def forward(self, x):
residual = x
out = F.relu(self.conv1(x))
out = self.conv2(out)
out += residual # Skip connection!
return F.relu(out)
Математически: вместо H(x) учим F(x) = H(x) - x Тогда H(x) = F(x) + x
Почему работает: если слой не нужен, сеть научится делать F(x) ≈ 0
🔍 Примеры с разбором
Пример 1: Эволюция точности
- LeNet (1989): 99% на MNIST (рукописные цифры)
- AlexNet (2012): 85% на ImageNet (1000 классов объектов)
- VGG-16 (2014): 92% на ImageNet
- ResNet-152 (2015): 96% на ImageNet - превысил точность человека!
Пример 2: Размер модели vs точность
# Количество параметров:
LeNet-5: 60K параметров → 99% MNIST
AlexNet: 60M параметров → 85% ImageNet
VGG-16: 138M параметров → 92% ImageNet
ResNet-152: 60M параметров → 96% ImageNet
Вывод: больше параметров ≠ лучше точность. Важна архитектура!
[МЕДИА: image_03] Описание: График эволюции CNN архитектур по годам с точностью на ImageNet Промпт: “timeline chart showing CNN architecture evolution from 1989 to 2015, accuracy improvements on ImageNet dataset, milestone markers for LeNet, AlexNet, VGG, ResNet, professional data visualization style”
🎮 Практика
Базовый уровень 🟢
Задание 1: Почему в AlexNet используется ReLU вместо tanh?
💡 Подсказка
Подумай о скорости вычислений и проблеме затухающих градиентов✅ Ответ
ReLU вычисляется быстрее (max(0,x) vs экспонента) и не насыщается для больших значений, что решает проблему затухающих градиентовЗадание 2: Сколько параметров в сверточном слое 64 фильтров размером 3×3×128?
💡 Подсказка
Не забудь про bias для каждого фильтра!✅ Ответ
64 × (3×3×128 + 1) = 64 × 1153 = 73,792 параметраЗадание 3: Какой размер receptive field у VGG-16?
💡 Подсказка
Каждый слой 3×3 увеличивает receptive field на 2 пикселя✅ Ответ
13 сверточных слоёв → receptive field = 224 пикселя (размер входа ImageNet)Продвинутый уровень 🟡
Задание 4: Объясни, почему ResNet может обучаться глубже 100 слоёв, а обычная CNN “ломается” уже на 20-30?
Задание 5: Какая архитектура лучше для мобильного приложения: VGG-16 или ResNet-50? Обоснуй.
Задание 6: Модифицируй LeNet для цветных изображений 64×64. Сколько параметров получится?
Челлендж 🔴
Задание 7: Предложи гибридную архитектуру, объединяющую лучшие идеи VGG и ResNet для задачи сегментации медицинских изображений.
Задание 8: Почему в современных архитектурах (EfficientNet, Vision Transformer) отходят от классических CNN? Какие ограничения они решают?
⚠️ Частые ошибки
❌ Ошибка: “Чем больше слоёв, тем лучше”
✅ Правильно: Важна архитектура и способность градиентов “дойти” до начальных слоёв
💡 Почему: До ResNet глубокие сети деградировали из-за проблемы затухающих градиентов
❌ Ошибка: “VGG лучше AlexNet, потому что точнее” ✅ Правильно: VGG точнее, но в 10 раз больше параметров и медленнее 💡 Почему: Для production важен баланс точности, скорости и размера модели
❌ Ошибка: Использовать LeNet для сложных задач ✅ Правильно: LeNet хороша для простых задач (MNIST), для ImageNet нужны современные архитектуры 💡 Почему: Сложность задачи требует соответствующей сложности модели
🎓 Главное запомнить
✅ CNN эволюционировали: простота → глубина → умные соединения
✅ Skip connections в ResNet решили проблему обучения глубоких сетей
✅ Баланс точности, скорости и размера важнее максимальной точности
🔗 Связь с другими темами
Назад: Свёртка и pooling (урок 335) заложили основы для всех этих архитектур Вперёд: Современные архитектуры (EfficientNet, Vision Transformers) улучшают классические идеи Практика: Transfer Learning использует предобученные веса этих моделей
Понял тему? Закрепи в боте! 🚀
Попрактикуйся на задачах и получи персональные рекомендации от AI
💪 Начать тренировку