CNN - Làm thế nào để backpropagation với chia sẻ trọng lượng hoạt động chính xác?


8

Xem xét Mạng thần kinh chuyển đổi (CNN) để phân loại hình ảnh. Để phát hiện các tính năng cục bộ, chia sẻ trọng lượng được sử dụng giữa các đơn vị trong cùng một lớp chập. Trong một mạng như vậy, các trọng số hạt nhân được cập nhật thông qua thuật toán backpropagation.

Một bản cập nhật cho trọng lượng hạt nhân trong lớp sẽ như sau:hjtôi

hjtôi= =hjtôi-ηδRδhjtôi= =hjtôi-ηδRδxjLδxjLδxjL-1...δxjtôiδhjtôi

Làm thế nào các trọng số hạt nhân có thể được cập nhật và vẫn giống nhau (= chia sẻ)?

Tôi có 2 cách giải thích:

  1. Các trọng số của cùng một lớp, được khởi tạo cho cùng một giá trị, sẽ giữ nguyên (không phụ thuộc vào đầu vào). Điều này có nghĩa là biểu thức là giống nhau cho tất cả các trọng số này đến . Điều này không có nghĩa gì, vì khác với các j khác nhau. Hay tôi đang thiếu một cái gì đó ở đây?δRδhjtôih1tôihJtôixjtôi

  2. Có một mẹo, ví dụ: sau khi cập nhật lan truyền ngược, các trọng số được chia sẻ được đặt thành giá trị trung bình của chúng.

EDIT Sự nhầm lẫn mà tôi có là tôi đã không cân nhắc rằng nếu một trọng số được chia sẻ, tham số của nó xuất hiện nhiều lần trong hàm mất. Khi phân biệt , một số thuật ngữ (xem xét các yếu tố đầu vào theo) sẽ "tồn tại". Do đó các bản cập nhật sẽ giống nhau.hjtôihjtôi

Câu trả lời:


7

Tôi nghĩ bạn đang hiểu nhầm "chia sẻ cân nặng" nghĩa là gì ở đây. Một lớp chập thường bao gồm nhiều "bộ lọc", thường là 2x2 hoặc 3x3. Các bộ lọc này được áp dụng trong "cửa sổ trượt" trên toàn bộ đầu vào của lớp. "Chia sẻ trọng lượng" đang sử dụng các trọng số cố định cho bộ lọc này trên toàn bộ đầu vào. Điều đó không có nghĩa là tất cả các bộ lọc đều tương đương.

Để cụ thể, hãy tưởng tượng bộ lọc 2x2 sải một đầu vào 3x3 với phần đệm, để bộ lọc được áp dụng 4 lần. Hãy biểu thị bộ lọc chưa được kiểm soát .FXβ

X= =[x11x12x13x21x22x23x31x32x33]

F= =[w11w12w21w22]

β= =[w11,w12,w21,w22]

F*X= =[β[x11,x12,x21,x22]β[x12,x13,x22,x23]β[x21,x22,x31,x32]β[x22,x23,x32,x33]]

"Chia sẻ trọng lượng" có nghĩa là khi chúng tôi áp dụng bộ lọc 2x2 này cho đầu vào 3x3 của mình, chúng tôi sử dụng lại bốn trọng số tương tự được đưa ra bởi bộ lọc trên toàn bộ đầu vào. Lựa chọn thay thế sẽ là mỗi ứng dụng bộ lọc có bộ đầu vào riêng (thực sự sẽ là bộ lọc riêng cho từng vùng của hình ảnh), cho tổng cộng 16 trọng số hoặc một lớp dày đặc với 4 nút cho 36 trọng số.

Chia sẻ trọng lượng theo cách này làm giảm đáng kể số lượng trọng lượng chúng ta phải học, giúp dễ dàng tìm hiểu kiến ​​trúc rất sâu và cũng cho phép chúng ta tìm hiểu các tính năng không rõ ràng về khu vực đầu vào đang được xem xét.

EDIT: Để tiếp tục thúc đẩy điều này, đây là hình ảnh động của bộ lọc 3x3 được áp dụng cho đầu vào 5x5

nhập mô tả hình ảnh ở đây


1
Cảm ơn bạn, bây giờ tôi có thể đưa nó vào một câu hỏi đơn giản hơn: Các trọng số được đại diện bởi βhọc qua tuyên truyền ngược?
Andi R

Vâng Họ chắc chắn là có.
David Marx

1
Có thể như thế nào βđược học giống nhau (tức là chia sẻ) trên toàn bộ đầu vào? Vì thuật toán lan truyền ngược cũng xem xét đầu vào, cho 2 đầu vào khác nhau,βnên được cập nhật khác nhau.
Andi R

1
Các đạo hàm riêng trong bản cập nhật trọng số được tính tương ứng với các trọng số (β), không phải đầu vào. Nó thực sự không khác gì backprop trong MLP.
David Marx

