• Nenhum resultado encontrado

RECURRENT NEURAL NETWORK (RNN) E A DEPENDÊNCIA DE LONGO

loops de função iterativa para armazenar informações (Graves, 2012).

Para melhor compreender o funcionamento de redes recorrentes, é importante saber como funcionam as redes neurais tradicionais feedforward. Um dos diferenciais é que as redes tradicionais são unidirecionais, ou seja, os dados passam pela camada de entrada, pelas camadas ocultas e pelas camadas de saída, não passando duas vezes pelo mesmo caminho (Figura 3.6). Além disso, as redes neurais tradicionais não apresentam qualquer tipo de memória das entradas que recebem, fazendo com que não sejam tão eficientes com entradas sequenciais (ex. textos). Desta forma, não é possível inferir a ordem entre dois ou mais elementos sequenciais (ex. a próxima palavra em uma sentença de texto).

Já uma RNN consegue fazer com que o conhecimento adquirido por meio de entradas anteriores persista em sua memória, o que permite que realize inferências sobre entradas sequencias. De acordo com Sak et al. (2014), as RNNs contêm ciclos que alimentam as ativações da rede a partir de uma etapa anterior. Assim, cada etapa anterior serve como entrada nas unidades de rede, influenciando as previsões seguintes.

Figura 3.6: Arquitetura de uma rede neural tradicional (adaptado de Haykin (2007)).

Para esclarecer melhor o que uma RNN realiza, observa-se a Figura 3.8, em que cada característica x de uma porta de entrada (círculos em azul) alimenta a rede neural A e gera um uma saída ˆy. Quando a rede lê a próxima característica, ela carrega alguma informação do passo anterior para gerar uma saída e assim por diante até o final do dado sequencial.

