Коннекционизм.
ЛЕКЦИЯ 5. Расцвет 2-го поколения: CNN и RNN
- 01.11.26 г.
- 9772225665000 26022
Общие положения
В предыдущей лекции мы нарисовали карту нейросетей. Мы увидели, что архитектур много, и разложили их по осям: по задаче, по направлению сигнала, по способу обновления, по глубине. Теперь настало время спуститься с карты на землю и разобрать две ключевые архитектуры второго поколения – сверточные сети (CNN) и рекуррентные сети (RNN).
Почему именно они? Потому что именно они – наряду с MLP – составили «второе поколение» глубокого обучения и до сих пор остаются рабочими лошадками во многих областях.
CNN произвели революцию в компьютерном зрении.
RNN – в обработке последовательностей: текста, речи, временных рядов.
И хотя сегодня трансформеры постепенно вытесняют их с первых позиций, понимание CNN и RNN необходимо: во-первых, они все еще используются; во-вторых, многие идеи трансформеров выросли из их ограничений; в-третьих, это классика, без которой картина неполна.
Сразу сделаем оговорку: термин «второе поколение» не является строго научным. Обычно так называют нейросети с нелинейными функциями активации и обучением через Backpropagation – то есть период с 1980-х по 2010-е. Третье поколение – спайковые сети (SNN), о которых мы поговорим позже. Но границы поколений размыты, и разные исследователи проводят их по-разному.
Часть 1. Сверточные нейронные сети (CNN)
1.1. Биологическая инспирация
В конце 1950-х – 1960-е годы нейрофизиологи Д.Хьюбел и Т.Визел исследовали зрительную кору мозга кошек и обезьян. Они обнаружили удивительную вещь: нейроны в зрительной коре реагируют не на отдельные пиксели, а на ориентированные линии и края. Одни клетки активировались, когда животному показывали вертикальную линию, другие – горизонтальную, третьи – линию под углом.
Это открытие натолкнуло исследователей на мысль: зрительная система не обрабатывает изображение пиксель за пикселем. Она выделяет локальные признаки – края, линии, углы – и только потом собирает из них более сложные образы. Именно эта идея легла в основу сверточных сетей.
1.2. Свертка: как это работает
Представьте, что вы смотрите на изображение. Вместо того чтобы анализировать каждый пиксель отдельно, сверточная сеть берет небольшое окно (например, 3×3 пикселя) и «скользит» им по всему изображению. На каждом шаге она умножает пиксели в окне на веса фильтра (ядра) и складывает результаты.
Это и есть свертка. Фильтр – это небольшой набор весов, который учится выделять определенный признак. В процессе обучения сеть сама подбирает эти веса так, чтобы фильтры реагировали на нужные признаки: края, текстуры, углы, а на более глубоких слоях – части объектов и целые объекты.
Аналогия. Представьте, что вы ищете на фотографии вертикальные линии. У вас есть трафарет (фильтр) 3×3, в котором веса подобраны так, чтобы реагировать на вертикальные переходы яркости. Вы прикладываете трафарет к каждому участку изображения. Там, где есть вертикальная линия, сумма произведений будет большой – фильтр «сработает». Там, где линии нет, – маленькой.
1.3. Функция активации ReLU
После свертки к результату применяется функция активации. Чаще всего – ReLU (Rectified Linear Unit): если значение положительное – оставляем как есть, если отрицательное – заменяем на ноль.
Зачем это нужно? ReLU вносит нелинейность. Без нее сеть оставалась бы линейной и не могла бы моделировать сложные зависимости. Кроме того, ReLU проста в вычислении и хорошо работает с градиентами – она смягчает проблему затухающих градиентов по сравнению с Sigmoid и Tanh.
ReLU особенно важна для CNN по нескольким причинам. Во-первых, она не требует вычисления экспонент (в отличие от Sigmoid), что критично при обработке больших изображений. Во-вторых, она сохраняет градиент для положительных значений, что позволяет обучать глубокие сети. В-третьих, она создает разреженные активации: многие нейроны выдают ноль, что экономит вычисления.
1.4. Pooling (подвыборка)
После свертки и активации идет pooling – операция, которая уменьшает размерность изображения. Самый распространенный тип – max pooling: берем окно (например, 2×2) и оставляем только максимальное значение.
Зачем это нужно? Во-первых, это уменьшает количество параметров и вычислений. Во-вторых, обеспечивает инвариантность к небольшим смещениям: если объект сдвинется на пару пикселей, max pooling все равно выделит тот же признак. Это важно для распознавания: кошка остается кошкой, даже если она чуть сместилась в кадре.
Аналогия. Представьте, что вы смотрите на изображение через уменьшающее стекло. Детали теряются, но общая структура сохраняется. Pooling делает то же самое: он «огрубляет» изображение, но сохраняет самое важное.
1.5. Полносвязные слои в конце
После нескольких слоев свертки и pooling полученные признаки (карты признаков) выравниваются в вектор и подаются на полносвязные слои. Они выполняют окончательную классификацию: например, определяют, что на изображении – кошка, собака или машина.
В современных архитектурах полносвязные слои часто заменяют глобальным усреднением (global average pooling) или дополняют им: берется среднее значение каждой карты признаков, и получается компактный вектор. Это еще сильнее сокращает число параметров и снижает риск переобучения.
1.6. Ключевые архитектуры CNN
За историю CNN появилось несколько знаковых архитектур, каждая из клоторых внесла свой вклад:
– LeNet (1989, усовершенствована в 1998). Создана Я.ЛеКуном для распознавания рукописных цифр. Использовалась в банках для чтения чеков. Это первая CNN, нашедшая широкое практическое применение,
- AlexNet (2012). 8 слоев, обучена на GPU. Победила на ImageNet, снизив ошибку top-5 с 26% до 15%. Именно после нее началась эпоха глубокого обучения,
- VGG (2014). Семейство архитектур, самая известная версия – VGG-19 (19 слоев с весами). Показала, что глубина важна: чем больше слоев, тем лучше результат (до определенного предела),
- GoogLeNet / Inception (2014). 22 слоя. Использовала Inception-модули – блоки, которые параллельно применяют фильтры разных размеров и объединяют результаты,
- ResNet (2015). Семейство архитектур глубиной от 18 до 152 слоев; самая известная версия – ResNet-152. Ключевое новшество – остаточные связи (skip-connections): вход слоя добавляется к его выходу. Это позволяет градиенту «перепрыгивать» через слои и бороться с затуханием. ResNet позволила обучать очень глубокие сети,
- YOLO (2016). Архитектура для детекции объектов в реальном времени. Позволяет не только классифицировать изображение, но и находить на нем объекты с ограничивающими рамками.
Обратите внимание на общую тенденцию: все эти архитектуры увеличивали глубину – от 8 слоев у AlexNet до 152 у ResNet. Это согласуется с идеей Scaling Laws: увеличение размера модели (в том числе за счет глубины) при наличии достаточных данных и вычислений обычно улучшает результат (до определенного предела). Именно глубина позволила CNN решать все более сложные задачи.
Отдельно стоит упомянуть batch normalization (нормализацию по батчу), появившуюся в 2015 году. Она стабилизирует обучение, позволяет использовать более высокие скорости обучения и стала стандартом для глубоких CNN. Без нее обучение очень глубоких сетей вроде ResNet было бы значительно сложнее.
Важным расширением идеи свертки стали dilated (atrous) convolutions – свертки с расширением. Они позволяют увеличить рецептивное поле (область, которую «видит» фильтр) без увеличения числа параметров. Это используется в архитектурах для обработки аудио и временных рядов, например в WaveNet и Temporal Convolutional Networks (TCN).
1.7. Почему CNN работают
CNN эффективны для изображений по трем причинам:
– локальность. Фильтр смотрит на небольшой участок изображения. Это соответствует тому, как устроено зрение: мы не анализируем все изображение сразу, а выделяем локальные признаки,
– разделение весов. Один и тот же фильтр применяется ко всему изображению. Это резко сокращает число параметров: вместо того чтобы учить отдельные веса для каждого пикселя, мы учим один фильтр,
– иерархия. Слои CNN строят иерархию признаков: от простых (края, линии) к сложным (части объектов, целые объекты).
На практике часто используют transfer learning (перенос обучения): берут CNN, предобученную на ImageNet, и дообучают на своей задаче. Это позволяет достичь хороших результатов даже при малом объеме данных – ведь сеть уже научилась выделять общие признаки (края, текстуры, формы).
CNN используются не только для классификации. Они применяются для детекции объектов (YOLO), сегментации (U-Net), генерации изображений (в составе GAN и диффузионных моделей). Кроме того, одномерные свертки успешно применяются и к последовательностям: к тексту (Kim, 2014, «Convolutional Neural Networks for Sentence Classification»), к аудио (WaveNet), к временным рядам (TCN). Это показывает, что CNN – не только для изображений. Мы поговорим об этом в Лекциях 11–12.
Часть 2. Рекуррентные нейронные сети (RNN)
2.1. Принцип: память и петли
CNN работают с изображениями – статичными данными. Но многие задачи связаны с последовательностями: текст, речь, временные ряды, музыка. Здесь важен порядок: «собака укусила человека» и «человек укусил собаку» – разные предложения, хотя слова одни и те же.
Для последовательностей нужна память. Сеть должна помнить, что было на предыдущем шаге, чтобы правильно обработать текущий. Именно это и делают рекуррентные сети (RNN).
Это работает так. В RNN есть петля: выход на предыдущем шаге подается обратно на вход (вместе с новым входом). Это дает сети состояние, которое обновляется на каждом шаге. Сеть как бы «читает» последовательность слово за словом, сохраняя контекст.
Аналогия. Это как чтение книги: вы читаете слово за словом, но помните предыдущие слова и понимаете смысл предложения. Если бы вы забывали все, кроме текущего слова, вы не смогли бы понять текст. RNN делает то же самое: она хранит «краткую память» о прошлом.
2.2. Проблема затухающих градиентов
Но у простых RNN есть проблема. При обучении через Backpropagation Through Time (BPTT) градиенты перемножаются на каждом шаге. Если веса меньше 1, градиенты становятся очень маленькими – сеть забывает далекий контекст. Если веса больше 1 – градиенты взрываются, и обучение становится нестабильным.
Пояснение. Представьте, что вы умножаете число на 0,5 сто раз подряд. Результат стремится к нулю. Именно это происходит с градиентами в RNN: на каждом шаге они умножаются на веса, и если веса меньше 1, к далеким шагам градиент практически исчезает. Сеть «не видит» ошибку, которая приходит из далекого прошлого, и не может ее исправить.
Пример. Представьте предложение: «Я вырос в Париже, но потом переехал в Лондон, и теперь я говорю по-французски с акцентом, потому что я родился в …». Чтобы понять, какое слово должно быть в конце, нужно помнить, что было в начале. Простая RNN это «забывает».
Поэтому при обучении RNN часто используют технику teacher forcing: на каждом шаге сети подается не ее собственное предсказание с предыдущего шага, а правильный предыдущий токен из обучающих данных. Это ускоряет и стабилизирует обучение. Представьте, что вы учите ребенка читать: вы не даете ему продолжить с его ошибкой, а поправляете – «нет, здесь было слово „Париж“». Teacher forcing делает то же самое для сети.
2.3. LSTM: вентили для памяти
В 1997 году З.Хохрайтер и Ю.Шмидхубер предложили LSTM (Long Short-Term Memory) – архитектуру, которая решает проблему затухающих градиентов.
Ключевая идея – вентили (gates).
LSTM имеет три вентиля:
- входной вентиль: решает, что из нового входа нужно запомнить,
- забывающий (исключающий) вентиль: решает, что из старой памяти нужно забыть,
- выходной вентиль: решает, что выдать на выход.
Это позволяет сети выборочно сохранять информацию на сотни шагов. Она может «запомнить» важное и «забыть» неважное.
Как вентили решают проблему затухающих градиентов? В обычной RNN градиент на каждом шаге умножается на веса и на производную функции активации. Если эти множители меньше 1, градиент затухает. В LSTM специальная «клеточная» память (cell state) работает как информационная магистраль: градиент может проходить через нее почти без изменений, если вентили это позволяют. Это и есть решение: сеть может сохранять информацию на сотни шагов, и градиент не затухает так быстро.
Аналогия. Представьте, что вы ведете дневник. Вы не записываете все подряд – вы выбираете, что важно (входной вентиль), что можно забыть (забывающий вентиль) и что показать другим (выходной вентиль). LSTM делает то же самое со своей памятью.
2.4. GRU: упрощенная версия
В 2014 году К.Чо и его коллеги предложили GRU (Gated Recurrent Unit) – упрощенную версию LSTM. В GRU два вентиля вместо трех: обновления и сброса. Это делает ее быстрее и проще, но часто не менее эффективной.
2.5. Применение RNN
RNN (и особенно LSTM/GRU) широко использовались для
- машинного перевода (до трансформеров): последовательность на одном языке → последовательность на другом,
- генерации текста: предсказание следующего слова на основе предыдущих,
- распознавания речи: аудиопоследовательность → текст,
- прогнозирования временных рядов: предсказание цен, погоды, трафика,
- анализа тональности: классификация текста с учетом контекста.
Существуют и другие варианты RNN:
- BiRNN (двунаправленная RNN) читает последовательность в двух направлениях – слева направо и справа налево – и объединяет результаты. Это позволяет учитывать контекст с обеих сторон: например, при переводе слово может зависеть не только от предыдущих, но и от последующих слов,
- многослойные RNN (stacked RNN) состоят из нескольких слоев RNN, каждый из которых передает свое состояние следующему,
- модели вроде Transformer-XL сочетают идеи внимания и сегментной рекуррентности.
Мы не будем разбирать их подробно, но стоит знать, что семейство рекуррентных подходов шире, чем просто «простая RNN, LSTM и GRU».
2.6. Почему RNN уступили место трансформерам
Несмотря на свою мощность, RNN имеют фундаментальное ограничение: последовательная обработка. Сеть не может обработать все слова одновременно – она должна идти слово за словом. Это делает обучение медленным и плохо параллелизуемым.
Трансформеры (о них – позже) решили эту проблему: механизм внимания позволяет модели «смотреть» на все токены одновременно. Именно поэтому RNN постепенно уступили место трансформерам в задачах обработки языка.
Но RNN не исчезли. Они все еще используются в задачах, где важна потоковая обработка (например, распознавание речи в реальном времени) или где данные имеют явную временную структуру.
Важным шагом к трансформерам стало появление механизма внимания в RNN (Bahdanau et al., 2014). В архитектуре seq2seq (sequence-to-sequence) энкодер сжимал всю входную последовательность в одно состояние, и декодер должен был полагаться только на него. Внимание позволило декодеру «смотреть» на разные части входной последовательности на каждом шаге – это улучшило перевод и стало идейной основой для Self-Attention в трансформерах.
3. Сравнение CNN и RNN
Сравним две архитектуры по ключевым критериям.
По типу данных. CNN особенно хорошо работают с изображениями и видео – то есть с пространственными данными. RNN предназначены для последовательностей: текст, речь, временные ряды. При этом граница не абсолютна: одномерные свертки успешно применяются и к последовательностям.
По ключевой идее. В основе CNN лежит свертка – локальные фильтры, которые скользят по данным. В основе RNN лежит память – петли и состояние, которые сохраняют информацию о прошлом.
По параллелизации и скорости. CNN хорошо параллелизуются: все фильтры можно применять одновременно. Это ускоряет и обучение, и инференс. RNN плохо параллелизуются: они должны обрабатывать последовательность шаг за шагом. Обучение RNN медленнее, а инференс – последовательный.
По проблемам. Как и большинство глубоких сетей, CNN требуют больших объемов данных. Они относительно устойчивы к небольшим сдвигам, но чувствительны к масштабу объектов, если данные не подготовлены специально (например, без аугментации). RNN страдают от затухающих градиентов (частично решены в LSTM/GRU, но не полностью).
По применению. CNN широко используются для распознавания лиц, анализа медицинских снимков, в автопилотах, для детекции и сегментации. RNN – для перевода, генерации текста, речи, временных рядов (хотя в обработке языка их во многом вытеснили трансформеры).
Когда что выбирать.
Если данные имеют явную пространственную структуру (изображения, видеокадры) – чаще выбирают CNN.
Если данные – последовательности и важен порядок во времени – исторически выбирали RNN, а сегодня чаще трансформеры.
Классификация изображений – типичная задача для CNN.
Моделирование и генерация последовательностей – задача, в которой раньше доминировали RNN, а сейчас – трансформеры.
Надо помнить, что выбор зависит не только от типа данных, но и от требований к скорости, параллелизму и длине контекста.
Важно то, что CNN и RNN не исключают друг друга. Существуют гибридные архитектуры: например, CNN + LSTM для анализа видео (CNN извлекает пространственные признаки из каждого кадра, LSTM обрабатывает временную последовательность). Или CNN + RNN для генерации описаний к изображениям (image captioning). Мы еще встретим такие комбинации в курсе.
И еще одно важное замечание. CNN – не только для изображений. Одномерные свертки успешно применяются к тексту, аудио и временным рядам. Граница между CNN и RNN не абсолютна: выбор архитектуры определяется не только типом данных, но и тем, какие свойства задачи важнее – пространственная локальность или временная последовательность.
4. Пример из жизни
Представьте, что вы работаете в медицинской лаборатории и хотите автоматически анализировать рентгеновские снимки.
Как это сделать с помощью CNN.
а. Вы собираете базу снимков, размеченных врачами: «норма», «пневмония», «опухоль».
б. Обучаете CNN на этих снимках. Сеть учится выделять признаки: затемнения, границы, текстуры.
в. Теперь подаете ей новый снимок. Сеть выдает вероятность каждого класса. Врач видит не только ответ, но и карту активации (Grad-CAM) – на какие области снимка сеть обратила внимание.
Grad-CAM – это метод, который показывает, на какие области изображения сеть обратила внимание при классификации. Врач может увидеть, что сеть «смотрела» на затемнение в легком, а не на край снимка. Это важно для доверия: врач видит не просто «ответ», а «почему».
Почему это работает. CNN учится иерархии признаков: от простых (края, линии) к сложным (патологические образования). Она не «понимает» медицину, но она умеет находить паттерны, которые коррелируют с диагнозом.
А теперь представьте, что вы анализируете ЭКГ – последовательность сигналов во времени. Здесь уже нужна RNN (или LSTM): она умеет учитывать временную динамику, а не только статичный снимок.
5. Заключение
Мы разобрали две ключевые архитектуры второго поколения – CNN и RNN. CNN научились «видеть»: выделять локальные признаки, строить иерархии, распознавать объекты. RNN научились «помнить»: обрабатывать последовательности, учитывать контекст, генерировать текст.
Мы увидели, что у каждой архитектуры есть свои сильные и слабые стороны. CNN особенно сильны на пространственных данных, RNN – на последовательных. Но у RNN есть фундаментальное ограничение – последовательная обработка, которая мешает параллелизации. Именно это ограничение и стало одной из главных причин появления трансформеров.