Saya belum melihat jawaban dari sumber tepercaya, tetapi saya akan mencoba menjawabnya sendiri, dengan contoh sederhana (dengan pengetahuan saya saat ini).
Secara umum, perhatikan bahwa melatih MLP menggunakan propagasi balik biasanya diterapkan dengan matriks.
Kompleksitas waktu dari perkalian matriks
Kompleksitas waktu dari perkalian matriks untuk Mij∗Mjk hanyalah O(i∗j∗k) .
Perhatikan bahwa kita mengasumsikan algoritma multiplikasi paling sederhana di sini: ada beberapa algoritma lain dengan kompleksitas waktu yang lebih baik.
Algoritma umpan maju
Algoritma propagasi feedforward adalah sebagai berikut.
Pertama, untuk beralih dari layer i ke j , Anda lakukan
Sj=Wji∗Zi
Kemudian Anda menerapkan fungsi aktivasi
Zj=f(Sj)
Jika kita memiliki N layer (termasuk layer input dan output), ini akan berjalan N−1 kali.
Contoh
Sebagai contoh, mari kita hitung kompleksitas waktu untuk algoritma pass maju untuk MLP dengan 4 lapisan, di mana i menunjukkan jumlah node dari layer input, j jumlah node di lapisan kedua, k jumlah node di lapisan ketiga dan l jumlah node di lapisan output.
Karena ada 4 lapisan, Anda perlu 3 matriks untuk mewakili bobot antara lapisan-lapisan ini. Mari kita menandakannya dengan Wji , Wkj dan Wlk , di mana Wji adalah sebuah matriks dengan j baris dan kolom i ( Wji dengan demikian berisi bobot pergi dari layer i ke layer j ).
Asumsikan Anda memiliki t contoh pelatihan. Untuk merambat dari layer i ke j , kita harus terlebih dahulu
Sjt=Wji∗Zit
dan operasi ini (yaitu perkalian matriks) memiliki kompleksitas waktu O(j∗i∗t) . Kemudian kami menerapkan fungsi aktivasi
Zjt=f(Sjt)
dan ini memiliki kompleksitas waktu O(j∗t) , karena ini adalah operasi elemen-bijaksana.
Jadi, secara total, kita punya
O(j∗i∗t+j∗t)=O(j∗t∗(t+1))=O(j∗i∗t)
Menggunakan logika yang sama, untuk menjalankan j→k , kita memiliki O(k∗j∗t) , dan, untuk k→l , kita memiliki O(l∗k∗t) .
Secara total, kompleksitas waktu untuk perbanyakan feedforward akan
O(j∗i∗t+k∗j∗t+l∗k∗t)=O(t∗(ij+jk+kl))
Saya tidak yakin apakah ini dapat disederhanakan lebih lanjut atau tidak. Mungkin hanya O(t∗i∗j∗k∗l) , tapi saya tidak yakin.
Algoritma back-propagation
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)
where ⊙ means element-wise multiplication. Note that Elt has l rows and t columns: it simply means each column is the error signal for training example 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→iO(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