Embeddings

Imagine que você esteja desenvolvendo um aplicativo de recomendação de alimentos, em que os usuários inserem suas refeições favoritas, e o aplicativo sugere refeições semelhantes de que eles podem gostar. Você quer desenvolver um modelo de machine learning (ML) que pode prever a similaridade alimentar, para que seu aplicativo possa fazer recomendações ("Como você gosta de panquecas, recomendamos crepes").

Para treinar o modelo, você seleciona um conjunto de dados de 5.000 refeições, incluindo borscht, cachorro-quente, salada, pizza, e shawarma.

Figura 1. Um conjunto de ilustrações de cinco alimentos. Em sentido horário a partir de
       canto superior esquerdo: borscht, cachorro-quente, salada, pizza, shawarma.
Figura 1. Amostragem de refeições incluídas no conjunto de dados de alimentos.

Você cria um recurso meal que contém um codificação one-hot representação de cada item das refeições no conjunto de dados.

Figura 2. Topo: uma visualização da codificação one-hot para borscht.
       O vetor [1, 0, 0, 0, ..., 0] é exibido acima de seis caixas,
       cada uma alinhada à esquerda
       para a direita por um dos números vetoriais. As caixas, da esquerda para a direita
       conter as seguintes imagens: borscht, cachorro-quente, salada, pizza, [vazio],
       shawarma. Meio: uma visualização da codificação one-hot para o cachorro-quente.
       O vetor [0, 1, 0, 0, ..., 0] é exibido acima de seis caixas, cada
       alinhada da esquerda para a direita por um dos números vetoriais. As caixas têm
       as mesmas imagens da esquerda para a direita da visualização de Borscht.
       acima. Embaixo: visualização da codificação one-hot do shawarma. O
       vetor [0, 0, 0, 0, ..., 1] é exibido acima de seis caixas, cada uma alinhada
       da esquerda para a direita por um dos números vetoriais. As caixas têm
       da esquerda para a direita, são as mesmas imagens
do borscht e do cachorro-quente.
       e visualizações de dados.
Figura 2. Codificações one-hot de borscht, cachorro-quente e shawarma. Cada vetor de codificação one-hot tem um comprimento de 5.000 (uma entrada para cada no conjunto de dados). As reticências no diagrama representam as 4.995 entradas não mostradas.

Dificuldades das representações de dados esparsos

Ao analisar essas codificações one-hot, você percebe dois problemas importantes representação visual dos dados.

  • Número de pesos. Vetores de entrada grandes significam um grande número de pesos para uma rede neural. Com entradas M em sua codificação one-hot e N na primeira camada da rede após a entrada, o modelo precisa treinar pesos MxN para essa camada. Um grande número de pesos causa mais problemas:
    • Número de pontos de dados. Quanto mais pesos no seu modelo, mais dados você para treinar com eficácia.
    • Quantidade de computação. Quanto mais pesos, mais computação é necessária para treinar e usar o modelo. É fácil exceder os recursos das ao hardware.
    • Quantidade de memória. Quanto mais pesos no modelo, mais memória é necessária nos aceleradores que o treinam e a disponibilizam. escalonando verticalmente com eficiência é muito difícil.
    • Dificuldade de suporte aprendizado de máquina no dispositivo (ODML). Se você espera executar seu modelo de ML em dispositivos locais (em vez de disponibilizar com elas), se concentre em diminuir o tamanho do modelo e para diminuir o número de pesos.
  • Falta de relações significativas entre vetores. Os valores vetoriais na as codificações one-hot para alimentos não fornecem informações significativas sobre a similaridade de alimentos. Matematicamente, o índice 1 ("cachorro-quente") é mais próximo do índice 2 ("salad") do que do índice 4999 ("shawarma"), mesmo que cachorro é mais parecido com shawarma (com carne e pão) do que com salada.

Neste módulo, você vai aprender a criar embeddings, componentes representações de dados esparsos, que abordam esses dois problemas.