Sinh viên tổng hợp - lợi ích thiết thực là gì?


8

Tôi có thể thấy hai động cơ để sử dụng Lớp tổng hợp trong RNN:

  1. Để 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
  2. Để 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


Tại sao bạn nghĩ rằng điều này sẽ không tăng tốc đào tạo? Lời biện minh duy nhất tôi thấy là sự khẳng định trần trụi rằng điều này "không nên cải thiện tốc độ luyện tập" nhưng bạn không cung cấp lý do của mình. Ngoài ra, không rõ ý của bạn là "bước 1)" vì bạn chưa mô tả bất kỳ bước nào trong câu hỏi. Trong mọi trường hợp, bài báo chứng minh rằng nó cung cấp tốc độ. Dữ liệu nhịp đập lý thuyết bất cứ ngày nào. Bạn đã đọc báo chưa?
DW

Lý thuyết nhịp dữ liệu bất cứ ngày nào, tôi đồng ý, nhưng ví dụ truy cập tốt nhất tôi có thể làm là GPU so với CPU. Mọi nơi mọi người cứ nói GPU chạy các đơn đặt hàng có cường độ nhanh hơn CPU và đưa ra so sánh. Tuy nhiên, một CPU mulithreaded được mã hóa đúng cách chỉ chậm hơn 2-3 lần so với GPU cùng loại và rẻ hơn GPU. larsjuhljensen.wordpress.com/2011/01/11/ Một lần nữa, tôi sẽ không chống lại Học sinh tổng hợp, - họ có vẻ tuyệt vời, chỉ đến khi tôi có thể nhận được câu trả lời cho bài đăng của mình, tôi sẽ không thể nghỉ ngơi: D
Kari

Tôi không chắc chắn rằng một bài đăng blog 7 năm về BLAST có liên quan khủng khiếp ở đây.
DW

Điều tôi đang cố gắng nói là "có nhiều cách để làm cho sự song song có vẻ tốt hơn thực tế", trong bất kỳ kịch bản nào
Kari

Câu trả lời:


2

Nhưng, này! Những "độ dốc tổng hợp" được dự đoán này dù sao cũng sẽ rất nhỏ (không đáng kể) - đó là lý do tại sao chúng tôi bắt đầu một phiên backprop mới B. Khô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 bkprop dài duy nhất ".

-Điều đó không nhất thiết phải đúng. Chúng tôi thường cắt ngắn và bắt đầu một backprop mới vì các ràng buộc phần cứng, chẳng hạn như bộ nhớ hoặc tốc độ tính toán. Vanishing-gradient có thể được cải thiện bằng các phương tiện khác, chẳng hạn như Gradient bình thường hóa - tăng tỷ lệ vectơ gradient nếu nó quá nhỏ vượt quá các lớp nhất định hoặc giảm tỷ lệ nếu nó sắp nổ. Hoặc thậm chí sử dụng Batch bình thường hóa


Điều quan trọng là phải hiểu cách cập nhật bất kỳ mô-đun DNI nào. Để làm rõ mọi thứ, hãy xem xét một ví dụ về mạng có nhiều lớp và 3 mô đun DNI:

 input
   |
   V
Layer_0 & DNI_0
Layer_1
Layer_2
Layer_3 & DNI_3
Layer_4
Layer_5 & DNI_5
Layer_6
Layer_7
   | 
   V
output

Các DNI_0 luôn được đào tạo với một tổng hợp độ dốc đến từ DNI_3 (chảy qua Layer_2, và Layer_1 tất nhiên), chọn địa điểm một vài lớp nữa.

Tương tự như vậy, DNI_3 luôn được đào tạo với độ dốc tổng hợp đến từ DNI_5

DNI_0 hoặc DNI_3 sẽ không bao giờ nhìn thấy độ dốc thực sự, bởi vì độ dốc thực sự chỉ được gửi đến DNI_5 chứ không phải sớm hơn.

Đối với bất cứ ai vẫn đang cố gắng để hiểu họ, hãy đọc blogpost tuyệt vời này , phần 3

Các lớp trước đó sẽ phải hài lòng với độ dốc tổng hợp, bởi vì chúng hoặc DNI của chúng sẽ không bao giờ chứng kiến ​​"độ dốc thực sự".


Về đào tạo song song với xe buýt nhỏ thay vì song song thông qua các lớp tổng hợp:

Trình tự dài hơn chính xác hơn so với xe buýt nhỏ, tuy nhiên xe buýt nhỏ thêm hiệu ứng điều tiết . Nhưng, được đưa ra một số kỹ thuật để ngăn chặn độ dốc phát nổ hoặc biến mất, việc đào tạo các chuỗi dài hơn có thể cung cấp cái nhìn sâu sắc hơn về bối cảnh của vấn đề. Đó là bởi vì mạng xâm nhập đầu ra sau khi xem xét một chuỗi đầu vào dài hơn, vì vậy kết quả hợp lý hơn.

Để so sánh các lợi ích do SG cấp, hãy tham khảo sơ đồ trang 6 của Bài viết , chủ yếu là có thể giải quyết các chuỗi dài hơn, điều mà tôi cảm thấy có lợi nhất (dù sao chúng ta cũng có thể song song thông qua Minibatch, và do đó SG không nên tăng tốc xử lý khi được thực hiện trên cùng một máy - ngay cả khi chúng tôi thực sự chỉ truyền tới DNI tiếp theo).


