--- 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