Как объединить категориальные и непрерывные функции ввода для обучения нейронной сети

16

Предположим, у нас есть два вида входных функций: категориальные и непрерывные. Категориальные данные могут быть представлены в виде горячего кода A, тогда как непрерывные данные - это просто вектор B в N-мерном пространстве. Кажется, что просто использование concat (A, B) не является хорошим выбором, потому что A, B - совершенно разные виды данных. Например, в отличие от B, в A. нет числового порядка. Поэтому мой вопрос заключается в том, как объединить такие два типа данных или существует какой-либо традиционный метод для их обработки.

На самом деле я предлагаю наивную структуру, представленную на картинке

введите описание изображения здесь

Как видите, первые несколько слоев используются для изменения (или отображения) данных A на некоторый средний вывод в непрерывном пространстве, а затем они объединяются с данными B, которые формируют новый входной объект в непрерывном пространстве для последующих слоев. Интересно, разумно ли это, или это просто игра "методом проб и ошибок". Спасибо.

JunjieChen
источник

Ответы:

5

Есть три основных подхода к решению этой проблемы:

  1. Построение двух моделей отдельно, а затем обучение алгоритму ансамбля, который получает выходные данные двух моделей в качестве входных данных.
  2. Объединение всех данных в один вектор / тензор в качестве шага предварительной обработки, а затем обучение простого одиночного ввода NN
  3. Предложенная вами архитектура с несколькими входами NN

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

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

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

Тадей Магайна
источник
0

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

  1. Древовидные алгоритмы (RF, XGB) обычно хорошо работают со смешанными классами, если только у вас нет особых требований к выходу или функции потерь, которые проще реализовать через нейронные сети.
  2. Если решено использовать нейронную сеть, то эта архитектура работает лучше по сравнению с другими типами кодирования строк.
  3. Этот подход также работает со смешанными входными данными временных рядов - намного лучше, чем любые классические подходы временных рядов.

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

Этот тип архитектуры использовался в соревнованиях Kaggle [1] и также преподается в курсе Fast.ai профессором Джереми Ховардом [2].

  1. https://yashuseth.blog/2018/07/22/pytorch-neural-network-for-tabular-data-with-categorical-embeddings/
  2. https://www.fast.ai/2019/01/24/course-v3/
Soumyajit
источник