Clasificación con etiquetas ruidosas?

13

Estoy tratando de entrenar una red neuronal para la clasificación, pero las etiquetas que tengo son bastante ruidosas (alrededor del 30% de las etiquetas están equivocadas).

La pérdida de entropía cruzada realmente funciona, pero me preguntaba si hay alguna alternativa más efectiva en este caso. o es la pérdida de entropía cruzada el óptimo?

No estoy seguro, pero estoy pensando en "recortar" un poco la pérdida de entropía cruzada, de modo que la pérdida para un punto de datos no sea mayor que un límite superior, ¿funcionará?

¡Gracias!

Actualización
Según la respuesta de Lucas, obtuve lo siguiente para las derivadas para la salida de predicción y la entrada de la función softmax . Así que supongo que esencialmente está agregando un término de suavizado a las derivadas. Derivados para la pérdida de entropía cruzada original: z 3yz pi=0.3/N+0.7yil=-tilog(pi)l37 7norte

pagyo=0,3/ /norte+0.7yyo
l=-tyoIniciar sesión(pagyo)
l
lyyo=-tyoIniciar sesión(pagyo)pagyopagyoyyo=-0.7tyopagyo=-tyo37 7norte+yyo
l
lzyo=0.7jtjpagjyjzyo=yyojtjyj37 7norte+yj-tyoyyo37 7norte+yyo
l
lyyo=-tyoyyo
lzyo=yyo-tyo
Avíseme si estoy equivocado. ¡Gracias!

Actualización
Acabo de leer un artículo de Google que aplica la misma fórmula que en la respuesta de Lucas pero con diferentes interpretaciones.

En la Sección 7, Regularización del modelo mediante suavizado de etiquetas

l/ /zk

Pero en lugar de agregar el término de suavizado a las predicciones, lo agregaron a la verdad básica , lo que resultó ser útil.

ingrese la descripción de la imagen aquí

ϵ

dontloo
fuente
3
Existen numerosos trabajos sobre este tema: github.com/subeeshvasu/Awesome-Learning-with-Label-Noise
guest_anonym

Respuestas:

10

Lo que hay que hacer aquí es cambiar el modelo, no la pérdida. Su objetivo sigue siendo clasificar correctamente tantos puntos de datos como sea posible (lo que determina la pérdida), pero sus suposiciones sobre los datos han cambiado (que están codificadas en un modelo estadístico , la red neuronal en este caso).

pagt(yt,pagt)yt

pag~t=0,3/ /norte+0.7pagt

en cambio y optimizar

t(yt,0,3/ /norte+0.7pagt),

norte

Lucas
fuente
pag~t0,3/ /norte+0.7pagtpag~tPAGrosi(y~=+1El |t)=0.7PAGrosi(y=+1El |t)+0,3PAGrosi(y=-1El |t)PAGrosi(y~=-1El |t)=0.7PAGrosi(y=-1El |t)+0,3PAGrosi(y=+1El |t)1/ /norte
0

Reconozco que este es un foro de estadísticas y la expectativa se centra en las derivaciones matemáticas, pero si puede ser útil y está usando Python, hay un paquete para la clasificación con etiquetas ruidosas llamado cleanlab: https://github.com/ cgnorthcutt / cleanlab / .

El cleanlabpaquete Python pip install cleanlab, del cual soy autor, encuentra errores de etiqueta en conjuntos de datos y admite clasificación / aprendizaje con etiquetas ruidosas. Funciona con scikit-learn, PyTorch, Tensorflow, FastText, etc.

Para aprender con etiquetas ruidosas.

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

Para encontrar errores de etiqueta en su conjunto de datos.

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

Algunos ejemplos con FastText (NLP) y PyTorch (MNIST AlexNet).

Documentación: https://l7.curtisnorthcutt.com/cleanlab-python-package

cgnorthcutt
fuente