🔴 Сложный ⏱️ 45 минут

Архитектуры нейронных сетей

📋 Содержание урока

Архитектуры нейронных сетей 🗺️

В уроках 326–328 ты разобрал полносвязную сеть (multilayer perceptron, MLP) буквально по винтикам: от одного искусственного нейрона до многослойной архитектуры, которая решает XOR и по теореме универсальной аппроксимации способна приблизить любую непрерывную функцию. В уроках 329–333 ты научился обучать такую сеть надёжно — с правильными функциями активации, backpropagation, оптимизаторами, нормализацией и регуляризацией. Логично было бы подумать, что дальше нужно просто брать эту полносвязную сеть, делать её глубже и шире — и она справится с любой задачей. На практике это не так, и сегодняшний урок объясняет, почему.

Полносвязная сеть — универсальный инструмент в теоретическом смысле, но крайне неэффективный в практическом. Если подать ей на вход цветную фотографию размером всего $224\times224$ пикселя, первый же полносвязный слой с, скажем, $1000$ нейронами потребует $224\times224\times3\times1000 \approx 150$ миллионов весов — и это только один слой, ещё до какой-либо реальной "понимания" изображения. Проблема не только в количестве параметров: полносвязный слой не знает, что пиксель в левом верхнем углу и пиксель прямо рядом с ним связаны пространственно, — он видит вектор из чисел, полностью потерявший исходную двумерную структуру. Точно так же полносвязная сеть не умеет по конструкции работать с последовательностями переменной длины: предложение из пяти слов и предложение из пятидесяти слов для нее — это, по сути, разные по форме объекты, для которых пришлось бы городить отдельные архитектуры под каждую длину входа.

Именно поэтому за последние четыре десятилетия исследователи придумали целое семейство специализированных архитектур, каждая из которых зашивает в саму структуру сети некое предположение (inductive bias, индуктивное смещение) о природе данных, с которыми она работает. Свёрточные сети (CNN) зашивают предположение о локальности и трансляционной инвариантности изображений: то, что делает объект котом, — это локальный узор из краёв, текстур и форм, который может встретиться в любом месте кадра. Рекуррентные сети (RNN) зашивают предположение о последовательном, упорядоченном характере данных вроде текста или временных рядов: смысл слова зависит от предыдущих слов, а не только от него самого. Трансформеры пошли ещё дальше и зашили предположение о том, что для понимания элемента последовательности важны отношения этого элемента со всеми остальными элементами сразу, а не только с соседними по порядку.

Сегодняшний урок — обзорная карта местности перед тем, как курс погрузится в детали каждой из этих архитектур по отдельности. План такой: сначала явно фиксируем, где именно и почему у MLP не хватает эффективности, затем кратко разбираем идею CNN (подробно — уроки 335–336, ResNet в уроке 337), идею RNN и LSTM (подробный блок дальше в курсе), идею трансформеров и механизма внимания (тоже отдельный подробный блок дальше), а также коротко — автоэнкодеры и генеративно-состязательные сети (GAN) для задач сжатия и генерации данных. В конце — практическая таблица "тип данных → архитектура", которой ты сможешь пользоваться как шпаргалкой при выборе модели для реальной задачи. Сегодня ты не станешь экспертом ни в одной из этих архитектур — это по-прежнему задача следующих уроков, — но ты получишь карту, которая объясняет, зачем вообще нужен целый зоопарк архитектур, а не одна универсальная сеть.

История

Идея, что структура сети должна отражать структуру данных, появилась намного раньше, чем современные глубокие сети. Ещё в 1980 году Кунихико Фукусима предложил неокогнитрон (neocognitron) — архитектуру, вдохновлённую строением зрительной коры млекопитающих, с чередующимися слоями, которые извлекают локальные признаки и затем обобщают их по пространству. Идею довёл до практически работающей формы Ян Лекун: в 1989 году он применил backpropagation к сети со свёрточными слоями для распознавания рукописных цифр, а к 1998 году его архитектура LeNet-5 уже уверенно читала цифры на банковских чеках в промышленном масштабе. Параллельно, ещё в 1980-е и особенно в начале 1990-х, развивалась идея рекуррентных сетей — Джон Хопфилд, а затем Джеффри Элман предложили сети с обратными связями, способные удерживать некое подобие "памяти" о предыдущих входах, что критично для последовательных данных.

Настоящий взрыв интереса к CNN случился в 2012 году, когда архитектура AlexNet (Алекс Крижевски, Илья Суцкевер, Джеффри Хинтон) выиграла соревнование ImageNet с огромным отрывом от конкурентов, использовавших классические методы компьютерного зрения. Это событие принято считать точкой отсчёта современной эры глубокого обучения: стало ясно, что при достаточном объёме данных и вычислительной мощности (графические процессоры, GPU) свёрточные сети радикально превосходят прежние подходы. Следом, в середине 2010-х, для последовательных данных закрепился рекуррентный блок LSTM (Long Short-Term Memory, "долгая краткосрочная память"), предложенный ещё в 1997 году Зеппом Хохрайтером и Юргеном Шмидхубером, но по-настоящему массово применённый только когда появились данные и вычислительные мощности для его обучения — в машинном переводе, распознавании речи и генерации текста.

