Não vi uma resposta de uma fonte confiável, mas tentarei responder a mim mesmo, com um exemplo simples (com meu conhecimento atual).
Em geral, observe que o treinamento de um MLP usando a propagação traseira é geralmente implementado com matrizes.
Complexidade temporal da multiplicação da matriz
A complexidade temporal da multiplicação de matrizes para Mij∗Mjk é simplesmente O(i∗j∗k) .
Observe que estamos assumindo o algoritmo de multiplicação mais simples aqui: existem outros algoritmos com uma complexidade de tempo um pouco melhor.
Algoritmo de avanço de feedforward
O algoritmo de propagação de feedforward é o seguinte.
Primeiro, para passar da camada i para j , você precisa
Sj=Wji∗Zi
Então você aplica a função de ativação
Zj=f(Sj)
Se tivermos N camadas (incluindo as camadas de entrada e saída), isso será executado N−1 vezes.
Exemplo
Como exemplo, vamos calcular a complexidade do tempo para o algoritmo de encaminhamento para um MLP com 4 camadas, em que i indica o número de nós da camada de entrada, j o número de nós na segunda camada, k o número de nós na terceira camada e l o número de nós na camada de saída.
Como existem 4 camadas, você precisa de 3 matrizes para representar pesos entre essas camadas. Vamos denotá-los por Wji , Wkj e Wlk , onde Wji é uma matriz com j linhas e colunas i ( Wji contém os pesos que vão da camada i à camada j ).
Suponha que você tenha t exemplos de treinamento. Para propagação da camada i a j , temos primeiro
Sjt=Wji∗Zit
e esta operação (isto é, multiplicação de matrizes) tem complexidade de tempo O(j∗i∗t) . Então aplicamos a função de ativação
Zjt=f(Sjt)
e este tem O(j∗t) complexidade de tempo, porque é uma operação de elemento a elemento.
Então, no total, temos
O(j∗i∗t+j∗t)=O(j∗t∗(t+1))=O(j∗i∗t)
Usando a mesma lógica, para ir j→k , temos O(k∗j∗t) e, para k→l , temos O(l∗k∗t) .
No total, a complexidade do tempo para propagação de feedforward será
O(j∗i∗t+k∗j∗t+l∗k∗t)=O(t∗(ij+jk+kl))
Não tenho certeza se isso pode ser simplificado ainda mais ou não. Talvez seja apenas O(t∗i∗j∗k∗l) , mas eu não tenho certeza.
Algoritmo de propagação traseira
O algoritmo de retropropagação prossegue da seguinte maneira. Partindo da camada de saída l→k , calculamos o sinal de erro, Elt , uma matriz que contém os sinais de erro para nós na camada l
Elt=f′(Slt)⊙(Zlt−Olt)
onde ⊙ significa multiplicação por elementos. Note-se que Elt tem l linhas e t colunas: ele simplesmente significa que cada coluna é o sinal de erro para treinar exemplo 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
Para l→k , temos, assim, a complexidade do tempo O(lt+lt+ltk+lk)=O(l∗t∗k) .
Agora, voltando de k→j . Primeiro temos
Ekt=f′(Skt)⊙(Wkl∗Elt)
Então
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