Ich habe keine Antwort von einer vertrauenswürdigen Quelle gesehen, aber ich werde versuchen, dies selbst mit einem einfachen Beispiel zu beantworten (mit meinem aktuellen Wissen).
Im Allgemeinen ist zu beachten, dass das Trainieren eines MLP unter Verwendung von Backpropagation normalerweise mit Matrizen implementiert wird.
Zeitliche Komplexität der Matrixmultiplikation
Die zeitliche Komplexität der Matrixmultiplikation für Mij∗Mjk ist einfach O(i∗j∗k) .
Beachten Sie, dass wir hier von einem einfachsten Multiplikationsalgorithmus ausgehen: Es gibt einige andere Algorithmen mit etwas besserer Zeitkomplexität.
Feedforward-Pass-Algorithmus
Der Feedforward-Ausbreitungsalgorithmus ist wie folgt.
Zuerst müssen Sie von Schicht i nach j wechseln
Sj=Wji∗Zi
Dann wenden Sie die Aktivierungsfunktion an
Zj=f(Sj)
Wenn wir N Ebenen (einschließlich Eingabe- und Ausgabeebene) haben, wird dies N−1 Mal ausgeführt.
Beispiel
Als Beispiel berechnen wir die Zeitkomplexität für den Vorwärtsdurchlaufalgorithmus für einen MLP mit 4 Schichten, wobei i die Anzahl der Knoten der Eingangsschicht, j die Anzahl der Knoten in der zweiten Schicht und k die Anzahl der Knoten in der Eingangsschicht bezeichnet dritte Schicht und l die Anzahl der Knoten in der Ausgabeschicht.
Da es 4 Ebenen gibt, benötigen Sie 3 Matrizen, um die Gewichte zwischen diesen Ebenen darzustellen. Bezeichnen wir sie mit Wji , Wkj und Wlk , wobei Wji eine Matrix mit j Zeilen und i Spalten ist ( Wji enthält also die von Schicht i zu Schicht j gehenden Gewichte ).
Angenommen , Sie haben t Trainingsbeispiele. Für die Ausbreitung von Schicht i nach j haben wir zuerst
Sjt=Wji∗Zit
und dieser Vorgang (dh Matrix multiplcation) aufweist O(j∗i∗t) Zeitkomplexität. Dann wenden wir die Aktivierungsfunktion an
Zjt=f(Sjt)
und dies hat O(j∗t) Zeitkomplexität, da es sich um ein Element weise Betrieb ist.
Insgesamt haben wir also
O(j∗i∗t+j∗t)=O(j∗t∗(t+1))=O(j∗i∗t)
Mit derselben Logik für das Gehen j→k , haben wir O(k∗j∗t) , und für k→l , haben wir O(l∗k∗t) .
Insgesamt wird die Zeitkomplexität für die Vorwärtskopplung sein
O(j∗i∗t+k∗j∗t+l∗k∗t)=O(t∗(ij+jk+kl))
Ich bin nicht sicher, ob dies weiter vereinfacht werden kann oder nicht. Vielleicht ist es nur O(t∗i∗j∗k∗l) , aber ich bin nicht sicher.
Backpropagation-Algorithmus
Der Backpropagation-Algorithmus geht wie folgt vor. Ausgehend von der Ausgangsschicht l→k berechnen wir das Fehlersignal Elt , eine Matrix, die die Fehlersignale für Knoten auf Schicht l
Elt=f′(Slt)⊙(Zlt−Olt)
wo ⊙ Mittel elementweise Multiplikation. Beachten Sie, dass Elt hat l Zeilen und t Spalten: Es bedeutet einfach , jede Spalte ist das Fehlersignal beispielsweise die Ausbildung 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
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