Padrões de implementação para a arquitetura codificador-decodificador RNN com atenção

Padrões de implementação para a arquitetura codificador-decodificador RNN com atenção

A arquitetura codificador-decodificador para redes neurais recorrentes está provando ser poderosa em uma série de problemas de predição de sequência a sequência no campo do processamento de linguagem natural.

Atenção é um mecanismo que aborda uma limitação da arquitetura codificador-decodificador em sequências longas e que, em geral, acelera o aprendizado e aumenta a habilidade do modelo em problemas de predição sequência a sequência.

Nesta postagem, você descobrirá padrões para implementar o modelo codificador-decodificador com e sem atenção.

Depois de ler esta postagem, você saberá:

  • O padrão de implementação direto versus recursivo para a rede neural recorrente codificador-decodificador.
  • Como a atenção se encaixa no padrão de implementação direta para o modelo codificador-decodificador.
  • Como a atenção pode ser implementada com o padrão de implementação recursiva para o modelo codificador-decodificador.

Comece seu projeto com meu novo livro Long Short-Term Memory Networks With Python, incluindo tutoriais passo a passo e a Código-fonte Python arquivos para todos os exemplos.

Vamos começar.

Padrões de implementação para a arquitetura codificador-decodificador RNN com atenção

Padrões de implementação para a arquitetura codificador-decodificador RNN com atenção
Foto de Philip McErlean, alguns direitos reservados.

Codificador-decodificador com atenção

O modelo codificador-decodificador para redes neurais recorrentes é uma arquitetura para problemas de predição de sequência a sequência em que o comprimento das sequências de entrada é diferente do comprimento das sequências de saída.

É composto por dois submodelos, como o próprio nome sugere:

  • Codificador: O codificador é responsável por percorrer as etapas de tempo de entrada e codificar toda a sequência em um vetor de comprimento fixo denominado vetor de contexto.
  • Decodificador: O decodificador é responsável por percorrer as etapas de tempo de saída durante a leitura do vetor de contexto.

Um problema com a arquitetura é que o desempenho é ruim em longas sequências de entrada ou saída. Acredita-se que a razão seja a representação interna de tamanho fixo usada pelo codificador.

Atenção é uma extensão da arquitetura que aborda essa limitação. Ele funciona fornecendo primeiro um contexto mais rico do codificador para o decodificador e um mecanismo de aprendizagem onde o decodificador pode aprender onde prestar atenção na codificação mais rica ao prever cada passo de tempo na sequência de saída.

Para mais informações sobre a arquitetura do codificador-decodificador, consulte a postagem:

Implementação de codificador-decodificador direto

Existem várias maneiras de implementar a arquitetura do codificador-decodificador como um sistema.

Uma abordagem é ter a saída gerada inteiramente a partir do decodificador, dada a entrada para o codificador. É assim que o modelo é frequentemente descrito.

… Propomos uma nova arquitetura de rede neural que aprende a codificar uma sequência de comprimento variável em uma representação vetorial de comprimento fixo e a decodificar uma dada representação vetorial de comprimento fixo de volta em uma sequência de comprimento variável.

- Aprendizagem de representações de frases usando RNN Encoder – Decoder for Statistical Machine Translation, 2014.

Chamaremos esse modelo de implementação de codificador-decodificador direto, por falta de um nome melhor.

Para deixar isso claro, vamos trabalhar com uma vinheta de tradução automática neural do francês para o inglês.

  1. Uma frase em francês é fornecida ao modelo como entrada.
  2. O codificador lê a frase uma palavra por vez e codifica a sequência como um vetor de comprimento fixo.
  3. O decodificador lê a entrada codificada e produz cada palavra em inglês.

Abaixo está uma descrição dessa implementação.

Implementação do modelo de decodificador de codificador direto para tradução automática neural

Implementação do modelo de decodificador de codificador direto para tradução automática neural

Implementação de codificador-decodificador recursivo

Outra implementação é enquadrar o modelo de forma que ele gere apenas uma palavra e o modelo seja chamado recursivamente para gerar toda a sequência de saída.

Chamaremos isso de implementação recursiva (por falta de um nome melhor) para distingui-la da descrição acima.

