Modelos de rede neural profunda

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

  • A dificuldade de usar recursos secundários (ou seja, quaisquer recursos além do ID da consulta/código do item). Como resultado, o modelo só pode ser consultado com um usuário ou item presente no conjunto de treinamento.
  • Relevância das recomendações. Como você viu no primeiro Colab, itens conhecidos costumam ser recomendados para todos, especialmente ao usar o produto de ponto como medida de semelhança. É melhor capturar interesses específicos do usuário.

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

DNN do Softmax para recomendação

Um possível modelo de DNN é 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 itens no corpus, representando a probabilidade de interagir com cada item. Por exemplo, a probabilidade de clicar ou assistir a um vídeo do YouTube.

Entrada

A entrada de uma DNN pode incluir:

  • recursos 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 de fatoração de matrizes, é possível adicionar atributos secundários, como idade ou país. Indicaremos o vetor de entrada por x.

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

Arquitetura do modelo

A arquitetura do modelo determina a complexidade e a expressividade dele. Ao adicionar camadas ocultas 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 dificulta o treinamento do modelo e é mais caro para veicular. Vamos deduzir a saída da última camada escondida por \(\psi (x) \in \mathbb R^d\).

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

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

O modelo mapeia a saída da última camada, \(\psi (x)\), por meio de uma camada softmax 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, fornecida por \(h(y)_i=\frac{e^{y_i}}{\sum_j e^{y_j}}\)
  • \(V \in \mathbb R^{n \times d}\) é a matriz de pesos da camada softmax.

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

Imagem que mostra uma previsão da distribuição de probabilidade em uma rede neural profunda máxima
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\), a verdade empírica, representando os itens com que o usuário interagiu, por exemplo, vídeos do YouTube em que o usuário clicou ou assistiu. Isso pode ser representado como uma distribuição normalizada multi-hot (um vetor de probabilidade).

Por exemplo, é possível usar a perda de entropia cruzada em uma comparação de duas distribuições de probabilidade.

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

Embeddings Softmax

A probabilidade do item \(j\) é fornecida 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)\), para que a probabilidade de registro de um item \(j\) é (até uma constante aditiva) o produto de ponto de dois vetores \(d\)-dimensionais, que pode ser interpretado como incorporações de consultas e itens:

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

Fatoração de DNN e matriz

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

Mas os embeddings de consultas 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\) a uma incorporação \(\psi(x) \in \mathbb R^d\). Pense nesse modelo DNN como uma generalização da fatoração de matrizes, em que você substitui o lado da consulta por uma função não linear \(\psi(\cdot)\).

É possível usar os recursos do item?

É possível aplicar a mesma ideia ao lado do item? Ou seja, em vez de aprender uma incorporação por item, o modelo pode aprender uma função não linear que mapeia recursos de item para uma incorporação? Sim. Para fazer isso, use uma rede neural de duas torres, que consiste em duas redes neurais:

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

A saída do modelo pode ser definida como o produto de ponto de \(\langle \psi(x_{\text{query}}), \phi(x_{\text{item}}) \rangle\). Este não é mais um modelo softmax mais. 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}}\).