---
presentation
theme: beige.css
slideNumber: true
width: 1024
height: 768
---
## Aprendizado de Máquina
#### Redes neurais recorrentes
#### Prof. Ronaldo Cristiano Prati
[ronaldo.prati@ufabc.edu.br](mailto:ronaldo.prati@ufabc.edu.br)
Bloco A, sala 513-2
### Redes de propagação forward
- Redes de propagação forward consideram que os
- exemplos de treinamento são IID,
- entrada e saída têm tamanho fixo.
- De que forma considerar dados de tamanhos variados em que há dependências de curto/longo prazo?
###Redes recorrentes
- Constituem uma ampla classe de redes cuja evolução do estado depende tanto da entrada corrente quanto do estado atual.
- São sistemas *Turing-completos* i.e., com tempo, dados e neurônios suficientes, RNNs podem aprender qualquer coisa que um computador pode fazer.
- Aplicáveis a dados sequenciais
- Texto, vídeo, áudio, ...
### Rede feed-forward
### Redes recorrentes
### Redes recorrentes simples
- No caso da rede **Elman**, a camada oculta alimenta uma camada de estado de nodes de contexto que retém memória de entradas passadas.
- As redes **Jordan** diferem em que, ao invés de manter o histórico da camada oculta, elas armazenam a camada de saída na camada de estado.
### Redes recorrentes
### Redes recorrentes
- Uma RNN mantém em sua(s) camada(s) oculta(s) uma **memória interna** dos dados que lhe foram apresentados.
- Essa memoria é uma **combinação** dos dados de entrada e do estado anterior da camada oculta.
### Redes recorrentes
- A rede aprende o que "relembrar"
![](input2.png)
### Redes recorrentes
- A rede aprende o que "relembrar"
![](recurrence_gif.gif)
### Redes recorrentes
- Além disso, a rede as redes podem aprender a esquecer ou relembrar memórias relevantes
- A entrada muda o que está na memória, e a saída é baseada na memória e saída.
### Desdobramento no tempo
- RNNs são treinadas em uma sequência de sinais da entrada, um em cada passo de tempo.
- Uma RNN que recebe uma sequência de $n$ vetores de entrada pode ser vista como uma rede alimentada adiante de $n$ camadas.
- Matrizes de pesos são reusadas a cada passo de tempo (*shared weigths*).
### Desdobramento no tempo
![](backprop_through_time.gif)
### Desdobramento no tempo
- Desdobramento no tempo permite o aprendizado de mapeamentos entre sequências de entrada e de saída com diferentes tamanhos:
- um-para-muitos,
- muitos-para-um,
- muitos-para-muitos.
### Desdobramento no tempo
![](diags.jpeg)
### Desdobramento no tempo
- um-para-muitos
- prever a legenda correspondente a uma imagem.
- muitos-para-um
- prever a carga de sentimento (positiva ou negativa) de uma frase de entrada.
- muitos-para-muitos
- traduzir uma frase do inglês para o português
- rotular os quadros (frames) de um vídeo
- TTS (text-to-speech)
### Exemplo: Modelo de Linguagem
- Considere uma RNN que, a cada passo de tempo, prediz o próximo caractere de uma sequência, dada uma sequência de caracteres anteriores.
- Essa rede pode ser usada para gerar novos textos, um caractere por vez (character-level language model).
- Considere também:
- representação one-hot-encoding para vetores de entrada,
- alfabeto de apenas 4 caracteres: {C, E, F, T},
- uso da função sofmax na saída.
#### Exemplo: Modelo de Linguagem
- Um para um
![](seq1.png)
#### Exemplo: Modelo de Linguagem
- Um para um
![](seq2.png)
#### Exemplo: Modelo de Linguagem
- Um para um
![](seq3.png)
#### Exemplo: Modelo de Linguagem
- Um para um
![](seq4.png)
### Exemplo: Análise de Sentimentos
- Considere um RNN que, a cada passo de tempo, é alimentada com uma palavra.
- Ao final de uma sentença, prever qual é a carga de sentimento daquela sentença.
### Exemplo: Análise de Sentimentos
- muitos para um
![](sentimento.png)
### Exemplo: tradução
- Considere um RNN que, a cada passo de tempo, é alimentada com uma sentença.
- O objetivo é tentar predizer a tradução da sentença em uma outra língua.
### Exemplo: tradução
![](trad.png)
### Backpropagation Through Time (BPTT)
- Variante do backprop para RNNs.
- Pode ser entendido ao interpretarmos uma RNN como a uma rede alimentada adiante na qual:
- há uma camada para cada passo de tempo;
- a matriz de pesos de cada camada é a mesma (i.e., há o compartilhamento de pesos).
### Backpropagation Through Time (BPTT)
- Por exemplo, considere que $w_1$ e $w_2$ são pesos de conexões correspondentes na camada oculta em instantes de tempo distintos.
- o BPTT calcula os gradientes relativos a $\frac{\partial J}{\partial w_1}$ e $\frac{\partial J}{\partial w_2}$ e usa a média dessas quantidades para atualizar $w_1$ e $w_2$.
### Dissipação/explosão dos gradientes
- Dois problemas que podem ocorrer durante o treinamento de RNNs:
- Vanishing gradients
- Exploding gradients
- Uma das causas: o fluxo de informação (propagação dos gradientes) em uma RNN ocorre por meio de sequências de multiplicações.
### Dissipação/explosão dos gradientes
- **Vanishing:** Os gradientes “desaparecem” (i.e., tendem a zero) quando são continuamente multiplicados por números inferiores a um.
- **Exploding:** Os gradientes se tornam exponencialmente grandes quando são multiplicados por números maiores que 1.
## Explosão dos gradientes
- Algumas técnicas para atenuar o problema da explosão dos gradientes:
- Truncar o BPTT (truncated BPTT)
- Truncar os gradientes (gradient clipping)
- Usar otimizadores que ajustem adaptativamente a taxa de aprendizado (os pacotes com keras, tensorflow, etc, implementam vários).
### BPTT truncado
- Corresponde a limitar a quantidade de passos de tempo no passo *backward* a um valor máximo preestabelecido.
- e.g., aplicar backprop a cada 10 passos.
- Desvantagem: perda do contexto temporal.
### Gradiente truncado
- Se o comprimento do vetor gradiente ultrapassar um valor máximo preestabelecido, truncar.
- Várias possibilidades...uma delas:
- new_gradients = gradients * threshold / l2_norm(gradients)
- Técnica simples e efetiva!
## Dissipação dos gradientes
- Muito mais difícil de detectar!
- Alternativas de solução:
- Usar boas estratégias de inicialização dos pesos
- Usar otimizadores que adaptam a taxa de aprendizado (os pacotes como keras, tensorflow, etc, implementam vários).
- Usar LSTMs ou GRUs
### Redes LSTMs
- Tipo de RNN que possui uma dinâmica de propagação de gradientes mais rebuscada.
- Adequada quando há intervalos muito longos de tamanho desconhecido entre eventos importantes.
- Durante o treinamento, uma rede LSTM pode aprender quando deve manter ou descartar informações.
### Intuição:
- Em um vídeo (filme):
- quando termina uma cena, podemos esquecer o dia em que ela ocorreu;
- mas se um personagem morre na cena, devemos lembrar disso para entender as próximas.
- Em um texto, quando termina uma frase, um tradutor pode esquecer o gênero do sujeito.
### Intuição:
![](intuicao.png)
### Intuição:
![](intuicao2.png)
### RNNs simples
![](rnn_mod.png)
### LSTM
![](LSTM3-chain.png)
### LSTMs
### LSTMs
Há três portais em um bloco LSTM:
- forget gate
- memory gate (input gate)
- output gate
### LSTMs
![](gates.jpeg)
### LSTMs
![](prop.gif)
### LSTMs
- O estado interno ($h$) carrega a informação sobre o que uma célula ($C$) leu ao longo do tempo.
- Essa informação pode ser usada no tempo presente, de modo que uma função de custo não dependa apenas dos dados que está vendo neste instante, mas também dados vistos anteriormente.
### LSTMs
- O "tubo" superior é o tubo de memória, cuja entrada é a memória antiga $C_{t-1}$ (um vetor).
![](sup.png)
### LSTMs - Forget Gate
- A conexão que se liga por baixo é $f_{t}$, o vetor resultante do portal esquecer (forget gate).
load_elastic_tensor
![](mem.png)
### LSTMs - Forget Gate
- Se $C_{t-1}$ for multiplicado por um vetor $f_t$ cujas componentes são próximas de
- 0, isso significa que a RNN quer esquecer a maior parte da memória antiga.
- 1, isso significa que a RNN deixa a memória antiga passar.
### LSTMs - Memory gate
- A segunda operação aplicada ao fluxo de memória é uma soma.
- A soma mescla as memórias antiga e nova.
![](soma.png)
### LSTMs - Memory gate
- A válvula abaixo da soma controla o quanto a nova memória deve ser mesclada com a antiga.
![](pipe.png)
### LSTMs - Memory gate
- Esse portal controla o quanto a nova memória influencia a memória anterior.
- Permite adicionar informação à memória da célula.
- A RNA desse portal recebe as mesmas entradas que as do forget gate.
### LSTMs - output gate
- A última porta $h_t$, a saída para o bloco LSTM.
![](output.png)
### LSTMs - output gate
- Este passo possui uma válvula de saída que é controlada pelos seguintes componentes:
- nova memória,
- saída anterior $h_{t-1},
- entrada $X_t$,
- vetor bias.
### CNN vs. LSTMs
- RNNs clássicas sobrescrevem o estado interno.
- LSTMs adicionam ao estado interno.
- Unidades LSTM proveem à RNN células de memória, que possuem operações para manipular a memória:
- leitura,
- gravação e
- reinicialização.
### LSTMs
- Geff Hinton sobre o artigo que propôs as LSTMs:
> if you can understant the paper, you are better than many people in machine learning. It took 10 years until people understand what they were talkink about”.
### LSTMs
- O interesse vem aumentando consideravelmente nos últimos anos
- Citações do Google acadêmico
![](citatios.png)
### Aplicações
Geração de textos:
https://reiinakano.github.io/tfjs-lstm-text-generation/
### Aplicações
- Geração de rótulos para imagens
![](labels.png)
### Aplicações
- Reconhecimento de desenhos
https://quickdraw.withgoogle.com/#
### Aplicações
- Gerar casos de teste
https://github.com/wojciechz/learning_to_execute