Angenommen, ein NN enthält ausgeblendete Ebenen, Trainingsbeispiele, Features und Knoten in jeder Ebene. Was ist die zeitliche Komplexität, um dieses NN mithilfe von Backpropagation zu trainieren?
Ich habe eine grundlegende Vorstellung davon, wie sie die zeitliche Komplexität von Algorithmen finden, aber hier sind 4 verschiedene Faktoren zu berücksichtigen, z. B. Iterationen, Ebenen, Knoten in jeder Ebene, Trainingsbeispiele und möglicherweise weitere Faktoren. Ich habe hier eine Antwort gefunden, aber es war nicht klar genug.
Gibt es andere Faktoren als die oben genannten, die die zeitliche Komplexität des Trainingsalgorithmus eines NN beeinflussen?
Antworten:
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ürMij∗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 Schichti nach j wechseln
Dann wenden Sie die Aktivierungsfunktion an
Wenn wirN 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 mit4 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 es4 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 habent Trainingsbeispiele. Für die Ausbreitung von Schicht i nach j haben wir zuerst
und dieser Vorgang (dh Matrix multiplcation) aufweistO(j∗i∗t) Zeitkomplexität. Dann wenden wir die Aktivierungsfunktion an
und dies hatO(j∗t) Zeitkomplexität, da es sich um ein Element weise Betrieb ist.
Insgesamt haben wir also
Mit derselben Logik für das Gehenj→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
Ich bin nicht sicher, ob dies weiter vereinfacht werden kann oder nicht. Vielleicht ist es nurO(t∗i∗j∗k∗l) , aber ich bin nicht sicher.
Backpropagation-Algorithmus
Der Backpropagation-Algorithmus geht wie folgt vor. Ausgehend von der Ausgangsschichtl→k berechnen wir das Fehlersignal Elt , eine Matrix, die die Fehlersignale für Knoten auf Schicht l
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 )
whereZtk is the transpose of Zkt .
We then adjust the weights
Forl→k , we thus have the time complexity O(lt+lt+ltk+lk)=O(l∗t∗k) .
Now, going back fromk→j . We first have
Then
And then
whereWkl 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, forj→i , we have O(j∗t(k+i)) . In total, we have
which is same as feedforward pass algorithm. Since they are same, the total time complexity for one epoch will beO(t∗(ij+jk+kl)).
This time complexity is then multiplied by number of iterations (epochs). So, we haveO(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 respectivelyi , 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
quelle
For the evaluation of a single pattern, you need to process all weights and all neurons. Given that every neuron has at least one weight, we can ignore them, and haveO(w) where w is the number of weights, i.e., n∗ni , assuming full connectivity between your layers.
The back-propagation has the same complexity as the forward evaluation (just look at the formula).
So, the complexity for learningm examples, where each gets repeated e times, is O(w∗m∗e) .
The bad news is that there's no formula telling you what number of epochse you need.
quelle
e
times for each ofm
examples. I didn't bother to compute the number of weights, I guess, that's the difference.w = ij + jk + kl
. basically sum ofn * n_i
between layers as you noted.