Por que a taxa de aprendizado está fazendo com que os pesos da minha rede neural subam rapidamente?

9

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.

abeoliver
fonte
Você pode dizer como você inicializou seus pesos?
Himanshu Rai
Sugiro tentar o solucionador de Adam. Parece ter um comportamento melhor e um padrão melhor, e você pode usar as taxas de aprendizado padrão para isso.
DW

Respostas:

9

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:

Alguns desafios surgem mesmo ao otimizar funções convexas. Destes, o mais proeminente é mal condicionado da matriz de Hesse . Este é um problema muito geral na maioria das otimizações numéricas, convexas ou não, e é descrito em mais detalhes na seção 4.3.1.H

Acredita-se que o problema de condicionamento físico esteja presente em problemas de treinamento de redes neurais. O mau condicionamento pode se manifestar fazendo com que o SGD fique "paralisado" no sentido de que mesmo etapas muito pequenas aumentam a função de custo. [minha ênfase adicionada]

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

ε22gTHg-εgTg

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).gHεεε

vbox
fonte
2
Parece-me que essa resposta do quora oferece uma explicação bastante intuitiva para o mau condicionamento do hessiano.
Oren Milman 05/10
3

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.

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.

jorgemf
fonte
11
Com relação ao segundo motivo - esta resposta demonstra (usando funções simples) quando a descida do gradiente pode divergir. Essa resposta também tem de código Python para que você possa experimentar e ver como se comporta gradiente descendente em diferentes cenários ..
Oren Milman