Я читал Книгу Йошуа Бенжио по глубокому обучению, и на странице 224 написано:
Сверточные сети - это просто нейронные сети, которые используют свертку вместо общего умножения матриц, по крайней мере, на одном из их уровней.
однако я не был уверен на 100% в том, как «заменить умножение матриц сверткой» в математически точном смысле.
Что меня действительно интересует, так это определение входных векторов в 1D (как в ), поэтому я не буду вводить данные в виде изображений и постараюсь избежать свертки в 2D.
Так, например, в «нормальных» нейронных сетях операции и схема подачи можно кратко выразить, как в примечаниях Эндрю Нга:
где - вектор, вычисленный до прохождения его через нелинейность . Нелинейность действует pero entry на векторе а - это вывод / активация скрытых единиц для рассматриваемого слоя.
Это вычисление ясно для меня, потому что умножение матриц четко определено для меня, однако, просто замена умножения матриц на свертку кажется мне неясным. т.е.
Я хочу убедиться, что я понимаю математически точное уравнение выше.
Первая проблема, с которой я столкнулся при простой замене умножения матриц на свертку, состоит в том, что обычно идентифицируют одну строку с помощью точечного произведения. Таким образом, ясно известно, как целое относится к весам, и это отображается на вектор измерения, как указано . Однако, когда один заменяет его сверток, его мне не ясно , какая строка или гири соответствует какому записи в , Мне даже не ясно, что на самом деле имеет смысл представлять веса в виде матрицы (я приведу пример, чтобы объяснить этот момент позже)
В случае, когда все входы и выходы находятся в 1D, можно ли просто вычислить свертку в соответствии с ее определением и затем передать ее через сингулярность?
Например, если у нас был следующий вектор на входе:
и у нас были следующие веса (возможно, мы узнали это с backprop):
тогда свертка это:
Было бы правильно просто пропустить нелинейность и обработать результат как скрытый слой / представление ( на данный момент не объединяя )? то есть следующим образом:
( я думаю, что учебник по Стенфордскому UDLF обрезает края, где свёртка по каким-то причинам сворачивается с нулями, нужно ли её обрезать?)
Это как это должно работать? Хотя бы для входного вектора в 1D? Разве не вектор?
Я даже нарисовал нейронную сеть о том, как это выглядит так, как я думаю:
источник
xcorr(x, y) = conv(x, fliplr(y))
. The NN community tends to say convolution when they are actually doing a cross-correlation, but it's pretty similar.