Làm cách nào để tính toán thuật ngữ delta của Lớp Convolutional, với các điều khoản và trọng số delta của Lớp Convolutional trước đó?


10

Tôi đang cố gắng đào tạo một mạng lưới thần kinh nhân tạo với hai lớp chập (c1, c2) và hai lớp ẩn (c1, c2). Tôi đang sử dụng phương pháp backpropagation tiêu chuẩn. Trong đường chuyền ngược tôi tính toán thuật ngữ lỗi của một lớp (delta) dựa trên lỗi của lớp trước, trọng số của lớp trước và độ dốc của kích hoạt đối với chức năng kích hoạt của lớp hiện tại. Cụ thể hơn là vùng đồng bằng của lớp l trông như thế này:

delta(l) = (w(l+1)' * delta(l+1)) * grad_f_a(l)

Tôi có thể tính toán độ dốc của c2, kết nối thành một lớp thông thường. Tôi chỉ nhân trọng số của h1 với delta. Sau đó, tôi định hình lại ma trận đó thành dạng đầu ra của c2, nhân nó với độ dốc của hàm kích hoạt và được thực hiện.

Bây giờ tôi có một thuật ngữ delta của c2 - Đó là một ma trận 4D có kích thước (FeatureMapSize, FeatureMapSize, filterNum, patternNum). Hơn nữa, tôi có trọng số của c2, là một ma trận 3D có kích thước (bộ lọc kích thước, bộ lọc kích thước, bộ lọcNum).

Với hai thuật ngữ này và độ dốc kích hoạt của c1 tôi muốn tính delta của c1.

Mẩu chuyện dài:

Với thuật ngữ delta của một lớp chập trước đó và các trọng số của lớp đó, làm thế nào để tôi tính toán thuật ngữ delta của một lớp chập?

Câu trả lời:


6

Trước tiên, tôi nhận ra lỗi cho lớp chập bên dưới để đơn giản cho mảng một chiều (đầu vào) có thể dễ dàng được chuyển sang đa chiều sau đó:

Chúng tôi giả sử ở đây rằng có độ dài là các đầu vào của đối thứ . lớp, là kích thước hạt nhân của trọng số biểu thị mỗi trọng lượng theo và đầu ra là . Do đó chúng ta có thể viết (lưu ý tổng từ 0): trong đó và chức năng kích hoạt (ví dụ sigmoidal). Với điều này, bây giờ chúng ta có thể xem xét một số hàm lỗi và hàm lỗi tại lớp chập (lớp trước của bạn) được cung cấp bởi N l - 1 m w w i x l x l i = m - 1 Σ một = 0 w một y l - 1 một + i y l i = f ( x l i ) f E E /y l iEytôi-1Ntôi-1mwwTôixtôi

xTôitôi= =Σmột= =0m-1wmộtymột+Tôitôi-1
yTôitôi= =f(xTôitôi)fEE/yTôitôi. Bây giờ chúng tôi muốn tìm ra sự phụ thuộc của lỗi trong một trọng số trong (các) lớp trước: trong đó chúng ta có tổng trên tất cả các biểu thức trong đó xảy ra, đó là . Cũng lưu ý rằng chúng tôi biết thuật ngữ cuối cùng phát sinh từ thực tế là mà bạn có thể thấy từ phương trình đầu tiên. Để tính toán độ dốc, chúng ta cần biết thuật ngữ đầu tiên, có thể được tính bằng:
Ewmột= =Σmột= =0N-mExTôitôixTôitôiwmột= =Σmột= =0N-mEwmộtyTôi+mộttôi-1

wmộtN-mxTôitôiwmột= =yTôi+mộttôi-1
ExTôitôi= =EyTôitôiyTôitôixTôitôi= =EyTôitôixTôitôif(xTôitôi)
trong đó một lần nữa thuật ngữ đầu tiên là lỗi trong lớp trước và chức năng kích hoạt phi tuyến.f

Có tất cả các thực thể cần thiết, giờ đây chúng ta có thể tính toán lỗi và truyền lại hiệu quả cho lớp quý giá: Lưu ý rằng bước cuối cùng có thể được hiểu dễ dàng khi viết xuống -s wrt -s. Việc đề cập đến một maxtrix trọng lượng chuyển đổi ( ).

δmộttôi-1= =EyTôitôi-1= =Σmột= =0m-1ExTôi-mộttôixTôi-mộttôiyTôitôi-1= =Σmột= =0m-1ExTôi-mộttôiwmộtftôiTôipped
xTôitôiyTôitôi-1ftôiTôippedT

Do đó, bạn chỉ có thể tính toán lỗi trong lớp tiếp theo bằng (bây giờ trong ký hiệu vectơ):

δtôi= =(wtôi)Tδtôi+1f'(xtôi)

mà trở thành một lớp xoắn và lấy mẫu con: nơi hoạt động tuyên truyền lỗi thông qua lớp gộp tối đa.

δtôi= =bạnpSmộtmptôie((wtôi)Tδtôi+1)f'(xtôi)
bạnpSmộtmptôie

Xin vui lòng thêm hoặc sửa chữa tôi!

Để tham khảo xem:

http://ufldl.stanford.edu/tutorial/supervised/ConvolutionalNeuralNetwork/ http://andrew.gibiansky.com/blog/machine-learning/convolutional-neural-networks/

và để triển khai C ++ (không cần cài đặt): https://github.com/nyanp/tiny-cnn#supported-networks

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.