Uma introdução suave aos gradientes explosivos em redes neurais

Uma introdução suave aos gradientes explosivos em redes neurais

A explosão de gradientes é um problema em que grandes gradientes de erro se acumulam e resultam em atualizações muito grandes nos pesos do modelo da rede neural durante o treinamento.

Isso faz com que seu modelo fique instável e não consiga aprender com seus dados de treinamento.

Neste post, você descobrirá o problema de explodir gradientes com redes neurais artificiais profundas.

Depois de concluir esta postagem, você saberá:

  • O que são gradientes explosivos e os problemas que eles causam durante o treinamento.
  • Como saber se você pode ter gradientes explosivos com seu modelo de rede.
  • Como você pode corrigir o problema de gradiente explosivo em sua rede.

Comece seu projeto com meu novo livro Long Short-Term Memory Networks With Python, incluindo tutoriais passo a passo e a Código-fonte Python arquivos para todos os exemplos.

Vamos começar.

  • Atualização out / 2018: Removida a menção de ReLU como uma solução.
Uma introdução suave aos gradientes explosivos em redes neurais recorrentes

Uma introdução suave aos gradientes explosivos em redes neurais recorrentes
Foto de Taro Taylor, alguns direitos reservados.

O que são gradientes explosivos?

Um gradiente de erro é a direção e a magnitude calculadas durante o treinamento de uma rede neural que é usada para atualizar os pesos da rede na direção certa e na quantidade certa.

Em redes profundas ou redes neurais recorrentes, gradientes de erro podem se acumular durante uma atualização e resultar em gradientes muito grandes. Isso, por sua vez, resulta em grandes atualizações nos pesos da rede e, por sua vez, em uma rede instável. Em um extremo, os valores dos pesos podem se tornar tão grandes a ponto de estourar e resultar em valores NaN.

A explosão ocorre por meio do crescimento exponencial, multiplicando repetidamente os gradientes através das camadas da rede que têm valores maiores do que 1,0.

Qual é o problema com gradientes explosivos?

Em redes Perceptron multicamadas profundas, a explosão de gradientes pode resultar em uma rede instável que, na melhor das hipóteses, não consegue aprender com os dados de treinamento e, na pior, resulta em valores de peso NaN que não podem mais ser atualizados.

… A explosão de gradientes pode tornar o aprendizado instável.

- Página 282, Deep Learning, 2016.

Em redes neurais recorrentes, a explosão de gradientes pode resultar em uma rede instável que é incapaz de aprender com os dados de treinamento e, na melhor das hipóteses, uma rede que não pode aprender com longas sequências de entrada de dados.

… O problema de gradientes explosivos refere-se ao grande aumento na norma do gradiente durante o treinamento. Tais eventos são devido à explosão dos componentes de longo prazo

- Sobre a dificuldade de treinar redes neurais recorrentes, 2013.

Como saber se há gradientes explosivos?

Existem alguns sinais sutis de que você pode estar sofrendo de gradientes explosivos durante o treinamento de sua rede, como:

  • O modelo é incapaz de obter tração em seus dados de treinamento (por exemplo, perda insuficiente).
  • O modelo é instável, resultando em grandes mudanças na perda de atualização para atualização.
  • A perda do modelo vai para NaN durante o treinamento.

Se você tiver esses tipos de problemas, poderá cavar mais fundo para ver se tem problemas com gradientes explosivos.

Existem alguns sinais menos sutis que você pode usar para confirmar que tem gradientes explosivos.

  • Os pesos do modelo rapidamente se tornam muito grandes durante o treinamento.
  • Os pesos do modelo vão para os valores NaN durante o treinamento.
  • Os valores de gradiente de erro são consistentemente acima de 1,0 para cada nó e camada durante o treinamento.

Como corrigir gradientes explosivos?

Existem muitas abordagens para lidar com gradientes explosivos; esta seção lista algumas abordagens de práticas recomendadas que você pode usar.

1. Reprojetar o modelo de rede

Em redes neurais profundas, a explosão de gradientes pode ser resolvida redesenhando a rede para ter menos camadas.

Também pode haver algum benefício em usar um tamanho de lote menor durante o treinamento da rede.

