Escolhendo uma taxa de aprendizado


85

Atualmente, estou trabalhando na implementação da descida estocástica de gradiente SGD, para redes neurais usando propagação traseira, e enquanto eu entendo seu objetivo, tenho algumas perguntas sobre como escolher valores para a taxa de aprendizado.

  • A taxa de aprendizado está relacionada à forma do gradiente de erro, conforme determina a taxa de descida?
  • Em caso afirmativo, como você usa essas informações para informar sua decisão sobre um valor?
  • Se não é o tipo de valores que devo escolher, e como devo escolher?
  • Parece que você deseja valores pequenos para evitar ultrapassagens, mas como você escolhe um deles para não ficar preso aos mínimos locais ou demorar muito para descer?
  • Faz sentido ter uma taxa de aprendizado constante ou devo usar alguma métrica para alterar seu valor à medida que me aproximo do mínimo no gradiente?

Em resumo: como escolho a taxa de aprendizado para o SGD?

Respostas:


69
  • A taxa de aprendizado está relacionada à forma do gradiente de erro, conforme determina a taxa de descida?

    • Na SGD comum, a resposta é não. É utilizada uma taxa de aprendizado global que é indiferente ao gradiente de erro. No entanto, a intuição que você está enfrentando inspirou várias modificações na regra de atualização do SGD.
  • Em caso afirmativo, como você usa essas informações para informar sua decisão sobre um valor?

    • O Adagrad é o mais conhecido deles e escala uma taxa de aprendizado global η em cada dimensão, com base na norma l2 da história do gradiente de erro gt em cada dimensão:

      insira a descrição da imagem aqui

    • O Adadelta é outro algoritmo de treinamento que usa o histórico de gradientes de erros, como o adagrad, e o histórico de atualizações de peso e tem a vantagem de não precisar definir uma taxa de aprendizado .

  • Se não é o tipo de valores que devo escolher, e como devo escolher?

    • Definir taxas de aprendizado para SGD simples em redes neurais geralmente é um processo de iniciar com um valor sensato como 0,01 e depois realizar validação cruzada para encontrar um valor ideal. Os valores típicos variam entre algumas ordens de magnitude de 0,0001 a 1.
  • Parece que você deseja valores pequenos para evitar ultrapassagens, mas como você escolhe um deles para não ficar preso aos mínimos locais ou demorar muito para descer? Faz sentido ter uma taxa de aprendizado constante ou devo usar alguma métrica para alterar seu valor à medida que me aproximo do mínimo no gradiente?

    • Geralmente, o melhor valor é próximo da taxa de aprendizado estável mais alta e o declínio / recozimento (linear ou exponencial) da taxa de aprendizagem é usado durante o curso do treinamento. A razão por trás disso é que, desde o início, há um sinal claro de aprendizado, de modo que atualizações agressivas incentivam a exploração, enquanto mais tarde as taxas de aprendizado menores permitem uma exploração mais delicada da superfície de erro local.

11
Na prática, você usará uma taxa de aprendizado com o adadelta. Em alguns problemas, não funciona sem.
Bayer

Note-se que o otimizador de Adam é mais comum do que Adagrad ou Adadelta atualmente.
E_net4 ainda está em greve 21/09/17

22

Abaixo está uma nota muito boa (página 12) sobre a taxa de aprendizado em redes neurais (propagação traseira) de Andrew Ng. Você encontrará detalhes relacionados à taxa de aprendizado.

http://web.stanford.edu/class/cs294a/sparseAutoencoder_2011new.pdf

Para o seu quarto ponto, você está certo que normalmente é preciso escolher uma taxa de aprendizado "equilibrada", que não ultrapasse nem converja muito lentamente. Pode-se traçar a taxa de aprendizado através da descida da função de custo para diagnosticar / ajustar. Na prática, Andrew normalmente usa o algoritmo L-BFGS (mencionado na página 12) para obter uma taxa de aprendizado "suficientemente boa".


9

A seleção de uma taxa de aprendizado é um exemplo de um "meta-problema" conhecido como otimização de hiperparâmetro . A melhor taxa de aprendizado depende do problema em questão, bem como da arquitetura do modelo que está sendo otimizada e até do estado do modelo no atual processo de otimização! Existem até pacotes de software dedicados à otimização de hiperparâmetros, como hortelã e hiperopt (apenas alguns exemplos, existem muitos outros!).

Além da otimização de hiperparâmetros em larga escala, eu queria mencionar uma técnica bastante comum para selecionar taxas de aprendizado que não foram mencionadas até o momento. O recozimento simulado é uma técnica para otimizar um modelo pelo qual se inicia com uma grande taxa de aprendizado e reduz gradualmente a taxa de aprendizado à medida que a otimização progride. Geralmente, você otimiza seu modelo com uma grande taxa de aprendizado (0,1 ou mais) e reduz progressivamente essa taxa, geralmente em uma ordem de magnitude (de 0,01 a 0,001, 0,0001 etc.).

