Por que é importante incluir um termo de correção de viés no otimizador do Adam para o Deep Learning?


15

Eu estava lendo sobre o otimizador de Adam para o Deep Learning e me deparei com a seguinte frase no novo livro Deep Learning de Begnio, Goodfellow e Courtville:

Adam inclui correções de viés nas estimativas dos momentos de primeira ordem (o termo momentum) e dos momentos de segunda ordem (sem centralização) para explicar sua inicialização na origem.

parece que o principal motivo para incluir esses termos de correção de viés é que, de alguma forma, ele remove o viés da inicialização de mt=0 e vt=0 .

  • Não tenho 100% de certeza do que isso significa, mas parece-me que provavelmente significa que o primeiro e o segundo momento começam em zero e, de alguma forma, iniciá-lo em zero inclina os valores mais próximos de zero de uma maneira injusta (ou útil) para o treinamento ?
  • Embora eu adorasse saber o que isso significa um pouco mais precisamente e como isso prejudica o aprendizado. Em particular, quais vantagens a otimização do otimizador tem em termos de otimização?
  • Como isso ajuda a treinar modelos de aprendizado profundo?
  • Além disso, o que significa quando é imparcial? Eu sei o que significa desvio padrão imparcial, mas não está claro para mim o que significa nesse contexto.
  • A correção de viés é realmente um grande problema ou isso é algo exagerado no artigo do otimizador de Adam?

Apenas para que as pessoas saibam que eu tentei muito entender o artigo original, mas fiquei muito pouco lendo e relendo o artigo original. Suponho que algumas dessas perguntas possam ser respondidas lá, mas não consigo analisar as respostas.


2
Link: arxiv.org/pdf/1412.6980v8.pdf As estimativas de gradiente de primeiro e segundo momento são atualizadas via média móvel e começam com ambas as estimativas sendo zero, portanto, os valores iniciais para os quais o valor verdadeiro não é zero influenciam os resultados , porque as estimativas iniciais de zero desaparecem gradualmente. O que não entendo é por que o gradiente no ponto inicial não é usado para os valores iniciais dessas coisas e, em seguida, a primeira atualização de parâmetro. Então não haveria contaminação pelos valores iniciais de zero, que precisam ser desfeitos. Portanto, não haveria necessidade de correção do viés.
Mark L. Stone

1
Portanto, parece que, em vez de ter um código especial para a iteração inicial, os autores decidiram fazer uma coisa matematicamente equivalente introduzindo o que seria um viés e depois desfazendo-o. Isso adiciona cálculos desnecessários, embora rápidos, em todas as iterações. Ao fazer isso, eles mantiveram uma pureza de código que parece igual em todas as iterações. Em vez disso, eu teria começado com a primeira avaliação de gradiente e a fórmula de atualização do momento do gradiente seria iniciada apenas na 2ª iteração.
Mark L. Stone

@ MarkL.Stone os autores enfatizam tanto a correção do viés que me pareceu que era o que era novo ou importante em seu artigo. Então eles poderiam simplesmente não "corrigir o viés" e ter o mesmo algoritmo? Se isso é verdade, não entendo por que Adam é um otimizador tão importante ou qual é o grande problema. Eu sempre pensei que era a correção do viés.
Charlie Parker

4
Eles introduzem um viés e o corrigem, sem uma boa razão aparente para mim. É como multiplicar por 2 (oh meu, o resultado é tendencioso) e depois dividir por 2 para "corrigi-lo". A coisa toda com a introdução e remoção do viés parece uma demonstração desnecessária. Talvez o jornal não tenha demorado o suficiente sem fazê-lo, então eles adicionaram esse discurso para aumentá-lo :) Adam pode ter seus méritos, mas eles teriam feito o mesmo da maneira que propus. Eu adoraria que os autores viessem aqui e explicassem isso. Talvez eu esteja perdendo algum ponto sutil ou entendendo algo errado.
Mark L. Stone

Respostas:


15

O problema de NÃO corrigir o viés
De acordo com o artigo

No caso de gradientes esparsos, para uma estimativa confiável do segundo momento, é necessário calcular a média de muitos gradientes escolhendo um pequeno valor de β2; no entanto, é exatamente esse caso de β2 pequeno em que a falta de correção do viés de inicialização levaria a etapas iniciais muito maiores.

