Сверточные нейронные сети — различия между версиями
(Зачаток страницы) |
|||
Строка 5: | Строка 5: | ||
'''Свертка''' (англ. ''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>. | '''Свертка''' (англ. ''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>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>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> {{---}} ''фильтром'' или ''образцом''. | Логический смысл свертки такой {{---}} чем больше величина элемента свертки, тем больше эта часть матрицы <math>A</math> была похожа на матрицу <math>B</math> (похожа в смысле скалярного произведения). Поэтому матрицу <math>A</math> называют ''изображением'', а матрицу <math>B</math> {{---}} ''фильтром'' или ''образцом''. | ||
+ | |||
+ | == Структура сверточной нейронной сети == | ||
+ | В сверточной нейронной сети выходы промежуточных слоев образуют матрицу (изображение) или набор матриц (несколько слоёв изображения). Так, например, на вход сверточной нейронной сети можно подавать три слоя изображения (R-, G-, B-каналы изображения). Распространенными видами слоев в сверточной нейронной сети являются сверточные слои (англ. ''convolutional layer''), пулинговые слои (англ. ''pooling layer'') и [[:Нейронные сети, перцептрон|полносвязные слои]]<sup>[на 09.01.19 не создан]</sup> (англ. ''fully-connected layer''). | ||
+ | |||
+ | == Сверточный слой == | ||
+ | Сверточный слой нейронной сети представляет из себя применение операции свертки к выходам с предыдущего слоя, где веса ядра свертки являются обучаемыми параметрами. Еще один обучаемый вес используется в качестве константного сдвига (англ. bias). При этом есть несколько важных деталей: | ||
+ | |||
+ | Ядер свертки на каждом слое может быть несколько и они могут быть трехмерными. Например, если мы хотим как-то усреднить на первом слое информацию о трёх цветовых каналах изображения, то мы можем поместить на первый слой свертку с ядром размерности <math>3\times w \times h</math>. На выходе такого слоя будет уже одно изображение (вместо трёх). Также можно иметь несколько сверток на одном слое нейронной сети, например, если на входе один слой изображения и 6 сверток, то на выходе будет 6 слоев изображения. | ||
+ | |||
+ | Еще одна важная делать заключается в том, что применение операции свертки уменьшает изображение. Также пиксели, которые находятся на границе изображения учавствуют в меньшем количестве сверток, чем внутренние. В связи с этим в сверточных слоях используется дополнение изображения (англ. padding). Выходы с предыдущего слоя дополняются пикселями так, чтобы после свертки сохранился размер изображения (распространенной практикой является дополнять изображение нулями (англ. zero padding), но возможны и другие подходы). Такие свертки называют ''одинаковыми'' (англ. same convolution), а свертки без дополнения изображения называются ''правильными'' (англ. valid convolution). | ||
+ | |||
+ | == Пулинговый слой == | ||
+ | Пулинговый слой призван снижать размерность изображения. Исходное изображение делится на блоки размером <math>w\times h</math> и для каждого блока вычисляется некоторая функция (например, максимум в случае max pooling или (взвешенное) среднее в случае (weighted) average pooling). Обучаемых параметров у этого слоя нет, его основная цель {{---}} уменьшить изображение, чтобы последующие свертки оперировали над большей областью исходного изображения. |
Версия 14:53, 9 января 2019
Сверточная нейронная сеть (англ. convolutional neural network, CNN) — специальная архитектура нейронных сетей, предложенная Яном Лекуном, изначально нацеленная на эффективное распознавание изображений.
Свертка
Свертка (англ. convolution) — операция над парой матриц
(размера ) и (размера ), результатом которой является матрица размера . Каждый элемент результата вычисляется как скалярное произведение матрицы и некоторой подматрицы такого же размера (подматрица определяется положением элемента в результате). То есть, . На изображении справа можно видеть, как матрица «двигается» по матрице , и в каждом положении считается скалярное произведение матрицы и той части матрицы , на которую она сейчас наложена. Получившееся число записывается в соответствующий элемент результата.Логический смысл свертки такой — чем больше величина элемента свертки, тем больше эта часть матрицы
была похожа на матрицу (похожа в смысле скалярного произведения). Поэтому матрицу называют изображением, а матрицу — фильтром или образцом.Структура сверточной нейронной сети
В сверточной нейронной сети выходы промежуточных слоев образуют матрицу (изображение) или набор матриц (несколько слоёв изображения). Так, например, на вход сверточной нейронной сети можно подавать три слоя изображения (R-, G-, B-каналы изображения). Распространенными видами слоев в сверточной нейронной сети являются сверточные слои (англ. convolutional layer), пулинговые слои (англ. pooling layer) и полносвязные слои[на 09.01.19 не создан] (англ. fully-connected layer).
Сверточный слой
Сверточный слой нейронной сети представляет из себя применение операции свертки к выходам с предыдущего слоя, где веса ядра свертки являются обучаемыми параметрами. Еще один обучаемый вес используется в качестве константного сдвига (англ. bias). При этом есть несколько важных деталей:
Ядер свертки на каждом слое может быть несколько и они могут быть трехмерными. Например, если мы хотим как-то усреднить на первом слое информацию о трёх цветовых каналах изображения, то мы можем поместить на первый слой свертку с ядром размерности
. На выходе такого слоя будет уже одно изображение (вместо трёх). Также можно иметь несколько сверток на одном слое нейронной сети, например, если на входе один слой изображения и 6 сверток, то на выходе будет 6 слоев изображения.Еще одна важная делать заключается в том, что применение операции свертки уменьшает изображение. Также пиксели, которые находятся на границе изображения учавствуют в меньшем количестве сверток, чем внутренние. В связи с этим в сверточных слоях используется дополнение изображения (англ. padding). Выходы с предыдущего слоя дополняются пикселями так, чтобы после свертки сохранился размер изображения (распространенной практикой является дополнять изображение нулями (англ. zero padding), но возможны и другие подходы). Такие свертки называют одинаковыми (англ. same convolution), а свертки без дополнения изображения называются правильными (англ. valid convolution).
Пулинговый слой
Пулинговый слой призван снижать размерность изображения. Исходное изображение делится на блоки размером
и для каждого блока вычисляется некоторая функция (например, максимум в случае max pooling или (взвешенное) среднее в случае (weighted) average pooling). Обучаемых параметров у этого слоя нет, его основная цель — уменьшить изображение, чтобы последующие свертки оперировали над большей областью исходного изображения.