Je n'ai pas vu de réponse d'une source fiable, mais j'essaierai d'y répondre moi-même, avec un exemple simple (avec mes connaissances actuelles).
En général, notez que la formation d'un MLP utilisant la rétropropagation est généralement implémentée avec des matrices.
Complexité temporelle de la multiplication matricielle
La complexité temporelle de la multiplication matricielle pour Mij∗Mjk est simplement O(i∗j∗k) .
Notez que nous supposons ici l'algorithme de multiplication le plus simple: il existe d'autres algorithmes avec une complexité temporelle un peu meilleure.
Algorithme de passage direct
L'algorithme de propagation à action directe est le suivant.
Tout d'abord, pour passer de la couche i à j , vous
Sj=Wji∗Zi
Ensuite, vous appliquez la fonction d'activation
Zj=f(Sj)
Si nous avons N couches (y compris les couches d'entrée et de sortie), cela s'exécutera N−1 fois.
Exemple
À titre d'exemple, calculons la complexité temporelle de l'algorithme de passage direct pour un MLP à 4 couches, où i désigne le nombre de nœuds de la couche d'entrée, j le nombre de nœuds dans la deuxième couche, k le nombre de nœuds dans le troisième couche et l le nombre de nœuds dans la couche de sortie.
Puisqu'il y a 4 couches, vous avez besoin de 3 matrices pour représenter les poids entre ces couches. Notons-les par Wji , Wkj et Wlk , où Wji est une matrice à j lignes et i colonnes ( Wji contient donc les poids allant de la couche i à la couche j ).
Supposons que vous avez t exemples de formation. Pour la propagation de la couche i à j , nous avons d'abord
Sjt=Wji∗Zit
et cette opération (c'est-à-dire la multiplication matricielle) a une complexité temporelle O(j∗i∗t) . Ensuite, nous appliquons la fonction d'activation
Zjt=f(Sjt)
et cela a une complexité temporelle O(j∗t) , car il s'agit d'une opération élément par élément.
Donc, au total, nous avons
O(j∗i∗t+j∗t)=O(j∗t∗(t+1))=O(j∗i∗t)
En utilisant la même logique, pour aller j→k , nous avons O(k∗j∗t) , et, pour k→l , nous avons O(l∗k∗t) .
In total, the time complexity for feedforward propagation will be
O(j∗i∗t+k∗j∗t+l∗k∗t)=O(t∗(ij+jk+kl))
I'm not sure if this can be simplified further or not. Maybe it's just O(t∗i∗j∗k∗l), but I'm not sure.
Back-propagation algorithm
The back-propagation algorithm proceeds as follows. Starting from the output layer l→k, we compute the error signal, Elt, a matrix containing the error signals for nodes at layer l
Elt=f′(Slt)⊙(Zlt−Olt)
⊙Eltl rows and t columns: it simply means each column is the error signal for training example t.
Dlk∈Rl×k (between layer l and layer k)
Dlk=Elt∗Ztk
Ztk is the transpose of Zkt.
We then adjust the weights
Wlk=Wlk−Dlk
l→kO(lt+lt+ltk+lk)=O(l∗t∗k).
Now, going back from k→j. We first have
Ekt=f′(Skt)⊙(Wkl∗Elt)
Then
Dkj=Ekt∗Ztj
And then
Wkj=Wkj−Dkj
where Wkl is the transpose of Wlk. For k→j, we have the time complexity O(kt+klt+ktj+kj)=O(k∗t(l+j)).
And finally, for j→i, we have O(j∗t(k+i)). In total, we have
O(ltk+tk(l+j)+tj(k+i))=O(t∗(lk+kj+ji))
which is same as feedforward pass algorithm. Since they are same, the total time complexity for one epoch will be O(t∗(ij+jk+kl)).
This time complexity is then multiplied by number of iterations (epochs). So, we have O(n∗t∗(ij+jk+kl)),
where n is number of iterations.
Notes
Note that these matrix operations can greatly be paralelized by GPUs.
Conclusion
We tried to find the time complexity for training a neural network that has 4 layers with respectively i, j, k and l nodes, with t training examples and n epochs. The result was O(nt∗(ij+jk+kl)).
We assumed the simplest form of matrix multiplication that has cubic time complexity. We used batch gradient descent algorithm. The results for stochastic and mini-batch gradient descent should be same. (Let me know if you think the otherwise: note that batch gradient descent is the general form, with little modification, it becomes stochastic or mini-batch)
Also, if you use momentum optimization, you will have same time complexity, because the extra matrix operations required are all element-wise operations, hence they will not affect the time complexity of the algorithm.
I'm not sure what the results would be using other optimizers such as RMSprop.
Sources
The following article http://briandolhansky.com/blog/2014/10/30/artificial-neural-networks-matrix-form-part-5 describes an implementation using matrices. Although this implementation is using "row major", the time complexity is not affected by this.
If you're not familiar with back-propagation, check this article:
http://briandolhansky.com/blog/2013/9/27/artificial-neural-networks-backpropagation-part-4