Модели глубокой нейронной сети

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

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

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

Softmax DNN для рекомендации

Одной из возможных моделей DNN является softmax , которая рассматривает проблему как проблему мультиклассового прогнозирования, в которой:

  • Вход - это пользовательский запрос.
  • Результатом является вектор вероятности, размер которого равен количеству элементов в корпусе, представляющий вероятность взаимодействия с каждым элементом; например, вероятность кликнуть или посмотреть видео на YouTube.

Вход

Входные данные для DNN могут включать:

  • плотные функции (например, время просмотра и время с момента последнего просмотра)
  • разреженные функции (например, история просмотров и страна)

В отличие от подхода матричной факторизации, вы можете добавить дополнительные функции, такие как возраст или страна. Обозначим входной вектор через x.

Изображение, выделяющее входной слой в глубокой нейронной сети softmax
Рисунок 1. Входной слой, x.

Архитектура модели

Архитектура модели определяет сложность и выразительность модели. Добавляя скрытые слои и нелинейные функции активации (например, ReLU), модель может фиксировать более сложные отношения в данных. Однако увеличение числа параметров также обычно усложняет обучение модели и удорожает ее обслуживание. Мы будем обозначать вывод последнего скрытого слоя как \(\psi (x) \in \mathbb R^d\).

Изображение, показывающее скрытые слои в глубокой нейронной сети softmax
Рис. 2. Вывод скрытых слоев \(\psi (x)\).

Вывод Softmax: прогнозируемое распределение вероятностей

Модель сопоставляет выходные данные последнего слоя, \(\psi (x)\), через слой softmax с распределением вероятностей \(\hat p = h(\psi(x) V^T)\), где:

  • \(h : \mathbb R^n \to \mathbb R^n\) — это функция softmax, заданная \(h(y)_i=\frac{e^{y_i}}{\sum_j e^{y_j}}\).
  • \(V \in \mathbb R^{n \times d}\) — матрица весов слоя softmax.

Слой softmax сопоставляет вектор оценок \(y \in \mathbb R^n\)(иногда называемый логитами ) с распределением вероятностей.

Изображение, показывающее прогнозируемое распределение вероятностей в глубокой нейронной сети softmax.
Рисунок 3. Прогнозируемое распределение вероятностей, \(\hat p = h(\psi(x) V^T)\).

Функция потери

Наконец, определите функцию потерь, которая сравнивает следующее:

  • \(\hat p\), вывод слоя softmax (распределение вероятностей)
  • \(p\), основная правда, представляющая элементы, с которыми взаимодействовал пользователь (например, видео на YouTube, которые пользователь нажимал или смотрел). Это может быть представлено как нормализованное мультигорячее распределение (вектор вероятности).

Например, вы можете использовать кросс-энтропийную потерю, так как вы сравниваете два распределения вероятностей.

Изображение, показывающее функцию потерь в глубокой нейронной сети softmax
Рисунок 4. Функция потерь.

Вложения Softmax

Вероятность элемента \(j\) определяется выражением\(\hat p_j = \frac{\exp(\langle \psi(x), V_j\rangle)}{Z}\), где \(Z\) — константа нормализации, не зависящая от \(j\).

Другими словами, \(\log(\hat p_j) = \langle \psi(x), V_j\rangle - log(Z)\), поэтому логарифмическая вероятность элемента \(j\) является (с точностью до аддитивной константы) скалярным произведением двух \(d\)-мерных векторов, которые можно интерпретировать как вложения запроса и элемента:

  • \(\psi(x) \in \mathbb R^d\) — это выходные данные последнего скрытого слоя. Мы называем это внедрением запроса \(x\).
  • \(V_j \in \mathbb R^d\) — вектор весов, соединяющий последний скрытый слой с выходом j. Мы называем это встраиванием элемента \(j\).
Изображение, показывающее встраивание в глубокую нейронную сеть softmax
Рис. 5. Встраивание элементов \(j\), \(V_j \in \mathbb R^d\)

DNN и матричная факторизация

И в модели softmax, и в модели матричной факторизации система изучает один вектор встраивания\(V_j\) для каждого элемента \(j\). То, что мы назвали матрицей внедрения элементов \(V \in \mathbb R^{n \times d}\) в матричной факторизации, теперь является матрицей весов слоя softmax.

Однако встраивание запросов отличается. Вместо изучения одного встраивания \(U_i\) для каждого запроса \(i\)система изучает сопоставление функции запроса \(x\) с вложением \(\psi(x) \in \mathbb R^d\). Следовательно, вы можете думать об этой модели DNN как об обобщении матричной факторизации, в которой вы заменяете сторону запроса нелинейной функцией \(\psi(\cdot)\).

Можете ли вы использовать характеристики предметов?

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

  • Одна нейронная сеть сопоставляет функции запроса\(x_{\text{query}}\) с запросом на встраивание\(\psi(x_{\text{query}}) \in \mathbb R^d\)
  • Одна нейронная сеть сопоставляет элементы элемента\(x_{\text{item}}\) с элементом, встраивающим\(\phi(x_{\text{item}}) \in \mathbb R^d\)

Выход модели можно определить как точечный продукт\(\langle \psi(x_{\text{query}}), \phi(x_{\text{item}}) \rangle\). Обратите внимание, что это больше не модель softmax. Новая модель предсказывает одно значение на пару \((x_{\text{query}}, x_{\text{item}})\)вместо вектора вероятности для каждого запроса \(x_{\text{query}}\).