Следующий крупный сдвиг произошёл в 2017 году со статьёй "Attention Is All You Need" ("Внимание — это всё, что нужно") исследователей из Google, представившей архитектуру трансформера. Она заменила последовательную рекуррентную обработку данных механизмом внимания (attention), который позволяет модели напрямую сопоставлять любые два элемента последовательности вне зависимости от расстояния между ними — и, что не менее важно, делать это параллельно для всех элементов сразу, а не по одному шагу за раз, как в RNN. Трансформеры быстро вытеснили рекуррентные сети в обработке текста (модели вроде BERT и GPT построены на них) и позже проникли даже в компьютерное зрение (Vision Transformer, 2020). При этом ни одна из более ранних архитектур не исчезла полностью: CNN остаются рабочей лошадкой во многих задачах компьютерного зрения, автоэнкодеры и GAN продолжают развиваться для генерации и сжатия данных, а рекуррентные идеи возвращаются в новых формах. История архитектур — это не смена одной "лучшей" модели другой, а постепенное расширение набора инструментов под разные типы данных и задач.

Полносвязные сети: где заканчивается их эффективность

Интуиция

MLP из уроков 326–328 — это универсальный аппроксиматор в теоретическом смысле: по теореме универсальной аппроксимации сеть с одним достаточно широким скрытым слоем способна приблизить любую непрерывную функцию. Но "способна в принципе" и "эффективно и обучаемо на практике" — совершенно разные утверждения. Когда вход имеет естественную пространственную структуру, как изображение, полносвязный слой обрабатывает его так, будто это просто длинный список несвязанных чисел, — и платит за это катастрофическим ростом числа параметров и потерей всякой информации о том, какие пиксели были соседями.

Формула

Число параметров полносвязного слоя. Если слой принимает вход размера $n$ и содержит $m$ нейронов, число обучаемых весов равно $n\times m$, плюс $m$ смещений. Для изображения размера $H\times W$ с $C$ каналами (например, $C=3$ для RGB) входная размерность после разворачивания в вектор равна $n = H\times W\times C$.

Разбор примеров

Пример 1 (MNIST — MLP ещё справляется). Изображения MNIST маленькие и чёрно-белые: $28\times28\times1=784$ входных числа. Первый скрытый слой из $128$ нейронов требует $784\times128+128=100\,480$ параметров (см. урок 328) — вполне посильно для современного железа, и MLP на MNIST действительно показывает приличную точность, порядка $97$–$98\%$.

Пример 2 (цветное фото — MLP уже неадекватен). Возьмём небольшое по меркам реальных задач цветное изображение $224\times224\times3$ — стандартный размер входа для многих CNN-архитектур. Развёрнутый вектор входа: $224\times224\times3=150\,528$ чисел. Первый скрытый слой всего из $1000$ нейронов потребует $150\,528\times1000+1000=150\,529\,000$ параметров — более $150$ миллионов весов в одном-единственном слое, ещё до какой-либо содержательной обработки изображения. Для сравнения, вся сеть LeNet-5 (1998 год, свёрточная архитектура для той же по духу задачи) обходится примерно $60$ тысячами параметров.

Пример 3 (потеря пространственной структуры). Представь, что изображение кота сдвинули на $10$ пикселей вправо. Для человека это тот же самый кот. Для полносвязного слоя, который умножает каждый входной пиксель на свой собственный, уникальный вес, — это совершенно другой вектор входа, и без огромного количества обучающих примеров с котами во всех возможных положениях сеть не научится распознавать сдвинутого кота увереннее, чем случайный шум. Веса, выученные для распознавания уха кота в левом верхнем углу кадра, никак не помогают распознать то же самое ухо, оказавшееся в правом нижнем углу, — знание не переиспользуется между разными участками изображения.

Почему это важно

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

Свёрточные сети (CNN): локальность и переиспользование весов

Интуиция

Ключевая идея CNN — заменить полносвязный слой, где каждый выходной нейрон соединён абсолютно со всеми входными пикселями, на свёрточный слой, где небольшой набор весов (называемый фильтром, или ядром свёртки) "скользит" по всему изображению и применяется к каждому локальному участку одинаково. Это сразу даёт две вещи: во-первых, число параметров перестаёт зависеть от размера изображения (фильтр $3\times3$ имеет девять весов независимо от того, обрабатывает ли он картинку $28\times28$ или $2000\times2000$), а во-вторых, один и тот же фильтр, выучивший, например, распознавать вертикальный край, применяется ко всем участкам изображения одинаково — это и называется переиспользованием весов (weight sharing) и даёт сети свойство трансляционной инвариантности: паттерн узнаётся вне зависимости от того, в каком месте кадра он находится.

Формула

Свёртка (кратко, без деталей — полный разбор в уроке 335). Для входного изображения $x$ и фильтра (ядра) $K$ размера $k\times k$ значение выхода в позиции $(i,j)$ вычисляется как

$$y_{i,j} = \sum_{u=1}^{k}\sum_{v=1}^{k} K_{u,v}\cdot x_{i+u,\,j+v}$$

где одна и та же матрица весов $K$ используется для вычисления $y_{i,j}$ при всех допустимых $(i,j)$ — в этом и заключается переиспользование весов.

Разбор примеров

