Qual è la complessità temporale per l'addestramento di una rete neurale usando la propagazione posteriore?


17

Supponiamo che un NN contenga n livelli nascosti, m esempi di allenamento, x funzioni e ni nodi in ogni strato. Qual è la complessità temporale per addestrare questo NN usando la propagazione di ritorno?

Ho un'idea di base su come trovano la complessità temporale degli algoritmi, ma qui ci sono 4 diversi fattori da considerare qui, ad esempio iterazioni, layer, nodi in ogni layer, esempi di training e forse più fattori. Ho trovato una risposta qui, ma non era abbastanza chiaro.

Esistono altri fattori, oltre a quelli che ho menzionato sopra, che influenzano la complessità temporale dell'algoritmo di training di una NN?


Vedi anche https://qr.ae/TWttzq .
nbro,

Risposte:


11

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 MijMjk è semplicemente O(ijk) .

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=WjiZi

Quindi si applica la funzione di attivazione

Zj=f(Sj)

Se abbiamo N layer (inclusi layer input e output), questo verrà eseguito N1 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=WjiZit

e questa operazione (cioè la multiplazione di matrici) ha una complessità temporale di O(jit) . Quindi applichiamo la funzione di attivazione

Zjt=f(Sjt)

e questo ha una complessità temporale O(jt) , perché è un'operazione saggia da elemento.

Quindi, in totale, abbiamo

O(jit+jt)=O(jt(t+1))=O(jit)

Usando la stessa logica, per andare jk , abbiamo O(kjt) , e, per kl , abbiamo O(lkt) .

In totale, la complessità temporale per la propagazione feedforward sarà

O(jit+kjt+lkt)=O(t(ij+jk+kl))

Non sono sicuro se questo possa essere ulteriormente semplificato o meno. Forse è solo O(tijkl) , ma non ne sono sicuro.

Algoritmo di propagazione inversa

L'algoritmo di retro-propagazione procede come segue. A partire dal livello di output lk , calcoliamo il segnale di errore, Elt , una matrice contenente i segnali di errore per i nodi al livello l

Elt=f(Slt)(ZltOlt)

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", DlkRl×k (between layer l and layer k)

Dlk=EltZtk

where Ztk is the transpose of Zkt.

We then adjust the weights

Wlk=WlkDlk

For lk, we thus have the time complexity O(lt+lt+ltk+lk)=O(ltk).

Now, going back from kj. We first have

Ekt=f(Skt)(WklElt)

Then

Dkj=EktZtj

And then

Wkj=WkjDkj

WklWlkkjO(kt+klt+ktj+kj)=O(kt(l+j)).

ji, we have O(jt(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(nt(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


Your answer is great..I could not find any ambiguity till now, but you forgot the no. of iterations part, just add it...and if no one answers in 5 days i'll surely accept your answer
DuttaA

@DuttaA I tried to put every thing I knew. it may not be 100% correct so feel free to leave this unaccepted :) I'm also waiting for other answers to see what other points I missed.
M.kazem Akhgary

4

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 have O(w) where w is the number of weights, i.e., nni, 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 learning m examples, where each gets repeated e times, is O(wme).

The bad news is that there's no formula telling you what number of epochs e you need.


From the above answer don't you think itdepends on more factors?
DuttaA

1
@DuttaA No. There's a constant amount of work per weight, which gets repeated e times for each of m examples. I didn't bother to compute the number of weights, I guess, that's the difference.
maaartinus

1
I think the answers are same. in my answer I can assume number of weights w = ij + jk + kl. basically sum of n * n_i between layers as you noted.
M.kazem Akhgary

1

A potential disadvantage of gradient-based methods is that they head for the nearest minimum, which is usually not the global minimum.

This means that the only difference between these search methods is the speed with which solutions are obtained, and not the nature of those solutions.

An important consideration is time complexity, which is the rate at which the time required to find a solution increases with the number of parameters (weights). In short, the time complexities of a range of different gradient-based methods (including second-order methods) seem to be similar.

Six different error functions exhibit a median run-time order of approximately O(N to the power 4) on the N-2-N encoder in this paper:

Lister, R and Stone J "An Empirical Study of the Time Complexity of Various Error Functions with Conjugate Gradient Back Propagation" , IEEE International Conference on Artificial Neural Networks (ICNN95), Perth, Australia, Nov 27-Dec 1, 1995.

Summarised from my book: Artificial Intelligence Engines: A Tutorial Introduction to the Mathematics of Deep Learning.


Hi J. Stone. Thanks for trying to contribute to the site. However, please, note that this is not a place for advertising yourself. Anyway, you can surely provide a link to your own books if they are useful for answering the questions and provided you're not just trying to advertise yourself.
nbro

@nbro If James Stone can provide an insightful answer - and it seems so - then i'm fine with him also mentioning some of his work. Having experts on this network is a solid contribution to the quality and level.
javadba

Dear nbro, That is a fair comment. I dislike adverts too. But it is possible for a book and/or paper to be relevant to a question, as I believe it is in this case. regards, Jim Stone
James V Stone
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.