← Вернуться к списку

Максимизировать потерю на нецелевой переменной

Краткое содержание

У меня есть нейронная сеть, которая должна уметь классифицировать документы по целевому классу А. Проблема в том, что на самом деле сеть классифицирует класс В, который является более простой задачей. Чтобы прояснить проблему: мне необходимо классифицировать документы из различных источников. В обучающих данных каждый источник встречается многократно, но сеть должна быть способна работать с неизвестными источниками. Все документы от одного источника имеют один и тот же класс. В данном случае проще идентифицировать источники, чем целевой класс, поэтому на практике сеть фактически не определяет целевой класс, а лишь источник. Решение этой проблемы заключается в том, чтобы убедиться, что модель плохо справляется с идентификацией источников в обучающих данных, при этом правильно присваивая правильные целевые метки. Я думаю, первым шагом будет создание двух выходных слоев — один для целевого класса, другой для идентификации источника документа. Однако мой подход терпит неудачу именно на этапе обучения модели: я хочу минимизировать потерю (loss) на выходе целевых классов, одновременно максимизируя потерю на выходе, связанном с источником.

Полный текст

Максимизация потерь на нерелевантной переменной

Задать вопрос Задан6 лет, 1 месяц назад Изменёнсегодня Просмотрен168 раз Задан6 лет, 1 месяц назад 2$\begingroup$
У меня есть нейронная сеть, которая должна классифицировать документы по целевой метке А. Проблема в том, что сеть фактически классифицирует метку В, что является более простой задачей.

Чтобы прояснить проблему: мне нужно классифицировать документы из разных источников. В обучающих данных каждый источник встречается многократно, но сеть должна работать с неизвестными источниками. Все документы одного источника имеют одинаковый класс. В данном случае легче идентифицировать источники, чем целевую метку, поэтому на практике сеть не распознает целевую метку, а определяет источник.

Решение проблемы заключается в том, чтобы убедиться, что модель плохо справляется с идентификацией источников в обучающих данных, при этом правильно присваивая правильные целевые метки.

Я думаю, первый шаг — это получить два выходных слоя, один для целевой метки и другой для идентификации источника документа. Однако мой подход терпит неудачу на этапе обучения: я хочу минимизировать потери на целевом выходе, но максимизировать их на нерелевантном выходе. Но если я максимизирую потерю на нерелевантном выходе, это не означает, что сеть "разучивается" нерелевантным меткам. Итак, основной вопрос относительно нерелевантного выхода звучит так:

Коротко говоря: как определить процедуру обучения, минимизирующую потери на нерелевантном выходном слое, а затем максимизирующую эти потери во всех предыдущих слоях? Моя цель состоит в том, чтобы иметь сеть, хорошо классифицирующую метку А, но плохую в связанной метке В. Если кто-то хочет привести пример кода, моя предпочтительная платформа — PyTorch.
нейронные-сети функции-потерь Поделиться Улучшить этот вопрос Следить заданОкт 19, 2019 в 12:43 Wietse de Vries 1211 бронзовый значок $\endgroup$
Добавить комментарий | 2 ответа отсортированы следующим образом: Сброс к умолчанию По наибольшему количеству баллов (по умолчанию) По дате изменения (новейшие сначала) По дате создания (старейшие сначала)
0$\begingroup$
Вы можете максимизировать потери, выполнив операцию $1 - \text{потеря}$, если диапазон потерь находится между 1 и 0. Тем не менее, я не уверен, поможет ли это. Сеть может просто распространять веса классификатора источника таким образом, чтобы всегда выдавать неправильный ответ. Более разумный подход — вручную создать признаки документов, которые делают их менее узнаваемыми по источнику. Если документ явно указывает источник, удалите эту информацию. Это может помочь. Кроме того, еще одним способом является использование документов из большего числа источников, чтобы сеть не могла использовать источник для классификации метки. Надеюсь, смогу быть полезен.
Поделиться Улучшить этот ответ Следить ответил Окт 21, 2019 в 11:14 Clement 1,755 9 серебряных значков 24 бронзовых значка $\endgroup$
Добавить комментарий | 0$\begingroup$
Дополнительная информация о документах будет полезной. Предположу, что у вас есть веб-страницы с различных сайтов, вы подаете HTML-документы сети, и страница содержит название сайта или URL-адрес, который сеть использует для маркировки. Я предполагаю, что вы используете рекуррентную нейронную сеть (RNN) или аналогичную архитектуру для задачи классификации.

Ваш вопрос сводится к тому, как определить момент, когда ваша сеть начинает использовать признак идентификации источника (название или URL), и запретить ей его использовать. Если вы сможете выполнить предварительную обработку и выявить место в документе, где указано имя или URL источника, то можно пометить каждое слово/символ входных данных этой информацией. Затем вы можете добавить большой регуляризационный член потерь, который снижает весовые коэффициенты, связанные с отмеченными словами/символами на первом уровне.

Однако лучшим решением было бы удалить все экземпляры заголовка/URL, содержащие сведения о сайте, как предложил @clement-hui. Этот метод чище и проще реализовать, чем описанный выше.

Возможно, ваша сеть косвенно идентифицирует источник документа немного сложнее, и приведенная выше предварительная обработка недостаточна или бесполезна. В таком случае стоит рассмотреть случайное разделение вашего документа на фрагменты и присвоение каждому фрагменту метки соответствующего документа. Вероятно, некоторые фрагменты не будут содержать информации об источнике, и сеть вынуждена будет сосредоточиться на других признаках.