С тех пор я понимаю сверточные нейронные сети (CNN)

искусственный интеллект

Сверточная нейронная сетьЭто то, что я все равно не мог понять, в основном потому, что название слишком «продвинутое», а различные статьи в Интернете, посвященные тому, «что такое свертка», особенно невыносимы. Прослушав онлайн-класс Ву Энда, я внезапно озарился и, наконец, понял, что это за штука и зачем. Я, вероятно, использую 6-7 статей здесь, чтобы объяснить CNN и реализовать некоторые интересные приложения. После прочтения вы должны быть в состоянии сделать что-то, что вам нравится самостоятельно.

1. Введение: обнаружение границ

Давайте рассмотрим простейший пример: «обнаружение краев» Допустим, у нас есть вот такое изображение размером 8x8:图片Число на картинке представляет собой значение позиции в пикселях. Мы знаем, что чем больше значение пикселя, тем ярче цвет, поэтому для иллюстрации мы рисуем маленький пиксель справа темнее. Разделительная линия между двумя цветами в середине графика — это граница, которую мы хотим обнаружить. Как обнаружить эту границу? Мы можем разработать такойФильтр (фильтр, также известный как ядро), размер 3×3:图片Затем мы используем этот фильтр, чтобы «покрыть» наше изображение, покрыть область размером с фильтр, умножить соответствующие элементы, а затем суммировать. После расчета области перейдите к другим областям, а затем выполните расчет, пока не будет покрыт каждый угол исходного изображения. Этот процесс"свертка".
(Нам все равно, что такое операция свертки математически, нам просто нужно знать, как она рассчитывается в CNN.)
«Движение» здесь включает в себя размер шага. Если наш размер шага равен 1, то после покрытия места мы можем переместить его на одну сетку. Легко понять, что всего можно покрыть 6 × 6 различных областей. Затем мы помещаем результаты свертки этих областей 6 × 6 в матрицу:图片А? ! Нашел что?
На этой картинке цвет посередине светлый, а цвет с обеих сторон темный, а это значит, что здесь отражается граница посередине нашей исходной картинки!Мы можем идентифицировать определенные функции на изображении, разработав специальный фильтр для его свертки с изображением., такие как границы.
Приведенный выше пример предназначен для обнаружения вертикальных границ, мы также можем спроектировать для обнаружения горизонтальных границ, просто поверните фильтр прямо сейчас на 90°. Для других функций, теоретически, пока мы работаем над тонким дизайном, мы всегда можем разработать подходящий фильтр.Наша CNN (сверточная нейронная сеть) в основном предназначена для непрерывного извлечения признаков через фильтры один за другим, от локальных признаков до общих признаков, чтобы выполнять распознавание изображений и другие функции. Тогда вот проблема, как мы можем разработать так много видов фильтров? Во-первых, мы не обязательно знаем, какие функции нам нужно определить для большого push-изображения. Во-вторых, даже если мы знаем, какие функции есть, может быть непросто разработать соответствующий фильтр. количество функций Возможно, тысячи. На самом деле, изучив нейронные сети, мы знаем, чтоЭти фильтры вообще не нуждаются в нашем дизайне, каждое число в каждом фильтре не является параметром, мы можем использовать большой объем данных дляПусть машина сама "узнает" эти параметрыЧто ж. Это принцип CNN.

Во-вторых, основная концепция CNN

1.заполнение

Из приведенного выше введения мы можем знать, что исходное изображение становится меньше после свертки фильтра от (8,8) до (6,6). Предположим, мы скатываем его снова, размер становится (4,4).В чем проблема с этим?
Есть две основные проблемы:

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



Чтобы решить эту проблему, мы можем использовать метод заполнения. Перед каждой сверткой мы сначала заполняем окружность вокруг изображения, чтобы изображение было такого размера, как оригинал после свертки, и исходное ребро также вычисляется большее количество раз.图片Например, если дополнить картинку (8,8) в (10,10), то после фильтра (3,3) это (8,8), которая не изменилась. Мы называем описанный выше метод заполнения «сохранение размера после свертки неизменным» как"Такой же"Способ,
Тот, который не заполнен ни одним пробелом, называется"Действительный"Способ. Это гиперпараметр, который нам нужно установить при использовании некоторых фреймворков.

