Redes Neurais Recorrentes — LSTM

Jose R F Junior
11 min readJun 11, 2019

--

Os humanos não começam a pensar a partir do zero a cada segundo. Ao ler este ensaio, você entende cada palavra com base em sua compreensão das palavras anteriores. Você não joga tudo fora e começa a pensar de novo. Seus pensamentos têm persistência.

Redes neurais tradicionais não podem fazer isso, e isso parece uma grande falha. Por exemplo, imagine que você queira classificar o tipo de evento que está acontecendo em todos os pontos de um filme. Não está claro como uma rede neural tradicional poderia usar seu raciocínio sobre eventos anteriores no filme para informar os posteriores.

Redes neurais recorrentes resolvem esse problema. São redes com loops, permitindo que as informações persistam.

Redes Neurais Recorrentes possuem loops.

No diagrama acima, um pedaço de rede neural, AUMA, olha para alguma entrada xtxte gera um valor htht. Um loop permite que as informações sejam passadas de uma etapa da rede para a próxima.

Esses laços fazem com que as redes neurais recorrentes pareçam misteriosas. No entanto, se você pensar um pouco mais, eles não são tão diferentes de uma rede neural normal. Uma rede neural recorrente pode ser imaginada como múltiplas cópias da mesma rede, cada uma passando uma mensagem a um sucessor. Considere o que acontece se desenrolarmos o loop:

Uma rede neural recorrente desenrolada.

Essa natureza de cadeia revela que redes neurais recorrentes estão intimamente relacionadas a seqüências e listas. Eles são a arquitetura natural da rede neural a ser usada para esses dados.

E eles certamente são usados! Nos últimos anos, tem havido um sucesso incrível ao aplicar os RNNs a uma variedade de problemas: reconhecimento de fala, modelagem de idiomas, tradução, legendagem de imagens… A lista continua. Deixarei a discussão sobre os incríveis feitos que se podem alcançar com os RNNs com o excelente post de Andrej Karpathy, The Unreasonable Effectiveness of Recurrent Neural Networks . Mas eles são realmente incríveis.

Essencial para esses sucessos é o uso de “LSTMs”, um tipo muito especial de rede neural recorrente que funciona, para muitas tarefas, muito melhor do que a versão padrão. Quase todos os resultados empolgantes baseados em redes neurais recorrentes são alcançados com eles. São estes LSTMs que este ensaio irá explorar.

O problema das dependências de longo prazo

Um dos recursos dos RNNs é a idéia de que eles podem conectar informações anteriores à tarefa atual, como o uso de quadros de vídeo anteriores, que podem informar o entendimento do quadro atual. Se os RNNs pudessem fazer isso, seriam extremamente úteis. Mas eles podem? Depende.

Às vezes, precisamos apenas examinar informações recentes para executar a tarefa atual. Por exemplo, considere um modelo de linguagem tentando prever a próxima palavra com base nas anteriores. Se estamos tentando prever a última palavra em “as nuvens estão no céu ”, não precisamos de mais nenhum contexto — é bastante óbvio que a próxima palavra será o céu. Nesses casos, onde a lacuna entre as informações relevantes e o local necessário é pequena, os RNNs podem aprender a usar as informações passadas.

Mas também há casos em que precisamos de mais contexto. Considere tentar prever a última palavra no texto “Eu cresci na França… falo fluentemente francês ”. Informações recentes sugerem que a próxima palavra é provavelmente o nome de uma língua, mas se quisermos diminuir qual idioma, precisamos o contexto da França, de mais para trás. É inteiramente possível a diferença entre a informação relevante e o ponto em que é necessário tornar-se muito grande.

Infelizmente, à medida que essa lacuna cresce, as RNNs tornam-se incapazes de aprender a conectar as informações.

Em teoria, os RNNs são absolutamente capazes de lidar com essas “dependências de longo prazo”. Um humano poderia escolher cuidadosamente parâmetros para resolver problemas de brinquedo dessa forma. Infelizmente, na prática, os RNNs não parecem ser capazes de aprendê-los. O problema foi explorado em profundidade por Hochreiter (1991) [alemão] e Bengio, et al. (1994) , que encontrou algumas razões bastante fundamentais para que isso possa ser difícil.

Felizmente, os LSTMs não têm esse problema!

Redes LSTM

Redes de Memória de Curto Prazo Longo — geralmente chamadas apenas de “LSTMs” — são um tipo especial de RNN, capaz de aprender dependências de longo prazo. Eles foram introduzidos por Hochreiter & Schmidhuber (1997) e foram refinados e popularizados por muitas pessoas nos seguintes trabalhos. 1 Eles funcionam tremendamente bem em uma grande variedade de problemas e agora são amplamente usados.

Os LSTMs são explicitamente projetados para evitar o problema de dependência de longo prazo. Lembrar informações por longos períodos de tempo é praticamente o seu comportamento padrão, não é algo que eles lutam para aprender!

