Вопрос или проблема
В настоящее время я работаю над проектом, в котором использую LSTM для обучения и предсказания последовательностей категориальных данных.
Мой набор данных состоит из последовательностей переменной длины элементов $s_i = [x_{i_0}, x_{i_1}, …, x_{i_{-1}}]$. Каждый элемент $x$ принадлежит одной из 190,000 категорий. Поэтому мой первоначальный подход заключался в том, чтобы кодировать каждый $x$ с помощью one-hot вектора, представляющего его категорию.
Однако использование one-hot кодирования делает вычислительные затраты очень высокими, и я хочу найти более компактный способ представления категорий перед обучением модели.
В теории информации двоичный логарифм числа показывает, сколько бит необходимо для представления числа. В данном случае log2(190000) =~ 18, что означает, что для представления каждой категории необходимо 18 бит.
Итак, мой вопрос заключается в том, какие хорошие подходы можно использовать для представления категорий с помощью векторов меньшей размерности?
-
Например, я мог бы использовать 18-мерные бинарные векторы, где индекс каждой категории кодируется в двоичном формате. Если я правильно понимаю, этот подход введет ложные аддитивные отношения, но, возможно, стоит попробовать.
-
В качестве альтернативы я рассматриваю возможность пропустить one-hot вектора через линейный слой с 190k входами и 18 выходами. Идея заключается в том, что линейный слой не дает нулевых выходов, а небольшие числа с плавающей точкой. Однако я не знаю, насколько хорошо этот подход может кодировать категориальную информацию.
Имеют ли смысл эти подходы? Или, возможно, существуют лучшие способы достичь того, что я ищу?
Я буду признателен за любые советы или мысли по этому поводу. Спасибо!
Используйте эмбеддинги.
Ваш случай использования кажется похожим на языковое моделирование, где текст представляется в виде дискретных токенов. Хотя 190k категорий – это много, вы можете настроить размерность эмбеддинга в соответствии с вашим вычислительным бюджетом.
Ответ или решение
Для решения проблемы эффективного снижения размерности категориальных признаков, представленными в виде one-hot кодирования, важно рассмотреть несколько подходов. Один из них может быть действительно полезным для вашего проекта, использующего LSTM для обучения и прогнозирования последовательностей категориальных данных.
1. Векторные представления (Embeddings)
Одним из самых распространенных и эффективных способов работы с большими наборами категорий является использование векторных представлений, или embeddings. Этот метод схож с тем, как слова кодируются в задачах обработки естественного языка. Вместо того чтобы использовать one-hot кодирование, вы можете создать эмбеддинговую матрицу размером, например, 190,000 x N (где N — размерность вектора, например, 100 или 300), и обучить модель так, чтобы она сопоставляла каждую категорию с векторам в этом пространстве.
- Преимущества: Использование embeddings позволяет снизить размерность представления, сохраняя при этом семантическую информацию о категориях.
- Советы по реализации: Вы можете начать с произвольного инициализированного вектора. Затем, во время обучения, веса этой матрицы будут обновляться, приближая эмбеддинги для похожих категорий рядом друг с другом в высокоразмерном пространстве.
2. Бинарное кодирование
Ваше предложение использовать 18-битное бинарное кодирование действительно имеет место. Такой подход представит категорию в виде ее двоичного представления, что обеспечит компактное хранилище для данных.
- Недостатки: Главное ограничение этого метода заключается в том, что он может ввести ложные дополнительные отношения (например, бинарные векторы для категорий, которые не имеют естественной порядковой структуры, будут располагаться ближе друг к другу, чем следует).
3. Линейный слой после one-hot кодировки
Проход данных через линейный слой с 190,000 входными и 18 выходными нейронами также является интересным подходом. Он может помочь снизить размерность, обеспечивая плотное представление.
- Ограничения: Качество кодирования может быть непредсказуемым, и потребуется тщательно контролировать связи между входными и выходными слоями, чтобы избежать потери важной информации.
4. Метод локтевой точки (T-SNE или UMAP)
Еще один подход, который можно использовать после первоначального кодирования категорий – это методы понижения размерности, такие как T-SNE или UMAP. Эти методы хорошо работают для визуализации и анализа высокоразмерных данных, а также могут помочь в поиске паттернов и кластеризации.
- Недостатки: Эти методы часто требуют значительных вычислительных затрат и могут не подходить для реального времени.
Заключение
Для вашего проекта рекомендую начать с использования векторных представлений (embeddings). Это наиболее гибкий и мощный подход, который уже доказал свою эффективность в задачах машинного обучения. Вы можете поэкспериментировать с размерностью эмбеддингов, чтобы добиться оптимального баланса между качеством представления и вычислительными затратами.
Пожалуйста, учитывайте, что подбирая размерность и другие параметры, вам может потребоваться проводить тестирование и валидацию различных подходов для нахождения наиболее подходящего решения для вашей задачи.