Когда использовать свертки? Почему они превосходят простые нейронные сети с прямой связью?

Cэволюционные нейронные сетевыесети (CNN или ConvNets) добились огромного успеха с 2012 года с многочисленными приложениями в компьютерном зрении, обработке естественного языка, Цифровая обработка сигналов (акустика). Можно сказать, что они представляют собой специализированный вид сетей прямого распространения, которые имеют сеточную топологию. Продемонстрируйте шаблоны, которые могут быть видны в окрестности объектов — локальность — для изображений локальность в пространстве, для звуков локальность во времени.

Они используют операцию Свертки по крайней мере в одном из своих слоев вместо матричного умножения. Несколько слов об определении свертки. Свертка — это математический способ объединения двух функций (сигналов) для формирования третьей функции (сигнала), выражающей, как форма одной изменяется другой. Я ссылаюсь на аналогию функции с сигналом — для тех, кто более знаком с этим, поскольку это самый важный метод в цифровой обработке сигналов. Он определяется как интеграл от произведения двух функций f и g, обозначаемых какf*g, после того, как одна из них перевернута и сдвинута.

а в дискретном случае

В приложениях машинного обучения первый аргумент f свертки часто называют входными данными, а второй аргумент gядром. (или фильтр, или окно), а результат часто называют картой объектов.

Визуальное объяснение операции свертки

  1. Выразите каждую каждую функцию через τ.
  2. Переверните одну из функций g(τ) →g(-τ).
  3. Добавьте смещение по времени, t, которое позволяет g(t ) скользить вдоль оси τ.
  4. Начните t с -∞ и сдвиньте его до +∞. Везде, где пересекаются две функции, найти интеграл от их произведения. Другими словами, вычислите скользящую взвешенную сумму функции f(τ), где весовой функцией является g(-τ).

Другими словами, это математическая операция, в которой каждое значение на выходе выражается как сумма значений на входе, умноженная на набор весовых коэффициентов.

Нужен ли переворот ядра? Свертка против кросс-корреляции

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

Почему CNN великие исполнители?

Свертка использует некоторые важные идеи, которые могут помочь улучшить систему машинного
обучения:

  1. Разреженные взаимодействия или разреженные соединения или разреженные веса
  2. Совместное использование параметров (веса),
  3. Эквивариантные представления и
  4. Работа с входами переменного размера.

Разреженная связность

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

Как? Они пытаются найти закономерности во входных данных. Они складывают их, чтобы сделать абстрактные понятия своими слоями свертки. Сверточный слой определяет окно, фильтр или ядро, с помощью которых они проверяют подмножество данных, а затем сканируют данные, просматривая это окно. Мы можем параметризовать окно для поиска определенных функций (например, краев в изображении). Вывод, который они производят, фокусируется исключительно на областях данных, которые демонстрируют функцию, которую он искал. Это то, что мы называем разреженными связями, разреженными взаимодействиями или разреженными весами. На самом деле это ограничивает количество активированных соединений на каждом уровне. В приведенном ниже примере ввод 5x5 с фильтром 2x2 дает уменьшенный вывод 4x4. Первый элемент карты объектов рассчитывается путем свертки входной области с фильтром, т.е.

На практике мы не определяем явно фильтры, которые будет использовать наш сверточный слой; вместо этого мы параметризуем фильтры и позволяем сети изучать лучшие фильтры для использования во время обучения. Однако мы определяем, сколько фильтров мы будем использовать на каждом уровне — гиперпараметр, который называется глубина выходного объема.

Еще одним гиперпараметром является шаг, который определяет, насколько сильно мы перемещаем фильтр по данным. Например, если шаг равен 1, то мы перемещаем окно на 1 пиксель за раз по изображению, когда нашим входом является изображение. Когда мы используем большие значения шага 2 или 3, мы разрешаем прыгать на 2 или пиксели за раз. Это значительно уменьшает размер вывода.

Последний гиперпараметр — это размер отступа нулями, когда иногда бывает удобно дополнить входной объем нулями вокруг границы.

Итак, теперь мы можем вычислить пространственный размер выходного объема как функцию размера входного объема (W), размера рецептивного поля нейронов Conv Layer (F), шага, с которым они применяются (S), и количество используемого нулевого заполнения (P) на границе. Формула для подсчета количества «подходящих» нейронов дается формулой

В нашем предыдущем примере для ввода 5x5(W=5) и фильтра 2x2(F=2) с шагом 1(S=1) и пэдом 0(P=0) мы получили бы 4x4x(количество фильтров ) для каждого сетевого узла.

Совместное использование параметров (веса)

Совместное использование параметров используется в сверточных слоях для уменьшения количества параметров в сети. Например, в первом сверточном слое допустим, что у нас есть выход 15x15x4, где 15 — размер вывода, а 4 — количество фильтров, используемых в этом слое. Для каждого выходного узла в этом слое у нас есть один и тот же фильтр, что резко снижает требования к памяти модели до размера фильтра.

Эквивариантные представления

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

Входы переменного размера

Типичный слой сверточной сети состоит из трех этапов.

На первом этапе слой выполняет несколько сверток параллельно, чтобы получить набор линейных активаций.

На втором этапе каждая линейная активация проходит через нелинейную функцию активации, например выпрямленную линейную функцию активации. Эту стадию иногда называют стадией детектора.

На третьем этапе мы используем функцию объединения для дальнейшего изменения выходных данных слоя. Функция объединения заменяет выход сети в определенном месте сводной статистикой ближайших выходов, такой как максимальное значение — наиболее часто используется, среднее значение, средневзвешенное значение или норма L2.

Объединение помогает сделать представление примерно инвариантным к небольшим переводам ввода.

Это важно для обработки входных данных переменного размера (например, изображений разного размера). Чтобы классификация изображений работала, входные данные слоя классификации должны иметь фиксированный размер. И это достигается с помощью слоя пула.

Продолжение следует во второй части. Потому что некоторые истории нужно рассказывать дольше.