Пример 1 (экономия параметров на конкретных числах). Свёрточный слой с $32$ фильтрами размера $3\times3$ для входа с $3$ каналами (RGB) требует $3\times3\times3\times32+32=896$ параметров — вне зависимости от того, обрабатывается ли изображение $32\times32$ или $1024\times1024$. Полносвязный слой того же назначения на входе $224\times224\times3$ потребовал бы, как посчитано выше, более $150$ миллионов параметров. Разница на несколько порядков объясняет, почему CNN вообще можно обучить на реалистичных объёмах данных.

Пример 2 (иерархия признаков). В типичной CNN ранние слои выучивают простые локальные паттерны — края, углы, пятна цвета; средние слои комбинируют их в более сложные текстуры и части объектов — глаз, колесо, полоску; поздние слои собирают из этих частей целые объекты — лицо, автомобиль, кошку. Эта иерархия возникает не потому, что кто-то её явно спроектировал, а как естественное следствие того, что каждый следующий свёрточный слой "видит" более широкую область исходного изображения, комбинируя выходы предыдущего слоя.

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

Почему это важно

CNN — не универсальная замена MLP, а специализация под конкретное индуктивное смещение: "то, что важно на изображении, — локально и может встретиться в любом месте кадра". Это резко сокращает число параметров, ускоряет обучение и, что не менее важно, помогает сети обобщаться на новые изображения, а не просто заучивать конкретные пиксели тренировочного набора. Урок 335 разберёт свёртку, пулинг (pooling) и полную архитектуру CNN с числами, урок 336 — конкретные известные архитектуры, урок 337 — ResNet и проблему обучения очень глубоких сетей.

Рекуррентные сети (RNN): память о прошлых шагах

Интуиция

Текст, аудио, временные ряды — данные, где порядок элементов принципиально важен: "собака укусила человека" и "человек укусил собаку" состоят из одних и тех же слов, но означают противоположные вещи. Полносвязная сеть, поданная на вход по словам, не различает порядок вообще, если её явно не научить этому отдельным трюком. Рекуррентная сеть решает эту проблему архитектурно: она обрабатывает последовательность по одному элементу за раз, и на каждом шаге обновляет скрытое состояние (hidden state) — вектор, который выступает своего рода "памятью" о том, что сеть уже увидела к этому моменту. Скрытое состояние передаётся с шага на шаг, поэтому решение на шаге $t$ зависит не только от текущего входа, но и от всей предыдущей истории, сжатой в это состояние.

Формула

Рекуррентный слой (кратко, без деталей — подробный разбор LSTM и GRU дальше в курсе). Для последовательности входов $x_1,x_2,\dots,x_T$ скрытое состояние обновляется рекуррентно:

$$h_t = f(W_x x_t + W_h h_{t-1} + b)$$

где $h_0$ — начальное состояние (обычно нулевой вектор), $f$ — нелинейная активация, а одни и те же матрицы весов $W_x, W_h$ используются на каждом шаге $t$ — ещё один пример переиспользования весов, только теперь не по пространству, как в CNN, а по времени.

Разбор примеров

Пример 1 (почему порядок важен для смысла). Для языковой модели, предсказывающей следующее слово, фраза "я налил кофе в" с высокой вероятностью продолжается словом "чашку", а фраза "чашку я налил кофе в" (тот же набор слов в другом порядке) для человека звучит странно и предсказание должно быть иным. RNN, обрабатывая слова последовательно и обновляя скрытое состояние на каждом шаге, естественным образом улавливает такую зависимость от порядка — то, что для MLP с фиксированным набором входов пришлось бы имитировать искусственно.

Пример 2 (проблема долгой памяти). Простая RNN, описанная формулой выше, плохо запоминает информацию на большом расстоянии: если важное слово встретилось в начале длинного абзаца, а вопрос про него задаётся в конце, сигнал от этого слова, проходя через десятки промежуточных шагов обновления скрытого состояния, часто затухает почти до нуля — та же проблема затухающего градиента, что и в глубоких сетях с сигмоидой (урок 328), только здесь "глубина" измеряется по времени, а не по слоям. Архитектура LSTM (Long Short-Term Memory) и её более простой родственник GRU (Gated Recurrent Unit) были придуманы специально для решения этой проблемы с помощью управляемых "воротами" механизмов, которые позволяют сети явно решать, что запомнить надолго, а что забыть.

Пример 3 (где RNN и LSTM применяются на практике). Машинный перевод (до эпохи трансформеров), распознавание речи, прогнозирование временных рядов (котировки акций, потребление электроэнергии, показания датчиков в промышленности), генерация текста посимвольно или пословно, анализ тональности отзывов с учётом контекста всего предложения. Общая черта всех этих задач — данные представлены как упорядоченная последовательность, где значение элемента существенно зависит от его позиции и соседей.

Почему это важно

Идея скрытого состояния, передающегося от шага к шагу, — это архитектурный ответ на вопрос "как научить сеть учитывать порядок элементов последовательности". Подробный разбор LSTM, GRU и практических приёмов работы с рекуррентными сетями — отдельный блок позже в курсе; сегодня важно зафиксировать саму идею и то, что именно она (а не что-то специфичное для текста) отличает RNN от CNN и MLP: рекуррентность — это про последовательный порядок, а не про пространственную локальность.

Трансформеры: внимание вместо последовательной обработки

Интуиция