Em seu artigo sobre modelos de geração de legendas intitulado “Onde colocar a imagem em uma legenda de imagem
Gerador, ”Marc Tanti, et al. referem-se à abordagem direta como o “visão contínua“:

Tradicionalmente, os modelos de linguagem neural são descritos […] onde as strings são consideradas geradas continuamente. Uma nova palavra é gerada após cada intervalo de tempo, com o estado do RNN sendo combinado com a última palavra gerada para gerar a próxima palavra. Chamamos isso de 'visão contínua'.

- Onde colocar a imagem em um gerador de legenda de imagem, 2017.

Eles se referem à implementação recursiva como o “visão descontínua“:

Propomos pensar o RNN em termos de uma série de instantâneos descontínuos ao longo do tempo, com cada palavra sendo gerada a partir de todo o prefixo das palavras anteriores e com o estado do RNN sendo reinicializado a cada vez. Nós nos referimos a isso como a 'visão descontínua'

- Onde colocar a imagem em um gerador de legenda de imagem, 2017.

Podemos percorrer essa abordagem para o mesmo exemplo de tradução automática neural francês para inglês usando a implementação recursiva.

  1. Uma frase em francês é fornecida ao modelo como entrada.
  2. O codificador lê a frase uma palavra por vez e codifica a sequência como um vetor de comprimento fixo.
  3. O decodificador lê a entrada codificada e produz uma palavra em inglês.
  4. A saída é tomada como entrada junto com a frase em francês codificada, vá para a Etapa 3.

Abaixo está uma descrição dessa implementação.

Implementação do modelo do decodificador codificador recursivo para tradução automática neural

Implementação do modelo do decodificador codificador recursivo para tradução automática neural

Para iniciar o processo, um “início da sequência”Token pode precisar ser fornecido ao modelo como entrada para a sequência de saída gerada até agora.

Toda a sequência de saída gerada até agora pode ser reproduzida como entrada para o decodificador com ou sem a sequência de entrada codificada para permitir que o decodificador chegue ao mesmo estado interno antes de prever a próxima palavra como teria sido alcançado se o modelo gerasse a totalidade seqüência de saída de uma vez, como na seção anterior.

Implementação do codificador-decodificador de mesclagem

A implementação recursiva pode imitar a saída de toda a sequência de uma vez, como no primeiro modelo.

A implementação recursiva também permite que você varie o modelo e busque talvez um modelo mais simples ou mais habilidoso.

Um exemplo é também codificar a sequência de entrada e usar o modelo do decodificador para aprender como combinar melhor a sequência de entrada codificada e a sequência de saída gerada até agora. Marc Tanti, et al. em seu jornal “Qual é o papel das redes neurais recorrentes (RNNs) em um gerador de legenda de imagem?”Chame isso de“ modelo de mesclagem ”.

... em uma determinada etapa de tempo, a arquitetura de mesclagem prevê o que gerar a seguir combinando o prefixo RNNencoded da string gerada até agora (o 'passado' do processo de geração) com informações não linguísticas (o guia do processo de geração).

- Qual é o papel das redes neurais recorrentes (RNNs) em um gerador de legenda de imagem ?, 2017

O modelo ainda é chamado recursivamente, apenas a estrutura interna do modelo é variada. Podemos deixar isso claro com uma representação.

Implementação do modelo do decodificador do codificador de mesclagem para tradução automática neural

Implementação do modelo do decodificador de mesclagem do codificador para tradução automática neural

Codificador-decodificador direto com implementação de atenção

Podemos agora considerar o mecanismo de atenção no contexto dessas diferentes implementações para a arquitetura de rede neural recorrente Codificador-Decodificador.

Atenção canônica, conforme descrito por Bahdanau et al. em seu artigo "Tradução automática neural por aprendizagem conjunta de alinhar e traduzir", envolve alguns elementos como segue:

  • Codificação mais rica. A saída do codificador é expandida para fornecer informações em todas as palavras na sequência de entrada, não apenas na saída final da última palavra na sequência.
  • Modelo de alinhamento. Um novo modelo de rede neural pequeno é usado para alinhar ou relacionar a codificação expandida usando a saída assistida do decodificador da etapa de tempo anterior.
  • Codificação ponderada. Uma ponderação para o alinhamento que pode ser usada como uma distribuição de probabilidade sobre a sequência de entrada codificada.
  • Vetor de contexto ponderado. A ponderação aplicada à sequência de entrada codificada que pode então ser usada para decodificar a próxima palavra.

