Автор: Александр Гончаренко Редактор: Александр Наздрюхин
Часто лейблы в данных для обучения бывают шумными, а это негативно сказывается на качестве полученной модели. Если мы не можем объяснить нейросети “что есть что” в тренировочной выборке — она будет вести себя в проде практически непредсказуемо.
Один из методов борьбы с этой проблемой — Negative Learning.
Обычно мы обучаем нейросеть так, чтобы она предсказывала правильные ответы. Как мы это делаем? Показываем ей фотографию и говорим: “Это лейбл кошки”.
В этом случае мы используем cross entropy loss:
$L(p,y)=-\sum_{}{ylogp}$
Если мы ошибемся в лейблах — нейросеть попытается найти закономерности, которых на самом деле нет.
Авторы этой статьи подумали: “А почему бы не сделать все наоборот?”. Действительно, можно же обучить нейросеть и сказать ей: “Это лейбл не собаки” или “Это лейбл не хомяка”, если на картинке изображена кошка. Мы просто возьмем $y$ из нашего датасета и заменим его на случайный $\overline{y}$. Но тогда нам придется изменить лосс-функцию. Как это сделать? Вместо $p$ взять $1-p$.
$L(p,y)=-\sum_{}{\overline{y}log(1-p)}$
И все готово 😉
В итоге в коде обучения нужно только:
Генерировать новый $\overline{y}$ лучше каждый раз для того, чтобы передавать в нейросеть как можно больше информации.
В случае обычного обучения (назвовем его PL, или Positive learning), если доля неверных лейблов $n$, то мы будем ошибаться с вероятностью $n$.
В случае NL, или Negative Learning мы ошибемся с очень малой долей вероятности. Давайте представим: у нас все те же $n$ всех лейблов неправильно размечены + у нас всего $C$ классов.