Сверточные нейронные сети — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
Строка 15: Строка 15:
 
Сверточный слой нейронной сети представляет из себя применение операции свертки к выходам с предыдущего слоя, где веса ядра свертки являются обучаемыми параметрами. Еще один обучаемый вес используется в качестве константного сдвига (англ. bias). При этом есть несколько важных деталей:
 
Сверточный слой нейронной сети представляет из себя применение операции свертки к выходам с предыдущего слоя, где веса ядра свертки являются обучаемыми параметрами. Еще один обучаемый вес используется в качестве константного сдвига (англ. bias). При этом есть несколько важных деталей:
  
Ядер свертки на каждом слое может быть несколько и они могут быть трехмерными. Например, если мы хотим как-то усреднить на первом слое информацию о трёх цветовых каналах изображения, то мы можем поместить на первый слой свертку с ядром размерности <math>3\times w \times h</math>. На выходе такого слоя будет уже одно изображение (вместо трёх). Также можно иметь несколько сверток на одном слое нейронной сети, например, если на входе один слой изображения и 6 сверток, то на выходе будет 6 слоев изображения.
+
* В одном сверточном слое может быть несколько сверток. В этом случае для каждой свертки на выходе получится своё изображение. Например, если вход имел размерность <math>w\times h</math>, а в слое было <math>n</math> сверток с ядром размерности <math>k_x\times k_y</math>, то выход будет иметь размерность <math>n\times(w - k_x + 1)\times(h - k_y + 1)</math>.
 +
 
 +
* Ядра свертки могут быть трёхмерными. Свертка трехмерного входа с трехмерным ядром происходит аналогично, просто скалярное произведение считается еще и по всем слоям изображения. Например, для усреднения информации о цветах исходного изображения, на первом слое можно использовать свертку размерности <math>3\times w \times h</math>. На выходе такого слоя будет уже одно изображение (вместо трёх).
 +
 
 +
* Можно заметить, что применение операции свертки уменьшает изображение. Также пиксели, которые находятся на границе изображения учавствуют в меньшем количестве сверток, чем внутренние. В связи с этим в сверточных слоях используется дополнение изображения (англ. padding). Выходы с предыдущего слоя дополняются пикселями так, чтобы после свертки сохранился размер изображения (распространенной практикой является дополнять изображение нулями (англ. zero padding), но возможны и другие подходы). Такие свертки называют ''одинаковыми'' (англ. same convolution), а свертки без дополнения изображения называются ''правильными'' (англ. valid convolution).
 +
 
 +
* Еще одним параметром сверточного слоя является ''сдвиг'' (англ. stride). Хоть обычно свертка применяется подряд для каждого пикселя, иногда используется сдвиг, отличный от единицы {{---}} скалярное произведение считается не со всеми возможными положениями ядра, а только с положениями, кратными некоторому сдвигу <math>s</math>. Тогда, если если вход имел размерность <math>w\times h</math>, а ядро свертки имело размерность <math>k_x\times k_y</math> и использовался сдвиг <math>s</math>, то выход будет иметь размерность <math>\lfloor\frac{w - k_x}{s} + 1\rfloor\times\lfloor\frac{h - k_y}{s} + 1\rfloor</math>.
  
Еще одна важная делать заключается в том, что применение операции свертки уменьшает изображение. Также пиксели, которые находятся на границе изображения учавствуют в меньшем количестве сверток, чем внутренние. В связи с этим в сверточных слоях используется дополнение изображения (англ. padding). Выходы с предыдущего слоя дополняются пикселями так, чтобы после свертки сохранился размер изображения (распространенной практикой является дополнять изображение нулями (англ. zero padding), но возможны и другие подходы). Такие свертки называют ''одинаковыми'' (англ. same convolution), а свертки без дополнения изображения называются ''правильными'' (англ. valid convolution).
 
  
 
== Пулинговый слой ==
 
== Пулинговый слой ==
Пулинговый слой призван снижать размерность изображения. Исходное изображение делится на блоки размером <math>w\times h</math> и для каждого блока вычисляется некоторая функция (например, максимум в случае max pooling или (взвешенное) среднее в случае (weighted) average pooling). Обучаемых параметров у этого слоя нет, его основная цель {{---}} уменьшить изображение, чтобы последующие свертки оперировали над большей областью исходного изображения.
+
Пулинговый слой призван снижать размерность изображения. Исходное изображение делится на блоки размером <math>w\times h</math> и для каждого блока вычисляется некоторая функция (например, максимум в случае max pooling или (взвешенное) среднее в случае (weighted) average pooling). Обучаемых параметров у этого слоя нет, его основная цель {{---}} уменьшить изображение, чтобы последующие свертки оперировали над большей областью исходного изображения. Также призван увеличить инвариантность выхода сети по отношению к малому переносу входа.

Версия 15:18, 9 января 2019