У RNN есть два практических недостатка: обучение принципиально последовательно (нельзя вычислить $h_{10}$, не вычислив сначала $h_1,\dots,h_9$), что плохо использует параллельные вычислительные мощности современных GPU, и даже с LSTM/GRU дальние зависимости даются архитектуре тяжело. Трансформер, предложенный в 2017 году, отказывается от последовательной обработки вовсе. Вместо этого он использует механизм внимания (attention): для каждого элемента последовательности модель напрямую вычисляет, насколько он "важен" по отношению к каждому другому элементу этой же последовательности, вне зависимости от расстояния между ними, и все эти вычисления можно делать параллельно для всех элементов сразу.

Формула

Механизм внимания (кратко, без вывода — подробный разбор дальше в курсе). Для запроса (query) $Q$, ключей (key) $K$ и значений (value) $V$ внимание вычисляется как

$$\mathrm{Attention}(Q,K,V) = \mathrm{softmax}\!\left(\frac{QK^\top}{\sqrt{d_k}}\right)V$$

где $d_k$ — размерность ключей, а $\mathrm{softmax}$ (уже знакомая тебе по задачам многоклассовой классификации функция) превращает сырые оценки сходства между запросом и ключами в веса, суммирующиеся в единицу, — по сути, "сколько внимания" уделить каждому значению $V$.

Разбор примеров

Пример 1 (внимание разрешает неоднозначность местоимений). В предложении "робот поднял коробку, потому что она была лёгкой" слово "она" грамматически может относиться и к "коробке", и, в другом контексте, к другому существительному женского рода. Механизм внимания позволяет модели напрямую "посмотреть" на все предыдущие слова и присвоить наибольший вес именно слову "коробка" при обработке местоимения "она" — причём это происходит за один шаг вычислений, а не за десять последовательных обновлений скрытого состояния, как потребовалось бы RNN для слова, отстоящего на десять позиций.

Пример 2 (параллелизм как практическое преимущество). RNN обрабатывает последовательность из $100$ слов за $100$ последовательных шагов, каждый из которых зависит от предыдущего, — это принципиально невозможно распараллелить по времени. Трансформер вычисляет внимание для всех $100$ позиций одновременно, как одну матричную операцию, что радикально ускоряет обучение на современном оборудовании (GPU и TPU созданы именно для быстрых параллельных матричных вычислений) и во многом объясняет, почему именно трансформеры позволили обучать модели на порядки большего размера, чем это было практично для RNN.

Пример 3 (где трансформеры применяются сегодня). Современные большие языковые модели (архитектуры вроде GPT и подобных) построены на трансформерах; модель BERT, изменившая подход к большинству задач обработки текста, тоже трансформер; Vision Transformer (ViT) переносит ту же идею внимания на изображения, разбивая картинку на патчи и обрабатывая их как последовательность — то есть трансформеры сегодня не ограничены только текстом. Это де-факто современный стандарт для большинства задач, где раньше доминировали RNN, а в некоторых нишах — и там, где раньше безраздельно властвовали CNN.

Почему это важно

Переход от RNN к трансформерам — хороший пример того, как смена архитектурного предположения (не "обрабатывать последовательно", а "смотреть на всё сразу через внимание") может дать одновременно и лучшее качество, и лучшую вычислительную эффективность. Подробный разбор архитектуры трансформера, само-внимания (self-attention), позиционных кодировок и энкодер-декодерной схемы — задача отдельного блока позже в курсе; сегодня достаточно понимать общую идею и то, чем она принципиально отличается от рекуррентного подхода.

Автоэнкодеры и GAN: сжатие и генерация данных

Интуиция

Все архитектуры выше решали задачи с "учителем" (supervised learning): есть вход и известный правильный ответ, сеть учится предсказывать ответ по входу. Автоэнкодеры и генеративно-состязательные сети (GAN) устроены иначе и решают другой класс задач — сжатие данных и генерацию новых данных, похожих на обучающие. Автоэнкодер — это сеть из двух частей: энкодер сжимает вход в компактное представление меньшей размерности (латентный код, или latent representation), а декодер пытается восстановить исходный вход по этому сжатому представлению. Сеть учится сама на себе, без внешних меток: цель обучения — минимизировать разницу между входом и тем, что декодер восстановил из сжатого кода. GAN устроен принципиально иначе: две сети соревнуются друг с другом — генератор пытается создавать данные, неотличимые от настоящих, а дискриминатор пытается отличить настоящие данные от сгенерированных, и это соревнование (отсюда слово "состязательные") постепенно заставляет генератор создавать всё более реалистичные образцы.

Формула

Автоэнкодер (кратко). Энкодер $E$ отображает вход $x$ в латентный код $z=E(x)$ меньшей размерности, чем $x$; декодер $D$ восстанавливает $\hat x = D(z)$. Обучение минимизирует ошибку реконструкции, например $\|x-\hat x\|^2$ — квадрат евклидова расстояния между исходным входом и восстановленным.

Разбор примеров

Пример 1 (сжатие как побочный эффект узкого места). Если вход — изображение из $784$ пикселей (как MNIST), а латентный код имеет размерность всего $32$, энкодеру приходится "упаковать" информацию об изображении в вектор в $24$ раза меньшей размерности — это заставляет сеть выучить наиболее существенные, обобщённые признаки данных, отбрасывая шум и избыточность, примерно как JPEG сжимает фотографию, отбрасывая детали, малозаметные человеческому глазу.