Figura 3.7: Funcionamento básico de uma RNN (adaptado de Olah (2015)

Assim, as RNNs possuem duas fontes de entrada, o presente e o passado recente, que se combinam para determinar como inferir sobre novos dados, o que é análogo ao aprendizado humano. Assim, as redes recorrentes são diferenciadas das redes feedforward pelo loop de

feedback conectado às suas decisões anteriores. Por isso, costuma-se dizer que as RNNs possuem

Figura 3.8: Módulo RNN, com arquitetura da unidade de interação contendo apenas uma camada (Olah (2015).

A informação de contexto sequencial, uma espécie de memória temporária, é preservada no estado oculto da RNN, a qual passa por muitos ciclos, afetando o processamento de cada nova amostra. Essas correlações entre cada ciclo podem ser separadas por muitos instantes de tempo, ou seja, um evento (ex. a previsão da próxima palavra de uma sentença) depende de n ciclos anteriores. Portanto, essas correlações são chamadas de “dependências de longo prazo” (Bengio et al., 1994). Ainda usando o como exemplo um modelo de linguagem que visa prever a próxima palavra com base nas anteriores, observa-se que algumas situações de previsão contam com um contexto explícito, ou seja, o contexto fica claro na própria sentença, conforme apresentado a seguir:

“As nuvens estão no céu."

Percebe-se então, que de acordo com o contexto da própria sentença, a próxima palavra é “céu”. Nota-se que a lacuna existente entre a palavra a ser prevista e as palavras do contexto necessárias para prevê-la, é pequena. Nesses casos, as RNNs conseguem ser eficientes.

As limitações se apresentam às RNNs, quando torna-se necessário um contexto maior para a previsão de uma palavra em um texto, como o exemplo apresentado abaixo:

“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 para definir qual idioma, é necessário ter acesso ao contexto bem anterior. Esse tipo de situação é bastante comum em muitos textos. O fato é que, à medida que essa lacuna cresce, as RNNs tornam-se incapazes de aprender a correlação entre os ciclos de cada um dos dados (palavras) de entrada. Esse problema foi discutido de forma mais extensiva por Bengio et al. (1994) e Hochreiter (1991), e está relacionado principalmente ao chamado “vanishing gradient”. Conforme é possível observar na Figura 3.8, as setas que interligam as células da rede neural, indicam que as informações de longo prazo precisam percorrer todas as células, de forma sequencial, antes de chegar à célula de processamento atual. Sendo assim, esse fluxo de informação (taxa de aprendizado) pode ser corrompido durante esse caminho, o que é causado quando de sua multiplicação por valores (gradientes dos pesos) menores ou iguais a zero, fazendo com que a rede aprenda muito lentamente ou mesmo pare de aprender. Esse fato causa os chamados “vanishing gradient”, o que se resume à perda de informações de contexto relevantes, utilizadas para a identificação da semântica de uma determinada palavra em um texto.

Para resolver este tipo de problema, surgiram as redes LSTM, uma variação das RNNs tradicionais, proposta por Hochreiter e Schmidhuber (1997), cujo objetivo foi solucionar o problema do “vanishing gradient”. Isso ocorre pela separação entre a memória e a representação

de saída, sendo que cada unidade de memória atual possui uma dependência linear da unidade de memória anterior (Ravuri e Stolcke, 2015).

Comumente, as RNNs possuem módulos recorrentes, porém, em RNNs tradicionais a unidade de interação contém apenas uma camada (Figura 3.8), já as redes LSTMs, apresentam quatro camadas de interação (retângulos em amarelo) (Figura 3.9).

Figura 3.9: Módulo LSTM, com arquitetura da unidade de interação contendo quatro camadas (Olah, 2015).

De acordo com Gers et al. (2002), uma LSTM contém uma ou mais células de memória conectadas de forma recorrente na camada oculta. Por meio dessas células de memória, os blocos LSTM conseguem armazenar o estado temporal da rede. Cada bloco apresenta três camadas de multiplicação adaptativa, chamadas portões (gate), compartilhadas por todas as células do bloco, que controlam o fluxo de informações. Os portões são uma maneira de deixar as informações passarem opcionalmente. Eles são compostos de uma camada de rede neural sigmóide (retângulo amarelo contendo o símboloσ) e uma operação de multiplicação vetorial (círculo rosa contendo um X) (Figura 3.10).

Figura 3.10: Arquitetura de um portão em um módulo LSTM Olah (2015).

A camada sigmóide gera números entre zero e um, descrevendo quanto de cada componente deve ser liberado. Um valor zero significa "não deixar passar nada", enquanto um valor de um significa "deixar passar tudo"

Em outras palavras, é possível dizer que os portões de um módulo LSTM determinam quando a entrada é significativa o suficiente para ser lembrada, quando deve continuar sendo lembrada e quando deve exibir o valor. Por meio desse mecanismo, as redes LSTM apresentam a vantagem de armazenar informações contextuais (vetor de contexto) para dados sequencias, mas ainda assim há limitações. A limitação das redes LSTM está no tamanho do escopo das informações contextuais que suporta, ou seja, o número de elementos de entrada permitido (ex. tamanho de um texto). Pois, da mesma forma que nas RNNs, as LSTMs continuam tendo um caminho sequencial entre as células da rede (Raffel e Ellis, 2015), fazendo com que, em algum momento, ainda ocorra o problema do “vanishing gradient”, mesmo que em menor grau. Isso significa que as redes LSTM suportam sim, sequências mais longas, mas o tamanho da sequência

também é finito. Sendo assim, a manutenção do vetor de contexto continua sendo um problema em modelos como esse.

Mais recentemente, em busca de uma solução para o problema da representação de contexto para dados sequenciais, surgiu uma técnica denominada mecanismo de atenção (Bahdanau et al., 2014; Luong et al., 2015). Desta forma, ao invés de codificar toda a sequência de entrada em um vetor de contexto, o mecanismo de atenção permite ao decodificador dar ênfase a diferentes partes da sequência de entrada, em cada etapa da geração da saída. Ou seja, o decodificador utiliza todos os estados intermediários para gerar a saída.

O mecanismo de atenção (tratado em mais detalhes no item 3.6), pode ser considerado uma evolução/revolução em se tratando de identificação da semântica das palavras em um texto, independente do tamanho da sequência. Com isso, o problema da dependência de longo prazo existente nas RNNs e LSTMs é superado. Isso ocorre porque uma rede neural que contenha um mecanismo de atenção possui a capacidade de ignorar informações irrelevantes e se concentrar no que é relevante. Desta forma, torna-se possível conectar duas palavras relacionadas, mesmo que elas não estejam localizadas uma na sequência da outra.

Portanto, o mecanismo de atenção permite que se observe a totalidade de uma sentença, para estabelecer conexões entre qualquer palavra em particular e seu contexto relevante. Isso é muito diferente das RNNs que enfatizam o contexto à direita de uma palavra, e além disso apresentam pouca memória, ou mesmo da rede LSTM que, mesmo considerando os contextos da esquerda e da direita, possuem limitações quanto ao tamanho da sequência para a qual consegue manter o contexto.