Compreendendo LSTM Networks

– http://colah.github.io/posts/2015-08-Understanding-LSTMs/
Postado em 27 de agosto de 2015

Redes Neurais Recorrentes
Os seres humanos não começam a pensar desde zero a cada segundo. Ao ler este ensaio, você entende cada palavra com base a sua compreensão de palavras anteriores. Você não esquece tudo e começa a pensar do zero novamente. Os seus pensamentos têm persistência.
As redes neurais tradicionais não podem fazer isso, e parece ser uma deficiência importante. Por exemplo, imagine que deseja classificar o tipo de evento que está a acontecer em cada ponto do filme. Não está claro como uma rede neural tradicional poderia usar o seu raciocínio sobre eventos anteriores no filme para informar os posteriores.
As redes neurais recorrentes abordam esta questão. São redes com loops, permitindo que as informações persistam.

As Redes Neurais Recorrentes possuem loops.
No diagrama acima, um pedaço de rede neural, A, analisa alguns dados de entrada xt e exibe um valor ht. Um loop permite que as informações sejam passadas de um passo da rede para a próxima.
Esses loops tornam as redes neuronais recorrentes parecerem misteriosas. No entanto, se você pensar um pouco mais, verifica-se que eles não são tão diferentes do que uma rede neural normal. Uma rede neural recorrente pode ser pensada como múltiplas cópias da mesma rede, cada uma passando uma mensagem para um sucessor. Considere o que acontece se desenrolarmos o loop:

Uma rede neural recorrente desenrolada.
Essa natureza semelhante a uma cadeia revela que as redes neurais recorrentes estão intimamente relacionadas com sequências e listas. Eles são a arquitetura natural da rede neural para ser usada para esses dados.
E eles certamente são usados! Nos últimos anos, houve um sucesso incrível aplicando RNNs para uma variedade de problemas: reconhecimento de fala, modelagem de idioma, tradução, legenda de imagens… A lista continua. Vou deixar a discussão sobre os feitos surpreendentes que pode ser alcançado com as RNNs para a excelente postagem do blog de Andrej Karpathy, A Irrazoável Eficácia das Redes Neurais Recorrentes. Mas eles realmente são bastante surpreendentes.
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 excitantes 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 apelos das RNNs é a idéia de que eles podem ser capazes de conectar informações anteriores à tarefa atual, como o uso de molduras de vídeo anteriores podem informar a compreensão do quadro atual. Se as RNNs pudessem fazer isso, eles seriam extremamente úteis. Mas eles podem? Depende.
Às vezes, precisamos apenas olhar para informações recentes para executar a tarefa atual. Por exemplo, considere um modelo de linguagem tentando prever a próxima palavra com base nos anteriores. Se estamos a tentar prever a última palavra em “as nuvens estão no céu”, não precisamos de mais contexto – é bem óbvio que a próxima palavra será o céu. Nesses casos, onde o espaço entre a informação relevante e o local que é necessário é pequeno, as RNNs podem aprender a usar a informação passada.

Mas também há casos em que precisamos de mais contexto. Considere tentar prever a última palavra no texto “Eu cresci na França… Eu falo francês com fluência”. As informações recentes sugerem que a próxima palavra provavelmente é o nome de uma linguagem, mas se quisermos restringir qual é a lingua, precisamos o contexto da França, de mais para trás. É perfeitamente 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 brecha cresce, as RNNs não conseguem aprender a conectar a informação.

Em teoria, as RNNs são absolutamente capazes de lidar com tais “dependências de longo prazo”. Um humano poderia escolher cuidadosamente parâmetros para que eles solucionassem problemas de brinquedos desta forma. Infelizmente, na prática, as RNNs não conseguem aprender. O problema foi explorado em profundidade por Hochreiter (1991) [Alemão] e Bengio, et al. (1994), que encontrou algumas razões bastante fundamentais pelas quais pode ser difícil.
Felizmente, LSTMs não têm esse problema!

