Полносвязные сети и их пределы
Урок подводит итог полносвязным сетям и объясняет, почему для картинок и текста нужны другие архитектуры.
Полносвязная сеть (fully connected, MLP) соединяет каждый нейрон со всеми нейронами соседнего слоя — это универсальная, но не всегда экономная архитектура.
В чём сила MLP
Теорема об универсальной аппроксимации гласит: достаточно широкая сеть с одним скрытым слоём способна приблизить почти любую непрерывную функцию. На табличных данных (строки с признаками: возраст, доход, площадь) полносвязные сети работают прекрасно и остаются рабочим инструментом.
Проблема 1: взрыв параметров на изображениях
Изображение 200×200 в цвете — это 200·200·3 = 120 000 входов. Если первый скрытый слой полносвязный и имеет всего 1000 нейронов, получаем 120 миллионов весов только в первом слое. Посчитаем.
def fc_params(n_in, n_out):
return n_in * n_out + n_out
# картинка 200x200x3 -> полносвязный слой на 1000 нейронов
n_in = 200 * 200 * 3
print("Входов (пикселей*каналов):", n_in)
print("Параметров одного FC-слоя на 1000 нейронов:", fc_params(n_in, 1000))
print("Это около", round(fc_params(n_in, 1000) / 1_000_000, 1), "млн весов — в одном слое!")
Вывод:
Входов (пикселей*каналов): 120000 Параметров одного FC-слоя на 1000 нейронов: 120001000 Это около 120.0 млн весов — в одном слое!
120 миллионов параметров в первом же слое — это огромный расход памяти и прямая дорога к переобучению. И всё ради одной небольшой картинки.
Проблема 2: игнорируется структура
Полносвязный слой «разглаживает» картинку в один длинный вектор и теряет информацию о том, что пиксели рядом связаны. Для него сосед слева и пиксель в другом углу равноправны. Но в изображениях важна локальность: глаз состоит из соседних пикселей, а не из разбросанных. То же с текстом: важен порядок слов. MLP это не учитывает.
Проблема 3: нет инвариантности к сдвигу
Если кот сдвинется на картинке на десять пикселей вправо, для полносвязной сети это совершенно новый набор входов — придётся учить распознавание заново для каждой позиции. Разумнее было бы искать кота одним и тем же детектором по всей картинке.
Отсюда — специализированные архитектуры
Решения этих трёх проблем породили специализированные сети: свёрточные (CNN) учитывают локальность и переиспользуют детекторы по всей картинке; рекуррентные (RNN) и трансформеры работают с порядком в последовательностях. Их и разберём дальше.
Главная мысль раздела
Все эти архитектуры — не магия и не замена основам, а способ умно ограничить связи. Полносвязный слой допускает все возможные соединения; специализированная архитектура заранее закладывает в структуру знание о данных: «в картинках важна локальность», «в тексте важен порядок». Такое встроенное предположение называют индуктивным смещением (inductive bias). Оно резко сокращает число параметров и направляет обучение в нужное русло — сети не нужно с нуля выводить очевидное. Но под капотом всё те же нейроны, веса, активации и backprop, что мы прошли. Меняется лишь то, как нейроны соединены.
Итог
- MLP универсальны и хороши на табличных данных.
- На изображениях число параметров взрывается, а структура и локальность игнорируются.
- Нет инвариантности к сдвигу — отсюда потребность в CNN, RNN и трансформерах.