Eu estava lendo o livro de Yoshua Bengio sobre aprendizado profundo e está escrito na página 224:
As redes convolucionais são simplesmente redes neurais que usam a convolução no lugar da multiplicação geral da matriz em pelo menos uma de suas camadas.
no entanto, eu não tinha 100% de certeza de como "substituir a multiplicação de matrizes por convolução" em um sentido matematicamente preciso.
O que realmente me interessa é defini-lo para vetores de entrada em 1D (como em ), para não ter entrada como imagem e tentar evitar a convolução em 2D.
Assim, por exemplo, em redes neurais "normais", as operações e o padrão da ala de alimentação podem ser expressos de forma concisa, como nas notas de Andrew Ng:
onde é o vetor calculado antes de passar pela não linearidade f . A não linearidade atua pero entrada no vetor z ( l ) e a ( l + 1 ) é a saída / ativação de unidades ocultas para a camada em questão.
Esse cálculo é claro para mim porque a multiplicação de matrizes é claramente definida para mim, no entanto, apenas substituir a multiplicação de matrizes por convolução parece pouco claro para mim. ie
F ( z ( l + 1 ) ) = um ( l + 1 )
Quero ter certeza de que entendo matematicamente a equação acima.
O primeiro problema que tenho ao substituir a multiplicação de matrizes por convolução é que, geralmente, identifica-se uma linha de com um produto escalar. Portanto, sabe-se claramente como o todo a ( l ) se relaciona com os pesos e que mapeia para um vetor z ( l + 1 ) da dimensão, conforme indicado por W ( l ) . No entanto, quando se substitui por convoluções, não é claro a ME que fileiras ou pesos corresponde a qual entradas em um ( l ). Nem sequer está claro para mim que faz sentido representar mais os pesos como uma matriz (vou fornecer um exemplo para explicar esse ponto mais adiante)
No caso em que as entradas e saídas estão todas em 1D, calcula-se a convolução de acordo com sua definição e depois passa-a por uma singularidade?
Por exemplo, se tivéssemos o seguinte vetor como entrada:
e tivemos os seguintes pesos (talvez tenhamos aprendido com backprop):
então a convolução é:
seria correto apenas passar a não linearidade por meio disso e tratar o resultado como a camada / representação oculta (suponha que não haja pool no momento)? isto é:
( acho que o tutorial UDLF de Stanford apara as bordas em que a convolução convoca com 0 por algum motivo, precisamos aparar isso?)
É assim que deve funcionar? Pelo menos para um vetor de entrada em 1D? O não é mais um vetor?
Eu até desenhei uma rede neural de como isso deve parecer:
fonte
xcorr(x, y) = conv(x, fliplr(y))
. A comunidade NN tende a dizer convolução quando está realmente fazendo uma correlação cruzada, mas é bem parecida.