2016-03-15 26 views
13

Tôi đang cố gắng triển khai chức năng mất SVM và độ dốc của nó. Tôi tìm thấy một số dự án ví dụ thực hiện hai, nhưng tôi không thể tìm ra cách họ có thể sử dụng chức năng mất mát khi tính toán gradient.Tính toán độ dốc của chức năng mất SVM

Dưới đây là công thức của chức năng mất: enter image description here

Những gì tôi không thể hiểu là làm thế nào tôi có thể sử dụng kết quả hàm tổn thất trong khi độ dốc tính toán?

Ví dụ dự án tính toán gradient như sau:

for i in xrange(num_train): 
    scores = X[i].dot(W) 
    correct_class_score = scores[y[i]] 
    for j in xrange(num_classes): 
     if j == y[i]: 
     continue 
     margin = scores[j] - correct_class_score + 1 # note delta = 1 
     if margin > 0: 
     loss += margin 
     dW[:,j] += X[i] 
     dW[:,y[i]] -= X[i] 

DW là cho kết quả gradient. Và X là mảng dữ liệu huấn luyện. Nhưng tôi không hiểu làm thế nào đạo hàm của hàm mất kết quả trong mã này.

+1

Bạn đang sử dụng ví dụ nào? – Prophecies

Trả lời

0

Nếu bề mặt nhỏ hơn 0 thì tổn thất bằng 0, do đó độ dốc của W cũng bằng 0. Nếu điểm dừng lớn hơn 0, thì độ dốc của W là sự phân chia một phần của sự mất mát.

0

Phương pháp tính toán độ dốc trong trường hợp này là Calculus (phân tích, KHÔNG phải số lượng!). Vì vậy, chúng tôi phân biệt chức năng mất mát đối với W (yi) như thế này:! enter image description here

và đối với W (k) khi j với = yi là:

enter image description here

Các 1 chỉ là chỉ số để chúng ta có thể bỏ qua dạng giữa khi điều kiện là đúng. Và khi bạn viết mã, ví dụ bạn cung cấp là câu trả lời.

Vì bạn đang sử dụng ví dụ cs231n, bạn chắc chắn nên kiểm tra note và video nếu cần.

Hy vọng điều này sẽ hữu ích!

+0

Làm thế nào mà họ phát triển các công thức này từ sự mất mát SVM cơ bản? Bạn có thể giải thích chi tiết hơn không? Cảm ơn –

+1

@UriAbramson Xin chào! Đây thực sự là tính toán cơ bản. Phân biệt (w (j) .T * xi - w (yi) .T * xi + delta) đối với w (yi), chúng ta nhận được -xi, và để phân biệt đối với w (j), ta lấy xi (khi chức năng chỉ báo là đúng cho cả hai trường hợp). Vâng, vì trang web không hỗ trợ hiển thị phương trình, nên kiểm tra [ghi chú gốc] (http://cs231n.github.io/optimization-1/) và nếu bạn gặp khó khăn trong việc hiểu tính toán, tôi khuyên bạn nên xem học viện khan. Họ có video hướng dẫn tuyệt vời. Tôi hi vọng cái này giúp được. –

+1

Tôi hiểu ngay bây giờ. Tôi đã không tìm ra rằng 1 (....> 0) là một điều kiện. Cảm ơn bạn đã giải thích, bạn có thể giải thích tại sao bạn cần phải làm 2 dẫn xuất - một w.r.t Wj và w.r.t Wyi khác không? Làm thế nào nó hoạt động..? –

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