Понимание CNN

Понимание AlexNet: подробное пошаговое руководство

В этой статье мы исследуем AlexNet, CNN, разработанный Алексом Крижевским и другими в 2012 году.

Оглавление

  1. Обзор AlexNet
  2. Основы сверточной нейронной сети
  3. Обзор архитектуры AlexNet
  4. Анализ AlexNet
  5. Краткое содержание AlexNet

1. Обзор AlexNet

AlexNet - это глубокая нейронная сеть, разработанная Алексом Крижевским и другими в 2012 году. Она была разработана для классификации изображений для конкурса ImageNet LSVRC-2010, где достигла высочайших результатов [1]. Он также работал с несколькими графическими процессорами.

2. Основы сверточной нейронной сети

Сверточные нейронные сети изначально были разработаны для имитации биологических процессов человеческого зрения. В сетях использовалось несколько уровней, которые были упорядочены по-разному для формирования различных сетевых архитектур. В традиционные нейронные сети входили три типа слоев:

  1. Слои свертки
  2. Слои субдискретизации
  3. Полностью связанные слои

Слои свертки

Двумерные слои свертки использовали обучаемые ядра или фильтры для выполнения операций свертки, иногда включая необязательное обучаемое смещение для каждого ядра. Эти операции свертки включали перемещение ядер по входу с шагом, называемым шагами. Как правило, чем больше был шаг, тем больше промежутков ядра пропускали между каждой сверткой. Это привело к меньшему количеству сверток и более миниатюрному размеру вывода. Для каждого размещения данного ядра между входной секцией и ядром выполнялась операция умножения, при этом смещение суммировалось с результатом. Это создало карту характеристик, содержащую свернутый результат. Карты функций обычно пропускались через функцию активации, чтобы предоставить входные данные для следующего слоя. Размер карты функций был рассчитан как [(input_size - kernel_size + 2 × padding) / stride] + 1.

На рисунке 2 показана операция свертки, в которой задействовано 3-канальное (6 × 6) изображение, 3-канальное (3 × 3) ядро ​​и смещение (1 × 1). Операция была реализована с шагом единицы и нулевым отступом. Это означало, что ядро ​​перемещалось по каждой (3 × 3) части изображения в перекрывающемся движении слева направо, сдвигаясь на одно место между каждой операцией. Это привело к созданию 3-канальной (4 × 4) свернутой карты функций. Как правило, количество каналов ядра всегда было идентично количеству входных каналов.

Слои субдискретизации

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

На рисунке 3 показана операция субдискретизации, в которой задействовано 3-канальное (6 × 6) изображение и 3-канальное (2 × 2) ядро. Операция была реализована с шагом два и нулевым отступом. Это означало, что ядро ​​перемещалось по каждой (2 × 2) секции ввода без перекрытия, сдвигаясь на два места между каждой операцией. В результате получилась 3-канальная (3 × 3) карта функций с пониженной дискретизацией.

Полностью связанные слои

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

На рисунке 4 показана полностью связная операция, в которой задействованы вход (3 × 1), скрытый слой (4 × 1) и выход (2 × 1).

3. Обзор архитектуры AlexNet

AlexNet была классифицирована как глубокая сверточная сеть и была создана для размещения цветных изображений размером (224x224x3). Он может похвастаться в общей сложности более 62 миллионами обучаемых параметров.

11 уровней AlexNet были:

  1. Слой C1: Слой свертки (96, 11 × 11)
  2. Уровень S2: максимальный уровень объединения (3 × 3)
  3. Слой C3: слой свертки (256, 5 × 5)
  4. Уровень S4: максимальный уровень объединения (3 × 3)
  5. Слой C5: слой свертки (384, 3 × 3)
  6. Слой C6: слой свертки (384, 3 × 3)
  7. Слой C7: слой свертки (256, 3 × 3)
  8. Уровень S8: максимальный уровень объединения (3 × 3)
  9. Слой F9: полностью подключенный уровень (4096)
  10. Слой F10: полностью подключенный уровень (4096)
  11. Слой F11: полностью связанный слой (1000)

C1: Первый слой свертки

Первым слоем AlexNet был сверточный слой, который принимал тензор изображения (224 × 224 × 3) в качестве входных данных. Он выполнил операцию свертки с использованием 96 ядер (11 × 11) с шагом четыре и заполнением два. Это произвело выходной тензор (55 × 55 × 96), который затем был передан через функцию активации ReLu, а затем на следующий уровень. Слой содержал 34 944 обучаемых параметра.

S2: Первый максимальный уровень объединения

Второй уровень AlexNet был слоем max-pooling, который принимал вывод слоя C1, тензор (55 × 55 × 96) в качестве входных данных. Он выполнил операцию подвыборки с нулями, используя ядро ​​(3 × 3) с шагом два. Это произвело выходной тензор (27 × 27 × 96), который был передан следующему слою.

C3: Второй слой свертки

Третий уровень AlexNet был еще одним сверточным слоем, который принимал выходные данные слоя S2, тензор (27 × 27 × 96), в качестве входных данных. Он выполнил операцию свертки с использованием 256 (5 × 5) ядер с шагом один и заполнением два. Эта операция произвела выходной тензор (27 × 27 × 256), который затем был передан через функцию активации ReLu, а затем на следующий уровень. Слой содержал 614 656 обучаемых параметров, что в сумме на данный момент составляет 649 600 обучаемых параметров.

S4: второй максимальный уровень пула

