Uso Avançado de RNN

3 Técnicas para melhorar o desempenho e o poder de generalização das RNN:

Case: Previsão de temperatura

Diferente dos casos anteriores, em que analisamos sequência de texto, iremos trabalhar agora com séries temporais, outra aplicação de deep learning para sequências.

Precisamos converter o arquivo em um array do Numpy

Plotando a temperatura ao longo do tempo (timeseries)

Visualizando apenas os 10 primeiros dias:

Preparação dos dados

Settings:

  1. lookback = 720—Observations will go back 5 days.
  2. steps = 6—Observations will be sampled at one data point per hour.
  3. delay = 144—Targets will be 24 hours in the future.

Precisamos:

Precisamos fazer uma feature engineering e obter as seguintes variáveis:

Com a função generator iremos selecionar as amostras de treino, validação e teste. As seleções de validação e teste serão out of time, ou seja, em períodos posteriores.

Baseline e Sanity Check

É sempre importante termos uma baseline para compararmos os resultados e fazermos um sanity check.

No caso da previsão de tempo, podemos assumir que:

Para avaliar esse baseline, usamos o erro absoluto médio (MAE).

Considerando que fizemos a normalização dos dados, temos: $0.29 \times \sigma_{Temperature} = 2.57^o C$

Temos que fazer uma previsão cujo MAE seja menor!

Uilizaremos uma GRU (gated recurrent unit, "unidade recorrente fechada"), que são similares a LSTM, mas são mais baratas computacionalmente.

Baseline recorrente - uma primeira tentativa

Dropout para evitar overfitting

Para evitar o overfitting usar o dropout é uma boa opção, uma vez que ele 'quebra' algumas correlações entre os dados de treinamento, evitando o superajuste.

Fazer isso em redes recorrentes não é trivial, pois necessitamos das informações prévias para o treinamento recorrente.

Yarin Gal: a máscara de dropout deve ser a mesma em todos os timesteps. Uma máscara de dropout constante deve ser aplicada às ativações internas da camada recorrente, numa espécie de "dropout recorrente".

No Keras, cada camada recorrente pode ter dois argumentos de dropout:

Empilhando Camadas Recorrentes

bla bla

Camadas Bidirecionais

bla bla bla

bla

bla bla

blas

msdklfsdkjmf kdsjfndz kndfmzdx

ndsklfdsz

dskjfjsd,z kjdjsfnds

mais blas

escritos

e descritos