Redes LSTM
As redes de memória de longo prazo – geralmente chamadas 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 no trabalho seguinte.1 Eles funcionam tremendamente bem em uma grande variedade de problemas e agora são amplamente utilizados.
Os LSTMs são projetados explicitamente para evitar o problema de dependência de longo prazo. Recordar a informação 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 de rede neural. Em RNNs padrão, este módulo de repetição terá uma estrutura muito simples, como uma única camada de tanh.

O módulo de repetição em uma RNN padrão contém uma única camada.
Os LSTMs também possuem essa estrutura de cadeia, mas o módulo de repetição tem uma estrutura diferente. Em vez de ter uma única camada de rede neural, existem quatro, interagindo de forma 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á a acontecer. Atravessaremos o diagrama LSTM passo a passo mais tarde. Por enquanto, vamos tentar nos sentar com a notação que usaremos.

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 rede neural aprendidas. As linhas de fusão denotam concatenação, enquanto uma linha de bifurcação denota que o seu conteúdo está a ser copiado e as cópias estão a ir para diferentes locais.

A Ideia do Núcleo Atrás dos LSTMs
A chave para LSTMs é o estado da célula, a linha horizontal que passa pela parte superior do diagrama.
O estado celular é como uma correia transportadora. Ele corre diretamente pela cadeia inteira, com apenas algumas pequenas interações lineares. É muito fácil que a informação apenas flua ao longo dela inalterada.

O LSTM tem a capacidade de remover ou adicionar informações ao estado celular, cuidadosamente reguladas por estruturas chamadas portões.
Os portões são uma forma de, opcionalmente, permitir a informação. Eles estão compostos de uma camada de rede neural sigmóide e uma operação de multiplicação de pontos.

A camada sigmoid produz números entre zero e um, descrevendo quanto de cada componente deve ser deixado passar. Um valor de zero significa “não deixar passar nada”, enquanto um valor de um significa “deixar passar tudo”
Um LSTM tem três desses portões, para proteger e controlar o estado celular.

Passo a Passo LSTM
O primeiro passo no nosso LSTM é decidir quais são as informações que vamos afastar do estado celular. Esta decisão é feita por uma camada sigmoide chamada “camada de guarda do esconderijo”. Ela olha para ht-1 e xt e emite um número entre 0 e 1 para cada número no estado celular Ct-1. A 1 representa “manter completamente isso” enquanto um 0 representa “se livra completamente disso”.
Voltemos 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 celular pode incluir o gênero do assunto atual, para que os pronomes corretos possam ser usados. Quando vemos um novo assunto, queremos esquecer o gênero do assunto antigo.

O próximo passo é decidir que novas informações vamos armazenar no estado celular. Isso tem duas partes. Primeiro, uma camada sigmoid chamada “portão de camada de entrada” decide que valores vamos atualizar. Em seguida, uma camada tanh cria um vetor de novos valores candidatos, C~t, que podem ser adicionados ao estado. No próximo passo, combinaremos estes 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-1, no novo estado celular Ct. As etapas anteriores já decidiram o que fazer, só precisamos realmente fazê-lo.
Multiplicamos o estado antigo, ignorando as coisas que decidimos esquecer anteriormente. Então, adicionamos it*C~t. Estes são os novos valores candidatos, escalados por quanto decidimos atualizar cada valor do estado.
No caso do modelo de linguagem, é aqui que realmente deixamos as informações sobre o gênero do sujeito antigo e adicionamos as novas informações, como decidimos nas etapas anteriores.

Finalmente, precisamos decidir o que vamos lançar. Esta saída será baseada no nosso estado celular, mas será uma versão filtrada. Primeiro, nós executamos uma camada sigmoide que decide que partes do estado celular vamos lançar. Em seguida, colocamos o estado da célula através do tanh (para empurrar os valores para estar entre -1 e 1) e multiplique-o pela saída do portão sigmoid, de modo que apenas produzimos as partes que decidimos.
Para o exemplo do modelo de linguagem, uma vez que apenas viu um assunto, pode querer exibir informações relevantes para um verbo, caso seja o que vem depois. Por exemplo, pode produzir-se se o sujeito é singular ou plural, para que possamos saber em que forma um verbo deve ser conjugado se for o que se segue a seguir.