Em redes neurais recorrentes, a atualização em menos etapas de tempo anteriores durante o treinamento, chamada de retropropagação truncada ao longo do tempo, pode reduzir o problema do gradiente de explosão.

2. Use redes de memória de longo prazo

Em redes neurais recorrentes, a explosão de gradiente pode ocorrer devido à instabilidade inerente ao treinamento desse tipo de rede, por exemplo, via Backpropagation através do tempo que essencialmente transforma a rede recorrente em uma rede neural Perceptron de múltiplas camadas profundas.

Os gradientes de explosão podem ser reduzidos usando as unidades de memória de Long Short-Term Memory (LSTM) e talvez estruturas de neurônios do tipo gated relacionadas.

A adoção de unidades de memória LSTM é uma nova prática recomendada para redes neurais recorrentes para predição de sequência.

3. Use recorte gradiente

A explosão de gradientes ainda pode ocorrer em redes Perceptron multicamadas muito profundas com um grande tamanho de lote e LSTMs com comprimentos de sequência de entrada muito longos.

Se gradientes explosivos ainda estiverem ocorrendo, você pode verificar e limitar o tamanho dos gradientes durante o treinamento de sua rede.

Isso é chamado de recorte de gradiente.

Lidar com gradientes explosivos tem uma solução simples, mas muito eficaz: recortar gradientes se sua norma exceder um determinado limite.

- Seção 5.2.4, Gradientes desaparecendo e explodindo, métodos de rede neural em processamento de linguagem natural, 2017.

Especificamente, os valores do gradiente de erro são verificados em relação a um valor limite e cortados ou definidos para esse valor limite se o gradiente de erro exceder o limite.

Até certo ponto, o problema do gradiente explosivo pode ser mitigado pelo recorte do gradiente (limiarizando os valores dos gradientes antes de realizar uma etapa de descida do gradiente).

- Página 294, Deep Learning, 2016.

Na biblioteca de aprendizado profundo Keras, você pode usar recorte gradiente, definindo o clipnorm ou clipvalue argumentos em seu otimizador antes do treinamento.

Bons valores padrão são clipnorm = 1.0 e clipvalue = 0,5.

4. Use Regularização de Peso

Outra abordagem, se gradientes explosivos ainda estiverem ocorrendo, é verificar o tamanho dos pesos da rede e aplicar uma penalidade à função de perda da rede para grandes valores de peso.

Isso é chamado de regularização de peso e geralmente uma penalidade L1 (pesos absolutos) ou L2 (pesos quadrados) pode ser usada.

Usar uma penalidade L1 ou L2 nos pesos recorrentes pode ajudar na explosão de gradientes

- Sobre a dificuldade de treinar redes neurais recorrentes, 2013.

Na biblioteca de aprendizado profundo do Keras, você pode usar a regularização de peso definindo o kernel_regularizer argumento em sua camada e usando um L1 ou L2 regularizador.

Leitura Adicional

Esta seção fornece mais recursos sobre o tópico se você deseja se aprofundar.

Postagens

Livros

Papéis

Artigos

API Keras

Resumo

Nesta postagem, você descobriu o problema de explodir gradientes ao treinar modelos de redes neurais profundas.

Especificamente, você aprendeu:

  • O que são gradientes explosivos e os problemas que eles causam durante o treinamento.
  • Como saber se você pode ter gradientes explosivos com seu modelo de rede.
  • Como você pode corrigir o problema de gradiente explosivo em sua rede.

Você tem alguma pergunta?
Tire suas dúvidas nos comentários abaixo e farei o possível para responder.

Desenvolva LSTMs para Predição de Sequência hoje!

Redes de memória de longo prazo com Python

Desenvolva seus próprios modelos LSTM em minutos

... com apenas algumas linhas de código python

Descubra como em meu novo Ebook:
Redes de memória de longo prazo com Python

Ele fornece tutoriais de auto-estudo em tópicos como:
CNN LSTMs, codificador-decodificador LSTMs, modelos generativos, preparação de dados, fazer previsões e muito mais...

Finalmente traga redes neurais recorrentes LSTM para
Seus projetos de previsão de sequência

Ignore os acadêmicos. Apenas resultados.

Veja o que há dentro

Você também pode estar interessado em