Observe que em todos esses modelos de codificador-decodificador há uma diferença entre a saída do modelo (próxima palavra prevista) e a saída do decodificador (representação interna). O decodificador não produz uma palavra diretamente; frequentemente, uma camada totalmente conectada é conectada ao decodificador que produz uma distribuição de probabilidade sobre o vocabulário de palavras, que é então pesquisada usando uma heurística como uma pesquisa de feixe.

Para obter mais detalhes sobre como calcular a atenção no modelo codificador-decodificador, consulte a postagem:

Podemos fazer um desenho do modelo codificador-decodificador direto com atenção, como abaixo.

Decodificador de codificador direto com implementação de modelo de atenção para tradução automática neural

Decodificador de codificador direto com implementação de modelo de atenção para tradução automática neural

A atenção pode ser um desafio para implementar em um modelo de codificador-decodificador direto. Isso ocorre porque bibliotecas de rede neural eficientes com equações vetorizadas que exigem que todas as informações estejam disponíveis antes do cálculo.

Essa necessidade é interrompida pela necessidade do modelo acessar a saída assistida do decodificador para cada previsão feita.

Codificador-decodificador recursivo com implementação de atenção

A atenção se presta a uma descrição e implementação recursiva.

Uma implementação recursiva de atenção requer que, além de tornar a sequência de saída gerada até agora disponível para o decodificador, que as saídas do decodificador geradas a partir da etapa de tempo anterior possam ser fornecidas ao mecanismo de atenção para prever a próxima palavra.

Podemos deixar isso mais claro com um desenho animado.

Decodificador de codificador recursivo com implementação de modelo de atenção para tradução automática neural

Decodificador de codificador recursivo com implementação de modelo de atenção para tradução automática neural

A abordagem recursiva também introduz flexibilidade adicional para experimentar novos designs.

Por exemplo, Luong, et al. em seu jornal “Abordagens eficazes para tradução automática neural baseada na atenção”Dê um passo adiante e proponha que a saída do decodificador da etapa de tempo anterior (h (t-1)) também possa ser alimentada como entradas para o decodificador, em vez de ser usada no cálculo de atenção. Eles chamam isso de modelo de “alimentação de insumos”.

Os efeitos de ter tais conexões são duplos: (a) esperamos tornar o modelo totalmente ciente das opções de alinhamento anteriores e (b) criamos uma rede muito profunda que se estende tanto horizontal quanto verticalmente

- Abordagens eficazes para a tradução automática neural baseada na atenção, 2015.

Curiosamente, essa alimentação de informações, juntamente com sua atenção local, resultou em um desempenho de ponta (no momento em que este livro foi escrito) em uma tarefa de tradução automática padrão.

A abordagem de alimentação de entrada está relacionada ao modelo de mesclagem. Em vez de fornecer a saída decodificada apenas da última etapa de tempo, o modelo de mesclagem fornece uma codificação de todas as etapas de tempo geradas anteriormente.

Pode-se imaginar atenção no decodificador aproveitando essa codificação para ajudar a decodificar a sequência de entrada codificada, ou talvez empregando atenção em ambas as codificações.

Leitura Adicional

Esta seção fornece mais recursos sobre o tópico se você deseja se aprofundar.

Postagens

Papéis

Resumo

Nesta postagem, você descobriu padrões para implementar o modelo codificador-decodificador com e sem atenção.

Especificamente, você aprendeu:

  • O padrão de implementação direto versus recursivo para a rede neural recorrente codificador-decodificador.
  • Como a atenção se encaixa no padrão de implementação direta para o modelo codificador-decodificador.
  • Como a atenção pode ser implementada com o padrão de implementação recursiva para o modelo codificador-decodificador.

Você tem alguma pergunta?
Tire suas dúvidas nos comentários abaixo e farei o possível para responder.

Desenvolva LSTMs para Predição de Sequência ...

Você também pode estar interessado em