Độ phức tạp thời gian để đào tạo một mạng lưới thần kinh bằng cách sử dụng lan truyền ngược là gì?


16

Giả sử rằng NN chứa lớp ẩn, ví dụ đào tạo, tính năng và nút trong mỗi lớp. Độ phức tạp thời gian để đào tạo NN này bằng cách sử dụng lan truyền ngược là gì?nmxni

Tôi có một ý tưởng cơ bản về cách họ tìm thấy độ phức tạp thời gian của các thuật toán, nhưng ở đây có 4 yếu tố khác nhau để xem xét ở đây, đó là lặp lại, lớp, nút trong mỗi lớp, ví dụ đào tạo và có thể nhiều yếu tố hơn. Tôi tìm thấy một câu trả lời ở đây nhưng nó không đủ rõ ràng.

Có những yếu tố khác, ngoài những yếu tố tôi đã đề cập ở trên, có ảnh hưởng đến độ phức tạp thời gian của thuật toán đào tạo của NN không?


Câu trả lời:


9

Tôi chưa thấy câu trả lời từ một nguồn đáng tin cậy, nhưng tôi sẽ cố gắng tự trả lời câu hỏi này, với một ví dụ đơn giản (với kiến ​​thức hiện tại của tôi).

Nói chung, lưu ý rằng đào tạo MLP bằng cách truyền ngược thường được thực hiện với ma trận.

Độ phức tạp thời gian của phép nhân ma trận

Độ phức tạp thời gian của phép nhân ma trận cho MijMjk chỉ đơn giản là O(ijk) .

Lưu ý rằng chúng ta đang giả sử thuật toán nhân đơn giản nhất ở đây: tồn tại một số thuật toán khác với độ phức tạp thời gian tốt hơn một chút.

Thuật toán thông qua Feedforward

Thuật toán truyền dẫn feedforward như sau.

Đầu tiên, để đi từ lớp i đến j , bạn làm

Sj=WjiZi

Sau đó, bạn áp dụng chức năng kích hoạt

Zj=f(Sj)

Nếu chúng ta có N lớp (bao gồm cả lớp đầu vào và đầu ra), lớp này sẽ chạy N1 lần.

Thí dụ

Ví dụ, hãy tính độ phức tạp thời gian cho thuật toán chuyển tiếp cho MLP với 4 lớp, trong đó i biểu thị số lượng nút của lớp đầu vào, j số lượng nút trong lớp thứ hai, k số lượng nút trong lớp thứ ba và l số lượng nút trong lớp đầu ra.

Vì có 4 lớp, bạn cần 3 ma trận để biểu diễn các trọng số giữa các lớp này. Hãy biểu thị chúng bằng Wji , WkjWlk , trong đó Wji là một ma trận với các hàng j và cột i ( Wji do đó chứa các trọng số đi từ lớp i đến lớp j ).

Giả sử bạn có ví dụ đào tạo t . Để nhân giống từ lớp i đến j , trước tiên chúng ta có

Sjt=WjiZit

và thao tác này (tức là nhân ma trận) có độ phức tạp thời gian O(jit) . Sau đó, chúng tôi áp dụng chức năng kích hoạt

Zjt=f(Sjt)

và điều này có độ phức tạp thời gian O(jt) , bởi vì nó là một hoạt động khôn ngoan.

Vì vậy, trong tổng số, chúng ta có

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

Sử dụng cùng một logic, cho đi jk , chúng ta có O(kjt) , và, cho kl , chúng tôi có O(lkt) .

In total, the time complexity for feedforward propagation will be

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

I'm not sure if this can be simplified further or not. Maybe it's just O(tijkl), but I'm not sure.

Back-propagation algorithm

The back-propagation algorithm proceeds as follows. Starting from the output layer lk, we compute the error signal, Elt, a matrix containing the error signals for nodes at layer l

Elt=f(Slt)(ZltOlt)

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", 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

where Wkl is the transpose of Wlk. For kj, we have the time complexity O(kt+klt+ktj+kj)=O(kt(l+j)).

And finally, for 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

3

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

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.