insira a descrição da imagem aqui

Normalmente, na prática, β2 é definido muito mais próximo de 1 que β1 (conforme sugerido pelo autor β2=0.999 , β1=0.9 ), portanto, os coeficientes de atualização 1β2=0.001 são muito menores que 1β1=0.1 .

Na primeira etapa do treinamento m1=0.1gt , v1=0.001gt2 , m1/(v1+ϵ)na atualização de parâmetro pode ser muito grande se usarmos a estimativa enviesada diretamente.

Por outro lado, ao usar a estimativa corrigida pelo viés, m1^=g1 e v1^=g12 , mt^/(vt^+ϵ)termo torna-se menos sensível aβ1eβ2.

Como o viés é corrigido
O algoritmo usa a média móvel para estimar o primeiro e o segundo momento. A estimativa tendenciosa seria: começamos com um palpite arbitrário m0 e atualizamos a estimativa gradualmente por mt=βmt1+(1β)gt . Portanto, é óbvio que, nos primeiros passos, nossa média móvel é fortemente influenciada pelo m0 inicial .

m1=βm0+(1β)gtβm0m1(1β)m1^=(m1βm0)/(1β)m0=0mt^=mt/(1βt)


Como Mark L. Stone comentou bem

É como multiplicar por 2 (oh meu, o resultado é tendencioso) e depois dividir por 2 para "corrigi-lo".

De alguma forma, isso não é exatamente equivalente a

o gradiente no ponto inicial é usado para os valores iniciais dessas coisas e, em seguida, a primeira atualização de parâmetro

(é claro que pode ser transformado na mesma forma alterando a regra de atualização (veja a atualização da resposta), e acredito que essa linha visa principalmente mostrar a desnecessidade de introduzir o viés, mas talvez valha a pena notar a diferença)

Por exemplo, o primeiro momento corrigido no momento 2

m2^=β(1β)g1+(1β)g21β2=βg1+g2β+1

g1

m2=βg1+(1β)g2
g1

A correção de viés é realmente um grande problema
Uma vez que na verdade afeta apenas os primeiros passos do treinamento, não parece ser um problema muito grande. Em muitas estruturas populares (por exemplo , keras , caffe ), apenas a estimativa tendenciosa é implementada.

ϵ


m^t

m^t=βt1g1+βt2g2+...+gtβt1+βt2+...+1

m1g1

mtβmt+gt
m^t(1β)mt1βt

Portanto, isso pode ser feito sem a introdução de um termo tendencioso e a correção. Penso que o artigo o colocou na forma de correção de viés para facilitar a comparação com outros algoritmos (por exemplo, RmsProp).


1
Você concorda com o meu segundo comentário sobre a questão? Para mim, esse é o resultado final. A coisa sobre multiplicar e dividir por 2 era apenas uma analogia "mais fácil de entender", não a matemática usada no assunto em questão. se houvesse outros documentos que eu não olhei, que introduziram um viés pelo mesmo mecanismo, que no caso do ADAM parece totalmente evitável, mas não o corrigiu, então isso é totalmente ESTÚPIDO (a menos que de alguma forma o viés ajudou no desempenho do algoritmo).
Mark L. Stone

@ MarkL.Stone sim! na verdade eu votei, desculpe pelo meu inglês. e acho que o algoritmo que não corrigiu o viés é o rmsprop, mas, ao contrário do adam, o rmsprop funciona bem com o viés.
Dontloo 13/09/16

@dontloo sua resposta aborda o comentário de Mark L. Stone sobre por que a correção do viés parece supérflua? (Que eu acho que é muito importante, talvez até mais do que parafrasear o que o artigo original diz).
Charlie Parker

@CharlieParker, você quer dizer por que a correção de viés é supérflua ou por que o autor a faz parecer supérflua?
dontloo

@ Dontloo Eu não acho que os autores tornam supérfluo. Eu pensei que eles realmente precisavam disso (dadas suas condições específicas). No entanto, pensei que não era necessário, dada a sugestão de Mark. Acho que minha pergunta na seção de comentários agora é se eles realmente precisavam do termo de correção.
Charlie Parker
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.