Класифікація з галасливими мітками?


14

Я намагаюся навчити нейронну мережу для класифікації, але мітки, які у мене є, досить шумні (близько 30% міток неправильні).

Втрата перехресної ентропії справді працює, але мені було цікаво, чи є в цьому випадку якісь альтернативи? чи оптимальна втрата перехресної ентропії?

Я не впевнений, але я думаю про те, щоб дещо "відрізати" крос-ентропійну втрату, так що втрата для однієї точки даних буде не більшою за верхню межу, чи буде це спрацьовувати?

Дякую!

Оновлення
Відповідно до відповіді Лукаса, я отримав наступне для похідних для виведення прогнозу та введення функції softmax . Тож я гадаю, що по суті це додає до похідних термін згладжування . Похідні для початкової втрати перехресної ентропії: z 3уz pi=0,3/N+0,7yil=-tilog(pi)l37N

pi=0,3/N+0,7уi
л=-тiжурнал(pi)
l
луi=-тiжурнал(pi)pipiуi=-0,7тipi=-тi37N+уi
лzi=0,7jтjpjуjzi=уijтjуj37N+уj-тiуi37N+уi
луi=-тiуi
лzi=уi-тi
Будь ласка, повідомте мене, якщо я помиляюся. Дякую!

Оновлення
Я щойно прочитав документ Google, який застосовує ту саму формулу, що і у відповіді Лукаса, але з різними тлумаченнями.

У розділі 7 Регулялізація моделі за допомогою згладжування міток

Це (перехресна втрата ентропії), однак, може спричинити дві проблеми. По-перше, це може призвести до надмірної підгонки: якщо модель навчиться присвоювати повну ймовірність мітці "земна правда" для кожного навчального прикладу, не гарантується узагальнення. По-друге, це заохочує відмінності між найбільшим logit та всіма іншими стати великими, і це в поєднанні з обмеженим градієнтом знижує здатність моделі адаптуватися. Інтуїтивно це відбувається тому, що модель стає надто впевненою у своїх передбаченнях.л/zк

Але замість того, щоб додавати термін згладжування до прогнозів, вони додали це до основної істини , яка виявилася корисною.

введіть тут опис зображення

У наших експериментах ImageNet з K = 1000 класів ми використовували u (k) = 1/1000 і = 0,1. Для ILSVRC 2012 ми виявили стабільне поліпшення приблизно на 0,2%, як для помилки топ-1, так і для помилки топ-5.ϵ


3
На цю тему є численні роботи - github.com/subeeshvasu/Awesome-Learning-with-Label-Noise
guest_anonym

Відповіді:


10

Тут потрібно правильно змінити модель, а не втрату. Ваша мета все-таки правильно класифікувати якомога більше точок даних (що визначає втрати), але ваші припущення щодо даних змінилися (які закодовані в статистичній моделі , нейронна мережа в цьому випадку).

Нехай - вектор імовірностей класів, що створюються нейронною мережею, і є перехресною ентропією втрати для мітки . Щоб чітко врахувати припущення про те, що 30% міток - шум (вважається рівномірно випадковим), ми могли б змінити нашу модель, щоб випуститиpт(ут,pт)ут

p~т=0,3/N+0,7pт

замість цього і оптимізуйте

т(ут,0,3/N+0,7pт),

де - кількість класів. Це насправді буде поводитися дещо відповідно до вашої інтуїції, обмежуючи втрату кінцевою.N


Як дорівнює . Якщо ми візьмемо два випадки класу, то буде . Аналогічно для . Чому термін? Спасибіp~т0,3/N+0,7pтp~тПrоб(у~=+1|т)=0,7Пrоб(у=+1|т)+0,3Пrоб(у=-1|т)1/NПrоб(у~=-1|т)=0,7Пrоб(у=-1|т)+0,3Пrоб(у=+1|т)1/N
обійдіть

0

Я визнаю, що це форум статистики, і очікування - це фокус на математичних виведеннях, але якщо це може бути корисним і ви використовуєте Python, є пакет для класифікації з галасливими мітками під назвою cleanlab: https://github.com/ cgnorthcutt / cleanlab / .

Пакет cleanlabPython pip install cleanlab, для якого я є автором, знаходить помилки міток у наборах даних та підтримує класифікацію / навчання з галасливими мітками. Він працює з scikit-learn, PyTorch, Tensorflow, FastText тощо.

Для навчання з галасливими етикетками.

# 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)

Щоб знайти помилки мітки у вашому наборі даних.

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, 
)

Деякі приклади з FastText (NLP) та PyTorch (MNIST AlexNet).

Документація: https://l7.curtisnorthcutt.com/cleanlab-python-package

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.