Diferença entre sequências de retorno e estados de retorno para LSTMs em Keras

Diferença entre sequências de retorno e estados de retorno para LSTMs em Keras

A biblioteca de aprendizagem profunda Keras fornece uma implementação da Long Short-Term Memory, ou LSTM, rede neural recorrente.

Como parte dessa implementação, a API Keras fornece acesso às sequências de retorno e ao estado de retorno. O uso e a diferença entre esses dados podem ser confusos ao projetar modelos sofisticados de redes neurais recorrentes, como o modelo codificador-decodificador.

Neste tutorial, você descobrirá a diferença e o resultado das sequências de retorno e dos estados de retorno para camadas LSTM na biblioteca de aprendizado profundo Keras.

Depois de concluir este tutorial, você saberá:

  • Essas sequências de retorno retornam a saída de estado oculto para cada intervalo de tempo de entrada.
  • Esse estado de retorno retorna a saída do estado oculto e o estado da célula para a última etapa de tempo de entrada.
  • Essas sequências de retorno e estado de retorno podem ser usados ​​ao mesmo tempo.

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.

Entenda a diferença entre sequências de retorno e estados de retorno para LSTMs em Keras

Entenda a diferença entre sequências de retorno e estados de retorno para LSTMs em Keras
Foto de Adrian Curt Dannemann, alguns direitos reservados.

Visão geral do tutorial

Este tutorial é dividido em 4 partes; eles estão:

  1. Memória Longa de Curto Prazo
  2. Seqüências de retorno
  3. Estados de Retorno
  4. Estados de retorno e sequências

Memória Longa de Curto Prazo

A Long Short-Term Memory, ou LSTM, é uma rede neural recorrente composta por portas internas.

Ao contrário de outras redes neurais recorrentes, as portas internas da rede permitem que o modelo seja treinado com sucesso usando backpropagation através do tempo, ou BPTT, e evita o problema de gradientes de desaparecimento.

Na biblioteca de aprendizado profundo Keras, camadas LSTM podem ser criadas usando a classe LSTM ().

A criação de uma camada de unidades de memória LSTM permite que você especifique o número de unidades de memória dentro da camada.

Cada unidade ou célula dentro da camada tem um estado interno de célula, muitas vezes abreviado como “c“, E produz um estado oculto, muitas vezes abreviado como“h“.

A API Keras permite que você acesse esses dados, que podem ser úteis ou mesmo necessários ao desenvolver arquiteturas de rede neural recorrentes sofisticadas, como o modelo codificador-decodificador.

No restante deste tutorial, examinaremos a API para acessar esses dados.

Seqüências de retorno

Cada célula LSTM produzirá um estado oculto h para cada entrada.

Podemos demonstrar isso em Keras com um modelo muito pequeno com uma única camada LSTM que contém uma única célula LSTM.

Neste exemplo, teremos uma amostra de entrada com 3 etapas de tempo e um recurso observado em cada etapa de tempo:

O exemplo completo está listado abaixo.

Nota: todos os exemplos nesta postagem usam a API funcional Keras.

A execução do exemplo gera um único estado oculto para a sequência de entrada com 3 etapas de tempo.

Seu valor de saída específico será diferente devido à inicialização aleatória dos pesos LSTM e do estado da célula.

É possível acessar a saída de estado oculto para cada intervalo de tempo de entrada.

Isso pode ser feito definindo o return_sequences atribuir a Verdade ao definir a camada LSTM, da seguinte forma:

Podemos atualizar o exemplo anterior com esta mudança.

A lista completa de códigos é fornecida abaixo.

A execução do exemplo retorna uma sequência de 3 valores, uma saída de estado oculto para cada etapa de tempo de entrada para a única célula LSTM na camada.

Você deve definir return_sequences = True ao empilhar camadas LSTM de modo que a segunda camada LSTM tenha uma entrada de sequência tridimensional. Para mais detalhes, veja a postagem:

Você também pode precisar acessar a sequência de saídas de estado ocultas ao prever uma sequência de saídas com um Denso camada de saída envolvida em uma camada TimeDistributed. Veja este post para mais detalhes:

Estados de Retorno

A saída de uma célula LSTM ou camada de células é chamada de estado oculto.

Isso é confuso, porque cada célula LSTM retém um estado interno que não é de saída, chamado de estado da célula, ou c.

Geralmente, não precisamos acessar o estado da célula, a menos que estejamos desenvolvendo modelos sofisticados onde as camadas subsequentes podem precisar ter seu estado de célula inicializado com o estado de célula final de outra camada, como em um modelo codificador-decodificador.

Keras fornece o argumento return_state para a camada LSTM que fornecerá acesso à saída de estado oculto (estado_h) e o estado da célula (estado_c) Por exemplo:

Isso pode parecer confuso porque tanto lstm1 quanto estado_h referem-se à mesma saída de estado oculto. A razão para esses dois tensores serem separados ficará clara na próxima seção.

Podemos demonstrar o acesso aos estados ocultos e celulares das células na camada LSTM com um exemplo prático listado abaixo.

Executar o exemplo retorna 3 matrizes:

  1. A saída de estado oculto LSTM para a última etapa de tempo.
  2. A saída de estado oculto LSTM para a última etapa de tempo (novamente).
  3. O estado da célula LSTM para a última etapa de tempo.

O estado oculto e o estado da célula podem, por sua vez, ser usados ​​para inicializar os estados de outra camada LSTM com o mesmo número de células.

Estados de retorno e sequências

Podemos acessar a sequência do estado oculto e os estados da célula ao mesmo tempo.

Isso pode ser feito configurando a camada LSTM para sequências de retorno e estados de retorno.

O exemplo completo está listado abaixo.

Executando o exemplo, podemos ver agora porque o tensor de saída LSTM e o tensor de saída de estado oculto são declarados de forma separável.

A camada retorna o estado oculto para cada etapa de tempo de entrada e, em seguida, separadamente, a saída do estado oculto para a última etapa de tempo e o estado da célula para a última etapa de tempo de entrada.

Isso pode ser confirmado ao ver que o último valor nas sequências retornadas (primeira matriz) corresponde ao valor no estado oculto (segunda matriz).

Leitura Adicional

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

Resumo

Neste tutorial, você descobriu a diferença e o resultado das sequências de retorno e dos estados de retorno para camadas LSTM na biblioteca de aprendizado profundo Keras.

Especificamente, você aprendeu:

  • Essas sequências de retorno retornam a saída de estado oculto para cada intervalo de tempo de entrada.
  • Esse estado de retorno retorna a saída do estado oculto e o estado da célula para a última etapa de tempo de entrada.
  • Essas sequências de retorno e estado de retorno podem ser usados ​​ao mesmo tempo.

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 hoje!

Redes de memória de longo prazo com Python

Desenvolva seus próprios modelos LSTM em minutos

... com apenas algumas linhas de código python

Descubra como em meu novo Ebook:
Redes de memória de longo prazo com Python

Ele fornece tutoriais de auto-estudo em tópicos como:
CNN LSTMs, codificador-decodificador LSTMs, modelos generativos, preparação de dados, fazer previsões e muito mais...

Finalmente traga redes neurais recorrentes LSTM para
Seus projetos de previsão de sequência

Ignore os acadêmicos. Apenas resultados.

Veja o que é ...

Você também pode estar interessado em