Пример 2 (обнаружение аномалий через ошибку реконструкции). Автоэнкодер, обученный только на изображениях нормальной работы промышленного оборудования, хорошо восстанавливает похожие изображения, но плохо восстанавливает нетипичные, ранее не встречавшиеся паттерны — например, изображение с дефектом. Высокая ошибка реконструкции на новом примере — практический сигнал "это непохоже на то, что сеть видела при обучении", что используется для автоматического обнаружения брака на производстве или мошеннических транзакций в финансах, без необходимости заранее размечать примеры аномалий.

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

Почему это важно

Автоэнкодеры и GAN расширяют список решаемых задач за пределы классификации и регрессии: сжатие данных без явной разметки, обнаружение аномалий, генерация синтетических данных для дообучения других моделей, устранение шума с изображений и звука. Оба подхода в этом курсе разбираются кратко — это скорее ориентир на карте, чем полноценный учебный блок, — но важно понимать, что они существуют именно потому, что задача "восстановить или сгенерировать похожие данные" принципиально отличается от задачи "предсказать метку по входу", ради которой строились MLP, CNN, RNN и трансформеры.

Как выбрать архитектуру под тип данных

Интуиция

Главный практический вывод всего урока — это не запомнить название каждой архитектуры, а научиться задавать себе правильный вопрос при столкновении с новой задачей: "какая структура есть у моих данных, и какое архитектурное предположение эту структуру использует?" Табличные данные без пространственной или временной структуры не выигрывают от свёрток или рекуррентности — там MLP или даже классические модели вроде градиентного бустинга (урок 318) часто оказываются не хуже, а то и лучше глубоких сетей. Изображения выигрывают от локальности и трансляционной инвариантности CNN. Последовательности выигрывают от учёта порядка через рекуррентность (RNN/LSTM) или через внимание (трансформеры).

Формула

Таблица соответствия "тип данных → архитектура".

Тип данных Ключевое свойство Архитектура Урок курса
Табличные данные (признаки-столбцы) Нет пространственной/временной структуры MLP, градиентный бустинг 316–318, 326–328
Изображения Локальность, трансляционная инвариантность CNN 335–337
Текст, временные ряды (умеренная длина) Последовательный порядок, зависимость от предыдущих шагов RNN / LSTM далее в курсе
Текст, длинные последовательности Дальние зависимости, нужен параллелизм при обучении Трансформеры далее в курсе
Сжатие данных, обнаружение аномалий Нужно компактное представление входа Автоэнкодеры этот урок (кратко)
Генерация новых реалистичных данных Нужны синтетические примеры, похожие на реальные GAN этот урок (кратко)

Разбор примеров

Пример 1 (прогноз оттока клиентов банка). Данные — таблица с признаками вроде возраста, баланса счёта, числа продуктов, длительности обслуживания. Признаки не имеют пространственного или последовательного порядка (переставь столбцы местами — смысл данных не изменится). Здесь MLP — разумный выбор, но часто градиентный бустинг (урок 318) на тех же признаках работает сопоставимо или лучше, требуя меньше данных и настройки.

Пример 2 (классификация рентгеновских снимков). Данные — изображения с явной пространственной структурой: важные признаки патологии — это локальные текстуры и формы, которые могут появиться в любом месте снимка. Это учебник по учебнику пример для CNN: локальность и переиспользование весов напрямую соответствуют природе данных.

Пример 3 (прогноз показаний датчика на заводе на сутки вперёд). Данные — временной ряд: последовательность значений, где порядок принципиален, а предсказание существенно зависит от недавней истории. Здесь естественный выбор — RNN/LSTM (для не слишком длинных рядов умеренного объёма) либо трансформер (если ряд длинный, а данных достаточно много для обучения более тяжёлой архитектуры).

Почему это важно

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

Общие принципы построения глубоких сетей

Интуиция

Независимо от конкретной архитектуры, при проектировании глубокой сети инженеру приходится делать выбор между глубиной (числом слоёв) и шириной (числом нейронов или каналов в каждом слое). Теорема универсальной аппроксимации (урок 328) формально доказывает, что для приближения произвольной функции достаточно одного очень широкого слоя, но на практике несколько последовательных слоёв умеренной ширины почти всегда эффективнее по числу параметров и лучше обобщаются на новые данные. Однако у глубины есть своя цена: чем больше слоёв друг за другом, тем труднее обучить такую сеть напрямую — градиент, проходя через десятки слоёв при backpropagation, имеет свойство либо затухать до нуля, либо, реже, взрываться до огромных значений.

Формула

Skip-connection (пропускающее соединение, кратко — подробный разбор в уроке 337, ResNet). Вместо того чтобы слой вычислял выход $y=f(x)$ напрямую, часть современных глубоких архитектур вычисляет

$$y = f(x) + x$$

то есть к результату слоя (или блока слоёв) прибавляется его же необработанный вход. Такое соединение "в обход" одного или нескольких слоёв и называется skip-connection, или residual connection (остаточное соединение).

Разбор примеров

Пример 1 (почему просто "больше слоёв" не работает). Эксперименты показали, что сеть из $56$ обычных свёрточных слоёв (без skip-connections) на практике часто обучается хуже, чем сеть из $20$ таких же слоёв, причём не только на новых данных, но даже на тренировочной выборке — это контринтуитивно, ведь более глубокая сеть теоретически как минимум не хуже (она могла бы выучить те же $20$ полезных слоёв и оставить остальные $36$ как "прозрачные" преобразования). Проблема — не в переобучении, а в самой трудности оптимизации: чем больше слоёв, тем труднее градиентному спуску найти хорошие веса для всех них одновременно.

