2012-10-27 38 views
10

Gần đây tôi đã hoàn thành khóa học Máy Học của Giáo sư Ng trên Coursera, và trong khi tôi yêu toàn bộ khóa học, tôi chưa bao giờ thực sự hiểu được thuật toán backpropagation để đào tạo mạng thần kinh.Ai đó có thể giải thích thuật toán backpropagation cho tôi?

Vấn đề của tôi với sự hiểu biết đó là, ông chỉ bao giờ dạy việc triển khai thực hiện vectơ của nó cho các mạng chuyển tiếp nguồn cấp dữ liệu được kết nối đầy đủ. Đại số tuyến tính của tôi là gỉ, và tôi nghĩ rằng nó sẽ dễ dàng hơn nhiều để hiểu nếu ai đó có thể dạy cho tôi thuật toán mục đích chung. Có lẽ trong một thời trang theo định hướng nút.

tôi sẽ cố gắng và cụm từ vấn đề đơn giản, nhưng tôi có thể hiểu lầm công trình như thế nào backprop, vì vậy nếu điều này không có ý nghĩa, bỏ qua nó:

Đối với bất kỳ nút cho trước N, do trọng lượng đầu vào/giá trị, trọng lượng/giá trị đầu ra và lỗi/chi phí của tất cả các nút mà N đưa ra, làm cách nào để tính toán "chi phí" của N và sử dụng điều này để cập nhật trọng số đầu vào?

+0

Đây là một câu hỏi khá rộng. Bạn có thể có may mắn hơn tại http://dsp.stackexchange.com. – mtrw

+6

Bạn có thể tìm thấy một lời giải thích rất tốt, với hình ảnh, tại http://galaxy.agh.edu.pl/~vlsi/AI/backp_t_en/backprop.html –

+1

Đó là một lời giải thích tuyệt vời Marc! Tôi không chắc chắn như vậy tôi hiểu bit bit mặc dù. Liệu df (e)/de có nghĩa là đạo hàm đối với toàn bộ tổng trọng số (e) hay chỉ là đầu vào của kết nối mà chúng ta đang cố cập nhật? Vì vậy, nói rằng nút có một chức năng kích hoạt tuyến tính, sẽ df (e)/de luôn luôn bằng 1 (f (e) = e -> df (e)/de = 1)? Hoặc nó sẽ luôn luôn bằng trọng lượng chúng tôi đang cập nhật (f (e) = w1x1 + w2x2 -> df (e)/dx1 = w1) –

Trả lời

14

Hãy xem xét một nút trong mạng truyền lại (BP). Nó có nhiều đầu vào, và tạo ra một giá trị đầu ra. Chúng tôi muốn sử dụng sửa lỗi để đào tạo, do đó, nó cũng sẽ cập nhật trọng số dựa trên ước tính lỗi cho nút.

Mỗi nút có giá trị thiên vị, θ. Bạn có thể coi đây là trọng số đối với đầu vào nội bộ có giá trị 1.0 không đổi.

Kích hoạt là tổng kết các đầu vào có trọng số và giá trị thiên vị. Hãy tham khảo nút quan tâm của chúng tôi là j, các nút trong lớp trước với các giá trị của i và các nút trong lớp kế tiếp với các giá trị của k. Sự hoạt hóa của nút j của chúng tôi là sau đó:

ròng j = Σ i (o i × w ij) + θ j

Đó là, giá trị kích hoạt cho j là tổng của các sản phẩm đầu ra từ nút i và nút liên kết trọng số tương ứng i và j, cộng với giá trị thiên vị.

Sản lượng của nút j của chúng tôi là một chức năng chuyển giao các hoạt:

o j = f (net j)

f là thường hàm sigmoid.

f (net j) = 1/(1 + e -net j)

Các hàm sigmoid có một cách dễ dàng để xác định hàm đầu tiên:

f '(net j) = f (net j) × (1.0 - f (net j))

Dù hàm truyền chúng tôi sử dụng, chúng ta cần phải biết làm thế nào để tính phái sinh đầu tiên của mình. BP hoạt động theo độ dốc thông qua Chain Rule, vì vậy điều đó rất quan trọng. Phương trình trên sẽ khác với hàm truyền khác.

