Ícone do site Didática Tech

Empilhando LSTMs em layers

Como podemos pensar na ideia de empilhamento de LSTMs? Colocar LSTMs empilhadas uma em cima da outra remete ao conceito de múltiplas camadas em deep learning.

Basicamente, vamos considerar apenas o bloco do canto inferior esquerdo. Esse bloco foi abordado no detalhamento da arquitetura de uma LSTM. Ele tem uma entrada xt, que são os dados que ele está calibrando, usando para a rede aprender.

A partir desses dados vimos como é gerado o ht-1 e como é gerado o estado Ct.

O Ct serve como entrada para o próximo time step, como Ct-1 e cada entrada xt representa um novo momento de tempo, um novo dado em termos de espaçamento temporal deslocado em uma unidade.

Já sabemos como são gerados os estados Ct e ht. Se tivéssemos só um bloco de LSTM, o estado ht poderia gerar a saída ot. Poderíamos conectá-lo diretamente com um neurônio que geraria o resultado de saída, podendo ser uma função de classificação ou um problema de regressão, por exemplo.

Então, a saída ht vai conectar-se a alguma quantidade de neurônios que determinará o que será a saída final.

Empilhando em camadas

Para empilhar LSTMs, podemos pegar o ht e usá-lo como se fosse a entrada xt de uma nova LSTM. Nessa nova LSTM, em vez de receber uma entrada xt, o que ela irá receber será o ht anterior: o estado ht servirá como entrada nesse mesmo momento de tempo t.

Pensando verticalmente, da mesma forma, essa nova LSTM gerará um outro ht que servirá como entrada para outra LSTM e assim por diante.

Essa linha vertical está toda no mesmo timeframe, no mesmo instante de tempo e todas elas estão gerando resultados.

Pensando horizontalmente, estamos falando de tempos diferentes. Há um outro instante de tempo – tempo posterior. E teremos outra saída ht+1.

Numa LSTM normal, poderíamos ver só esta parte horizontal: uma entrada xt, depois em outro momento de tempo haverá outra entrada xt+1 e em outro momento de tempo haverá uma entrada xt+2, gerando as saídas: y1, y2, y3 em cada instante de tempo. Mas se estamos empilhando várias LSTMs, ao invés de ter uma saída direta, passaremos por outras LSTMs até chegar na saída.

Camadas profundas

No caso das redes neurais recorrentes, não é muito comum haver muitas camadas profundas, sendo raro arquiteturas com mais de três LSTMs empilhadas.

Enquanto nas redes densas é comum ver problemas que usam, por exemplo, dez camadas profundas, dependendo da complexidade do problema, do tamanho da rede (podemos ter várias camadas profundas trabalhando com deep learning); aqui é raro ter tantas redes recorrentes LSTMs empilhadas uma em cima da outra.

Quando ouvimos falar de um modelo de redes neurais recorrentes com, por exemplo, dezessete camadas – um modelo mais profundo – precisamos observar que no final, na última LSTM, ao invés de passar direto para uma saída para se ter um resultado e abrir um problema de classificação ou de regressão, o que é feito é adicionar várias camadas densas de neurônios.

Então, neste caso, poderíamos adicionar, por exemplo, uma camada de neurônios que se conecta com outra camada densa de neurônios e com outra e, assim, não se tem mais um bloco temporal.

Temos um bloco só de camadas densas conectadas umas com as outras. Nesta profundidade vertical, não estamos adicionando complexidade em termos temporais..

Toda essa mágica da temporalidade ocorre nos blocos de LSTM. Quando temos camadas densas essa temporalidade não existe mais; então, aqueles efeitos de retroalimentação dos cálculos dos pesos, das constantes que dependem dessa retroalimentação, valem para blocos temporais, mas nos blocos totalmente conectados essa influência temporal já não existe.

Então, podemos colocar quantas camadas profundas quisermos que esses pesos passarão a ser otimizados com essa nova ótica.

Quando não existem modelos recorrentes muito profundos, é normal que essa profundidade acabe sendo adicionada com essas camadas de neurônios totalmente conectados, levando a uma profundidade totalmente vertical.

Como estudar LSTMs na prática

Em nosso Curso Aprendizado por Reforço, Algoritmos Genéticos, NLP e GANs abordamos LSTMs em detalhes, tanto de forma teórica quanto prática, utilizando programação em Python, com foco na didática, possiblitando um aprendizado completo, mesmo para aqueles que estão iniciando.

Nesse curso nós mostramos exemplos e exercícios onde você vai trabalhar com séries temporais e aplicará LSTMs em múltiplas camadas. Mas não apenas isso, você vai aprender o que há de mais avançado no mundo do deep learning.

Temos opções gratuitas e completas, do básico ao avançado. Confira aqui!

Artigos relacionados:

Sair da versão mobile