Je lisais le livre de Yoshua Bengio sur l'apprentissage profond et il est dit à la page 224:
Les réseaux convolutifs sont simplement des réseaux neuronaux qui utilisent la convolution à la place de la multiplication matricielle générale dans au moins une de leurs couches.
cependant, je ne savais pas à 100% comment "remplacer la multiplication matricielle par convolution" dans un sens mathématiquement précis.
Ce qui m'intéresse vraiment, c'est de définir cela pour les vecteurs d'entrée en 1D (comme dans ), donc je n'aurai pas d'entrée en tant qu'images et j'essaierai d'éviter la convolution en 2D.
Ainsi, par exemple, dans les réseaux de neurones "normaux", les opérations et le modèle de la salle d'alimentation peuvent être exprimés de manière concise comme dans les notes d'Andrew Ng:
où est le vecteur calculé avant de le faire passer par la non-linéarité f . La non-linéarité agit entrée pero sur le vecteur z ( l ) et a ( l + 1 ) est la sortie / activation d'unités cachées pour la couche en question.
Ce calcul est clair pour moi car la multiplication matricielle est clairement définie pour moi, cependant, le simple remplacement de la multiplication matricielle par convolution me semble peu clair. c'est à dire
f ( z ( l + 1 ) ) = a ( l + 1 )
Je veux m'assurer de bien comprendre mathématiquement l'équation ci-dessus.
Le premier problème que j'ai avec le simple remplacement de la multiplication matricielle par la convolution est qu'en général, on identifie une ligne de avec un produit scalaire. On sait donc clairement comment l'ensemble a ( l ) est lié aux poids et qui correspond à un vecteur z ( l + 1 ) de la dimension indiquée par W ( l ) . Cependant, quand on le remplace par des circonvolutions, il n'est pas clair pour moi quelle ligne ou quels poids correspondent à quelles entrées dans un ( l ). Ce n'est même pas clair pour moi qu'il est logique de représenter les poids comme une matrice en fait (je fournirai un exemple pour expliquer ce point plus tard)
Dans le cas où les entrées et sorties sont toutes en 1D, calcule-t-on simplement la convolution selon sa définition puis la passe-t-elle par une singularité?
Par exemple, si nous avions le vecteur suivant en entrée:
et nous avions les poids suivants (peut-être que nous l'avons appris avec backprop):
alors la convolution est:
Serait-il correct de simplement passer la non-linéarité à travers cela et de traiter le résultat comme la couche / représentation cachée (supposons pas de mise en commun pour le moment)? c'est-à-dire comme suit:
( Le tutoriel stanford UDLF, je pense, coupe les bords où la convolution convov avec des 0 pour une raison quelconque, devons-nous couper cela?)
Est-ce ainsi que cela devrait fonctionner? Au moins pour un vecteur d'entrée en 1D? Le n'est-il plus un vecteur?
J'ai même dessiné un réseau de neurones à quoi cela devrait ressembler, je pense:
la source
xcorr(x, y) = conv(x, fliplr(y))
. La communauté NN a tendance à dire convolution quand elle fait une corrélation croisée, mais c'est assez similaire.