Todas as redes neurais recorrentes têm a forma de uma cadeia de módulos repetitivos da rede neural. Em RNNs padrão, este módulo de repetição terá uma estrutura muito simples, como uma única camada de camada.

O módulo de repetição em um RNN padrão contém uma única camada.

Os LSTMs também possuem esta estrutura de cadeia, mas o módulo de repetição possui uma estrutura diferente. Em vez de ter uma única camada de rede neural, existem quatro, interagindo de uma maneira muito especial.

O módulo de repetição em um LSTM contém quatro camadas de interação.

Não se preocupe com os detalhes do que está acontecendo. Vamos percorrer o diagrama LSTM passo a passo depois. Por enquanto, vamos apenas tentar nos familiarizar com a notação que estaremos usando.

No diagrama acima, cada linha carrega um vetor inteiro, desde a saída de um nó até as entradas de outros. Os círculos cor-de-rosa representam operações pontuais, como a adição de vetores, enquanto as caixas amarelas são camadas de redes neurais aprendidas. As linhas que se fundem denotam a concatenação, enquanto uma linha bifurcada denota que seu conteúdo está sendo copiado e as cópias vão para locais diferentes.

A idéia central por trás dos LSTMs

A chave para os LSTMs é o estado da célula, a linha horizontal que passa pela parte superior do diagrama.

O estado da célula é como uma correia transportadora. Ele percorre toda a cadeia, com apenas algumas interações lineares menores. É muito fácil que as informações fluam sem alterações.

O LSTM tem a capacidade de remover ou adicionar informações ao estado da célula, cuidadosamente reguladas por estruturas chamadas portas.

Os portões são uma forma de, opcionalmente, deixar passar as informações. Eles são compostos de uma camada de rede neural sigmóide e uma operação de multiplicação pontual.

A camada sigmoide produz números entre zero e um, descrevendo quanto de cada componente deve ser liberado. Um valor de zero significa “não deixe nada passar”, enquanto um valor de um significa “deixe tudo passar!”

Um LSTM possui três desses portões, para proteger e controlar o estado da célula.

Caminhada LSTM passo a passo

O primeiro passo em nosso LSTM é decidir quais informações vamos descartar do estado da célula. Esta decisão é tomada por uma camada sigmóide chamado de “esquecer camada portão.” Ele olha para ht — 1ht-1e xtxte gera um número entre 00e 11para cada número no estado da célula Ct — 1Ct-1. Um 11representa “manter completamente isso”, enquanto um 00 representa “completamente se livrar disso”.

Vamos voltar ao nosso exemplo de um modelo de linguagem tentando prever a próxima palavra com base em todas as anteriores. Em tal problema, o estado da célula pode incluir o gênero do presente sujeito, para que os pronomes corretos possam ser usados. Quando vemos um novo assunto, queremos esquecer o gênero do sujeito antigo.

O próximo passo é decidir quais novas informações vamos armazenar no estado da célula. Isso tem duas partes. Primeiro, uma camada sigmóide chamada “camada de entrada” decide quais valores serão atualizados. Em seguida, uma camada de tanh cria um vetor de novos valores candidatos, C~tC~t, isso poderia ser adicionado ao estado. Na próxima etapa, combinaremos esses dois para criar uma atualização para o estado.

No exemplo do nosso modelo de linguagem, gostaríamos de adicionar o gênero do novo assunto ao estado da célula, para substituir o antigo que estamos esquecendo.

Agora é hora de atualizar o estado da célula antiga, Ct — 1Ct-1, no novo estado da célula CtCt. Os passos anteriores já decidiram o que fazer, só precisamos realmente fazê-lo.

Nós multiplicamos o antigo estado por ftft, esquecendo as coisas que decidimos esquecer mais cedo. Então nós adicionamos itC~tEut∗C~t. Esses são os novos valores candidatos, dimensionados por quanto decidimos atualizar cada valor de estado.

No caso do modelo de linguagem, é aqui que realmente retiramos as informações sobre o gênero do antigo e adicionamos as novas informações, conforme decidimos nas etapas anteriores.

Finalmente, precisamos decidir o que vamos produzir. Essa saída será baseada em nosso estado de célula, mas será uma versão filtrada. Primeiro, corremos uma camada sigmóide que decide quais partes do estado da célula vamos produzir. Então, nós colocamos o estado da célula através de tanhtanh(para empurrar os valores para estar entre -1–1e 11) e multiplique-o pela saída do sigmóide, de modo que apenas produzamos as partes que decidimos.

Para o exemplo do modelo de linguagem, uma vez que ele apenas viu um assunto, ele pode querer produzir informações relevantes para um verbo, caso seja o que vem a seguir. Por exemplo, ele pode mostrar se o sujeito é singular ou plural, de modo que sabemos qual forma um verbo deve ser conjugado, se é o seguinte.

