Як поєднувати категоричні та безперервні функції введення для тренувань нейронної мережі


16

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

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

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

Як бачите, перші кілька шарів використовуються для зміни (або відображення) даних А на деякий середній вихід у безперервному просторі, а потім він з'єднується з даними B, що утворює нову функцію введення в безперервний простір для пізніших шарів. Цікаво, чи це розумно чи це просто гра "проб і помилок". Дякую.

Відповіді:


5

Існує три основні підходи до вирішення цього питання:

  1. Побудова двох моделей окремо, а потім підготовка алгоритму ансамблю, який отримує вихід двох моделей як вхід
  2. Зведення всіх даних в один вектор / тензор як крок попередньої обробки, а потім тренування простого єдиного вводу NN
  3. Пропонована вами архітектура з декількома входами

Ансамблевий підхід є найбільш прямим варіантом, який дасть гідні результати, однак, він не буде працювати так добре, як запропонований вами варіант, оскільки ансамблева мережа отримує лише ймовірності класу з двох мереж як вхід і буде порівняно з вашими підхід пропускає складніші відносини між типами даних.

Другий підхід теоретично не відрізняється від запропонованого підходу, з тією різницею, що він передбачає, що мережа самостійно зрозуміє, що вхід складається з двох типів даних (оскільки вони обидва в одному векторі / тензорі) ). Ми буде потрібно багато навчального часу, щоб мережа дізналася про це, і, можливо, ви застрягнете в місцевих мінімумах, перш ніж це станеться.

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



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/
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.