Como o método Adam de descida do gradiente estocástico funciona?


45

Eu estou familiarizado com algoritmos básicos de descida de gradiente para o treinamento de redes neurais. Eu li o artigo propondo Adam: ADAM: UM MÉTODO PARA OTIMIZAÇÃO ESTOCÁSTICA .

Embora eu tenha definitivamente algumas idéias (pelo menos), o artigo parece estar em um nível muito alto para mim em geral. Por exemplo, uma função de custo geralmente é uma soma de muitas funções diferentes; portanto, uma grande quantidade de cálculos deve ser feita para otimizar seu valor; descidas de gradiente estocástico - até onde eu entendo o tópico - calcule a otimização apenas para um subconjunto dessas funções. Para mim, não está claro como Adam faz isso e por que isso resulta em um menor erro de treinamento para todo o J ( θ ) .J(θ)J(θ)

Eu acho que Adam atualiza seu gradiente levando em consideração o gradiente anterior. Eles chamam isso de algo como utilizar o momento? O que exatamente é esse momento? De acordo com o algoritmo da página dois do artigo, é algum tipo de média móvel, como algumas estimativas do primeiro e do segundo momento do gradiente "regular"?

Na prática, eu suspeitaria que Adam permite usar tamanhos de etapas efetivos maiores para diminuir o gradiente e, portanto, o erro de treinamento em combinação com a aproximação estocástica. Assim, o vetor de atualização resultante deve "saltar" mais em dimensões espaciais, descrevendo alguma curva como algoritmos normais de descida de gradiente.

Alguém pode desmistificar como Adam funciona? Especialmente como ele converge, especificamente por que o método de Adam funciona e qual é exatamente o benefício?


1
você deve fornecer um título melhor para sua pergunta. O que exatamente sobre Adam você quer perguntar? Mesmo que seja em geral, tente torná-lo um pouco mais pesquisável.
Charlie Parker

Respostas:


40

O artigo de Adam diz: "... muitas funções objetivas são compostas de uma soma de subfunções avaliadas em diferentes subamostras de dados; nesse caso, a otimização pode ser mais eficiente, tomando etapas de gradiente em subfunções individuais ..." Aqui, elas apenas significa que a função objetivo é uma soma de erros em relação aos exemplos de treinamento, e o treinamento pode ser realizado em exemplos ou minibatches individuais. É o mesmo que na descida do gradiente estocástico (SGD), que é mais eficiente para problemas de grande escala do que o treinamento em lote, porque as atualizações de parâmetros são mais frequentes.

Quanto ao porquê de Adam trabalhar, ele usa alguns truques.

Um desses truques é o momento, que pode dar uma convergência mais rápida. Imagine uma função objetiva que tem a forma de um desfiladeiro longo e estreito que gradualmente se inclina para o mínimo. Digamos que desejamos minimizar essa função usando a descida do gradiente. Se começarmos a partir de algum ponto na parede do desfiladeiro, o gradiente negativo apontará na direção da descida mais íngreme, ou seja, principalmente em direção ao chão do desfiladeiro. Isso ocorre porque as paredes do canyon são muito mais íngremes do que a inclinação gradual do canyon em direção ao mínimo. Se a taxa de aprendizado (ou seja, tamanho do degrau) for pequena, poderemos descer até o fundo do cânion e segui-lo até o mínimo. Mas, o progresso seria lento. Poderíamos aumentar a taxa de aprendizado, mas isso não mudaria a direção das etapas. Nesse caso, ultrapassaríamos o chão do desfiladeiro e acabaríamos na parede oposta. Repetiríamos então esse padrão, oscilando de parede a parede enquanto progredíamos lentamente em direção ao mínimo. Momentum pode ajudar nesta situação.

Momentum simplesmente significa que uma fração da atualização anterior é adicionada à atualização atual, de modo que atualizações repetidas em um determinado composto de direção; nós construímos impulso, movendo-nos cada vez mais rápido nessa direção. No caso do canyon, ganharíamos impulso na direção do mínimo, pois todas as atualizações têm um componente nessa direção. Por outro lado, mover-se para frente e para trás através das paredes do cânion envolve inverter constantemente a direção; portanto, o momento ajudaria a amortecer as oscilações nessas direções.

Outro truque que Adam usa é selecionar adaptativamente uma taxa de aprendizado separada para cada parâmetro. Parâmetros que normalmente receberiam atualizações menores ou menos frequentes recebem atualizações maiores com Adam (o inverso também é verdadeiro). Isso acelera o aprendizado nos casos em que as taxas de aprendizado apropriadas variam de acordo com os parâmetros. Por exemplo, em redes profundas, os gradientes podem se tornar pequenos nas camadas iniciais e faz sentido aumentar as taxas de aprendizado para os parâmetros correspondentes. Outro benefício dessa abordagem é que, como as taxas de aprendizado são ajustadas automaticamente, o ajuste manual se torna menos importante. O SGD padrão exige um ajuste cuidadoso (e possivelmente um ajuste on-line) das taxas de aprendizado, mas isso é menos verdadeiro com Adam e métodos relacionados. Ainda é necessário selecionar hiperparâmetros,

Métodos relacionados :

O momento é frequentemente usado com o SGD padrão. Uma versão aprimorada é chamada momento de Nesterov ou gradiente acelerado de Nesterov. Outros métodos que usam taxas de aprendizado ajustadas automaticamente para cada parâmetro incluem: Adagrad, RMSprop e Adadelta. RMSprop e Adadelta resolvem um problema com o Adagrad que pode causar a interrupção do aprendizado. Adam é semelhante ao RMSprop com impulso. Nadam modifica Adam para usar o momento de Nesterov em vez do momento clássico.

Referências :

Kingma e Ba (2014) . Adam: Um método para otimização estocástica.

Goodfellow et al. (2016) . Aprendizado profundo, capítulo 8.

Slides do curso de Geoff Hinton

Dozat (2016) . Incorporando Nesterov Momentum em Adam.


2
(+1) A comunidade se beneficiaria muito se você pudesse atualizar sua resposta para incluir mais informações sobre as provas das convergências de Adam e suas correções, como "Sobre a convergência de Adam e além" openreview.net/forum?id=ryQu7f- RZ
Restabelecer Monica

2
Graças @Sycorax, vou tentar atualizar quando eu chegar em algum tempo
user20160

1
w

Continuando meu último comentário, esta resposta explica sobre as diferenças entre Adam e rmsprop com momentum, enquanto concentra-se em como o comportamento do momento de Adam é diferente do comportamento usual do momento. (Essa resposta também inclui o código Python para simular e graficamente mostrar como os diferentes métodos de se comportar.)
Oren Milman
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.