2. размер шага

Свертка, которую мы представили ранее, имеет размер шага по умолчанию, равный 1, но на самом деле мы можем установить размер шага на другие значения.
Например, для ввода (8,8) мы используем фильтр (3,3),
Если шаг=1, вывод равен (6,6);
Если шаг=2, выход равен (3,3); (здесь пример не очень хорош, за исключением того, что он округлен в меньшую сторону)

3. объединение в пул

Это объединение предназначено для извлечения основных характеристик определенной области и уменьшения количества параметров, чтобы предотвратить переоснащение модели.
Например, следующий MaxPooling использует окно 2×2 и принимает шаг=2:图片В дополнение к MaxPooling существует также AveragePooling, который, как следует из названия, принимает среднее значение этой области.

4. Объемы для многоканальных изображений продукт (важный!)

Об этом нужно упомянуть отдельно. Цветные изображения обычно представляют собой три канала RGB, поэтому входные данные обычно имеют три измерения:(длина, ширина, канал).
Например, изображение RGB 28×28 имеет размерность (28, 28, 3). В предыдущем введении входное изображение было 2-мерным (8,8), фильтр — (3,3), а выход — также 2-мерным (6,6). Если входное изображение трехмерное (то есть добавлен еще один канал), например (8,8,3), в это время размерность нашего фильтра станет (3,3,3), егоПоследнее измерение должно совпадать с размером входного канала.
Свертка в это время,Это сумма всех элементов трех каналов, соответствующих умножению, который раньше был суммой 9 произведений, а теперь является суммой 27 произведений. Следовательно, размер выпуска не меняется. Еще (6,6). Однако в целом будемИспользуйте несколько фильтров для свертки одновременно, например, если мы используем 4 фильтра одновременно, тоРазмер вывода станет (6,6,4). Я специально нарисовал следующую картинку, чтобы показать описанный выше процесс:图片Входное изображение на рисунке (8, 8, 3), есть 4 фильтра, размер (3, 3, 3), и полученный результат (6, 6, 4).
Я думаю, что эта картинка нарисована очень четко, и она показывает, откуда взялись два ключевых числа 3 и 4, поэтому я не буду многословен (эта картинка заняла у меня не менее 40 минут). На самом деле, если мы посмотрим на CNN, используя нотацию нейронной сети, которую мы изучили ранее,

  • Наше входное изображение — это X, shape=(8,8,3);
  • 4 фильтра на самом деле являются параметрами W1 первого слоя сети Shenjin, shape=(3,3,3,4), это 4 означает, что есть 4 фильтра;
  • Наш вывод Z1, shape=(6,6,4);
  • На самом деле позже должна быть функция активации, такая как relu, после активации Z1 становится A1, shape=(6,6,4);

Итак, на предыдущем рисунке я добавил функцию активации и пометил соответствующую часть символами, вот так:图片[Лично очень жаль, что не собрана такая хорошая картинка]

3. Структура CNN

Мы уже видели, как выполняется свертка, объединение и заполнение выше.Далее давайте посмотрим на общую структуру CNN, которая содержит 3 слоя:

1. Сверточный слой (Convolutional layer — CONV)

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

2. Пулирующий слой (pooling layer — POOL)

Здесь нет параметров, которые мы могли бы изучить, потому что все параметры здесь устанавливаются нами, либо Maxpooling, либо Averagepooling.
Гиперпараметры, которые необходимо указать, включая максимальное или среднее значение, размер окна и размер шага.
Обычно мы больше используем Maxpooling, и вообще берем фильтр размером (2,2) и размером шага 2. Таким образом, после объединения длина и ширина ввода сократятся в 2 раза, а каналы останутся без изменений.

3. Полносвязный слой (FC)

