Como ajustar (sistematicamente) a taxa de aprendizado com o Gradient Descent como o Otimizador?

12

Um estranho para o campo ML / DL; iniciou o curso Udacity Deep Learning, baseado no Tensorflow; fazendo a tarefa 3, problema 4; tentando ajustar a taxa de aprendizado com a seguinte configuração:

  • Tamanho do lote 128
  • Número de etapas: o suficiente para preencher duas épocas
  • Tamanhos de camadas ocultas: 1024, 305, 75
  • Inicialização do peso: normal truncado com padrão. desvio de sqrt (2 / n) em que n é o tamanho da camada anterior
  • Probabilidade de desistência: 0,75
  • Regularização: não aplicada
  • Algoritmo de taxa de aprendizagem: decaimento exponencial

brincou com os parâmetros da taxa de aprendizado; eles não parecem ter efeito na maioria dos casos; código aqui ; resultados:

Accuracy    learning_rate   decay_steps     decay_rate      staircase
93.7        .1              3000            .96             True
94.0        .3              3000            .86             False
94.0        .3              3000            .96             False
94.0        .3              3000            .96             True
94.0        .5              3000            .96             True
  • Como devo ajustar sistematicamente a taxa de aprendizado?
  • Como a taxa de aprendizado está relacionada ao número de etapas?
Thoran
fonte
1
tpot fornece dutos de ajuste automático de ML
denfromufa

Respostas:

4

Use um otimizador de descida de gradiente. este é uma visão geral muito boa.

Em relação ao código, dê uma olhada neste tutorial . Isso e isso são alguns exemplos.

Pessoalmente, sugiro usar o ADAM ou o RMSprop. Ainda existem alguns parâmetros para definir, mas existem outros "padrão" que funcionam 99% do tempo. Para o ADAM, você pode ver o documento e o RMSprop neste slide .

EDITAR

Ok, você já usa um otimizador de gradiente. Em seguida, você pode executar uma otimização de hiperparâmetros para selecionar a melhor taxa de aprendizado. Recentemente, uma abordagem automatizada foi proposta . Além disso, há muitos trabalhos promissores de Frank Hutter respeito do ajuste automatizado de hiperparâmetros.

Em geral, dê uma olhada no Desafio AutoML , onde você também pode encontrar o código fonte pelas equipes. Nesse desafio, o objetivo é automatizar o aprendizado de máquina, incluindo o ajuste de hiperparâmetros.

Finalmente, este artigo de LeCun e este tutorial muito recente de DeepMin (consulte o Capítulo 8) fornecem algumas idéias que podem ser úteis para sua pergunta.

De qualquer forma, lembre-se de que (especialmente para problemas fáceis), é normal que a taxa de aprendizado não afete muito o aprendizado ao usar um otimizador de descida de gradiente. Geralmente, esses otimizadores são muito confiáveis ​​e funcionam com parâmetros diferentes.

Simon
fonte
Eu já estou usando o Gradient Descent Optimizer no código. Obrigado pelos links!
Thoran
@ Thoran Ok, não leu o código: D (e a pergunta não menciona um otimizador). Eu editei a minha resposta para lhe dar mais alguma ajuda :)
Simon
Bons desenvolvimentos tornam o trabalho mais fácil para pessoas de fora como <. Você sabe por que número de etapas e taxa de aprendizado estão relacionados? Meu instinto me diz que, se houver mais etapas, o processo de aprendizado deve ser mais lento.
Thoran
@Thoran Normalmente, quanto maior o número de etapas, mais lento o processo (mas também mais estável). Editei ainda mais minha resposta adicionando algumas referências a alguns "truques" que podem ser úteis para o ajuste manual dos hiperparâmetros.
Simon
muito material interessante, ele vai levar algum tempo para me para digeri-lo: D
Thoran
1

Você pode automatizar o ajuste de hiperparâmetros em vários algoritmos de aprendizado de máquina, ou apenas nos hiperparâmetros do otimizador Gradient Descent, ou seja, na taxa de aprendizado.

Uma biblioteca que é popular por fazer isso é a hortelã.

https://github.com/JasperSnoek/spearmint

iratzhash
fonte
1

Um sintonizador automático de taxa de aprendizado muito recente é fornecido em Online Learning Rate Adaptation with Hypergradient Descent

Esse método é muito simples de implementar, o resultado principal do SGD é dado como:

αt=αt1+βf(θt1)Tf(θt2)

βe.g.f(θt2)α

βα0 0

eqzx
fonte
0

Para ajustar os hiperparâmetros (seja taxa de aprendizado, taxa de decaimento, regularização ou qualquer outra coisa), você precisa estabelecer um conjunto de dados retido; este conjunto de dados é separado do seu conjunto de dados de treinamento. Depois de ajustar vários modelos com configurações diferentes (onde uma configuração = uma opção específica de cada hiperparâmetro), você escolhe a configuração selecionando aquele que maximiza a precisão da saída.

Alireza
fonte
Qual a diferença entre o conjunto de dados retido e o conjunto de dados de teste ou validação?
Thoran
holdout é outro nome para validação. Basicamente, você tem três conjuntos de dados separados: treinar, resistir e testar. O trem é usado apenas para aprender pesos do modelo (por exemplo, usando descida de gradiente). Heldout é usado para ajustar os parâmetros do modelo. O teste é usado apenas para medir o desempenho da generalização (ou seja, como posso esperar que meu modelo funcione com dados invisíveis)
Alireza
Obrigado @Alireza por dedicar seu tempo para explicar. Eu já estou usando o conjunto de dados de validação. E sem teste, não é possível medir a precisão!
22416 Thoran
Bem, sua pergunta original era sobre como determinar a taxa de aprendizado: se a primeira coluna em sua postagem original tiver uma precisão de retenção (sem treinamento), você poderá dizer que 0,5 é melhor que 0,1 (apesar de continuar tentando valores> 0,5). [nota: se você refazer seus experimentos, basta particionar alguns dados para servir como teste] #
1160 Alireza