Estou usando o tensorflow para escrever redes neurais simples para um pouco de pesquisa e tive muitos problemas com pesos 'nan' durante o treinamento. Tentei muitas soluções diferentes, como alterar o otimizador, alterar a perda, o tamanho dos dados, etc., mas sem sucesso. Por fim, notei que uma mudança na taxa de aprendizado fez uma diferença inacreditável nos meus pesos.
Usando uma taxa de aprendizado de 0,001 (que eu considerava bastante conservadora), a função minimizar aumentaria exponencialmente a perda. Após uma época, a perda poderia saltar de um número na casa dos milhares para um trilhão e depois para o infinito ('nan'). Quando reduzi a taxa de aprendizado para 0,0001, tudo funcionou bem.
1) Por que uma única ordem de magnitude tem esse efeito?
2) Por que a função minimizar realiza literalmente o oposto de sua função e maximiza a perda? Parece-me que isso não deveria ocorrer, independentemente da taxa de aprendizado.
Respostas:
Você pode achar o Capítulo 8 do Deep Learning útil. Nele, os autores discutem o treinamento de modelos de redes neurais. É muito complicado, então não estou surpreso que você esteja tendo dificuldades.
Uma possibilidade (além do erro do usuário) é que o seu problema esteja altamente condicionado. Os métodos de descida de gradiente usam apenas as informações da primeira derivada (gradiente) ao calcular uma atualização. Isso pode causar problemas quando a segunda derivada (o hessiano) está mal condicionada.
Citando os autores:
Os autores fornecem uma derivação simples para mostrar que esse pode ser o caso. Usando a descida gradiente, a função de custo deve mudar (para segunda ordem) em
onde é o gradiente, é o hessiano e é a taxa de aprendizado. Claramente, se os segundos derivativos forem grandes, o primeiro termo poderá inundar o segundo, e a função de custo aumentará, não diminuirá. Como o primeiro e o segundo termos são dimensionados de maneira diferente com , uma maneira de aliviar esse problema é reduzir (embora, é claro, isso possa resultar em aprendizado muito lento).g H ε ε ε
fonte
Há duas razões principais. Primeiro, você não está usando os mesmos dados na primeira etapa que na segunda. Se, na primeira etapa, o modelo aprender esses valores e cair em um mínimo local, é muito provável que ocorra uma perda maior de novos valores.
A segunda razão é a forma da função de custo. Você tenta minimizar o valor em pequenas etapas, a duração dessas etapas é dada por dois fatores: o gradiente e a taxa de aprendizado. Imagem: sua função é como x ^ 2. Se seus valores forem próximos de 0, o gradiente será menor do que se for maior, mas se sua taxa de aprendizado for grande, em vez de se aproximar de 0, você realmente aumentará o erro porque seu novo ponto com base na classificação e no valor a taxa de aprendizado é maior que 0 que a etapa anterior. E isso pode acontecer várias vezes.
Dê uma olhada neste link: http://www.statisticsviews.com/details/feature/5722691/Getting-to-the-Bottom-of-Regression-with-Gradient-Descent.html
Se você ver os números com alfa 0,01 e alfa 0,12, verá como na primeira figura a taxa de aprendizado é pequena e, portanto, o gradiente está se aproximando do mínimo, mas no segundo caso a taxa de aprendizado é tão grande que o gradiente se move mais a cada passo.
fonte