Temas como LSTM, Encoder-Decoder e Attention estão muito quentes no mundo de deep learning. Que tal passarmos pelos pontos principais destes assuntos com teoria e prática na medida certa?
LSTM e o problema das sequências
Long Short-Term Memory (LSTM) são tipos de redes neurais classificadas como Recurrent Neural Network (RNN) e foram especificamente desenvolvidas para prever sequências.
Sequências são estruturas de dados comuns em problemas como tradução de textos, image captioning – atribuição de textos à imagens e conversational modeling – geração de respostas para perguntas escritas. Veja como é simples:
Sequência de entrada A = [I, love, beer], sequência de saída B = [Eu, adoro, cerveja]
Como podemos ver, sequências nada mais são do que vetores de alguma coisa! Chamamos de time steps o tamanho da sequência, por exemplo, no caso acima temos sequências com time steps igual a 3.
Sabendo disso, podemos classificar o problema de previsão de sequências (seq2seq) em algumas categorias como:
- one-to-one: sequências de 1 time step para sequências de 1 time step
- many-to-one: sequências de n time steps para sequências de 1 time step
- many-to-many: sequências de n time steps para sequências de n time steps
Simples até aqui, não? Se você quer saber um pouco mais LSTM e RNN, veja um post que escrevi sobre este assunto aqui. Caso queira voltar um pouco mais e revisar o tema de redes neurais em geral, confira este post.
Eu sei que o texto acima + links de referência que citei já possuem bastante informação. Tire seu tempo para lê-los com calma, talvez executar os códigos…e assim ter uma visão geral sobre as redes neurais e alguns de seus tipos. Dica: não se cobre tanto para entender tudo de primeira, apenas divirta-se 😉
Encoder-Decoder
Uma abordagem para predição de sequências que se mostrou muito eficiente é conhecida como Encoder-Decoder LSTM. Esta abordagem foi proposta originalmente em dois artigos:
- Ilya Sutskever, et al. em “Sequence to Sequence Learning with Neural Networks”
- Kyunghyun Cho, et al. em “Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation“
Como o próprio nome sugere, Encoder-Decoder é composto por dois modelos:
- Um para ler a sequência de entrada e codificá-la em uma sequência de saída de tamanho fixo (Encoder)
- E outro para decodificar esta sequência de tamanho fixo que foi criada e gerar os resultados
A inovação deste modelo é justamente a presença deste vetor codificado de tamanho fixo, que é capaz de orquestrar a comunicação entre a sequência de entrada e saída. Por este motivo, este modelo pode também ser classificado como sequence embedding.
Fonte: Show and Tell: A Neural Image Caption Generator, 2014.
Pensando na implementação técnica da imagem acima em Python (Keras) temos a seguinte arquitetura (nesta ordem):
- Uma ou mais camadas LSTM para implementar o encoder
- Uma camada auxilar entre o encoder e decoder para conectar suas saídas e entradas. Isso é necessário porque o encoder retorna uma estrutura de dados em 2D; no entanto, o decoder espera uma estrutura em 3D
- Uma ou mais camadas LSTM para implementar o decoder
- Uma camada Dense para implementar a saída do modelo
Veremos sua implementação na parte prática deste artigo, incluvise mais explicações sobre o formato 3D esperado pelas LSTMs.
Attention
Os mesmos Dzmitry Bahdanau, et al., que apresentaram a abordagem Encoder-Decoder, também propuseram o modelo “Attention” como uma extensão natural ao Encoder-Decoder, em “Neural Machine Translation by Jointly Learning to Align and Translate”.
Os próprios autores dizem que a abordagem Encoder-Decoder possui um potencial problema ao tentar codificar uma sequência de entrada em um vetor de saída de tamanho fixo, especialmente em sequências muito grandes. .
Attention tenta resolver este ponto, mantendo as saídas intermediárias do codificador LSTM de cada time step da seqüência de entrada e treinando o modelo para aprender a prestar atenção seletiva a essas entradas e relacioná-las com itens na seqüência de saída.
Se você quiser simular o passo a passo da implementação de Attention, siga este post. Se já estiver satisfeito de teorias e quiser ver tudo isso na prática, siga este notebook.
Grande abraço!
Weslley Moura