Пример 2 (как skip-connection облегчает эту задачу). Формула $y=f(x)+x$ даёт сети "лёгкий путь" по умолчанию: если слою $f$ нечего добавить полезного на определённом этапе обучения, ему достаточно выучить веса, близкие к нулю, и тогда $y\approx x$ — сеть просто пропускает вход почти без изменений. Это резко упрощает задачу оптимизации по сравнению с необходимостью с нуля выучивать точное тождественное преобразование через обычный слой. Именно эта идея легла в основу архитектуры ResNet (2015 год), которая впервые позволила стабильно обучать сети из сотен и даже свыше тысячи слоёв.

Пример 3 (skip-connections за пределами CNN). Идея пропускающих соединений оказалась настолько общей, что вышла далеко за пределы свёрточных сетей: трансформеры используют remainder-соединения вокруг каждого блока внимания и каждого полносвязного подслоя, а без них глубокие трансформеры с десятками слоёв (как в современных языковых моделях) обучить напрямую тоже крайне сложно. Это хороший пример того, что некоторые архитектурные приёмы — не специфика одной конкретной архитектуры, а общий инженерный принцип построения глубоких сетей любого типа.

Почему это важно

Выбор между глубиной и шириной и роль skip-connections — это не абстрактная теория, а прямое объяснение того, почему современные архитектуры выглядят именно так, как выглядят: десятки и сотни слоёв, пронизанные пропускающими соединениями, а не один экстремально широкий слой, который формально тоже был бы универсальным аппроксиматором. Урок 337 разберёт ResNet и эту идею куда подробнее — с конкретными числами и структурой остаточного блока; сегодня достаточно понимать, зачем эта идея вообще понадобилась.

Практика: 30 заданий

Базовые задания (1–10)

Задание 1: Для входного изображения размером $64\times64\times3$ посчитай, сколько входных чисел получит полносвязный слой, если изображение развернуть в вектор.


Задание 2: Данные — таблица с признаками клиентов (возраст, доход, число покупок). Какая архитектура из разобранных в уроке для них наиболее естественна и почему?


Задание 3: Что означает термин "переиспользование весов" (weight sharing) применительно к свёрточному слою?


Задание 4: Данные — запись показаний температуры с датчика каждый час за последний месяц. Почему обычный MLP плохо подходит для прогноза следующего значения?


Задание 5 (машинное обучение): Объясни своими словами, что такое трансляционная инвариантность применительно к CNN и почему она полезна для распознавания объектов на изображениях.


Задание 6: Какая архитектура использует механизм внимания вместо последовательной обработки данных по шагам?


Задание 7: Автоэнкодер сжимает вход размерности $256$ в латентный код размерности $16$. Во сколько раз уменьшается размерность представления?


Задание 8 (машинное обучение): В GAN участвуют две сети. Назови их и кратко опиши роль каждой.


Задание 9: Какое архитектурное решение впервые позволило стабильно обучать сети из сотен и более слоёв?


Задание 10 (машинное обучение): По таблице соответствия из урока: для какого типа данных архитектура MLP — не худший, а зачастую разумный выбор, несмотря на всё сказанное про её ограничения?

Средние задания (11–20)

Задание 11: Посчитай число параметров свёрточного слоя с $64$ фильтрами размера $5\times5$ для входа с $3$ каналами (включая смещения).


Задание 12: Тот же вопрос, что в задании 11, но для полносвязного слоя, принимающего вход того же изображения, развёрнутый в вектор, если само изображение имеет размер $32\times32\times3$, а слой содержит $64$ нейрона. Сравни результат с заданием 11.


Задание 13 (машинное обучение): Объясни разницу между тем, как RNN и трансформер учитывают связь между двумя далеко отстоящими друг от друга словами в предложении.


Задание 14: Дан набор данных: рентгеновские снимки грудной клетки с меткой "норма/патология". Какая архитектура наиболее естественна и какое архитектурное свойство напрямую соответствует природе этих данных?


Задание 15 (машинное обучение): Почему обучение RNN нельзя так же легко распараллелить по времени, как обучение трансформера?


Задание 16: Автоэнкодер обучен только на фотографиях исправных деталей на конвейере. На новую фотографию с дефектом ошибка реконструкции оказалась намного выше обычной. Объясни, почему это происходит и как это используется на практике.


Задание 17: Объясни своими словами формулу skip-connection $y=f(x)+x$ и почему она облегчает обучение очень глубоких сетей.


Задание 18 (машинное обучение): Сеть из $80$ обычных свёрточных слоёв без skip-connections на практике показывает худшее качество на тренировочных данных, чем сеть из $30$ таких же слоёв. Это переобучение или что-то другое? Обоснуй.


Задание 19: Дан датасет отзывов покупателей в виде текста произвольной длины, задача — определить тональность (позитивный/негативный). Почему MLP плохо подходит напрямую, без дополнительных трюков?


Задание 20 (машинное обучение): Объясни, почему ранние слои CNN обычно выучивают простые признаки вроде краёв, а более поздние — сложные признаки вроде частей объектов.

Продвинутые задания (21–30)

