Автор: Александр Гончаренко Редактор: Александр Наздрюхин

Введение

Часто лейблы в данных для обучения бывают шумными, а это негативно сказывается на качестве полученной модели. Если мы не можем объяснить нейросети “что есть что” в тренировочной выборке — она будет вести себя в проде практически непредсказуемо.

Один из методов борьбы с этой проблемой — 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)}$

И все готово 😉

В итоге в коде обучения нужно только:

  1. Поменять лосс-функцию;
  2. Добавить сэмплирование $\overline{y}$.

Генерировать новый $\overline{y}$ лучше каждый раз для того, чтобы передавать в нейросеть как можно больше информации.

Positive Learning vs Negative Learning

Как часто мы ошибаемся?

В случае обычного обучения (назвовем его PL, или Positive learning), если доля неверных лейблов $n$, то мы будем ошибаться с вероятностью $n$.

В случае NL, или Negative Learning мы ошибемся с очень малой долей вероятности. Давайте представим: у нас все те же $n$ всех лейблов неправильно размечены + у нас всего $C$ классов.