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

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

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

Внедрение методов объединения функций

Для простоты мы сначала рассмотрим случай, как обрабатывать несколько вложений во входном векторном слое. Позже мы добавим архитектурные методы для слияния плотных объектов (функций с плавающими значениями). Например, если мы создаем модель музыкальных рекомендаций, одним из входных данных для рекомендателя могут быть вложения последних k песен, прослушанных пользователем, или встраивания жанров последних k песен, прослушанных пользователем. Теперь мы хотели бы объединить (объединить) эти вложения, чтобы создать единое представление для этой функции. В следующем разделе будут обсуждаться методы объединения этих вложений во входном слое и создания унифицированного вложения.

Метод 1 — объединение и преобразование

На приведенной ниже диаграмме входной слой может содержать текст, изображения и другие типы объектов. Соответствующий кодировщик будет обрабатывать соответствующий ввод (например, предварительно обученный Resnet может генерировать встраивание изображения, предварительно обученный BERT может генерировать встраивание текста и т. д.) и генерировать вложение. Эти вложения представлены как вектор-1, вектор-2 и вектор-3.

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

Способ 2 — Объединение

Еще один легкий метод — это использование таких методов, как объединение среднего и максимального значений. На изображении ниже рекомендатель сеанса Youtube объединяет вложения просмотренных видео в сеансе, используя среднее значение их вложений.

Метод 3 — парное скалярное произведение

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

Одним из недостатков этого метода является его вычислительная сложность. Из-за квадратичной вычислительной сложности количество скалярных произведений растет квадратично с точки зрения количества векторов вложения. При увеличении входного слоя связь точечных произведений с полносвязным слоем может стать узким местом в эффективности и ограничить возможности модели.

Чтобы решить эту проблему, мы можем прибегнуть к архитектуре Compressed Dot Product Architecture, обсуждаемой в следующем разделе.

Метод 4 — Архитектура сжатого точечного продукта

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

Метод сжатия использует тот факт, что матрица скалярного произведения XX имеет ранг d, когда d ‹ = n, где d — размерность векторов вложения, а n — количество признаков.

Таким образом, XXT является матрицей низкого ранга, имеющей степень свободы O(n*d), а не O(n2). Другими словами, XXT сжимаем. Это верно для многих современных типов моделей с разреженными входными данными. Это позволяет сжимать скалярное произведение без потери информации.

  • X представляет собой матрицу n*d из n d-мерных векторов вложения (n=100;d=64).
  • Согласно методам, описанным в данном документе, вместо вычисления сглаживания (XXT) вычисляется сглаживание (XXTY).
  • Y — матрица размера n*k (в примере k=15).
  • Y является обучаемым параметром и инициализируется случайным образом.

XXT приведет к n * d * n операциям, тогда как скалярное сжатие XXTY потребует O(n * d * k) операций (k намного меньше n).

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

Одним из недостатков этого подхода является то, что изученная матрица Y становится независимой от входных данных. Он будет иметь одинаковые значения для всех входов. Чтобы решить эту проблему, мы можем использовать сжатие с учетом внимания (подробности см. в разделе Матричное сжатие точечного произведения для машинного обучения).

Метод 5 — Слияние внимания

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

Метод 6 — Слияние на основе дерева

В этом методе мы объединяем вложения функций и предоставляем их в качестве единого входа для модели ансамбля дерева, например. Boosted Trees или GBT. Эта модель будет обучаться отдельно от основной нейронной сети. На этом этапе мы будем выводить листья каждого дерева в ансамбле. На изображении ниже они обозначены как h1, h2 и т. д. Объединенное (преобразованное) вложение будет конкатенацией вывода листьев (h1 + h2 + ..). Это будет предоставлено в качестве входных данных для основной нейронной сети. На высоком уровне это действует как нелинейное преобразование входных признаков.

Плотные (плавающие) функции Fusion

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

Базовая модель

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

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

Слияние плотных разреженных объектов

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

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

  • Объединение преобразованного плотного представления объектов с интерактивным слоем
  • Наложение преобразованного плотного представления объектов с встраиванием входных данных

Таким образом, плотное преобразованное представление (выход слоя FC + Relu) будет участвовать в слиянии скалярного произведения, следовательно, оно будет взаимодействовать с отдельными вложениями входного слоя. Поскольку плотные функции содержат информацию о предвзятости (например, CTR или количество кликов дают предвзятость в отношении эффективности продукта), мы хотели бы сохранить эту информацию. Следовательно, в виде остаточного соединения мы объединяем преобразованное плотное представление с выходом слияния скалярного произведения.