Изменения

Перейти к: навигация, поиск

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

5198 байт добавлено, 12:06, 10 января 2021
Нет описания правки
На самом деле, такая нейронная сеть обучается предсказывать функцию <math>\mathcal{F}(x) - x</math>, вместо функции <math>\mathcal{F}(x)</math>, которую изначально нужно было предсказывать. Для компенсации этой разницы и вводится это замыкающее соединение (англ. ''shortcut connection''), которое добавляет недостающий <math>x</math> к функции. Предположение авторов, которые предложили residual block, заключалось в том, что такую разностную функцию будет проще обучать, чем исходную. Если рассматривать крайние случаи, то если <math>\mathcal{F}(x) = x</math>, такую сеть обучить нулю всегда возможно, в отличие от обучения множества нелинейных слоёв линейному преобразованию.
 
== Другие виды сверток ==
 
=== Расширенная свертка (aнгл. Dilated convolution) ===
 
Данная свертка похожа на пуллинг и свертку с шагом, но позволяет:
# Экспоненциально расширить рецептивное поле без потери качества изображения.
# Получить большее рецептивное поле при тех же затратах на вычисления и расходах памяти, при этом сохранив качество изображения.
 
Формула свертки:
 
<tex>O_{x, y} = \sum\limits_{i, j} W_{i,j} \sum\limits_{\substack{t, k \\ |t - i| < l \\ |k - j| < l}} I_{t, k}</tex>
 
<tex>I</tex> {{---}} входные данные, <tex>O</tex> {{---}} выходные, <tex>W</tex> {{---}} ядро свертки, <tex>l</tex> {{---}} коэффициент расширения.
 
{|
|-
|[[Файл:Dilated_convolution.png|border|700px|thumb|left|1-, 2- и 4-расширенные свертки с классическими ядрами 3x3, 5x5 и 9x9 соответственно. Красные точки обозначают ненулевые веса, остальные веса ядра равны нулю. Выделенные синие области обозначают рецептивные поля.]]
|}
 
=== Частичная свертка (aнгл. Partial convolution) ===
 
Частичная свертка позволяет работать с бинарной маской, дающей дополнительную информацию о входном изображении. Например, маска может указывать на испорченные пиксели в задаче [[Вписывание части изображения|вписывание части изображения]].
 
Значения обновляются по формуле:
 
<tex>x' = \begin{cases} W^T(X\odot M)\frac{sum(1)}{sum(M)}+b, & \mbox{if } sum(M)>0 \\ 0, & \mbox{otherwise} \end{cases}</tex>
 
<tex>M</tex> {{---}} бинарная маска; <tex>W</tex> {{---}} ядро свертки; <tex>\odot</tex> {{---}} поэлементное перемножение, <tex>b</tex> {{---}} гиперпараметр
 
Поэлементное перемножение <tex>X</tex> и <tex>M</tex> позволяет получить результат, зависящий только от значений с единичной маской, а <tex>\frac{sum(1)}{sum(M)}</tex> служит для нормализации этого результата.
 
Обновление маски происходит так:
 
<tex>m' = \begin{cases} 1, & \mbox{if } sum(M)>0 \\ 0, & \mbox{otherwise} \end{cases}</tex>
 
Как видно из формулы, дополнительная информация, вносимая маской, постепенно затухает при переходе от слоя к слою. То есть со временем маска полностью заполняется единицами.
 
=== Стробированная свертка (aнгл. Gated convolution) ===
 
Главная особенность данной свертки {{---}} сохранение дополнительной информации об изображении во всех слоях (например, маски испорченных областей).
 
В данном случае вместо того, чтобы работать с жесткой маской, которая обновляется по некоторым правилам, стробированная свертка учится автоматически извлекать маску из данных:
 
<tex>\begin{array}{rcl} Gating_{y,x} & = & \sum \sum W_1 \cdot I \\ Feature_{y,x} & = & \sum \sum W_2 \cdot I \\ O_{y,x} & = & \phi (Feature_{y,x}) \odot \sigma (Gating_{y,x}) \end{array}</tex>
 
<tex>W_1</tex> и <tex>W_2</tex> {{---}} два разных ядра свертки, <tex>I</tex> {{---}} входные данные, <tex>O</tex> {{---}} выходные данные, <tex>\phi</tex> {{---}} функция активации, <tex>\sigma</tex> {{---}} сигмоидная функция, <tex>\odot</tex> {{---}} поэлементное перемножение.
 
Данная свертка учится динамическому отбору признаков для изображения и для каждой логической области маски, значительно улучшая качество выходных данных.
== Известные архитектуры сверточных нейронных сетей ==
==Примечания==
<references/>
 
== Источники информации ==
* [https://towardsdatascience.com/understanding-2d-dilated-convolution-operation-with-examples-in-numpy-and-tensorflow-with-d376b3972b25 Understanding 2D Dilated Convolution Operation with Examples in Numpy and Tensorflow with Interactive Code, Towards Data Science]
* [https://arxiv.org/pdf/1806.03589v2.pdf Free-Form Image Inpainting with Gated Convolution, Jiahui Yu, Zhe Lin, Jimei Yang, Xiaohui Shen, Xin Lu, Thomas Huang]
 
[[Категория: Машинное обучение]]
[[Категория: Нейронные сети]]
[[Категория: Сверточные нейронные сети]]
128
правок

Навигация