Variantes na memória de curto prazo

O que eu descrevi até agora é um LSTM bem normal. Mas nem todos os LSTMs são iguais aos anteriores. De fato, parece que quase todos os trabalhos envolvendo LSTMs usam uma versão ligeiramente diferente. As diferenças são menores, mas vale a pena mencionar algumas delas.

Uma popular variante LSTM, introduzida por Gers & Schmidhuber (2000) , está adicionando “conexões peephole”. Isso significa que deixamos as camadas de gate olharem para o estado da célula.

O diagrama acima acrescenta peepholes a todos os portões, mas muitos trabalhos darão alguns olho mágico e não outros.

Outra variação é usar portas acopladas de esqueça e entrada. Em vez de decidir separadamente o que esquecer e o que devemos adicionar novas informações, tomamos essas decisões em conjunto. Nós apenas esquecemos quando vamos introduzir algo em seu lugar. Nós só inserimos novos valores no estado quando esquecemos algo mais antigo.

Uma variação um pouco mais dramática no LSTM é a Unidade Recorrente Gated, ou GRU, introduzida por Cho, et al. (2014) . Ele combina as portas de esquecimento e de entrada em uma única “porta de atualização”. Ele também mescla o estado da célula e o estado oculto e faz algumas outras alterações. O modelo resultante é mais simples do que os modelos LSTM padrão e tem se tornado cada vez mais popular.

Estas são apenas algumas das variantes mais notáveis ​​do LSTM. Há muitos outros, como RNNs Profundas por Yao, et al. (2015) . Há também uma abordagem completamente diferente para lidar com dependências de longo prazo, como RNNs de Clockwork por Koutnik, et al. (2014) .

Qual dessas variantes é melhor? As diferenças importam? Greff et al. (2015) fazem uma boa comparação de variantes populares, achando que são todas iguais. Jozefowicz et al. (2015)testaram mais de dez mil arquiteturas RNN, encontrando algumas que funcionavam melhor que LSTMs em certas tarefas.

Conclusão

Anteriormente, mencionei os resultados notáveis ​​que as pessoas estão alcançando com os RNNs. Essencialmente, todos estes são conseguidos usando LSTMs. Eles realmente funcionam muito melhor para a maioria das tarefas!

Escrito como um conjunto de equações, os LSTMs parecem bastante intimidantes. Esperançosamente, percorrê-los passo a passo neste ensaio tornou-os um pouco mais acessíveis.

Os LSTMs foram um grande passo no que podemos realizar com os RNNs. É natural se perguntar: há outro grande passo? Uma opinião comum entre os pesquisadores é: “Sim! Há um próximo passo e é a atenção! ”A ideia é deixar que cada passo de um RNN escolha informações para examinar a partir de uma coleção maior de informações. Por exemplo, se você estiver usando um RNN para criar uma legenda que descreva uma imagem, ela poderá escolher uma parte da imagem para cada palavra que ela gerar. De fato, Xu, et al. (2015) faz exatamente isso — pode ser um ponto de partida divertido se você quiser explorar a atenção! Tem havido uma série de resultados realmente emocionantes usando a atenção, e parece que muito mais estão ao virar da esquina …

Atenção não é o único tópico excitante na pesquisa da RNN. Por exemplo, Grid LSTMs de Kalchbrenner, et al. (2015) parecem extremamente promissores. Trabalhar usando RNNs em modelos generativos — como Gregor, et al. (2015) , Chung et al. (2015) , ou Bayer & Osendorfer (2015) — também parece muito interessante. Os últimos anos têm sido um momento emocionante para redes neurais recorrentes, e os próximos prometem ser apenas mais!

Agradecimentos

Sou grato a várias pessoas por me ajudarem a entender melhor os LSTMs, comentando as visualizações e fornecendo feedback sobre este post.

Sou muito grato aos meus colegas do Google por seu feedback útil, especialmente Oriol Vinyals , Greg Corrado , Jon Shlens , Luke Vilnis e Ilya Sutskever . Também sou grato a muitos outros amigos e colegas por terem me ajudado, incluindo Dario Amodei e Jacob Steinhardt . Sou especialmente grato a Kyunghyun Cho por correspondência extremamente atenciosa sobre meus diagramas.

Antes deste post, eu pratiquei explicando LSTMs durante duas séries de seminários que eu ensinei sobre redes neurais. Obrigado a todos que participaram deles por sua paciência comigo e pelo feedback deles.

  1. Além dos autores originais, muitas pessoas contribuíram para o moderno LSTM. Uma lista não abrangente é: Felix Gers, Fred Cummins, Santiago Fernandez, Justin Bayer, Daan Wierstra, Julián Togelius, Faustino Gómez, Matteo Gagliolo e Alex Graves .

--

--