«Иерархическое распознавание шаблонов - вот ключ к пониманию того, как мозг, а вслед за ним и нейросети, строят картину мира» - из работ по глубокому обучению
В первой главе мы подробно разобрали, как устроены генеративные языковые модели - те самые, что лежат в основе современных чат-ботов. Но мир искусственных нейросетей гораздо шире. Прежде чем трансформеры стали главным мейнстримом, инженеры придумали множество других архитектур, каждая из которых была прорывом для своего времени и до сих пор используется в разных задачах. Более того, даже внутри семейства трансформеров есть важное разделение на энкодеры, декодеры и их комбинации. В этой главе мы совершим экскурс по основным типам архитектур, чтобы понимать, какой инструмент для какой задачи выбирать, и почему в итоге для работы с текстом победил именно трансформер.
Начнём с архитектуры, которая совершила революцию в компьютерном зрении и до сих пор остаётся основой для работы с изображениями, видео и объёмными данными. Её главная идея - не рассматривать картинку целиком, а сканировать её маленьким окошком, выделяя простые признаки и собирая из них сложные.
Использует операцию свёртки (convolution) - скользящее окно с обучаемыми фильтрами. Эффективна для данных с пространственной структурой: изображения, видео, объёмные данные. В тексте используется редко.
Представьте, что вы рассматриваете фотографию не целиком, а через маленькое окошко, которое ползает по картинке. Это и есть свертка (convolution).
Давайте разберем все части этого определения на простом примере - поиске границ на фотографии.
1. Скользящее окно (Как это движется?)
Что это
Представьте, что изображение - это поле 10x10 клеточек. Скользящее окно - это рамка размером 3x3 клеточки (как в игре «Сапёр», когда ты открываешь клетку и видишь соседей).
Как работает
Мы ставим эту рамку в левый верхний угол, смотрим на 9 пикселей внутри. Потом сдвигаем рамку на 1 шаг вправо, опять смотрим. Прошли строчку - переходим на следующую. Так окно «прочесывает» всю картинку.
2. Обучаемые фильтры (Что ищет окно?)
Внутри этого окошка есть специальная табличка с числами - фильтр (или ядро свертки). Фильтр - это детектор. В начале обучения эти числа случайные, но потом они «обучаются» искать конкретные вещи.
Фильтр на поиск горизонтальных границ
Если внутри окошка картинка резко меняется сверху (темно) вниз (светло), фильтр выдает большое число. Если картинка однородная, фильтр выдает ноль.
Фильтр на поиск углов
Реагирует на диагональные линии.
Фильтр на поиск цвета
Реагирует на красные пятна.
Практическая польза
Мы не программируем правила «ищи вертикальную линию» ручками. Нейросеть сама подбирает числа в фильтрах во время обучения, чтобы находить то, что нужно для задачи (например, для распознавания котиков).
Фильтры умеют находить линии, границы, углы. Но почему это работает именно с картинками, а не с текстом? Потому что у изображений есть важное свойство - пространственная структура.
3. Пространственная структура (Почему это важно?)
Что это значит
в данных важен порядок элементов. У пикселя есть соседи сверху, снизу, слева и справа. Если перемешать пиксели как попало, картинка рассыплется, и смысл пропадет.
Зачем это свёртке
Свёртка использует эту структуру. Она смотрит на локальные группы пикселей (близких соседей), чтобы понять простые вещи (края, текстуры), а потом из простых вещей собирает сложные (глаз, ухо, нос).
Главная практическая польза (3 вещи)
1. Экономия ресурсов (разреженность)
Обычная полносвязная нейросеть на картинку 1000x1000 пикселей с тремя цветовыми каналами потребовала бы около 3 миллионов входных нейронов и, если следующий слой тоже будет размером 1000x1000, около 3×10¹² связей - это триллионы параметров.
2. Инвариантность к положению (неважно, где объект)
Фильтр, который научился искать нос, найдет его в любом месте фотографии - слева, справа, вверху. Ему все равно, потому что он скользит везде.
3. Иерархия признаков
· Первые слои видят просто линии и точки.
· Средние слои видят комбинации линий (круги, прямоугольники) - например, колесо.
· Глубокие слои видят сложные объекты (машина, дом).
Почему в тексте используется редко?
У текста нет такой сильной пространственной структуры. Если в тексте переставить два соседних слова, смысл может измениться кардинально или остаться тем же. А если на картинке переставить два пикселя местами, это будет уже «шум». Для текста лучше подходит трансформер (внимание), который смотрит на связь слов попарно, независимо от расстояния, а не только на соседей в окошке.
Итак, свёрточные сети отлично подходят для данных с пространственной структурой, где важны локальные связи и иерархия признаков. Но текст устроен иначе: смысл зависит не столько от соседних пикселей, сколько от порядка слов и их взаимосвязей на расстоянии. Для обработки последовательностей инженеры придумали другой класс архитектур - рекуррентные нейросети. Именно они правили бал в задачах с текстом до появления трансформеров.