На этом шаге мы рассмотрим, что представляет из себя эта операция.
Основное отличие полносвязного слоя от сверточного заключается в следующем: слои Dense изучают глобальные шаблоны в пространстве входных признаков (например, в случае с цифрами из набора MNIST это шаблоны, вовлекающие все пиксели), тогда как сверточные слои изучают локальные шаблоны (рисунок 1): в случае с изображениями - шаблоны в небольших двумерных окнах во входных данных.
Рис.1. Изображения можно разбить на локальные шаблоны, такие как края, текстуры и т. д.
В предыдущем примере все такие окна имели размеры 3 × 3 .
Эта ключевая характеристика наделяет сверточные нейронные сети двумя важными свойствами:
Рис.2. Видимый мир формируется пространственными иерархиями видимых модулей: элементарные линии или текстуры объединяются в простые объекты, такие как глаза или уши, которые, в свою очередь, объединяются в понятия еще более высокого уровня, такие как "кошка"
Свертка применяется к трехмерным тензорам, называемым картами признаков, с двумя пространственными осями (высотой и шириной), а также с осью глубины (или осью каналов). Для изображений в формате RGB размерность оси глубины равна 3, потому что имеется три канала цвета: красный (red), зеленый (green) и синий (blue). Для черно-белых изображений, как в наборе MNIST, ось глубины имеет размерность 1 (оттенки серого). Операция свертывания извлекает шаблоны из своей входной карты признаков и применяет одинаковые преобразования ко всем шаблонам, производя выходную карту признаков. Выходная карта признаков также является трехмерным тензором: у нее есть ширина и высота. Ее глубина может иметь любую размерность, потому что выходная глубина является параметром слоя, и разные каналы на этой оси глубины больше не соответствуют конкретным цветам, как во входных данных в формате RGB; скорее, они соответствуют фильтрам. Фильтры представляют конкретные аспекты входных данных: на верхнем уровне, например, фильтр может соответствовать понятию "присутствие лица на входе".
В примере MNIST первый сверточный слой принимает карту признаков размером (28, 28, 1) и выводит карту признаков размером (26, 26, 32): он вычисляет 32 фильтра по входным данным. Каждый из этих 32 выходных каналов содержит сетку 26 × 26 значений - карту ответов фильтра на входных данных, определяющую ответ этого шаблона фильтра для разных участков входных данных (рисунок 3).
Рис.3. Понятие карты ответов: двумерная карта присутствия шаблона на разных участках входных данных
Вот что означает термин "карта признаков": каждое измерение на оси глубины - это признак (или фильтр), а двумерный тензор output[:, :, n] - это двумерная пространственная карта ответов фильтра на входных данных.
Свертки определяются двумя ключевыми параметрами:
В Keras эти параметры передаются в слои Conv2D в первых аргументах:
Conv2D(выходная_глубина, (высота_окна, ширина_окна)) .
Свертка работает методом скользящего окна: она двигает окно размером 3 × 3 или 5 × 5 по трехмерной входной карте признаков, останавливается в каждой возможной позиции и извлекает трехмерный шаблон окружающих признаков (с формой (высота_окна, ширина_окна, глубина_входа)). Каждый такой трехмерный шаблон затем преобразуется (путем умножения тензора на матрицу весов, получаемую в ходе обучения, которая называется ядром свертки) в одномерный вектор с формой (выходная глубина,). Все эти векторы затем собираются в трехмерную выходную карту с формой (высота, ширина, выходная глубина). Каждое пространственное местоположение в выходной карте признаков соответствует тому же местоположению во входной карте признаков (например, правый нижний угол выхода содержит информацию о правом нижнем угле входа). Например, для окна 3 × 3 вектор output[i, j, :] соответствует трехмерному шаблону input[i - 1:i + 2, j - 1:j + 2, :]. Полный процесс изображен на рисунке 4.
Рис.4. Принцип действия свертки
Обратите внимание, что выходные ширина и высота могут отличаться от входных. На то есть две причины:
Рассмотрим подробнее эти понятия.
На следующем шаге мы рассмотрим эффекты границ и дополнение.