Tôi đồng ý với David ở đây, bạn đang nhầm lẫn đầu vào với trọng số là các thao tác đơn giản trong đó một hạt nhân được áp dụng trên một hình ảnh đầu vào như được hiển thị ở trên và sử dụng backprop các trọng số hạt nhân được cập nhật sao cho chúng giảm thiểu chức năng mất. kích hoạt của bạn * tốc độ thay đổi của Actiavtion wrt thành tổng trọng số của đầu vào * tốc độ thay đổi của tổng trọng số của đầu vào tỷ lệ thay đổi của trọng số (trọng số nhân ở đây).
khwaja Wisal

6

Tôi không chắc liệu bạn có thể thay đổi câu trả lời được chấp nhận hay không, nhưng vì câu trả lời duy nhất cho câu hỏi của bạn về tuyên truyền ngược là một về việc truyền bá về phía trước, tôi đã quyết định cho nó đi.

Về cơ bản, bạn điều trị cân bằng delta (δRδhjtôi) giống như bạn sẽ tạo một delta cân bằng cho một nơron tuyến tính, nhưng huấn luyện nó một lần cho mỗi lần bạn phủ lên bộ lọc (nhân) của mình trên đầu vào, tất cả chỉ trong một lần truyền ngược. Kết quả là tổng số deltas cho tất cả các lớp phủ của bộ lọc của bạn. Tôi nghĩ trong ký hiệu của bạn, điều này sẽ làδRδhjtôi= =ΣTôi= =1nxTôitôi-1δRδxjtôi+1 Ở đâu xtôi-1 là một đầu vào được nhân với hjtôi cho một trong các lớp phủ của bạn trong quá trình lan truyền về phía trước và xtôi+1 là đầu ra dẫn đến từ lớp phủ đó.

Giữa hai kết quả của backprop thông qua một lớp chập (deltas tham số và deltas đầu vào) có vẻ như bạn quan tâm nhiều hơn đến deltas tham số, hay cụ thể hơn là deltas ma trận trọng số (δRδhjtôi). Để hoàn thiện, tôi sẽ xem xét cả hai, với lớp dưới đây là lớp ví dụ của chúng tôi:

Nếu bạn có bộ đầu vào 1D [1,2,3]và bộ lọc [0,3,0,5] được áp dụng với sải chân 1, không có phần đệm, độ lệch bằng 0 và không có chức năng kích hoạt, thì việc kích hoạt bộ lọc của bạn sẽ trông giống như [1*0,3+2*0,5,2*0,3+3*0,5]= =[1.3,2.1]. Khi bạn quay lại lớp này trên thẻ backprop của mình, giả sử các deltas kích hoạt bạn sử dụng để tính toán là[-0,1,0,2].

Trọng lượng đồng bằng:

Khi bạn đi qua trong đường chuyền về phía trước, bạn đã lưu vào bộ đệm của bạn [1,2,3], hãy gọi đó là A_prev, vì có khả năng nó kích hoạt lớp trước của bạn. Đối với mỗi lớp phủ tiềm năng của bộ lọc của bạn (trong trường hợp này, bạn chỉ có thể phủ nó trên đầu vào ở hai vị trí [ 1,2 , 3] và [1, 2,3 ]), lấy lát đó của A_slice đầu vào, nhân từng phần phần tử bởi delta dZ đầu ra được liên kết và thêm nó vào delta dW trọng lượng của bạn cho lần vượt qua này. Trong ví dụ này, bạn sẽ thêm[1*-0,1,2*-0,1] đến dW cho lớp phủ đầu tiên, sau đó thêm [2*0,2,3*0,2]cho lớp phủ thứ hai. Tất cả đã nói, dW của bạn cho lớp chập này trên pass backprop này là[0,3,0,4].

Xu hướng đồng bằng:

Tương tự như đối với deltas trọng lượng, nhưng chỉ cần thêm delta đầu ra của bạn mà không nhân với ma trận đầu vào.

Đồng bằng đầu vào:

Tái cấu trúc hình dạng của đầu vào cho lớp này, gọi nó là dA_prev, khởi tạo nó thành các số không và đi qua các cấu hình mà bạn phủ lên bộ lọc của mình trên đầu vào. Đối với mỗi lớp phủ, nhân ma trận trọng số của bạn với delta đầu ra được liên kết với lớp phủ này và thêm nó vào lát dA_prev được liên kết với lớp phủ này. Điều đó có nghĩa là, lớp phủ 1 sẽ thêm[0,3*-0,1,0,5*-0,1]= =[-0,03,-0,05] để dA_prev dẫn đến [-0,03,-0,05,0], sau đó lớp phủ 2 sẽ thêm [0,3*0,2,0,5*0,2]= =[0,06,0,1], dẫn đến [-0,03,0,01,0,1] cho dA_prev.

Đây là một nguồn khá tốt nếu bạn muốn đọc cùng một câu trả lời theo các thuật ngữ khác nhau: Liên kết


Cảm ơn, điều này thực sự trả lời câu hỏi ban đầu ...
Yan King Yin
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.