Tuy nhiên, chúng ta càng có nhiều mô-đun DNI, tín hiệu sẽ càng nhiễu. Vì vậy, có thể đáng để đào tạo các lớp và DNI tất cả bằng backprop kế thừa, và chỉ sau khi một số kỷ nguyên đã trôi qua, chúng tôi bắt đầu sử dụng DNI-bootstrapping đã thảo luận ở trên.

Bằng cách đó, DNI sớm nhất sẽ có được ít nhất một số ý nghĩa về những gì mong đợi khi bắt đầu đào tạo. Đó là bởi vì các DNI sau đây không chắc chắn về độ dốc thực sự trông như thế nào, khi bắt đầu đào tạo, vì vậy ban đầu, họ sẽ tư vấn độ dốc "rác" cho bất kỳ ai ngồi sớm hơn họ.

Đừng quên rằng các tác giả cũng đã thử nghiệm dự đoán đầu vào thực tế cho mỗi lớp.


Nếu các lớp của bạn có backprop đắt tiền (có lẽ bạn có Batch-Normalization hoặc một số chức năng kích hoạt ưa thích), việc sửa lỗi với DNI có thể rẻ hơn rất nhiều, khi nó được đào tạo đầy đủ. Chỉ cần nhớ rằng DNI không miễn phí - nó yêu cầu nhân ma trận và có thể sẽ không cung cấp nhiều tốc độ trên một lớp dày đặc đơn giản.


Minibatch cho chúng ta tăng tốc (thông qua song song) và cũng cho chúng ta sự chính quy. Các lớp tổng hợp cho phép chúng ta suy luận tốt hơn bằng cách làm việc với các chuỗi dài hơn và (có khả năng) độ dốc ít tốn kém hơn. Tất cả cùng nhau đây là một hệ thống rất mạnh mẽ.


0

Độ dốc tổng hợp làm cho việc đào tạo nhanh hơn, không phải bằng cách giảm số lượng kỷ nguyên cần thiết hoặc bằng cách tăng tốc độ hội tụ của độ dốc, mà bằng cách làm cho mỗi kỷ nguyên nhanh hơn để tính toán. Độ dốc tổng hợp nhanh hơn để tính toán so với độ dốc thực (tính toán độ dốc tổng hợp nhanh hơn so với độ đảo ngược), do đó, mỗi lần lặp lại độ dốc có thể được tính toán nhanh hơn.


Theo hiểu biết của tôi, các gradient thông minh theo thời gian không nên tiếp cận với DNI nhanh hơn, chỉ là chúng hiện đang bị trượt theo thời gian và được tính toán không đồng bộ trong khi xảy ra hiện tượng đẩy về phía trước. DNI vẫn sẽ phải có được độ dốc thực sự để tự đào tạo . Vì vậy, các lớp tổng hợp nên yêu cầu cùng một số phép tính được thực hiện song song như khi có BPTT tiêu chuẩn. Điều này có đúng không?
Kari

Vì vậy, sẽ không có bất kỳ sự tăng tốc nào khi chỉ đơn giản là giới thiệu SG giữa các lớp. Đúng, chúng tôi nhận được độ dốc dự đoán ngay lập tức từ DNI, nhưng với mỗi dự đoán như vậy, cuối cùng chúng tôi sẽ phải trả giá bằng cách truyền toàn bộ không đồng bộ về phía DNI đó, một lát sau
Kari

@Kari, không, điều đó không đúng với tôi. Nếu bạn cần cùng số lần lặp, nhưng bây giờ mỗi lần lặp lại mất ít hơn 50% thời gian trên GPU, thì việc tính toán kết quả sẽ được thực hiện sớm hơn. Ngay cả khi bạn cần thêm 10% số lần lặp / epoch (vì độ dốc bị trễ hoặc độ dốc tổng hợp không hoàn toàn khớp với độ dốc thực tế), đó vẫn là một chiến thắng: tăng tốc từ việc có thể tính toán độ dốc tổng hợp nhanh hơn độ dốc thực vượt trội hơn các hiệu ứng khác. Bạn có vẻ tự tin rằng điều này không thể giúp được, nhưng dữ liệu trong bài báo cho thấy nó có ích.
DW

Hừm, chẳng hạn, chúng tôi có 4 lớp ngồi sau DNI của chúng tôi; Trong backprop bình thường, chúng ta sẽ có 4 trao đổi "chuyển tiếp" giữa các lớp và sau đó là 4 "trao đổi ngược" và trong khi điều này xảy ra thì hệ thống bị khóa. Với DNI, chúng tôi có thể ngay lập tức điều chỉnh trọng số của mình, nhưng sẽ cần phải nhận được độ dốc thực sự sau này. Nhưng bây giờ, hệ thống không bị khóa, trong khi chờ đợi để có nhiều chuyển tiếp hơn để trượt qua. Nhưng chúng tôi vẫn còn nợ độ dốc thực sự từ trước đó, đối với DNI của chúng tôi ... Để có được và cung cấp độ dốc này trở lại DNI, sẽ mất 100% thời gian (cùng 4 bước tiến, cùng lùi 4 bước).
Kari

Chỉ là DNI của chúng tôi nói "tốt thôi, hãy cho họ khi có thể, sau này", nhưng chúng tôi vẫn phải trả giá đầy đủ, vì vậy tôi không thấy hiệu suất tăng. Tôi đồng ý, các giấy tờ cho thấy kết quả tuyệt vời, nhưng làm thế nào đến? Chúng tôi đã có thể đào tạo các xe buýt song song bằng mọi cách: /
Kari
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.