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

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

  • Сложность использования дополнительных функций (то есть любых функций, выходящих за рамки идентификатора запроса/идентификатора элемента). В результате запрос к модели возможен только при наличии пользователя или элемента в обучающем наборе.
  • Актуальность рекомендаций. Как вы видели в первом 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}}\).