Tôi có thể thấy hai động cơ để sử dụng Lớp tổng hợp trong RNN:
- Để tăng tốc độ đào tạo, bằng cách sửa ngay lập tức từng lớp với độ dốc dự đoán
- Để có thể học các chuỗi dài hơn
Tôi thấy vấn đề với cả hai. Xin lưu ý, tôi thực sự thích Grad Grad tổng hợp và muốn thực hiện chúng. Nhưng tôi cần hiểu nơi suy nghĩ của tôi không chính xác.
Bây giờ tôi sẽ chỉ ra lý do tại sao Điểm 1 và Điểm 2 dường như không có lợi và tôi cần bạn sửa lỗi cho tôi, nếu chúng thực sự có lợi:
Điểm 1:
Các lớp tổng hợp cho chúng ta biết rằng chúng ta có thể dựa vào một "mạng trợ giúp nhỏ" khác (được gọi là DNI) để tư vấn cho lớp hiện tại của chúng ta về những gì gradient sẽ đến từ phía trên, ngay cả trong khi fwd prop.
Tuy nhiên, độ dốc như vậy sẽ chỉ đến một số hoạt động sau. Cùng một lượng Backprop sẽ phải được thực hiện như không có DNI, ngoại trừ việc bây giờ chúng tôi cũng cần phải đào tạo DNI của mình.
Việc thêm Asyncronisity này không nên làm cho các lớp đào tạo nhanh hơn so với trong fwdprop đầy đủ "bị khóa" truyền thống -> trình tự chống lưng đầy đủ, bởi vì cùng một số tính toán phải được thực hiện bởi thiết bị. Chỉ là các tính toán sẽ bị trượt trong thời gian
Điều này khiến tôi nghĩ rằng Điểm 1) sẽ không hoạt động. Chỉ cần thêm SG giữa mỗi lớp không nên cải thiện tốc độ đào tạo.
Điểm 2:
Ok, làm thế nào về việc chỉ thêm SG trên lớp cuối cùng để dự đoán "độ dốc từ tương lai" và chỉ khi đó là dấu thời gian cuối cùng trong quá trình chuyển tiếp .
Bằng cách này, mặc dù LSTM của chúng tôi phải ngừng dự đoán và phải truyền lại, nhưng nó vẫn có thể dự đoán độ dốc trong tương lai mà nó sẽ nhận được (với sự trợ giúp của DNI đang ngồi trên dấu thời gian cuối cùng).
Xem xét một số buổi đào tạo (phiên A, phiên B):
fwdprop timestep_1A ---> fwdprop timestep_2A ---> fwdprop timestep_3A ----> dừng và bkprop!
fwdprop timestep_1B ---> fwdprop timestep_2B ---> fwdprop timestep_3B ----> dừng và bkprop!
Chúng tôi vừa buộc mạng của mình "phân tích" 6 dấu thời gian thành hai nửa: 3 dấu thời gian, sau đó 3 dấu thời gian còn lại một lần nữa.
Lưu ý, chúng ta có DNI của chúng ta ngồi ở cuối "Phiên A" và dự đoán "độ dốc nào tôi sẽ nhận được từ đầu Phiên B (từ tương lai)". Do đó, timestep_3A sẽ được trang bị độ dốc "có thể đến từ timestep_1B", do đó, thực sự, các hiệu chỉnh được thực hiện trong A sẽ đáng tin cậy hơn.
Nhưng, này! Những "độ dốc tổng hợp" được dự đoán này sẽ rất nhỏ (không đáng kể) - sau tất cả, đó là lý do tại sao chúng tôi bắt đầu một phiên backprop B mới . Không phải chúng quá nhỏ, chúng tôi sẽ chỉ phân tích tất cả 6 dấu thời gian trong một "phiên A" bkprop dài duy nhất.
Do đó, tôi nghĩ rằng Điểm 2) không nên mang lại lợi ích. Thêm SG vào dấu thời gian cuối cùng của fwdprop cho phép đào tạo hiệu quả các chuỗi dài hơn, nhưng độ dốc biến mất không đi đến đâu.
Đồng ý. Có lẽ chúng ta có thể nhận được lợi ích của việc đào tạo "phiên A" , "phiên B" vv trên các máy riêng biệt? Nhưng sau đó, làm thế nào khác với việc đơn giản là đào tạo với các xe buýt nhỏ thông thường song song? Hãy ghi nhớ, đã được đề cập trong điểm 2: mọi thứ trở nên tồi tệ hơn bởi sessionA dự đoán độ dốc đang biến mất.
Câu hỏi: Vui lòng giúp tôi hiểu lợi ích của Gradient tổng hợp, vì 2 điểm trên dường như không có lợi