Смешение классов в нейронных сетях (обучение против тестирования)

Вопрос или проблема

Я новичок в глубоком обучении и запутался из-за того, что нейронная сеть обучается на определенных классах и тестируется на других. Допустим, я хочу создать сверточную нейронную сеть, которая будет определять авторство текста (идентификация автора определенного текста). Например, эта модель обучается на 10 000 авторах/классах на сотнях тысяч текстов. Как модель обобщает то, что она узнала, чтобы предсказать автора нового автора/класса в тестовом наборе? Разве она не будет обучена идентифицировать тех авторов, на которых она изначально обучалась, а не нового? Например, CNN, который обучается решать, является ли изображение котом или собакой, обучается соответствующим образом, и при тестировании он предсказывает те же классы.

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

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

Тем временем вы можете попробовать создать категорию под названием “другое” и обучить вашу модель использовать эту категорию, когда она не может отнести к известному классу.

Это не произойдет

На очень простом языке, модель изучает характеристики в терминах признаков и сопоставляет их с результатом, который вы предоставляете как класс. Это сопоставление может быть очень простым или очень сложным (большая нейронная сеть).

Какие бы данные она ни получила, она разделит все пространство, и все будет сопоставлено с классом. Например, >10000 будет сопоставлено с Class-A в зависимости от данных, так что она будет предсказывать Class-A даже для 1 миллиона, если вы не обучите ее с новыми данными для >10k-20K-Class-a, 20k-30k-Class-b и т.д.

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

Использование “Другой как класс” будет работать только в том случае, если и данные, и класс новые. Например, если модель видит, что данные совпадают на 80% с Author-A, она предскажет Author-A с уверенность 0.8, и вам придется это принять, хотя на самом деле автор другой, но у модели не было четких данных во время обучения.

“Другой” может помочь, если данные относятся к новому типу автора, а модель не уверена ни в одном из авторов.

На более легкой ноте – Мой трехлетний ребенок был очень уверен в том, что изображение зимородка является попугаем. Это было его первое взаимодействие с зимородком.

Ответ или решение

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

Обучение и тестирование нейронной сети

Когда вы обучаете нейронную сеть, например сверточную нейронную сеть (CNN), на конкретных классах (в вашем случае — авторах текстов), модель учится находить определенные закономерности и характеристики, которые помогают ей различать эти классы. Если модель обучалась на 10,000 авторах, то она в первую очередь воспринимает именно эти классы и соответствующие им зависимости.

Обобщение на новые классы

Теперь, если вы попробуете протестировать модель на классах, которые не были представлены во время обучения (например, на новых авторах), она, скорее всего, не сможет правильно идентифицировать их. Это связано с тем, что модель с точки зрения механизма работы не была обучена на определение этих новых классов и, следовательно, не знает, как их классифицировать.

Подходы к решению проблемы

  1. Подход с "Другими" классами: Один из способов — создать класс "Другое" или "Неизвестный автор". Вы можете обучить модель так, чтобы она относила менее уверенные предсказания к этому классу. В случае, если модель не уверена в том, кто автор (например, предсказывая с большой неуверенностью), она может отнести текст к классу "Другое". Этот подход работает, когда новые данные действительно отличаются от известных классов.

  2. Непрерывное обучение: Если возможно, вы можете собирать данные новых классов и впоследствии переобучить модель. Это позволит модели постоянно адаптироваться к новым данным и улучшать свои предсказания.

  3. Обобщение и перенос обучения: Другой вариант — использовать метод переноса обучения, где вы сначала обучаете модель на больших классах, а затем дообучаете ее на ограниченном наборе данных с новыми классами. Это может помочь модели лучше уловить новые связи.

Пример с изображениями

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

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...