Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

6.1 От полносвязных слоёв к свёрткам

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

Возьмём для примера задачу классификации кошек и собак из предыдущих глав. Предположим, что у нас есть достаточно большой набор размеченных фотографий, каждая из которых содержит миллионы пикселей. Значит, каждый входной пример имеет миллион измерений. Даже если уменьшить размер скрытого слоя до 1000, полносвязный слой будет содержать параметров. Обучить такую модель практически невозможно: для этого понадобились бы огромные вычислительные ресурсы на GPU, опыт распределённого обучения и незаурядное терпение.

Некоторые читатели могут возразить, что миллионного разрешения, пожалуй, и не нужно. Однако даже при разрешении в сто тысяч пикселей скрытого слоя из 1000 нейронов может не хватить, чтобы выучить хорошие признаки изображения, и в реальных системах нам всё равно понадобятся миллиарды параметров. Кроме того, чтобы подобрать такое количество параметров, требуется огромный объём данных. Тем не менее люди и машины сегодня хорошо различают кошек и собак. Это потому, что в изображениях уже есть богатая структура, которую могут использовать и человек, и модель. Свёрточные нейронные сети (convolutional neural networks, CNN) — это изобретательный способ использовать известные структуры природных изображений в машинном обучении.

6.1.1 Инвариантность

Представим, что мы хотим найти некоторый объект на картинке. Разумно предположить, что способ поиска не должен зависеть от того, где находится объект. В идеале наша система должна опираться на здравый смысл: свинья обычно не летает по небу, а самолёт обычно не плавает в воде. Но если свинья окажется в верхней части картинки, мы всё равно должны её узнать.

Вдохновение можно почерпнуть из детской игры «Где Вальдо?» (рис. 6.1.1). В ней много запутанных сцен, полных движения, а Вальдо обычно прячется в маловероятных местах, и задача читателя — найти его. Внешность Вальдо очень приметна, но в пёстрой сцене найти его всё равно непросто, как иголку в стоге сена. Однако то, как выглядит Вальдо, не зависит от того, где он спрятан, поэтому можно просканировать изображение «детектором Вальдо». Такой детектор разбивает изображение на области и оценивает для каждой из них вероятность того, что там находится Вальдо. Свёрточные нейронные сети как раз и систематизируют эту идею — пространственную инвариантность (spatial invariance), — и на её основе позволяют выучивать полезные представления, используя меньше параметров.

Рис. 6.1.1. Сцена из игры «Где Вальдо?». Иллюстрация стороннего издания не включена в перевод

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

  1. Инвариантность к сдвигу (translation invariance): какое бы место изображения ни занимал объект, первые слои сети должны одинаково реагировать на одну и ту же область изображения. Это и есть инвариантность к сдвигу.
  2. Локальность (locality): первые слои сети должны опираться только на небольшие локальные области входного изображения и не придавать излишнего значения связям между далёкими областями. Это и есть принцип локальности. В итоге эти локальные признаки можно объединить и делать предсказание для всего изображения.

Посмотрим, как эти принципы переводятся на язык математики.

6.1.2 Ограничения многослойного перцептрона

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

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

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

6.1.2.1 Инвариантность к сдвигу

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

Это и есть свёртка (convolution). Мы взвешиваем пиксели в окрестности позиции с коэффициентами и получаем . Заметьте, что коэффициентов гораздо меньше, чем , ведь первые больше не зависят от положения в изображении. Это большой шаг вперёд!

6.1.2.2 Локальность

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

Проще говоря, формула (6.1.1) задаёт свёрточный слой (convolutional layer), а свёрточные нейронные сети — особый класс нейронных сетей, содержащих свёрточные слои. В сообществе глубокого обучения называют ядром свёртки (convolution kernel) или фильтром (filter), а иногда просто весами этого свёрточного слоя; обычно эти веса — обучаемые параметры. Когда локальная область обработки изображения мала, разница между обучением свёрточной сети и многослойного перцептрона может быть огромной: если раньше для описания одного слоя многослойного перцептрона могли понадобиться миллиарды параметров, то свёрточной сети часто хватает нескольких сотен параметров, и при этом не нужно менять размерность входа или скрытого представления.

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

6.1.3 Свёртка

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

Иными словами, свёртка измеряет перекрытие и , когда одну из функций «переворачивают» и сдвигают на . В дискретном случае интеграл превращается в сумму. Например, для векторов из бесконечномерного пространства с индексами из , квадрат которых суммируем, получаем следующее определение:

Для двумерных тензоров суммирование ведётся по соответствующим индексам: для и для :

Это похоже на формулу (6.1.1), но есть одно существенное отличие: вместо здесь используются разности индексов. Однако это различие поверхностно, ведь мы всегда можем согласовать знаки между формулами (6.1.1) и (6.1.2). Исходное определение из формулы (6.1.1) точнее описывает взаимную корреляцию (cross-correlation), о которой пойдёт речь в следующем разделе.

6.1.4 Вернёмся к игре «Где Вальдо?»

Вернёмся к игре «Где Вальдо?» и посмотрим, как она выглядит на самом деле. Свёрточный слой по фильтру выбирает окно заданного размера и взвешенно обрабатывает изображение, как показано на рис. 6.1.2. Наша цель — выучить модель, которая находила бы места, где Вальдо скорее всего прячется.

Рис. 6.1.2. Поиск Вальдо. Иллюстрация стороннего издания не включена в перевод

6.1.4.1 Каналы

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

Кроме того, поскольку входное изображение трёхмерно, скрытое представление также целесообразно хранить в виде трёхмерного тензора. Иными словами, для каждой пространственной позиции мы хотим иметь не одно скрытое представление, а набор. Такой набор можно представить как стопку двумерных сеток, наложенных друг на друга. Поэтому скрытое представление удобно считать набором каналов (channel), каждый из которых — двумерный тензор. Эти каналы иногда называют картами признаков (feature maps), поскольку каждый из них передаёт последующим слоям набор пространственно организованных признаков. Интуитивно можно представить, что в нижних слоях, близких ко входу, одни каналы выделяют края, а другие — текстуры.

Чтобы поддерживать несколько каналов во входе и скрытом представлении , добавим в четвёртую координату, то есть . Таким образом,

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

Однако многие вопросы ещё остаются открытыми. Например, можно ли ожидать появления Вальдо в любом месте изображения? Как эффективно вычислять выходной слой? Как выбрать подходящую функцию активации? Какие решения при проектировании сети помогут обучить эффективную сеть? Мы обсудим эти вопросы в других частях этой главы.

Резюме

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

Упражнения

  1. Предположим, что свёрточный слой (6.1.1) имеет локальную область . Докажите, что в этом случае ядро свёртки для каждой группы каналов независимо реализует полносвязный слой.
  2. Почему инвариантность к сдвигу тоже может оказаться плохой идеей?
  3. Над какими вопросами нам нужно задуматься, когда мы получаем скрытые представления для пикселей на границах изображения?
  4. Опишите похожую архитектуру свёрточного слоя для аудиоданных.
  5. Подходят ли свёрточные слои и для текстовых данных? Почему?
  6. Докажите, что в формуле (6.1.2) выполняется .

Обсуждение