Сверточная нейронная сеть
Хотя вы можете использовать модели глубокого обучения для любого типа машинного обучения, они особенно полезны для работы с данными, состоящими из больших массивов числовых значений , таких как изображения. Модели машинного обучения, которые работают с изображениями, являются основой для области искусственного интеллекта, называемой компьютерного зрения, и методы глубокого обучения отвечают за управление удивительными достижениями в этой области в последние годы.
В основе успеха глубокого обучения в этой области является своего рода модель, называемая сверточная нейронная сеть, или CNN. CNN обычно работает путем извлечения признаков из изображений, а затем передачи этих функций в полностью подключенную нейронную сеть для создания прогноза. Уровни извлечения признаков в сети влияют на уменьшение числа функций из потенциально огромного массива отдельных значений пикселей до меньшего набора функций, поддерживающего прогнозирование меток.
Слои в CNN
CNN состоит из нескольких слоев, каждая из которых выполняет определенную задачу при извлечении функций или прогнозировании меток.
Слои свертки
Одним из типов основного слоя является сверточный слой, который извлекает важные признаки в изображениях. Сверточный слой работает, применяя фильтр к изображениям. Фильтр определяется ядром, состоящим из матрицы весовых значений.
Например, фильтр 3x3 может быть определен следующим образом:
1 -1 1
-1 0 -1
1 -1 1
Изображение также представляет собой матрицу значений пикселей. Чтобы применить фильтр, наложите его на изображение и вычисляете взвешенную сумму соответствующих значений пикселей изображения под ядром фильтра. Затем результат назначается центральной ячейке эквивалентного участка 3x3 в новой матрице значений, имеющей тот же размер, что и изображение. Например, предположим, что изображение 6 x 6 имеет следующие значения пикселей:
255 255 255 255 255 255
255 255 100 255 255 255
255 100 100 100 255 255
100 100 100 100 100 255
255 255 255 255 255 255
255 255 255 255 255 255
Применение фильтра к левому верхнему участку 3x3 изображения работает так:
255 255 255 1 -1 1 (255 x 1)+(255 x -1)+(255 x 1) +
255 255 100 x -1 0 -1 = (255 x -1)+(255 x 0)+(100 x -1) + = 155
255 100 100 1 -1 1 (255 x1 )+(100 x -1)+(100 x 1)
Результат назначается соответствующему значению пикселя в новой матрице следующим образом:
? ? ? ? ? ?
? 155 ? ? ? ?
? ? ? ? ? ?
? ? ? ? ? ?
? ? ? ? ? ?
? ? ? ? ? ?
Теперь фильтр перемещается вдоль (сверток), обычно используется шаг размер 1 (поэтому перемещение по одному пикселю справа), а значение для следующего пикселя вычисляется
255 255 255 1 -1 1 (255 x 1)+(255 x -1)+(255 x 1) +
255 100 255 x -1 0 -1 = (255 x -1)+(100 x 0)+(255 x -1) + = -155
100 100 100 1 -1 1 (100 x1 )+(100 x -1)+(100 x 1)
Теперь мы можем заполнить следующее значение новой матрицы.
? ? ? ? ? ?
? 155 -155 ? ? ?
? ? ? ? ? ?
? ? ? ? ? ?
? ? ? ? ? ?
? ? ? ? ? ?
Процесс повторяется, пока не будет применен фильтр ко всем 3x3 фрагментам изображения, чтобы создать новую матрицу значений примерно так:
? ? ? ? ? ?
? 155 -155 155 -155 ?
? -155 310 -155 155 ?
? 310 155 310 0 ?
? -155 -155 -155 0 ?
? ? ? ? ? ?
Из-за размера ядра фильтра мы не можем вычислить значения для пикселей на краю; поэтому просто применяется значение (часто 0):
0 0 0 0 0 0
0 155 -155 155 -155 0
0 -155 310 -155 155 0
0 310 155 310 0 0
0 -155 -155 -155 0 0
0 0 0 0 0 0
Выходные данные свертки обычно передаются в функцию активации, которая часто является функцией исправленной линейной единицей (ReLU), которая гарантирует, что отрицательные значения имеют значение 0:
0 0 0 0 0 0
0 155 0 155 0 0
0 0 310 0 155 0
0 310 155 310 0 0
0 0 0 0 0 0
0 0 0 0 0 0
Результирующая матрица — это карта функций значений признаков, которые можно использовать для обучения модели машинного обучения.
Примечание. Значения в карте признаков могут быть больше максимального значения пикселя (255), поэтому если вы хотите визуализировать карту признаков в виде изображения, необходимо нормализовать значения признаков от 0 до 255.
Процесс свертки показан в приведенной ниже анимации.
- Изображение передается на свертной слой. В этом случае изображение является простой геометрической фигурой.
- Изображение состоит из массива пикселей со значениями от 0 до 255 (для цветовых изображений обычно это трехмерный массив со значениями красных, зеленых и синих каналов).
- Ядро фильтра обычно инициализируется случайными весами (в этом примере мы выбрали значения, чтобы выделить эффект, который фильтр может иметь по значениям пикселей, но в реальном CNN начальные весы обычно создаются из случайного распределения Gaussian). Этот фильтр будет использоваться для извлечения карты признаков из данных изображения.
- Фильтр сворачивается по изображению, вычисляя значения признаков путем суммирования весов, умноженных на соответствующие значения пикселей в каждой позиции. Функция активации исправленной линейной единицы (ReLU) применяется, чтобы гарантировать, что отрицательные значения имеют значение 0.
- После свертки карта признаков содержит извлеченные значения признаков, которые часто подчеркивают ключевые визуальные атрибуты изображения. В этом случае карта признаков выделяет края и угла треугольника на изображении.
Как правило, сверточный слой применяет несколько фильтровых ядер. Каждый фильтр создает другую карту признаков, и все карты функций передаются на следующий слой сети.
Пулинговые слои
После извлечения значений признаков из изображений, слои объединения (или понижающей дискретизации) используются для уменьшения количества значений признаков с сохранением ключевых дифференцирующих признаков, которые были извлечены.
Одним из наиболее распространенных видов пулинга является макс-пулинг, при котором фильтр применяется к изображению, и сохраняется только максимальное значение пикселя в области фильтра. Например, применение ядра подвыборки 2x2 к следующему участку изображения даст результат 155.
0 0
0 155
Обратите внимание, что эффект фильтра пулинга 2x2 заключается в уменьшении числа значений с 4 до 1.
Как и в случае с сверточных слоев, уровни пула работают путем применения фильтра по всей карте признаков. В приведенной ниже анимации показан пример максимального пула для карты изображений.
- Карта признаков, извлеченная фильтром в свертном слое, содержит массив значений признаков.
- Ядро пулинга используется для уменьшения количества значений характеристик. В этом случае размер ядра равен 2x2, поэтому он создаст массив с четвертью числа значений признаков.
- Ядро пула сворачивается по карте признаков, сохраняя только максимальное значение пикселя в каждой позиции.
Удаление слоев
Одной из самых сложных проблем в CNN является избегание переобучения, где результирующая модель хорошо работает с данными обучения, но плохо обобщается на новые данные, на которых она не была обучена. Один из способов устранения избыточности заключается в том, чтобы включить слои, в которых процесс обучения случайным образом устраняет карты функций (или "капли"). Это может показаться контринтуитивным, но это эффективный способ убедиться, что модель не учится чрезмерно зависеть от обучающих изображений.
Другие методы, которые можно использовать для снижения переобучения, включают случайный переворот, зеркальное отображение или искажение обучающих изображений для создания данных, которые варьируются между эпохами обучения.
Плоские слои
После использования сверточных и слоев подвыборки для выделения значимых признаков в изображениях результирующие карты признаков представляют собой многомерные массивы значений пикселей. Плоский слой используется для выравнивания карт признаков в вектор значений, которые можно использовать в качестве входных данных для полностью подключенного слоя.
Полностью соединённые слои
Обычно CNN заканчивается полносвязной сетью, в которой значения признаков передаются во входной слой, проходят через один или несколько скрытых слоев и создают прогнозируемые значения в выходном слое.
Базовая архитектура CNN может выглядеть примерно так:
- Изображения передаются в свертной слой. В этом случае существует два фильтра, поэтому каждое изображение создает две карты признаков.
- Карты функций передаются на слой пула, где ядро пула 2x2 уменьшает размер карт функций.
- Удаление слоя случайным образом удаляет некоторые карты функций, чтобы предотвратить переполнение.
- Слой разравнивания принимает оставшиеся массивы карт признаков и преобразует их в вектор.
- Векторные элементы передаются в полностью подключенную сеть, которая создает прогнозы. В этом случае сеть представляет собой модель классификации, которая прогнозирует вероятности для трех возможных классов изображений (треугольник, квадрат и круг).
Обучение модели CNN
Как и в любой глубокой нейронной сети, CNN обучается с помощью передачи партий обучающих данных через неё в течение нескольких эпох, корректируя веса и значения смещения на основе вычисляемых на каждой эпохе потерь. В случае CNN обратная пропаганда скорректированных весов включает в себя фильтры весов ядра, используемых в сверточных слоях, а также весы, используемые в полностью подключенных слоях.