Neste artigo vamos discutir sobre uma pergunta-chave dentro do tema de redes neurais: Se nosso cérebro é capaz de guardar informações já aprendidas para usar posteriormente em outras situações, será que as redes neurais artificiais também têm esta capacidade? Sua resposta provavelmte é SIM. De fato, não está incorreta, mas definitivamente não é a melhor resposta.

Quebrando o gelo

O campo de estudo das redes neurais, em inglês também conhecido como Neural Networks ou Multilayer Perceptrons, tem como objetivo investigar como modelos biológicos simples do nosso cérebro podem ser usados para resolver problemas computacionais complexos (por exemplo, prever a ocorrência de um evento). Na prática, este campo tem como objetivo criar algoritmos e estruturas de dados capazes de resolver estes desafios.

O termo Perceptron foi o precursor das grandes redes neurais utilizadas em deep learning e refere-se a um modelo simples com um único neurônio.

As redes neurais têm a capacidade de aprender uma função de mapeamento dos dados, pela qual é possível relacionar variáveis independentes da variável resposta. Esta função de mapeamento é aprendida por meio da criação de um sistema de multicamadas.

Como o conhecimento adquirido é armazenado?

Redes Neurais tradicionais (NN) não têm a capacidade de armazenar informações sobre conhecimentos prévios adquiridos. Estas redes são muito boas para produzir mapeaentos estáticos das informações de treino, porém pecam para reproduzir comportamentos dinâmicos.

Isso acontece porque o vetor de saída da rede (S) no instante t, depende apenas do vetor de entrada (E) e dos parâmetros da rede (P) definidos no mesmo instante t.

S(t) = RN [E(t), P(t)]

Já nas redes conhecidas como Redes Neurais Recorrentes (ou Recurrent Neural Network, RNN) este comportamente estático tenta ser transformado em dinâmico por meio da recurcividade, no qual o vetor de saída da rede (S) calculado no instante t é passado à frente para o cálculo do próximo vetor de Saída S no tempo t+1.

S(t) = RN [E(t), S(t-1), P(t)]

Consigo entender melhor com desenhos

Vamos esquematizar as duas equações citadas acima para facilitar o entendimento. Note que a única diferença é a existência de um loop nas Redes Neurais Recorrentes (é o que chamamos anteriormente de recursividade).

RNN1

Podemos entender que as Redes Neurais Recorrentes possuem a mesma estrutura, porém são controladas por um loop que passa os resultados de uma tarefa para outra. Esta capacidade de passar os resultados prévios para frente, é o que estamos definindo como a memória da rede. Quando abrimos as iterações deste loop, o que temos é uma lista de parâmetros de devem ser processados em diferentes instantes t.

Figura adaptda de http://colah.github.io/posts/2015-08-Understanding-LSTMs/

RNN2

Portanto, a resposta correta para a nossa pergunta inicial é: Depende da rede neural…se for as recorrentes sim!

[isso também reforça a teoria de que, na dúvida, “depende” é uma boa resposta. Mas tem que saber explicar depois]

De fato as RNNs se consolidaram dentro das abordagens de aprendizagem de máquina, mas existe um tipo particular de RNN que merece nossa atenção…são as chamadas LSTM’s (Long Short Term Memory).

LSTM’s (Long Short Term Memory).

 Vamos primeiro criar nosso exemplo prático para seguirmos estudando LSTM’s.

Já sabemos que RNN são adequadas para problemas em que a existência de uma “memória” é importante. Um destes tipos de problemas poderia ser a tentativa de recomendar a próxima palavra em uma sequência de texto já digitada (uma espécie de recurso auto completar).

Por exemplo: Complete a frase: A cor do seu céu é…

Se sua resposta foi “azul”, parabéns! Você tem uma boa implementação de RNN no seu cérebro.

É por isso que dizem que nosso cérebro é fantástico…somos capazes de usar conhecimentos prévios para fazer predições.

Pois bem, este é um típico cenário onde as RNN funcionariam muito bem. Porém, como eu já disse, o nosso cérebro é fantástico, e não vai demorar muito para desbancarmos as RNN. Vejam a próxima frase.

Eu estudei e trabalhei na inglaterra por 10 longos anos, por isso hoje sou fluente em…

Se sua resposta foi “inglês”, parabéns! Não me canso de falar que você é muito bom!

Pena que as tradicionais RNN não são tão boas assim. Neste caso, o fato de termos informações anteriores não tão recentes, faz com que as RNN se atrapalhem. Está muito claro que um idioma deve ser escolhido para completar a frase, mas a escolha deste idioma depende de informações que foram aprendidas em tarefas mais distantes (tecnicamente falando, as últimas palavras não me darão a resposta).

Acho que foi nesse momento que o inventor das RNNs pegou suas coisas e disse: Okay, de volta para o laboratório ☹

Porém foi deste pequeno caos que nasceram as LSTM’s. Sim, elas são capazes de resolver este problema computacional, graças a Hochreiter & Schmidhuber (1997).

Se nós abrirmos as LSTM’s veremos que cada tarefa é comporta por quatro camadas internas (pequenos retângulos dentro de cada tarefa). A figura abaixo, criada por Chris Olah, nos dá uma boa idea desta representação.

RNN3

Fonte: http://colah.github.io/posts/2015-08-Understanding-LSTMs/

Em resumo:

  • Camada 1 (forget layer): Possui uma sigmoid function (capaz de classificar informações entre 0 e 1) para especificar o que será descartado e o que será passado para frente. Sendo que, quanto mais próximo de 0, mais recomendado o descarte.
  • Camada 2: Define qual informação será armazenada (cell state).
  • Camada 3: Executa a atualização da célula.
  • Camada 4: Camada de saída

Um abraço.

Anúncios