Четвертый уровень AlexNet был уровнем максимального объединения, который принимал выходные данные уровня C3, тензор (27 × 27 × 256) в качестве входных данных. Он выполнил операцию подвыборки с нулями, используя ядро ​​(3 × 3) с шагом два, аналогично слою S2. Это произвело выходной тензор (13 × 13 × 256), который затем был передан через функцию активации ReLU, а затем на следующий уровень.

C5: Третий слой свертки

Пятый уровень AlexNet был еще одним сверточным слоем, который принимал выходные данные слоя C5, тензор (13 × 13 × 256) в качестве входных данных. Он выполнил операцию свертки с использованием 384 (3 × 3) ядер с шагом и заполнением, равными единице. Это произвело выходной тензор (13 × 13 × 384), который затем был передан через функцию активации ReLu, а затем на следующий уровень. Слой содержал 885120 обучаемых параметров, что в сумме на данный момент составляет 1534720 обучаемых параметров.

C6: Четвертый слой свертки

Шестой уровень AlexNet был еще одним сверточным слоем, который принимал выходные данные слоя C5, тензор (13 × 13 × 384) в качестве входных данных. Он выполнил ту же операцию свертки, что и слой C5, что привело к тому же выходному размеру. Выходные данные также передавались через функцию активации ReLu. Слой содержал 1 327 488 обучаемых параметров, что в сумме на данный момент составляет 2 862 208 обучаемых параметров.

C7: Пятый слой свертки

Седьмой слой AlexNet был еще одним сверточным слоем, который принимал тензор (13 × 13 × 384) из слоя C6 в качестве входных данных. Он выполнил операцию свертки с использованием 256 (3 × 3) ядер с шагом и заполнением 1. Это произвело выходной тензор (13 × 13 × 256). Выходные данные также передавались через функцию активации ReLu. Слой содержал 884 992 обучаемых параметра, что в сумме на данный момент составляет 3747 200 обучаемых параметров.

S8: Третий максимальный уровень пула

Восьмой уровень AlexNet был уровнем максимального объединения, который принимал тензор (13 × 13 × 256) из слоя C7 в качестве входных данных. Он выполнил операцию подвыборки с нулевым заполнением, используя область окна (3 × 3) с шагом два, аналогично слоям S2 и S4. Это произвело выходной тензор (6 × 6 × 256), который затем был передан через функцию активации ReLU, а затем на следующий уровень.

F9: первый полностью связанный слой

Девятый слой AlexNet был полносвязным слоем, который принимал сплющенный (6 × 6 × 256) тензор из слоя S8 в качестве входных данных. Он выполнил операцию взвешенной суммы с добавленным смещением. Это произвело выходной тензор (4096 × 1), который затем был передан через функцию активации ReLu на следующий уровень. Слой содержал 37 752 832 обучаемых параметра, что в сумме на данный момент составляет 41 500 032 обучаемых параметра.

F10: второй полностью подключенный уровень

Десятый слой AlexNet был еще одним полностью связанным слоем, который принимал тензор (4096 × 1) из слоя F9 в качестве входных данных. Он выполнил ту же операцию, что и слой F9, и создал тот же выходной тензор (4096 × 1), который затем был передан через функцию активации ReLu, а затем на следующий уровень. Слой содержал 16 781 312 обучаемых параметров, что в сумме на данный момент составляет 58 281 344 обучаемых параметра.

F11: Третий полностью связанный слой

Одиннадцатый и последний уровень сети также был полностью связанным слоем, который принимал тензор (4096 × 1) из слоя F10 в качестве входных данных. Он выполнил ту же операцию, что и слои F9 и F10, и создал выходной тензор (1000 × 1), который затем был передан через функцию активации softmax. Слой содержал 4 097 000 обучаемых параметров, что в сумме составило 62 378 344 обучаемых параметра. Выходные данные функции активации softmax содержали прогнозы сети.

4. Анализ AlexNet

AlexNet был обучен на наборе данных ImageNet LSVRC-2010 с использованием размера пакета 128, импульса 0,9 и спада веса 0,0005 [1]. В модели использовался инициализатор гауссова распределения с нулевым средним со стандартным отклонением 0,01 [1]. Выпадение также использовалось в первых двух полносвязных слоях для уменьшения переобучения. Хотя AlexNet, несомненно, был революционным алгоритмом для своего времени, для его правильной работы требовалось использование как минимум двух графических процессоров. Не многие люди могут иметь доступ к нескольким графическим процессорам.

5. Резюме AlexNet

Подводя итог, можно сделать следующие выводы о сети AlexNet:

  1. Работа с 3-канальными изображениями размером (224 × 224 × 3).
  2. Используется максимальный пул и активации ReLU при подвыборке.
  3. Использовал активации ReLu для сверток.
  4. Используемые ядра (3 × 3) для максимального объединения.
  5. Используются ядра (11 × 11), (5 × 5) или (3 × 3) для сверток.
  6. Классифицируйте изображения в один из 1000 классов.

Следующие шаги

Теперь, когда у вас есть эти знания об AlexNet, вы можете использовать готовые модели AlexNet или даже построить их самостоятельно с помощью таких библиотек, как PyTorch или Keras. Вы можете обучить AlexNet работе с базой данных ImageNet или одним из многих других крупномасштабных наборов данных классификации изображений.

использованная литература

[1] А. Крижевский, С. Илья, Г. Э. Хинтон, Классификация ImageNet с глубокими сверточными нейронными сетями (2012 г.), В достижениях в системах обработки нейронной информации 25 (NIPS 2012)