Isso pode ser combinado com a parada antecipada para otimizar o modelo com uma taxa de aprendizado enquanto houver progresso, depois mude para uma taxa de aprendizado menor quando o progresso parecer lento. As taxas de aprendizado maiores parecem ajudar o modelo a localizar regiões de ótimas ótimas em geral, enquanto taxas menores ajudam o modelo a se concentrar em um ótimo local específico.


6

Copie e cole da minha tese de mestrado :

  • Se a perda não diminuir por várias épocas, a taxa de aprendizado pode ser muito baixa. O processo de otimização também pode estar parado no mínimo local.
  • A perda de NAN pode ser devido a taxas de aprendizado muito altas. Outro motivo é a divisão por zero ou o logaritmo de zero.
  • Rastreamento de atualização de peso: Andrej Karpathy propôs na 5ª palestra do CS231n o rastreamento de atualizações de peso para verificar se a taxa de aprendizado é bem escolhida. Ele sugere que a atualização de peso seja da ordem de 10 a 3. Se a atualização de peso for muito alta, a taxa de aprendizado deverá ser reduzida. Se a atualização de peso for muito baixa, a taxa de aprendizado deverá ser aumentada.
  • As taxas típicas de aprendizado estão em [0,1, 0,00001]

4

A taxa de aprendizado, transformada como "tamanho da etapa" durante nosso processo de iteração, é um problema há anos e continua.

Existem três opções para o tamanho da etapa no meu concernente:

  • Um está relacionado ao " tempo " e cada dimensão deve compartilhar o mesmo tamanho de etapa. Você deve ter notado algo como

αt

enquanto t demonstra o número da iteração atual, alfa é um hiper parâmetro

  • a próxima está conectada com gradiente e cada dimensão tem seu próprio tamanho de etapa. Você deve ter notado algo como

1αβ+s=1t1gs2αβ+s=1tgs2

enquanto alfa e beta são hiper parâmetros, g demonstra gradiente

  • o último é a combinação de tempo e gradiente , e deve ser como

1αβ+s=1t1gs2αβ+s=1tgs2+γt

ou

1αβ+s=1t1gs2αβ+s=1tgs2γt

Espero que isso ajude você, boa sorte -)


Você tem uma referência para isso?
Jon

Você pode consultar a parte da taxa de aprendizado da FTRL, podemos formulá-la com TIME e GRADIENT.
joe

3

As redes neurais são frequentemente treinadas por descida gradiente nos pesos. Isso significa que, a cada iteração, usamos a retropropagação para calcular a derivada da função de perda em relação a cada peso e subtraí-la desse peso. No entanto, se você realmente tentar isso, os pesos mudarão muito a cada iteração, o que os tornará "super-corretos" e a perda aumentará / divergirá. Portanto, na prática, as pessoas geralmente multiplicam cada derivada por um pequeno valor chamado “taxa de aprendizado” antes de subtraí-la do seu peso correspondente.

Você também pode pensar em uma função de perda de redes neurais como uma superfície, onde cada direção em que você pode se mover representa o valor de um peso. A descida em gradiente é como dar saltos na direção atual da inclinação, e a taxa de aprendizado é como a duração do salto que você dá.


3

Acrescentando à resposta de David, em fastai, encontrei o conceito de encontrar a melhor taxa de aprendizado para esses dados, usando uma arquitetura específica.

Mas essa coisa existe apenas no fastai / pytorch. Recentemente, alguém fez uma implementação do keras .

que por sua vez se baseiam nestes documentos:

Espero que isto ajude.


2

Deixe-me fazer uma breve introdução a outra abordagem sobre a escolha da taxa de aprendizado, com base no curso 1. de Deep Learning de Jeremy Howard . Se você quiser ir mais fundo, consulte este blog .

A taxa de aprendizado proposta no curso de Jeremy Howard é baseada em uma maneira sistemática de tentar diferentes taxas de aprendizagem e escolher a que mais diminui a função de perda. Isso é feito alimentando muitos lotes para o método de descida gradiente de minilote e aumentando a taxa de aprendizado a cada novo lote alimentado no método. Quando a taxa de aprendizado é muito pequena, a função de perda diminui muito lentamente. Quando a taxa de aprendizado é muito grande, a função de perda aumenta. Entre esses dois regimes, há uma taxa de aprendizado ideal para a qual a função de perda diminui mais rapidamente. Isso pode ser visto na figura a seguir:

insira a descrição da imagem aqui

103

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.