Redes neurais artificiais são algoritmos inspirados na arquitetura do cérebro, principalmente nos padrões de conexões dos neurônios. Estruturalmente, as redes neurais consistem em nós, também conhecidos como neurônios artificiais, conectados entre si.
Os nós de uma rede neural são organizados em camadas. Redes neurais artificiais convencionais são chamadas feedforward. Elas consistem em pilhas de camadas de neurônios. Essa estrutura complexa possibilita que as redes neurais tenham desempenhos excelentes em tarefas em que outros algoritmos são ineficientes.
Redes neurais são comumente usadas para tarefas de classificação e regressão.
As redes neurais, assim como os outros algoritmos de machine learning, melhoram seus desempenhos mediante processos de treinamento. O treinamento de uma rede neural pode ocorrer de maneira supervisionada ou não supervisionada.
Em uma rede neural com aprendizagem supervisionada, seu treino é composto por amostras de dados de entrada e saída correspondentes. O objetivo desse procedimento é fazer com que a rede aprenda a mapear uma saída desejada para uma determinada entrada. Esse aprendizado ocorre ajustando os pesos das conexões entre os nós da rede neural.
A aprendizagem não supervisionada em uma rede neural artificial é uma tentativa de fazer com que a rede capture a estrutura dos dados de entrada por conta própria.
Dados sequenciais e redes neurais
A maioria das redes neurais é projetada para operar sobre dados independentes e distribuídos de forma idêntica. No entanto, muitos problemas envolvem dados que não são independentes.
Suponha que você deseja usar um algoritmo para fazer previsões sobre os preços de uma ação na bolsa. Uma rede neural feedforward pode ser usada para prever preços de ações via características como valor de abertura, volume de transações, etc. Mas esses modelos têm desempenhos limitados quando precisam considerar em seus dados as variações dessas características no tempo. Ou seja, a estrutura das redes convencionais não possibilita a captura eficiente de relações de dependências em dados sequenciais. É nesse cenário que as redes neurais recorrentes (recurrent neural networks, RNNs) adquirem supremacia.
O que são redes neurais recorrentes?
RNNs são uma classe de redes neurais desenvolvida para realizar predições sobre dados sequenciais. De forma genérica, sequências são definidas como listas ordenadas de símbolos. A tarefa de predição de sequências consiste em prever o símbolo seguinte de uma sequência a partir dos símbolos observados previamente.
Formalmente, uma rede é chamada recorrente ou recursiva quando seu estado num instante t refere-se de volta a sua definição no instante anterior t-1. Ou seja, em RNNs, as conexões entre os nós têm loops.
Redes neurais recorrentes têm loops. Figura modificada daqui.
Os loops fazem com que as redes neurais recorrentes pareçam complicadas. No entanto, elas não são tão diferentes de uma rede neural convencional.
Uma rede neural recorrente pode ser considerada como múltiplas cópias da mesma rede, cada uma passando uma mensagem para um sucessor como mostrado no esquema abaixo.
Os loops determinam que a saída de uma rede recorrente não seja decidida apenas pelos estímulos atuais de entrada. Estímulos recebidos previamente também contribuem. Consequentemente, RNNs podem ser entendidas como redes com “memória”. Essa memória simplesmente significa que as saídas da rede são condicionadas pelo contexto recente na sequência de entrada, e não apenas pela entrada atual.
A estrutura das redes neurais recorrentes
A imagem abaixo mostra uma rede recorrente sendo desenrolada ou desdobrada em uma rede completa. O processo de desenrolar a rede equivale a escrever sua estrutura em camadas para a sequência completa que ela irá computar. Por exemplo, se a sequência que nos interessa for uma frase de 5 palavras, a rede precisa ser desenrolada em 5 camadas, uma camada para cada palavra.
Os componentes gerais de uma RNN são os seguintes:
xt é o estímulo de entrada na rede no instante t. Ele frequentemente é um vetor one hot encoding.
ht é o estado oculto no instante t. É esse termo que representa a memória da rede e é calculado a partir do estado oculto anterior e do estímulo de entrada atual. O resultado desse cálculo é submetido a uma função não-linear como a tangente hiperbólica (tanh).
ot é a saída da rede em t. Em redes usadas para prever a próxima palavra de uma sequência, a saída é um vetor de probabilidades das palavras do vocabulário sendo aprendido.
Pesos: as RNNs possuem conexões entre as entradas e os estados ocultos parametrizadas por uma matriz de pesos U, conexões recorrentes ocultas parametrizadas por uma matriz de pesos W e conexões entre os estados ocultos e as saídas parametrizadas por uma matriz de pesos V. Todas essas matrizes de pesos são compartilhadas ao longo do tempo.
Compartilhamento de parâmetros e BPTT
Em contraste com as redes convencionais em que cada elemento tem um conjunto de parâmetros específicos, as RNNs compartilham parâmetros em diferentes partes de seus modelos. Na prática, o compartilhamento de parâmetros significa que a saída da rede no instante t é produzida usando a mesma regra de atualização aplicada às saídas anteriores.
Outra diferença das RNNs se refere ao seu algoritmo de treinamento. Em vez de usar a backpropagation tradicional, as redes neurais recorrentes usam algoritmos de retropropagação ao longo do tempo (backpropagation through time, BPTT) para determinar seus gradientes.
Na retropropagação convencional, o modelo ajusta o parâmetro calculando os erros da camada de saída para a camada de entrada. Porém, em rede neurais recorrentes, como os parâmetros são compartilhados por todos os intervalos de tempo, o gradiente em cada saída depende não apenas dos cálculos do intervalo de tempo atual, mas também dos intervalos de tempo anteriores.
Aplicações
Redes neurais recorrentes têm inúmeras aplicações. Elas são usadas principalmente em tarefas de processamento de linguagem natural. Entre algumas de suas aplicações estão:
- Traduções linguísticas
- Descrições de imagens
- Reconhecimento de discurso
- Geração de linguagem
Limitações
Em teoria, as RNNs podem processar informações em sequências arbitrariamente longas. No entanto, na prática, é difícil treinar redes neurais recorrentes com sequências longas. Existem razões técnicas que justificam essa limitação. Entre as principais estão o desaparecimento de gradiente e a explosão de gradiente.
Durante o treinamento usando BPTT, os gradientes precisam ser propagados do último instante t até o primeiro. Porém, o produto desses gradientes pode chegar a zero ou aumentar exponencialmente. Ambas às ocorrências dificultam bastante o treinamento de correlação entre eventos temporalmente distantes. Mas existem formas de superar esses problemas.
Um dos problemas do treinamento de redes neurais recorrentes é conseguir aprender correlações entre eventos temporalmente distantes (marcados em vermelho). Modificado daqui.
Técnicas de recorte de gradiente (gradient clipping) são comumente empregadas para prevenir a explosão de gradiente. Já o desaparecimento de gradiente é evitado com o uso de variações mais modernas de RNNs como redes LSTM e GRU.
Conclusões
Redes neurais recorrentes são redes neurais com a adição de loops às suas arquiteturas. As conexões recorrentes incorporam memória às redes e permitem que elas aprendam a natureza ordenada das observações nas sequências de seus estímulos de entrada.
As RNNs são empregadas em múltiplas aplicações como traduções linguísticas, geração de textos, reconhecimento de fala, descrições de imagens, entre outras. A capacidade desses modelos para lidar com dados sequenciais revolucionou as possibilidades de aplicações de algoritmos de inteligência artificial.