Quero discutir alguma intuição de alto nível por trás das redes LSTM. Aqui estão algumas perguntas para ajudar a explorar os aspectos:
- Por que/quando usaríamos uma LSTM sobre uma rede neural feed forward (FFNN)?
- Quais são os prós e contras das LSTMs e como elas se comparam à FFNN?
- Como eles são diferentes das tradicionais redes neurais recorrentes (RNNs)?
Feed Forward Neural Networks (FFNNN)
Deixe-nos primeiro considerar um FFNN padrão com arquitetura:
Como você provavelmente sabe, este FFNN pega três entradas, processa-as usando a camada oculta, e produz duas saídas. Podemos expandir esta arquitetura para incorporar mais camadas ocultas, mas o conceito básico ainda se mantém: os inputs entram, são processados em uma direção, e são produzidos no final.
Este conceito é muito bem explicado por outros artigos, então não vou entrar em muito mais detalhes. A condição primária que separa FFNN de arquiteturas recorrentes é que os inputs para um neurônio devem vir da camada anterior a esse neurônio.
>
FFNN Wikipedia
Rede Neural Recorrente (RNNN)
Rede Neural Recorrente são matematicamente muito similares aos modelos FFNN. Sua principal diferença é que a restrição colocada nas FFNN não é mais aplicada:
Inputs to a neuron can come from any other layer.
>
Você verá frequentemente que esta arquitetura é frequentemente “enrolada” em uma unidade recorrente como o seguinte:
>
As unidades “roladas” que você pode ver em diagramas de arquitetura podem, portanto, ser enganosamente pequenas. Quando você os desenrola, a rede frequentemente será bastante profunda!
RNN Wikipedia
Long-Short Term Memory (LSTM)
LSTMs são um tipo especial de RNN que são projetados para resolver o problema de gradiente de desaparecimento/exploração.
Quando você treina um RNN tradicional, a rede frequentemente sofre de gradientes de desaparecimento/exploração: desenrolar uma unidade recorrente resulta em uma rede muito profunda! Se você passar pelo algoritmo de retropropagação usando arquiteturas tradicionais do RNN, as camadas anteriores se tornarão cada vez menos significativas à medida que nos propagamos através da rede. Isto torna os RNNs tradicionais propensos a esquecer informações, particularmente dados que aparecem muitas vezes antes da hora atual.
Um exemplo de célula LSTM é ilustrado como tal:
Esta estrutura é similar à unidade tradicional do RNNN desenrolado, mas a diferença chave com o LSTM são os portões: gate de entrada, gate de saída e gate de esquecimento. A função desses portões é bem descrita por seus nomes:
- O gate de entrada controla os dados que entram na célula
- Esquece gate controla o quanto os dados ficam dentro da célula
- O gate de saída controla a saída da célula através da função de ativação
Este post github IO é uma grande introdução ao básico de LSTMs. Ele também faz um trabalho incrível de explicar a intuição por trás da matemática de um LSTM.
LSTM Wikipedia
Propriedades e um Exemplo de Caso de Uso do RNNN
Os loops de feedback emprestam melhor as redes neurais recorrentes aos desafios temporais. O tempo é levado em consideração em sua arquitetura!
Deixe-nos explorar um exemplo:
Talvez você esteja usando uma rede para prever a próxima palavra em uma frase. Digamos que você receba as entradas:
Guardar, a Alice dirige até a loja mais próxima para comprar
Uma rede neural recorrente pode esquecer a primeira palavra “faminta”, enquanto uma LSTM idealmente a propagaria. Um LSTM usaria o contexto que ouviu anteriormente na frase para adivinhar “comida” enquanto um RNN pode adivinhar qualquer coisa que seja comprada numa loja, particularmente dada uma frase longa ou múltiplas frases.
Os mecanismos de comedor que permitem este tipo de memória são bem explicados por @StatsSorceress aqui: Forget Layer in a Recurrent Neural Network (RNNN) –
RNNs são projetados para lidar com seqüências. Isto pode ser usado para analisar vídeo (seqüências de imagens), escrita/escrita (seqüências de palavras), etc.
LSTMs são projetados para deixar informações importantes persistirem ao longo do tempo. Os RNNs frequentemente “esquecem” com o tempo.
FFNNs são sistemas sem memória; depois de processar alguma entrada, eles esquecem tudo sobre essa entrada. Digamos, por exemplo, que treinamos um FFNN que toma 5 palavras como inputs e prevê o próximo output. Este modelo receberia então o input do exemplo acima:
a loja mais próxima para comprar .
Este modelo está claramente perdendo contexto, e obteríamos um resultado pobre.
Agora, você pode perguntar, e se fizéssemos um FFNN que pegasse muitos inputs para que incluísse a palavra “faminto” em seus inputs? Em outras palavras, não poderíamos aumentar o número de entradas para um FFNN para representar suficientemente os dados anteriores?
A resposta é sim, mas este método é ao mesmo tempo ineficiente e muitas vezes impraticável. Digamos, por exemplo, que precisamos lembrar o contexto de um parágrafo inteiro de volta. Nós precisaríamos de um FFNN muito grande! Além disso, como é que sabemos quantas palavras de volta queremos como contexto? 20 palavras seriam suficientes? 30? 100? A arquitetura LSTM elimina estes problemas completamente, deixando a rede gerenciar uma memória transitória. Este problema é exacerbado por desafios de processamento de vídeo porque cada frame irá requerer significativamente mais entradas do que tarefas de PNL.
Note, no entanto, que as unidades LSTM são inerentemente mais complexas computacionalmente do que as unidades de um FFNN, portanto treiná-las é muitas vezes mais difícil e leva mais tempo. Apesar destas desvantagens, o seu sucesso nos desafios de dados temporais garante claramente o seu uso em relação às FFNN.