6. Свёрточные нейронные сети
В предыдущих главах мы уже встречались с данными изображений. Каждый пример такого набора данных представляет собой двумерную сетку пикселей, а каждый пиксель может быть одним числом или набором чисел — в зависимости от того, чёрно-белое изображение или цветное. До сих пор наши способы работы с такими структурно богатыми данными были недостаточно эффективными. Мы просто разворачивали изображение в одномерный вектор, теряя пространственную структуру каждого изображения, и подавали его в полносвязный многослойный перцептрон. Поскольку порядок элементов признаков в таких сетях не меняется, наилучший результат даёт использование априорных знаний — взаимосвязи соседних пикселей. Именно так из данных изображений можно выучить эффективную модель.
В этой главе мы познакомимся со свёрточными нейронными сетями (convolutional neural network, CNN) — мощным классом нейронных сетей, созданным для обработки данных изображений. Модели на основе свёрточных архитектур доминируют в компьютерном зрении: почти все современные соревнования и коммерческие приложения, связанные с распознаванием изображений, обнаружением объектов или семантической сегментацией, опираются на этот подход.
Современные свёрточные сети возникли благодаря биологии, теории групп и серии вспомогательных экспериментов. Свёрточным сетям нужно меньше параметров, чем сетям с полносвязной архитектурой, и свёртку легко распараллелить на GPU. Поэтому свёрточные сети позволяют не только эффективно обучаться на данных и получать точные модели, но и эффективно вычислять их. Со временем практики всё чаще используют свёрточные сети. Даже в задачах с одномерными последовательностями, где обычно применяются рекуррентные сети (например, в анализе аудио, текстов и временных рядов), свёрточные сети становятся всё популярнее. Некоторые тонкие модификации свёрточных сетей позволяют применять их и к данным на графах, и в рекомендательных системах.
В начале главы мы рассмотрим базовые элементы, из которых строится любая свёрточная сеть. Это сама операция свёртки, тонкости заполнения (padding) и шага (stride), слои пулинга (pooling), которые объединяют информацию из соседних областей, использование нескольких каналов (channel) на каждом слое и подробное обсуждение современных архитектур свёрточных сетей. В конце главы мы построим полную, работающую модель LeNet — первую успешно применённую свёрточную нейронную сеть, появившуюся даже раньше современного глубокого обучения. В следующей главе мы подробно разберём реализации некоторых популярных и сравнительно новых архитектур свёрточных сетей, в которых используются большинство классических приёмов, применяемых практиками сегодня.