Non ho visto una risposta da una fonte attendibile, ma proverò a rispondere da solo, con un semplice esempio (con le mie conoscenze attuali).
In generale, si noti che l'addestramento di un MLP usando la propagazione di ritorno è di solito implementato con matrici.
Complessità temporale della moltiplicazione matriciale
La complessità temporale della moltiplicazione della matrice per Mij∗Mjk è semplicemente O(i∗j∗k) .
Si noti che stiamo assumendo l'algoritmo di moltiplicazione più semplice qui: esistono altri algoritmi con una complessità temporale leggermente migliore.
Algoritmo di feedforward pass
L'algoritmo di propagazione feedforward è il seguente.
Innanzitutto, per passare dallo strato da i a j , lo fai
Sj=Wji∗Zi
Quindi si applica la funzione di attivazione
Zj=f(Sj)
Se abbiamo N layer (inclusi layer input e output), questo verrà eseguito N−1 volte.
Esempio
Come esempio, consentono di calcolare la complessità temporale dell'algoritmo in avanti per un MLP con 4 strati, in cui i indica il numero di nodi dello strato di input, j il numero di nodi nel secondo strato, k il numero di nodi nel terzo strato e l il numero di nodi nello strato di output.
Poiché ci sono 4 livelli, sono necessarie 3 matrici per rappresentare i pesi tra questi livelli. Poniamo li indichiamo con Wji , Wkj e Wlk , dove Wji è una matrice con j righe e i colonne ( Wji contiene quindi i pesi che vanno dal livello i al livello j ).
Si supponga di avere t esempi di addestramento. Per la propagazione dallo strato da i a j , abbiamo prima
Sjt=Wji∗Zit
e questa operazione (cioè la multiplazione di matrici) ha una complessità temporale di O(j∗i∗t) . Quindi applichiamo la funzione di attivazione
Zjt=f(Sjt)
e questo ha una complessità temporale O(j∗t) , perché è un'operazione saggia da elemento.
Quindi, in totale, abbiamo
O(j∗i∗t+j∗t)=O(j∗t∗(t+1))=O(j∗i∗t)
Usando la stessa logica, per andare j→k , abbiamo O(k∗j∗t) , e, per k→l , abbiamo O(l∗k∗t) .
In totale, la complessità temporale per la propagazione feedforward sarà
O(j∗i∗t+k∗j∗t+l∗k∗t)=O(t∗(ij+jk+kl))
Non sono sicuro se questo possa essere ulteriormente semplificato o meno. Forse è solo O(t∗i∗j∗k∗l) , ma non ne sono sicuro.
Algoritmo di propagazione inversa
L'algoritmo di retro-propagazione procede come segue. A partire dal livello di output l→k , calcoliamo il segnale di errore, Elt , una matrice contenente i segnali di errore per i nodi al livello l
Elt=f′(Slt)⊙(Zlt−Olt)
dove ⊙ significa moltiplicazione degli elementi. Si noti che Elt ha l righe e colonne t : significa semplicemente che ogni colonna è il segnale di errore per l'esempio di allenamento t .
We then compute the "delta weights", Dlk∈Rl×k (between layer l and layer k)
Dlk=Elt∗Ztk
where Ztk is the transpose of Zkt.
We then adjust the weights
Wlk=Wlk−Dlk
For l→k, we thus have the time complexity O(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
WklWlkk→jO(kt+klt+ktj+kj)=O(k∗t(l+j)).
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