Полносвязные сети и их пределы

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

Полносвязная сеть (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 и трансформерах.
Проверьте себя
1. Почему полносвязный слой плох для больших изображений?
AОн не поддерживает цвет
BЧисло параметров взрывается, а структура изображения игнорируется
CОн не умеет считать sigmoid
DОн работает только с текстом
2. Что значит «инвариантность к сдвигу», которой не хватает MLP?
AСеть не меняет веса
BОбъект распознаётся независимо от его положения на картинке
CИзображение не сдвигается
DВсе пиксели одинаковы
3. На каких данных полносвязные сети по-прежнему хороши?
AТолько на видео
BНа табличных данных с признаками
CТолько на звуке
DНи на каких
Поддержать проект