Modelos de rede neural profunda

A seção anterior mostrou como usar a fatoração de matrizes para para aprender embeddings. Algumas limitações da fatoração de matrizes incluem:

  • A dificuldade de usar os recursos secundários (ou seja, qualquer recurso além o ID da consulta/do item). Como resultado, o modelo só pode ser consultado um usuário ou item presente no conjunto de treinamento.
  • Relevância das recomendações. Como você viu na primeira Colab, itens populares tendem a ser recomendados para todos, especialmente produto escalar como medida de similaridade. É melhor capturar imagens interesses dos usuários.

Os modelos de rede neural profunda (DNN) conseguem lidar com essas limitações das matrizes fatoração. As DNNs podem incorporar facilmente atributos de consulta e de item (devido à flexibilidade da camada de entrada da rede), o que pode ajudar captar os interesses específicos de um usuário e melhorar a relevância de recomendações.

DNN Softmax para recomendação

Um modelo de DNN possível é o softmax, que trata o problema como um problema de previsão multiclasse em que:

  • A entrada é a consulta do usuário.
  • A saída é um vetor de probabilidade com tamanho igual ao número de no corpus, representando a probabilidade de interação cada item. por exemplo, a probabilidade de clicar ou assistir Vídeo do YouTube.

Entrada

A entrada em uma DNN pode incluir:

  • atributos densos (por exemplo, tempo de exibição e tempo desde a última exibição)
  • recursos esparsos (por exemplo, histórico de exibição e país).

Ao contrário da abordagem com fatoração de matrizes, é possível adicionar atributos secundários como idade ou país. Denotaremos o vetor de entrada por x.

Imagem destacando a camada de entrada em uma rede neural profunda de softmax
Figura 1. A camada de entrada, x.

Arquitetura do modelo

A arquitetura do modelo determina a complexidade e a expressividade do modelo. Com a adição de camadas escondidas e funções de ativação não lineares (por exemplo, ReLU), o modelo pode capturar relações mais complexas nos dados. No entanto, aumentar o número de parâmetros também costuma dificultar a análise do modelo treinados e mais caros para servir. Vamos indicar o resultado da última camada camada por \(\psi (x) \in \mathbb R^d\).

Imagem destacando as camadas escondidas em uma rede neural profunda softmax
Figura 2. A saída das camadas escondidas, \(\psi (x)\).

Saída do Softmax: distribuição de probabilidade prevista

O modelo mapeia a saída da última camada, \(\psi (x)\), usando uma expressão softmax camada para uma distribuição de probabilidade \(\hat p = h(\psi(x) V^T)\), em que:

  • \(h : \mathbb R^n \to \mathbb R^n\) é a função softmax, fornecido por \(h(y)_i=\frac{e^{y_i}}{\sum_j e^{y_j}}\)
  • \(V \in \mathbb R^{n \times d}\) é a matriz de pesos dos camada softmax.

A camada softmax mapeia um vetor de pontuações \(y \in \mathbb R^n\) (às vezes chamada de logits) para uma distribuição de probabilidade.

Imagem mostrando uma distribuição de probabilidade prevista em uma rede neural profunda de softmax
Figura 3. A distribuição de probabilidade prevista, \(\hat p = h(\psi(x) V^T)\).
.

Função de perda

Por fim, defina uma função de perda que compare o seguinte:

  • \(\hat p\), a saída da camada softmax (uma distribuição de probabilidade)
  • \(p\), as informações empíricas, que representam os itens que o usuário tem. tenha interagido (por exemplo, vídeos do YouTube em que o usuário clicou ou assistiu); Isso pode ser representado como uma distribuição multi-hot normalizada (uma vetor de probabilidade).

Por exemplo, você pode usar a perda de entropia cruzada, pois está comparando duas distribuições de probabilidade.

Imagem mostrando a função de perda em uma rede neural profunda de softmax
Figura 4. A função de perda.

Embeddings da Softmax

A probabilidade do item \(j\) é dada por \(\hat p_j = \frac{\exp(\langle \psi(x), V_j\rangle)}{Z}\), em que \(Z\) é uma constante de normalização que não depende de \(j\).

Em outras palavras, \(\log(\hat p_j) = \langle \psi(x), V_j\rangle - log(Z)\), então, a probabilidade de registro de um item \(j\) é (até uma constante aditiva) o produto escalar dos vetores bi \(d\)dimensionais, que podem ser interpretados como embeddings de consultas e itens:

  • \(\psi(x) \in \mathbb R^d\) é a saída da última camada escondida. Nós a chamamos de embedding da consulta \(x\).
  • \(V_j \in \mathbb R^d\) é o vetor de pesos que conectam a última camada escondida à saída j. Chamamos de incorporação do item \(j\).
.
Imagem mostrando embeddings em uma rede neural profunda de softmax
Figura 5. Incorporação do item \(j\), \(V_j \in \mathbb R^d\)

DNN e fatoração de matrizes

Tanto no modelo softmax quanto no modelo de fatoração de matrizes, o sistema aprende um vetor de embedding \(V_j\) por item \(j\). O que chamamos de matriz de incorporação de itens \(V \in \mathbb R^{n \times d}\) na matriz a fatoração é agora a matriz de pesos da camada softmax.

No entanto, os embeddings de consulta são diferentes. Em vez de aprender uma incorporação \(U_i\) por consulta \(i\), o sistema aprende um mapeamento do recurso de consulta \(x\) para um embedding \(\psi(x) \in \mathbb R^d\). Portanto, esse modelo de DNN pode ser considerado uma generalização fatoração, em que você substitui o lado da consulta por um valor função \(\psi(\cdot)\).

É possível usar atributos de itens?

Você pode aplicar a mesma ideia no lado do item? Ou seja, em vez de aprender um embedding por item, o modelo pode aprender uma função não linear que mapeia atributos do item para um embedding? Sim. Para isso, use uma torre de duas rede neural, que consiste em duas redes neurais:

  • Uma rede neural mapeia atributos de consulta \(x_{\text{query}}\) para consultar o embedding \(\psi(x_{\text{query}}) \in \mathbb R^d\)
  • Uma rede neural mapeia atributos de item \(x_{\text{item}}\) à incorporação do item \(\phi(x_{\text{item}}) \in \mathbb R^d\)

A saída do modelo pode ser definida como o produto escalar \(\langle \psi(x_{\text{query}}), \phi(x_{\text{item}}) \rangle\): Este não é mais um modelo de softmax. O novo modelo prevê um valor por par \((x_{\text{query}}, x_{\text{item}})\) em vez de um vetor de probabilidade para cada consulta \(x_{\text{query}}\).