Cho đến nay, chúng tôi biết cách nhận các giá trị đầu vào, tính toán kích hoạt, tính toán đầu ra và tính toán đạo hàm đầu tiên của quá trình kích hoạt. Bây giờ chúng ta cần phải đối phó với các lỗi và điều chỉnh trọng lượng.

Giá trị được sử dụng để ước tính lỗi nút trong BP được gọi là δ. Δ cho một nút tỷ lệ với đạo hàm đầu tiên của kích hoạt của nút và một thuật ngữ lỗi mà nó nhận được. Có hai công thức cho thuật ngữ lỗi nhận được, một cho các nút đầu ra và một cho các nút ẩn.

quát,

δ = f '(net) × (lỗi nhận)

Đối với một nút đầu ra,

δ đầu ra = f' (net) × (t - o)

trong đó t là giá trị mong đợi ở nút đầu ra đó, và o là giá trị đầu ra thực tế của nút đầu ra đó.

Đối ẩn của chúng tôi nút j, nó là như thế này:

δ j = f '(net j) × Σ k k × w jk)

δ cho nút j của chúng tôi, 2 j, là sản phẩm của đạo hàm đầu tiên của tran chức năng sfer cho thời gian kích hoạt tổng của các đồng bằng trong lớp tiếp theo (gần với đầu ra) nhân với mỗi giá trị của trọng lượng kết nối. Với điều đó trong tay, chúng ta có thể tính toán làm thế nào để điều chỉnh trọng lượng đi đến lớp trước của các nút (gần với đầu vào).

dw ij = L × o i × δ j

dw đây đại diện cho "sự thay đổi về trọng lượng", vì vậy những gì phương trình cho biết là sự thay đổi trong trọng lượng từ nút i đến nút j của chúng ta bằng sản phẩm của tham số học L (thường là giá trị tương tự cho tất cả các nút trong mạng), giá trị đầu ra của nút i và δ (cụm từ lỗi) cho nút j của chúng ta.

Điều chỉnh giá trị thiên vị tương tự như điều chỉnh trọng số.

j = L × f (θ j) × δ j

dθ đây đại diện cho "sự thay đổi trong θ". Chúng ta phải áp dụng hàm truyền cho giá trị thiên vị θ j để lấy cụm từ như đầu ra từ nút. Nếu không, nó trông giống như phương trình khác.

Tôi nên lưu ý rằng việc tính toán các thay đổi trọng lượng phải được thực hiện trên toàn mạng và sau đó áp dụng các thay đổi sau khi tất cả những thay đổi đó được tính toán.

+0

Có thể giải thích tại sao đạo hàm của hàm mục tiêu cho lớp cuối cùng là sự khác biệt giữa các giá trị quan sát và được dự đoán? Hãy nói rằng chúng ta đang sử dụng hàm sigmoid để lấy đầu vào và chuyển đổi nó thành giá trị phi tuyến ... – user2543622

+0

Ý tôi là tôi đã nhìn vào đạo hàm của hàm mục tiêu của hồi quy logistic và tôi hiểu rằng đạo hàm bằng (khác biệt giữa dự đoán) * x_varaiable .. .so tại sao trong trường hợp của mạng thần kinh chúng ta thoát khỏi x_variable và giữ chỉ (sự khác biệt giữa dự đoán) một phần? – user2543622

+0

@ user2543622, đạo hàm của hàm mục tiêu thực sự là gradient của hàm mục tiêu này, là vector của đạo hàm của MSE (hàm mục tiêu thường được sử dụng). –

0

Đối với bất kỳ nút cho trước N, do trọng lượng đầu vào/giá trị, sản lượng trọng lượng/giá trị và các lỗi/chi phí của tất cả các nút mà N đầu ra đến, làm thế nào để tính toán "chi phí" của N và sử dụng điều này để cập nhật đầu vào trọng lượng?

Bạn chưa bao giờ thực sự quan tâm đến các chức năng chi phí trung gian của từng tế bào thần kinh. Thay vào đó bạn quan tâm đến chi phí đầu ra cuối cùng; luôn luôn. Sau đó sử dụng điều đó để truyền lại tỷ lệ thay đổi theo yêu cầu của các tế bào thần kinh trong các lớp phía sau tất cả các cách để phía trước.

Các vấn đề liên quan