CẬP NHẬT (18/04/18): Câu trả lời cũ vẫn tỏ ra hữu ích trên mô hình của tôi. Bí quyết là mô hình hóa chức năng phân vùng và phân phối riêng biệt, do đó khai thác sức mạnh của softmax.
Xem xét vector quan sát của bạn để chứa nhãn. (1 nếu mẫu i chứa nhãn m, 0 nếu không). Vì vậy, mục tiêu sẽ là mô hình hóa ma trận theo cách trên mỗi mẫu. Do đó mô hình đánh giá . Xem xét mở rộng để đạt được hai thuộc tính:ymyim=δimF(yi,xi)=−logP(yi|xi)yim=Z⋅P(ym)
- Hàm phân phối:∑mP(ym)=1
- Hàm phân vùng: ước tính số lượng nhãnZ
Sau đó, đó là vấn đề mô hình hóa hai cái riêng biệt. Hàm phân phối được mô hình hóa tốt nhất với lớp softmax và chức năng phân vùng có thể được mô hình hóa bằng một đơn vị tuyến tính (trong thực tế tôi đã cắt nó ở mức . Mô hình phức tạp hơn như đơn vị Poisson có thể hoạt động tốt hơn). Sau đó, bạn có thể chọn áp dụng tổn thất phân tán (KL trên phân phối và MSE trên phân vùng) hoặc bạn có thể thử mất sau trên sản phẩm của họ.max(0.01,output)
Trong thực tế, sự lựa chọn tối ưu hóa cũng tạo ra một sự khác biệt rất lớn. Kinh nghiệm của tôi với phương pháp tiếp cận nhân tố là nó hoạt động tốt nhất theo Adadelta (Adagrad không hoạt động với tôi, chưa thử RMSprop, các màn trình diễn của SGD tùy thuộc vào tham số).
Nhận xét bên lề về sigmoid : Tôi chắc chắn đã thử sigmoid + crossentropy và nó đã không hoạt động. Mô hình có xu hướng chỉ dự đoán và không thể nắm bắt được sự biến đổi trong chức năng phân phối. (aka, bằng cách nào đó nó khá hữu ích để mô hình hóa phân vùng và có thể có lý do toán học đằng sau nó)Z
CẬP NHẬT : (Suy nghĩ ngẫu nhiên) Có vẻ như sử dụng quy trình Dirichlet sẽ cho phép kết hợp một số trước về số lượng nhãn?
CẬP NHẬT : Bằng thử nghiệm, phân kỳ KL đã sửa đổi vẫn có xu hướng cung cấp đầu ra đa lớp thay vì đầu ra đa nhãn.
(Câu trả lời cũ)
Trải nghiệm của tôi với entropy chéo sigmoid không được dễ chịu cho lắm. Hiện tại tôi đang sử dụng phân kỳ KL đã được sửa đổi. Nó có hình thức
Loss(P,Q)=∑x|P(x)−Q(x)|⋅∣∣∣logP(x)Q(x)∣∣∣=∑x∣∣∣(P(x)−Q(x))⋅logP(x)Q(x)∣∣∣
Trong đó là phân phối giả đích và là phân phối giả được dự đoán (nhưng hàm thực sự đối xứng nên không thực sự quan trọng)
P(x)Q(x)
Chúng được gọi là phân phối giả vì không được chuẩn hóa. Vì vậy, bạn có thể có nếu bạn có 2 nhãn cho một mẫu cụ thể.∑xP(x)=2
Kera
def abs_KL_div(y_true, y_pred):
y_true = K.clip(y_true, K.epsilon(), None)
y_pred = K.clip(y_pred, K.epsilon(), None)
return K.sum( K.abs( (y_true- y_pred) * (K.log(y_true / y_pred))), axis=-1)