Variantes na Memória de Longo e Curto Prazo
O que descrevi até agora é um LSTM bastante normal. Mas nem todos os LSTMs são os mesmos que os acima. Na verdade, 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 variante popular de LSTM, introduzida por Gers & Schmidhuber (2000), está adicionando “conexões de geometria”. Isso significa que deixamos as camadas do portão olhar para o estado da célula.

O diagrama acima acrescenta olhares a todos os portões, mas muitos documentos irão dar alguns olhares e não outros.
Outra variação é usar portas de esquadrão e entrada acopladas. Em vez de decidir separadamente sobre o que esquecer e sobre o que devemos adicionar novas informações, juntamos essas decisões. Só nos esquecemos quando vamos pôr algo em seu lugar. Nós apenas inserimos novos valores no estado quando esquecemos algo mais antigo.

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

Estas são apenas algumas das variantes LSTM mais notáveis. Há muitos outros, como Depth Gated RNNs por Yao, et al. (2015). Há também uma abordagem completamente diferente para abordar dependências de longo prazo, como as RNN Clockwork by Koutnik, et al. (2014).
Qual dessas variantes é melhor? As diferenças são importantes? Greff, et al. (2015) fazem uma boa comparação de variantes populares, achando que elas são quase as mesmas. Jozefowicz, et al. (2015) testaram mais de dez mil arquiteturas RNN, encontrando algumas que funcionaram melhor do que LSTMs em determinadas tarefas.
Conclusão
Anteriormente, mencionei os resultados notáveis que as pessoas estão a conseguir com RNNs. Essencialmente, todos estes são alcançados usando LSTMs. Eles realmente funcionam muito melhor para a maioria das tarefas!
Escrito como um conjunto de equações, os LSTMs parecem bastante intimidantes. Felizmente, caminhar através deles passo a passo neste ensaio os tornou um pouco mais acessíveis.
LSTMs foram um grande passo no que podemos realizar com RNNs. É natural preguntar: há outro grande passo? Uma opinião comum entre os pesquisadores é: “Sim! Há um próximo passo e é a atenção!” A idéia é deixar cada passo de uma RNN escolher informações para analisar a partir de uma coleção maior de informações. Por exemplo, se você estiver a usar uma RNN para criar uma legenda descrevendo uma imagem, pode escolher uma parte da imagem a ser observada para cada palavra que ela saia. Na verdade, Xu, et al. (2015) faz exatamente isso – pode ser um divertido ponto de partida se quiser explorar a atenção! Houve uma série de resultados realmente emocionantes usando a atenção, e parece que muito mais estão ao virar da esquina…
A atenção não é o único fio emocionante na pesquisa da RNN. Por exemplo, Grade LSTMs por Kalchbrenner, et al. (2015) parece extremamente promissores. Trabalhe 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 as redes neuronais recorrentes, e os próximos prometem apenas ser mais!

Reconhecimentos
Agradeço a várias pessoas por me ajudar a entender melhor os LSTMs, comentando as visualizações e fornecendo comentários sobre esta publicação.
Agradeço aos meus colegas do Google pelos seus comentários úteis, especialmente Oriol Vinyals, Greg Corrado, Jon Shlens, Luke Vilnis e Ilya Sutskever. Agradeço também a muitos outros amigos e colegas por terem tido tempo para me ajudar, incluindo Dario Amodei e Jacob Steinhardt. Estou especialmente agradecido com Kyunghyun Cho por uma correspondência extremamente pensativa sobre os meus diagramas.
Antes desta publicação, pratiquei explicar LSTMs durante duas séries de seminários que ensinei em redes neurais. Obrigado a todos os que participaram daqueles pela sua paciência comigo e pelos seus comentários.
1. Além dos autores originais, muitas pessoas contribuíram para o moderno LSTM. Uma lista não abrangente é: Felix Gers, Fred Cummins, Santiago Fernández, Justin Bayer, Daan Wierstra, Julian Togelius, Faustino Gomez, Matteo Gagliolo e Alex Graves.↩

Sobre o autor

Sara Filipa

Comentar

Posts recentes

Comentários

Arquivos

Categorias

Meta