Сверточная нейронная сеть (англ. convolutional neural network, CNN) — специальная архитектура нейронных сетей, предложенная Яном Лекуном, изначально нацеленная на эффективное распознавание изображений.

Свертка

Пример свертки двух матриц размера 5x5 и 3x3

Свертка (англ. convolution) — операция над парой матриц [math]A[/math] (размера [math]n_x\times n_y[/math]) и [math]B[/math] (размера [math]m_x \times m_y[/math]), результатом которой является матрица [math]C = A * B[/math] размера [math](n_x-m_x+1)\times (n_y-m_y+1)[/math]. Каждый элемент результата вычисляется как скалярное произведение матрицы [math]B[/math] и некоторой подматрицы [math]A[/math] такого же размера (подматрица определяется положением элемента в результате). То есть, [math]C_{i,j} = \sum_{u = 0}^{m_x-1}\sum_{v = 0}^{m_y - 1}A_{i+u,j+v}B_{u,v}[/math]. На изображении справа можно видеть, как матрица [math]B[/math] «двигается» по матрице [math]A[/math], и в каждом положении считается скалярное произведение матрицы [math]B[/math] и той части матрицы [math]A[/math], на которую она сейчас наложена. Получившееся число записывается в соответствующий элемент результата.

Логический смысл свертки такой — чем больше величина элемента свертки, тем больше эта часть матрицы [math]A[/math] была похожа на матрицу [math]B[/math] (похожа в смысле скалярного произведения). Поэтому матрицу [math]A[/math] называют изображением, а матрицу [math]B[/math]фильтром или образцом.

Структура сверточной нейронной сети

В сверточной нейронной сети выходы промежуточных слоев образуют матрицу (изображение) или набор матриц (несколько слоёв изображения). Так, например, на вход сверточной нейронной сети можно подавать три слоя изображения (R-, G-, B-каналы изображения). Распространенными видами слоев в сверточной нейронной сети являются сверточные слои (англ. convolutional layer), пулинговые слои (англ. pooling layer) и полносвязные слои[на 09.01.19 не создан] (англ. fully-connected layer).

Сверточный слой

Сверточный слой нейронной сети представляет из себя применение операции свертки к выходам с предыдущего слоя, где веса ядра свертки являются обучаемыми параметрами. Еще один обучаемый вес используется в качестве константного сдвига (англ. bias). При этом есть несколько важных деталей:

  • В одном сверточном слое может быть несколько сверток. В этом случае для каждой свертки на выходе получится своё изображение. Например, если вход имел размерность [math]w\times h[/math], а в слое было [math]n[/math] сверток с ядром размерности [math]k_x\times k_y[/math], то выход будет иметь размерность [math]n\times(w - k_x + 1)\times(h - k_y + 1)[/math].
  • Ядра свертки могут быть трёхмерными. Свертка трехмерного входа с трехмерным ядром происходит аналогично, просто скалярное произведение считается еще и по всем слоям изображения. Например, для усреднения информации о цветах исходного изображения, на первом слое можно использовать свертку размерности [math]3\times w \times h[/math]. На выходе такого слоя будет уже одно изображение (вместо трёх).
  • Можно заметить, что применение операции свертки уменьшает изображение. Также пиксели, которые находятся на границе изображения учавствуют в меньшем количестве сверток, чем внутренние. В связи с этим в сверточных слоях используется дополнение изображения (англ. padding). Выходы с предыдущего слоя дополняются пикселями так, чтобы после свертки сохранился размер изображения (распространенной практикой является дополнять изображение нулями (англ. zero padding), но возможны и другие подходы). Такие свертки называют одинаковыми (англ. same convolution), а свертки без дополнения изображения называются правильными (англ. valid convolution).
  • Еще одним параметром сверточного слоя является сдвиг (англ. stride). Хоть обычно свертка применяется подряд для каждого пикселя, иногда используется сдвиг, отличный от единицы — скалярное произведение считается не со всеми возможными положениями ядра, а только с положениями, кратными некоторому сдвигу [math]s[/math]. Тогда, если если вход имел размерность [math]w\times h[/math], а ядро свертки имело размерность [math]k_x\times k_y[/math] и использовался сдвиг [math]s[/math], то выход будет иметь размерность [math]\lfloor\frac{w - k_x}{s} + 1\rfloor\times\lfloor\frac{h - k_y}{s} + 1\rfloor[/math].


Пулинговый слой

Пулинговый слой призван снижать размерность изображения. Исходное изображение делится на блоки размером [math]w\times h[/math] и для каждого блока вычисляется некоторая функция (например, максимум в случае max pooling или (взвешенное) среднее в случае (weighted) average pooling). Обучаемых параметров у этого слоя нет, его основная цель — уменьшить изображение, чтобы последующие свертки оперировали над большей областью исходного изображения. Также призван увеличить инвариантность выхода сети по отношению к малому переносу входа.