Задание 21: Сравни число параметров полносвязного слоя и свёрточного слоя для входа $100\times100\times3$: полносвязный слой с $200$ нейронами против свёрточного слоя с $200$ фильтрами размера $3\times3$ (включая смещения). Во сколько раз свёрточный слой экономнее?


Задание 22 (машинное обучение): Данные — последовательность из GPS-координат курьера за день (десятки тысяч точек), задача — предсказать следующую точку маршрута. Обоснуй, почему для такой длинной последовательности трансформер может оказаться практичнее классической RNN.


Задание 23: Автоэнкодер с энкодером $784\to128\to32$ и симметричным декодером $32\to128\to784$ (без учёта функций активации). Посчитай общее число весовых параметров (без смещений) всей сети.


Задание 24 (машинное обучение): Объясни, почему в задаче "по фотографии подписать, что на ней изображено" (image captioning) типичная архитектура комбинирует CNN и RNN (или CNN и трансформер), а не использует только одну из этих архитектур.


Задание 25: По таблице соответствия из урока определи наиболее подходящую архитектуру для задачи: "по записи ЭКГ пациента (длинный временной ряд) предсказать риск аритмии в ближайшие часы". Обоснуй выбор.


Задание 26 (машинное обучение): Модель для генерации синтетических медицинских изображений (для расширения обучающей выборки, поскольку реальных размеченных снимков редкой патологии мало) — какую архитектуру из разобранных в уроке стоит рассмотреть в первую очередь и почему не подойдёт, например, обычный CNN-классификатор?


Задание 27: Объясни, почему skip-connections из урока 334 концептуально применимы не только к CNN, но и к трансформерам, хотя это совсем разные архитектуры.


Задание 28: Дан датасет: показания вибрации промышленного станка, снятые $1000$ раз в секунду, задача — определить, начинается ли поломка, до того как она произойдёт. Данные размечены очень скудно (аномалий почти нет в истории). Предложи архитектурный подход и обоснуй.


Задание 29 (машинное обучение): Почему утверждение "трансформеры полностью заменили CNN и RNN, поэтому изучать их не нужно" — неверное упрощение? Обоснуй с опорой на материал урока.


Задание 30: Сформулируй в одном-двух предложениях главный практический вопрос, который должен задавать себе специалист по машинному обучению при выборе архитектуры для новой задачи, опираясь на материал этого урока.

Частые ошибки

  • Считают, что чем более "продвинутая" архитектура (например, трансформер), тем она лучше в любой задаче. На практике выбор архитектуры определяется структурой данных и объёмом обучающей выборки, а не тем, какая архитектура появилась позже хронологически: на малых табличных датасетах трансформер зачастую проигрывает даже простому градиентному бустингу.

  • Пытаются подавать изображение в MLP "в лоб", разворачивая его в вектор, без понимания цены такого решения. Как показано в примере с входом $224\times224\times3$, это даёт сотни миллионов параметров уже в первом слое и полностью теряет пространственную структуру изображения (задания 1, 12, 21).

  • Путают автоэнкодер и GAN, считая их взаимозаменяемыми инструментами генерации. Автоэнкодер обучается восстанавливать конкретный вход и по умолчанию не предназначен для генерации принципиально новых данных из случайного шума; GAN обучается именно генерации через состязательный процесс. У них разные цели обучения и разные типичные применения.

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

  • Игнорируют проблему обучения очень глубоких сетей, считая, что "больше слоёв всегда лучше". Без skip-connections или других специальных приёмов очень глубокая сеть может обучаться хуже, чем более мелкая, — причём проблема проявляется даже на тренировочных данных, а не только как переобучение (задание 18).

  • Выбирают архитектуру по названию из статьи или популярности, а не по структуре собственных данных. Таблица соответствия из этого урока — не догма, но полезная проверка здравого смысла: если данные табличные, экзотическая архитектура для изображений вряд ли даст преимущество.

Главное запомнить

  • MLP теоретически универсален (теорема универсальной аппроксимации, урок 328), но практически неэффективен для данных с пространственной или последовательной структурой — число параметров растёт слишком быстро, а пространственные/временные связи теряются.

  • CNN зашивает в архитектуру локальность и трансляционную инвариантность через свёртку и переиспользование весов — подходит для изображений и других данных с пространственной структурой; подробный разбор — уроки 335–337.

  • RNN зашивает в архитектуру учёт последовательного порядка через скрытое состояние, передающееся от шага к шагу; LSTM и GRU решают проблему дальних зависимостей простых RNN — подробный разбор дальше в курсе.

  • Трансформеры заменяют последовательную обработку механизмом внимания, который сопоставляет любые два элемента последовательности напрямую и параллельно для всех позиций сразу — сегодня стандарт для текста и всё чаще для других модальностей.

  • Автоэнкодеры сжимают данные в компактное латентное представление и восстанавливают их обратно — полезны для сжатия, устранения шума и обнаружения аномалий через ошибку реконструкции.

  • GAN обучает генератор и дискриминатор в состязательном процессе, что позволяет генерировать новые, реалистичные данные, похожие на обучающую выборку, но не совпадающие с ней буквально.

  • Выбор архитектуры определяется структурой данных, а не модой: табличные данные — MLP/градиентный бустинг, изображения — CNN, последовательности — RNN/LSTM или трансформеры, задачи сжатия/генерации — автоэнкодеры/GAN.

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

  • Skip-connections (остаточные соединения, $y=f(x)+x$) дают глубокой сети "путь по умолчанию" и впервые позволили стабильно обучать сети из сотен слоёв (архитектура ResNet, подробно — урок 337).

  • Разные архитектуры не конкурируют, а дополняют друг друга: реальные системы нередко комбинируют CNN, RNN/трансформеры и другие блоки под конкретную комбинацию типов данных в задаче.

