Rétropropagation par convolution
Je suis en train d'apprendre et de comprendre différents réseaux de neurones. Je comprends à peu près maintenant les réseaux de neurones à rétroaction, leur rétro-propagation, et maintenant l'apprentissage des réseaux de neurones convolutifs. Je comprends leur propagation vers l'avant, mais j'ai des problèmes pour comprendre leur rétro-propagation. Il existe une très bonne ressource expliquant la couche convolutive, cependant, ne peut pas comprendre la rétro-propagation.
Dans ma compréhension, selon l'algorithme de rétro-propagation des réseaux de neurones à réaction / perception multicouche, si j'ai l'entrée suivante (ses éléments comme $i$) et filtre (ses éléments comme $w$), donnant la sortie (ses éléments comme $o$).
$$\begin{pmatrix}i_{1}^1 & i_{2}^1 & i_{3}^1\\\ i_{4}^1 & i_{5}^1 & i_{6}^1\\\ i_{7}^1 & i_{8}^1 & i_{9}^1\end{pmatrix} * \begin{pmatrix}w_1^1 & w_2^1\\\ w_3^1 & w_4^1\end{pmatrix} = \begin{pmatrix}o_1^1 & o_2^1\\\ o_3^1 & o_4^1\end{pmatrix}$$
Donc si nous voulons calculer par exemple combien $w_1^1$ affecté le coût $C$, nous devons savoir combien $w_1^1$ affecté son élément de sortie correspondant $o_1^1$, et combien $o_1^1$ affecté le coût $C$ ce qui donne l'équation suivante:
$$\frac{\partial C}{\partial w_1^1} = \frac{\partial o^1}{\partial w_1^1}\frac{\partial C}{\partial o^1}$$
Où, dans ma réflexion, nous devons réfléchir à la manière dont nous obtenons la sortie concernant $w_1^1$ calculer $\frac{\partial o^1}{\partial w_1^1}$.
Obtenir $o_1^1$, nous avons multiplié $w_1^1$ avec $i_1^1$, obtenir $o_2^1$, multiplié $w_1^1$ avec $i_2^1$, obtenir $o_3^1$, multiplié $w_1^1$ avec $i_4^1$, obtenir $o_4^1$, multiplié $w_1^1$ avec $i_5^1$.
Calculer $\frac{\partial C}{\partial o^1}$, cela dépend de la manière dont la sortie est connectée à la couche suivante. S'il s'agit d'une autre couche convolutive, nous devons calculer comment chaque élément de sortie est connecté aux sorties de couches suivantes, qui seront leurs poids de connexion.
Donc, si nous voyons un exemple, où nous mettons un filtre 2x2 sur $o^1$, pour obtenir la sortie finale $o^2$ (ce qui donnera une seule sortie avec une taille 1x1):
$$\begin{pmatrix}o_1^1 & o_2^1\\\ o_3^1 & o_4^1\end{pmatrix} * \begin{pmatrix}w_1^2 & w_2^2\\\ w_3^2 & w_4^2\end{pmatrix} = \begin{pmatrix}o_1^2\end{pmatrix}$$
Où dans ma pensée la rétro-propagation pour $w_1^2$ est:
$$\frac{\partial C}{\partial w_1^2} = \frac{\partial o^2}{\partial w_1^2}\frac{\partial C}{\partial o^2} = o_1^1 * 2(o^2_1 - y_1)$$,
et la rétro-propagation pour $w_1^1$ est:
$$\frac{\partial C}{\partial w_1^1} = \frac{\partial o^1}{\partial w_1^1}\frac{\partial C}{\partial o^1}$$
Où: $$\frac{\partial o^1}{\partial w_1^1} = (i_1^1 + i_2^1 + i_4^1 + i_5^1)$$ Et: $$\frac{\partial C}{\partial o^1} = \frac{\partial o_1^2}{\partial o_1^1}\frac{\partial C}{\partial o_1^2} + \frac{\partial o_1^2}{\partial o_2^1}\frac{\partial C}{\partial o_1^2} +\frac{\partial o_1^2}{\partial o_3^1}\frac{\partial C}{\partial o_1^2} +\frac{\partial o_1^2}{\partial o_4^1}\frac{\partial C}{\partial o_1^2}$$ Donc: $$\frac{\partial C}{\partial o^1} = w_1^2 * 2(o_1^2 - y_1) + w_2^2 * 2(o_1^2 - y_1) + w_3^2 * 2(o_1^2 - y_1) + w_4^2 * 2(o_1^2 - y_1)$$
Ai-je raison? Parce que lorsque je lis l'article ci-dessus, cela semble complètement différent.
Réponses
Notez qu'un CNN est un réseau de neurones à réaction directe. Ainsi, si vous comprenez comment effectuer une rétropropagation dans des réseaux de neurones à réaction, vous l'avez pour les CNN.
Une couche de convolution peut être comprise comme une couche entièrement connectée, avec les contraintes que plusieurs poids de bord sont identiques et que de nombreux poids de bord sont mis à 0.
Vous pouvez également créer une couche de regroupement de cette manière. Par exemple, une couche de pooling moyenne n'est rien d'autre qu'une couche de convolution spécifique, avec des poids fixes.
Pour une mise en commun maximale, utilisez le fait que $\max\{x,y\} = \frac{x+y+|x-y|}{2}$.