Introdução teórica a Neural Network — Deep Learning — Parte 3

No artigo anterior você aprendeu o que são gradiente descendentes. Agora, é hora de entendermos os otimizadores

Esse é o terceiro artigo da série de Introdução teórica a Redes Neurais em Deep Learning. Não deixe de ler a primeira e segunda parte desse artigo antes de prosseguir. No artigo anterior, foi explicado apenas o funcionamento do otimizador vetor gradiente. Agora, iremos conhecer outros otimizadores e entender como eles funcionam.

Momentum e Nesterov

Imagine esse caso da imagem ao lado. Quando uma bola de ar solta de cima da montanha, ela vai aumentando a velocidade em uma mesma direção em relação ao tempo. Resumindo: rápida convergência e diminuição de oscilação.

Esse método considera um incremento no cálculo com a velocidade da interação anterior. Isso ajuda na velocidade nos avanços de cada interação. A velocidade pode ser expressa com as mudanças de pesos da última iteração.

Em alguns casos, quando chegamos próximo ao ponto esperado, com um valor do Momentum consideravelmente alto, isso acaba fazendo com que não consiga identificar o mínimo local e o modelo pode acabar ignorando-o. Devido a isso, o professor Nesterov, da Faculdade Católica de Lovaina — Bélgica — , fez uma adaptação no Momentum, onde ele considera uma correção logo depois do resultado. A correção é em cima do cálculo do gradiente da iteração com o incremento do cálculo da fórmula Momentum.

Em outras palavras, no modelo anterior se calcula o gradiente e avança na direção com o incremento do Momentum da iteração anterior. Já no modelo do professor, avança na direção com o incremento do Momentum da iteração anterior e só então calcula o gradiente, fazendo a correção.

Adagrad

Com a ideia similar do Momentum, porém ao invés de usar o gradiente da iteração anterior para colocar como um incremento no “step”, Adagrad ajustará learning_rate somado à derivada parcial da função com os novos parâmetros. Para parâmetros associados a características que ocorrem com frequência o learning_rate será pequeno (menos dispersos) e já para características pouco frequentes (mais dispersos) resultará em learning_rate elevado.

A grande vantagem é que learning_rate se torna uma variável, todavia, existe um problema já que ele acumula a raiz do gradiente no denominador e isso faz com que o learning_rate se torne pequeno a cada iteração, podendo ficar muito pequeno, quase flat.

Adadelta vem para resolver o problema do Adragrad, onde ao invés de ir acumulando o quadrado dos gradientes, ele delimita um tamanho.

Adadelta, RMSPROP e Adam

Esses três normalmente são os primeiros a serem testados nos modelos, por obterem um comportamento similar e melhores desempenhos. A grande diferença estão nos detalhes na fórmula e se for explicar muito a fundo, vou fugir do objetivo do post. Logo, um pouco de “matematiquês”:

A única diferença que o RMSProp tem com o Adagrad é que o termo do gradiente de iteração é calculado pela média exponencialmente decrescente e não pela soma dos gradientes.
Adam usa o momento de primeira ordem mt e o momento de segunda ordem gt, mas ambos decaem com o tempo. O tamanho do passo é aproximadamente ± a taxa de aprendizagem. O tamanho do passo diminuirá, à medida que se aproxima do mínimo.
De todos os modelos mostrados, o Adam é o que normalmente converge mais rápido. Sendo assim, a melhor opção.

Na animação abaixo, conseguimos notar qual método tem uma velocidade mais em convergir.

De maneira resumida e não entrando muito na teoria, passamos por um tópico muito importante de RNN. Entretanto, a área de Deep Learning vem aprimorando a cada ano que passa, por isso, é de suma importância a atualização sobre os principais temas. Não perca o próximo post da sequência, onde será explicado o que é Backpropagation e como funciona.

FONTES: