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?
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".
fonte
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.
fonte
Copie e cole da minha tese de mestrado :
fonte
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:
enquanto t demonstra o número da iteração atual, alfa é um hiper parâmetro
enquanto alfa e beta são hiper parâmetros, g demonstra gradiente
ou
Espero que isso ajude você, boa sorte -)
fonte
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á.
fonte
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.
fonte
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:
fonte