Это не упоминалось ранее, потому что это парень, с которым мы лучше всего знакомы,Это наиболее распространенный слой нейронной сети, которую мы изучили ранее, представляющий собой ряд нейронов.. Поскольку каждый модуль на этом уровне связан с каждым модулем на предыдущем уровне, это называется «полным соединением».
Указываемые здесь гиперпараметры — это не что иное, как количество нейронов и функция активации. Далее, давайте небрежно взглянем на внешний вид CNN, чтобы получить представление о CNN:图片CNN выше — это то, о чем я только что подумал, хлопнув себя по лбу. Его структура может быть использована:
X→CONV(отн.)→MAXPOOL→CONV(отн.)→FC(отн.)→FC(softmax)→Y
Представлять. Здесь следует отметить, что после нескольких сверток и пулинга мыНаконец, многомерные данные будут сначала «сведены».то есть(height,width,channel)Данные сжимаются до длинывысота × ширина × каналОдномерный массив , а затем объединенный сСлой FCсоединять,После этого она ничем не отличается от обычной нейронной сети.. Как видно из рисунка, по мере углубления сети наши изображения (строго говоря, те, что посередине, нельзя назвать изображениями, но для удобства скажем так) становятся все меньше и меньше, но каналы становятся все больше и больше. . Представление на рисунке состоит в том, что площадь прямоугольного параллелепипеда, обращенного к нам, становится все меньше и меньше, а длина все больше и больше.

4. Сверточная нейронная сеть против традиционной нейронной сети

На самом деле, оглядываясь назад, CNN не сильно отличается от нейронной сети, которую мы изучали раньше.
Традиционная нейронная сеть на самом деле представляет собой стек из нескольких слоев FC..
CNN — это не что иное, как изменение FC на CONV и POOL, то есть изменение традиционного слоя, состоящего из нейронов, на слой, состоящий из фильтров. Так зачем менять этот путь? какая польза?
В частности, есть два момента:

1. Механизм совместного использования параметров (обмен параметрами)

Давайте сравним слои традиционной нейронной сети со слоем CONV, состоящим из фильтров:
Предполагая, что наше изображение имеет размер 8x8, что составляет 64 пикселя, предположим, что мы используем полносвязный слой с 9 единицами:图片Сколько параметров нам нужно для этого слоя? необходимость 64×9 = 576 параметров(Игнорируйте член смещения b пока). Потому что каждой ссылке нужен вес w. Тогда давайте посмотримЕсть также 9 единиц фильтраНа что это похоже:图片На самом деле, вам не нужно смотреть, чтобы знать.В нескольких модулях всего несколько параметров, поэтому всего 9 параметров.! Потому что для разных регионов мы все используем один и тот же фильтр, поэтому у нас один и тот же набор параметров.
Это также имеет смысл Из предыдущего объяснения мы знаем, что фильтр используется для обнаружения признаков.что одна функция может появиться более чем в одном месте в целом, например "вертикальная граница", может появляться на изображении более одного раза, а затемИспользование одного и того же фильтра не только разумно, но и должно быть.Видно, что механизм совместного использования параметров,Пусть количество параметров нашей сети сильно сократится. Таким образом, мы можем обучить более качественную модель с меньшим количеством параметров, что обычно дает вдвое больший результат при вдвое меньших усилиях и может эффективноизбегать переоснащения.
Точно так же из-за совместного использования параметров фильтра, даже если изображение подверглось определенной операции перевода, мы все равно можем идентифицировать функцию, которая называется«Инвариантность перевода». Поэтому модель более надежная.

2. Разреженность связей\

Из операции свертки видно, что любая единица в выходном изображении,Относится только к части входного изображенияГалстук:图片В традиционных нейронных сетях, поскольку все они полностью связаны, на любую единицу вывода влияют все единицы ввода. Таким образом, эффект распознавания изображения будет значительно снижен. Для сравнения, каждая область имеет свои уникальные характеристики, и мы не хотим, чтобы на нее влияли другие области.

Именно благодаря двум вышеупомянутым преимуществам CNN превосходит традиционные NN и открывает новую эру нейронных сетей.