Na maioria dos códigos de fluxo de tensão, o Adam Optimizer é usado com uma taxa de aprendizado constante de 1e-4
(ou seja, 0,0001). O código geralmente tem a seguinte aparência:
...build the model...
# Add the optimizer
train_op = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)
# Add the ops to initialize variables. These will include
# the optimizer slots added by AdamOptimizer().
init_op = tf.initialize_all_variables()
# launch the graph in a session
sess = tf.Session()
# Actually intialize the variables
sess.run(init_op)
# now train your model
for ...:
sess.run(train_op)
Gostaria de saber se é útil usar decaimento exponencial ao usar o adam optimizer, ou seja, use o seguinte código:
...build the model...
# Add the optimizer
step = tf.Variable(0, trainable=False)
rate = tf.train.exponential_decay(0.15, step, 1, 0.9999)
optimizer = tf.train.AdamOptimizer(rate).minimize(cross_entropy, global_step=step)
# Add the ops to initialize variables. These will include
# the optimizer slots added by AdamOptimizer().
init_op = tf.initialize_all_variables()
# launch the graph in a session
sess = tf.Session()
# Actually intialize the variables
sess.run(init_op)
# now train your model
for ...:
sess.run(train_op)
Geralmente, as pessoas usam algum tipo de redução da taxa de aprendizado, para Adam parece incomum. Existe alguma razão teórica para isso? Pode ser útil combinar o Adam otimizer com a deterioração?
global_step
parâmetro deminimize
. Veja editar.1e-4
=0.0001
, não0.0004
.Respostas:
Empiricamente falando: experimente definitivamente, você pode encontrar algumas heurísticas de treinamento muito úteis; nesse caso, compartilhe!
Não vi o código de pessoas suficientes usando o otimizador do ADAM para dizer se isso é verdade ou não. Se for verdade, talvez seja porque o ADAM é relativamente novo e as "melhores práticas" de decaimento da taxa de aprendizado ainda não foram estabelecidas.
Simplificando: acho que nada na teoria desencoraja o uso de regras de decaimento da taxa de aprendizado com o ADAM. Vi pessoas relatando bons resultados usando o ADAM e encontrar algumas boas heurísticas de treinamento seria incrivelmente valioso.
fonte
A razão pela qual a maioria das pessoas não usa o decaimento da taxa de aprendizado com Adam é que o próprio algoritmo faz um decaimento da taxa de aprendizado da seguinte maneira:
onde
t0
é o passo inicial elr_t
a nova taxa de aprendizado usada.fonte
sqrt(1 - beta2^t) / (1 - beta1^t)
não decai. Parece compensar a inicialização das estimativas do primeiro e do segundo momento.Adam usa a taxa de aprendizado inicial, ou o tamanho da etapa, de acordo com a terminologia do artigo original, enquanto calcula atualizações de forma adaptativa. O tamanho da etapa também fornece um limite aproximado para atualizações. Nesse sentido, acho uma boa idéia reduzir o tamanho da etapa no final do treinamento. Isso também é suportado por um trabalho recente do NIPS 2017: O valor marginal dos métodos de gradiente adaptativo no aprendizado de máquina .
A última linha da Seção 4: Experiências de aprendizado profundo diz
Por último, mas não menos importante, o artigo sugere que usamos o SGD de qualquer maneira.
fonte
Concordo com a opinião da @Indie AI, aqui eu forneço algumas outras informações:
Do CS231n :
E também do artigo Repensando a arquitetura inicial para a Visão por Computador Seção 8:
fonte
Treinei um conjunto de dados com dados reais fáceis, se uma pessoa é considerada gorda ou não, altura e peso - criando dados calculando o IMC e, se acima de 27 anos, a pessoa é gorda. Dados básicos muito fáceis. Ao usar o Adam como otimizador e a taxa de aprendizado em 0,001, a precisão me alcançará 85% em 5 epocs, atingindo no máximo 90% com mais de 100 epocs testados.
Mas ao carregar novamente em talvez 85% e com uma taxa de aprendizado de 0,0001, a precisão será superior a 3 epocs, para 95%, e mais 10 epocs, em torno de 98-99%. Não tenho certeza se a taxa de aprendizado pode ficar abaixo de 4 dígitos 0,0001, mas, ao carregar o modelo novamente e usar 0,00001, o accionário ficará em torno de 99,20 - 100% e não ficará abaixo. Novamente, não tenho certeza se a taxa de aprendizado seria considerada 0, mas de qualquer maneira, é isso que eu tenho ...
Tudo isso usando categorical_crossentropy, mas mean_square chega a 99-100% também usando esse método. AdaDelta, AdaGrad, Nesterov não podiam ter uma precisão acima de 65%, apenas para uma observação.
fonte
O declínio da taxa de aprendizado no Adam é o mesmo do RSMProp (como você pode ver nesta resposta ), e isso se baseia principalmente na magnitude dos gradientes anteriores para despejar as oscilações . Portanto, a deterioração exponencial (para uma taxa de aprendizado decrescente ao longo do processo de treinamento) pode ser adotada ao mesmo tempo. Todos eles decaem a taxa de aprendizado, mas com propósitos diferentes .
fonte