Связь с темами курса

Этот урок опирается на весь предыдущий блок глубокого обучения: полносвязная сеть и теорема универсальной аппроксимации из урока 328 объясняют, почему MLP теоретически универсален, а разбор ограничений MLP сегодня показывает, где эта универсальность упирается в практическую неэффективность. Backpropagation, оптимизаторы, batch normalization и регуляризация (уроки 330–333) — это инструменты обучения, одинаково применимые ко всем архитектурам ниже, включая CNN, RNN и трансформеры, а не что-то специфичное только для MLP.

Дальше курс раскрывает каждую заявленную сегодня архитектуру подробно. Урок 335 введёт операцию свёртки и пулинга с конкретными числами, урок 336 разберёт известные CNN-архитектуры, а урок 337 — архитектуру ResNet и skip-connections, лишь анонсированные сегодня. Отдельный блок дальше в курсе подробно разберёт рекуррентные сети, LSTM и GRU, а затем — трансформеры, механизм внимания и позиционные кодировки, идеи которых сегодня были представлены только на уровне интуиции и общей формулы. Автоэнкодеры и GAN, разобранные сегодня кратко, тоже получат более глубокое раскрытие по мере продвижения курса в генеративные модели.

Интересные факты

  • Архитектура LeNet-5 Яна Лекуна (1998 год), решавшая задачу распознавания рукописных цифр на банковских чеках, использовала около $60$ тысяч параметров — на несколько порядков меньше, чем требовалось бы одному-единственному полносвязному слою для того же изображения, и на много порядков меньше, чем современные CNN с десятками миллионов параметров.

  • Механизм внимания, ставший основой трансформеров в 2017 году, изначально был предложен как дополнение к рекуррентным сетям (в 2014–2015 годах, для улучшения машинного перевода), и лишь позже исследователи поняли, что внимание можно использовать как полноценную замену рекуррентности, а не только как добавку к ней, — отсюда и название статьи "Attention Is All You Need" ("Внимание — это всё, что нужно").

  • Идея skip-connections, ключевая для ResNet (2015), концептуально перекликается с намного более старым наблюдением из теории оптимизации: чем "прямее" путь для градиента через сеть, тем проще его обучить, — сама идея пропускающих соединений в разных формах предлагалась исследователями ещё в 1990-е, но получила массовое признание только когда стало возможно обучать по-настоящему глубокие сети.

  • Vision Transformer (2020 год) показал, что архитектура, изначально придуманная для текста, при достаточном объёме обучающих данных способна конкурировать и даже превосходить специализированные CNN на классических задачах компьютерного зрения, — ещё одно напоминание, что архитектурные предположения не высечены в камне, а зависят от объёма доступных данных и вычислений.

Лайфхаки

  • Прежде чем выбирать архитектуру для новой задачи, явно сформулируй, какая структура есть у твоих данных (пространственная, последовательная, ни то ни другое) — это сразу отсекает заведомо неподходящие варианты и экономит недели экспериментов.

  • Не начинай с самой сложной и модной архитектуры "на всякий случай" — начни с простого базового решения (MLP или даже классическая модель вроде градиентного бустинга для табличных данных), чтобы иметь ориентир качества, с которым можно сравнивать более сложные архитектуры.

  • При работе с изображениями заранее прикидывай число параметров полносвязного слоя на реальном размере твоих данных (как в примерах этого урока) — это быстро покажет, оправдан ли вообще такой подход, или сразу стоит переходить к CNN.

  • Если данные последовательные, но датасет небольшой, не спеши сразу браться за трансформер — трансформеры особенно выигрывают при больших объёмах данных, а на малых выборках более простая RNN/LSTM может обучиться быстрее и устойчивее.

  • Для задач обнаружения редких событий (аномалии, брак, мошенничество) при почти полном отсутствии размеченных положительных примеров сначала рассмотри автоэнкодер, обученный только на нормальных данных, прежде чем пытаться собирать редкую размеченную выборку для обычного классификатора.

  • Держи в голове, что архитектуры комбинируются: не бойся использовать CNN для извлечения признаков из изображения и передавать их дальше в RNN или трансформер, если задача требует обработки данных разной природы одновременно.

Сегодня ты получил карту той территории, которую предстоит подробно исследовать в следующих уроках курса: от свёрточных сетей и ResNet до рекуррентных архитектур, трансформеров и генеративных моделей. Каждая архитектура на этой карте — не случайный набор технических трюков, а ответ на конкретный вопрос "какое предположение о структуре данных полезно зашить прямо в устройство сети". Держи в голове главный практический вопрос этого урока — структура данных определяет выбор архитектуры — и следующие уроки, погружающиеся в детали каждой конкретной архитектуры, будут укладываться в понятную и логичную картину, а не превратятся в разрозненный набор формул для заучивания.

Понял тему? Закрепи в боте! 🚀

Попрактикуйся на задачах и получи персональные рекомендации от AI

💪 Начать тренировку
💬 Есть вопрос? Спроси бота!