Я пытаюсь обучить нейронную сеть для классификации, но у меня довольно шумные ярлыки (около 30% ярлыков ошибочны).
Потеря перекрестной энтропии действительно работает, но мне было интересно, есть ли альтернативы, более эффективные в этом случае? или потеря кросс-энтропии является оптимальной?
Я не уверен, но я думаю о некоторой «отсечке» кросс-энтропийной потери, так что потеря для одной точки данных будет не больше некоторой верхней границы, будет ли это работать?
Спасибо!
Обновление
Согласно ответу Лукаса, я получил следующее для производных для прогнозного выхода и ввода функции softmax . Таким образом, я предполагаю, что по сути это добавление сглаживающего члена к производным.
Производные для исходной кросс-энтропийной потери:
Обновление
Я только что случайно прочитал статью Google, в которой применяется та же формула, что и в ответе Лукаса, но с разными интерпретациями.
В разделе 7 Регуляризация модели с помощью сглаживания меток
Это (перекрестная потеря энтропии), однако, может вызвать две проблемы. Во-первых, это может привести к переобучению: если модель учится назначать полную вероятность метке основополагающего факта для каждого примера обучения, обобщение не гарантируется. Во-вторых, он способствует тому, что различия между самым большим логитом и всеми остальными становятся большими, и это, в сочетании с ограниченным градиентом , снижает способность модели адаптироваться. Интуитивно это происходит потому, что модель становится слишком уверенной в своих прогнозах.
Но вместо того, чтобы добавить сглаживающий термин к предсказаниям, они добавили его в основную истину , которая оказалась полезной.
В наших экспериментах ImageNet с классами K = 1000 мы использовали u (k) = 1/1000 и = 0.1. Для ILSVRC 2012 мы обнаружили постоянное улучшение примерно на 0,2% абсолютного как для ошибки топ-1, так и для ошибки топ-5.
Ответы:
Здесь нужно изменить модель, а не потерю. Ваша цель по-прежнему состоит в том, чтобы правильно классифицировать как можно больше точек данных (что определяет потери), но ваши предположения о данных изменились (которые закодированы в статистической модели , в данном случае нейронной сети).
Пусть - вектор вероятностей классов, создаваемых нейронной сетью, а - потеря перекрестной энтропии для метки . Чтобы явно учесть предположение, что 30% меток являются шумом (предполагается, что они равномерно случайны), мы могли бы изменить нашу модель для полученияpt ℓ(yt,pt) yt
вместо этого и оптимизировать
где - количество классов. Это на самом деле будет вести себя в соответствии с вашей интуицией, ограничивая потери до конечной.N
источник
Я признаю, что это форум статистики, и ожидание сосредоточено на математических выводах, но если это может быть полезно, и вы используете Python, есть пакет для классификации с шумными метками
cleanlab
: https://github.com/ cgnorthcutt / cleanlab / .Пакет
cleanlab
Pythonpip install cleanlab
, для которого я являюсь автором, находит ошибки меток в наборах данных и поддерживает классификацию / обучение с шумными метками. Работает с Scikit-Learn, PyTorch, Tensorflow, FastText и т. Д.Для обучения с шумными метками.
Чтобы найти ошибки метки в вашем наборе данных.
Некоторые примеры с FastText (NLP) и PyTorch (MNIST AlexNet).
Документация: https://l7.curtisnorthcutt.com/cleanlab-python-package
источник