Phân loại với nhãn ồn?


13

Tôi đang cố gắng đào tạo một mạng lưới thần kinh để phân loại, nhưng các nhãn tôi có khá ồn ào (khoảng 30% nhãn là sai).

Mất mát entropy chéo thực sự hoạt động, nhưng tôi đã tự hỏi liệu có sự thay thế nào hiệu quả hơn trong trường hợp này? hoặc là mất entropy chéo là tối ưu?

Tôi không chắc nhưng tôi đang nghĩ đến việc "cắt" phần nào sự mất entropy chéo, sao cho tổn thất cho một điểm dữ liệu sẽ không lớn hơn một số giới hạn trên, điều đó có hiệu quả không?

Cảm ơn!

Cập nhật
Theo câu trả lời của Lucas, tôi đã nhận được các dẫn xuất sau cho đầu ra dự đoán và đầu vào của hàm softmax z . Vì vậy, tôi đoán về cơ bản nó đang thêm một thuật ngữ làm mịn 3yz đến các dẫn xuất. pi=0,3/N+0,7yil=-Σtilog(pi)l37N

pi=0.3/N+0.7yi
l=tilog(pi)
l
lyi=tilog(pi)pipiyi=0.7tipi=ti37N+yi
Các dẫn xuất cho mất mát entropy ban đầu: l
lzi=0.7jtjpjyjzi=yijtjyj37N+yjtiyi37N+yi
l
lyi=tiyi
Xin vui lòng cho tôi biết nếu tôi sai. Cảm ơn!
lzi=yiti

Cập nhật
Tôi tình cờ đọc được một bài báo của Google áp dụng cùng một công thức như trong câu trả lời của Lucas nhưng với những cách hiểu khác nhau.

Trong Phần 7 Chuẩn hóa mô hình thông qua làm mịn nhãn

l/zk

Nhưng thay vì thêm thuật ngữ làm mịn vào các dự đoán, họ đã thêm nó vào sự thật nền tảng , hóa ra lại hữu ích.

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

ϵ


3
Có rất nhiều tác phẩm về chủ đề này - github.com/subeeshvasu/Awgie-Learning-with-Label-Naty
guest_anonymous

Câu trả lời:


10

Điều đúng đắn cần làm ở đây là thay đổi mô hình chứ không phải mất mát. Mục tiêu của bạn vẫn là phân loại chính xác càng nhiều điểm dữ liệu càng tốt (xác định tổn thất), nhưng giả định của bạn về dữ liệu đã thay đổi (được mã hóa trong mô hình thống kê , mạng lưới thần kinh trong trường hợp này).

pt(yt,pt)yt

p~t=0.3/N+0.7pt

thay vào đó và tối ưu hóa

t(yt,0.3/N+0.7pt),

N


p~t0.3/N+0.7ptp~tProb(y~=+1|t)=0.7Prob(y=+1|t)+0.3Prob(y=1|t)Prob(y~=1|t)=0.7Prob(y=1|t)+0.3Prob(y=+1|t)1/N

0

Tôi nhận ra rằng đây là một diễn đàn thống kê và kỳ vọng là tập trung vào các dẫn xuất toán học, nhưng nếu nó có thể hữu ích và bạn đang sử dụng Python, có một gói để phân loại với các nhãn ồn ào được gọi là cleanlab: https://github.com/ cgnorthcutt / Cleanlab / .

Các cleanlabgói Python, pip install cleanlab, mà Tôi là tác giả, phát hiện dán nhãn sai sót trong bộ dữ liệu và hỗ trợ phân loại / học tập với nhãn ồn ào. Nó hoạt động với scikit-learn, PyTorch, Tensorflow, FastText, v.v.

Đối với việc học với nhãn ồn ào.

# Code taken from https://github.com/cgnorthcutt/cleanlab
from cleanlab.classification import LearningWithNoisyLabels
from sklearn.linear_model import LogisticRegression

# Learning with noisy labels in 3 lines of code.

# Wrap around any classifier. Works with sklearn/pyTorch/Tensorflow/FastText/etc.
lnl = LearningWithNoisyLabels(clf=LogisticRegression())
lnl.fit(X = X_train_data, s = train_noisy_labels)
# Estimate the predictions you would have gotten by training with *no* label errors.
predicted_test_labels = lnl.predict(X_test)

Để tìm lỗi nhãn trong tập dữ liệu của bạn.

from cleanlab.latent_estimation import estimate_cv_predicted_probabilities

# Find the indices of label errors in 2 lines of code.

probabilities = estimate_cv_predicted_probabilities(
    X_train_data, 
    train_noisy_labels, 
    clf=LogisticRegression(),
)
label_error_indices = get_noise_indices(
    s = train_noisy_labels, 
    psx = probabilities, 
)

Một số ví dụ với FastText (NLP) và PyTorch (MNIST AlexNet).

Tài liệu: https://l7.curtisnorthcutt.com/cleanlab-python-package

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.