Я не бачив відповіді від надійного джерела, але спробую відповісти на це сам, простим прикладом (з моїми сучасними знаннями).
Загалом зауважте, що навчання MLP з використанням зворотного розповсюдження зазвичай реалізується за допомогою матриць.
Часова складність множення матриці
Часова складність множення матриць для Mij∗Mjk є просто O(i∗j∗k) .
Зауважте, що тут ми припускаємо найпростіший алгоритм множення: існують деякі інші алгоритми з дещо кращою складністю у часі.
Алгоритм проходження подачі
Алгоритм поширення подачі наступний.
По-перше, ви переходите від шару i до j , ви робите
Sj=Wji∗Zi
Потім ви застосуєте функцію активації
Zj=f(Sj)
Якщо у нас є N шарів (включаючи вхідний і вихідний шар), це буде працювати N−1 раз.
Приклад
Як приклад, давайте обчислимо складність у часі для алгоритму прямого проходу для MLP з 4 ма шарами, де i позначає кількість вузлів вхідного шару, j кількість вузлів у другому шарі, k кількість вузлів у третій шар і l кількість вузлів у вихідному шарі.
Оскільки є 4 шари, вам потрібно 3 матриці для представлення ваг між цими шарами. Давайте позначимо їх через Wji , Wkj і Wlk , де Wji матриця з j рядків і i стовпців ( Wji , таким чином , містить ваги , що йдуть від шару i до шару j ).
Припустимо, у вас є t приклади навчання. Для поширення від шару i до j ми маємо спочатку
Sjt=Wji∗Zit
і ця операція (тобто матричне множення матриць) має O(j∗i∗t) часову складність. Потім застосовуємо функцію активації
Zjt=f(Sjt)
і це має складну часову складність O(j∗t) , оскільки це елементна операція.
Отже, загалом у нас є
O(j∗i∗t+j∗t)=O(j∗t∗(t+1))=O(j∗i∗t)
Використовуючи ту ж логіку, для переходу j→k маємо O(k∗j∗t) , а для k→l - O(l∗k∗t) .
Загалом, складність у часі для подальшого розповсюдження буде складена
O(j∗i∗t+k∗j∗t+l∗k∗t)=O(t∗(ij+jk+kl))
Я не впевнений, чи можна це далі спростити чи ні. Можливо, це просто O(t∗i∗j∗k∗l) , але я не впевнений.
Алгоритм зворотного розповсюдження
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
l→kO(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