Descida do gradiente com passos grandes, metodos quadráticos e sem gradiente

Jacques Wainer

15/4/20

GD com passo grande

GD com passo pequeno:

w_{i+1} = w_i - \epsilon \nabla f(w_{i})

Passo pequeno é o \epsilon.

Para o passo grande, uma vez que eu sei que vou andar na direção - \nabla f(w_{i}), porque eu não ando bastante (passo grande) nessa direção até achar um mínimo.

Esse vai ser o meu novo w_{i+1}.

Assim: w_{i+1} = w_i - \alpha \nabla f(w_{i})

onde \alpha minimiza f(w_{i}- \alpha \nabla f(w_{i}))

Minimo em um problema 1D

sem usar a derivada. mas é preciso definir o intervalo onde o algoritmo procurará o minimo (bracket)

usando a derivada

Na pratica, não se deve gastar muita computação para achar o minimo, uma aproximação já é o suficiente.

Conjugado gradiente

Métodos quadráticos

Metodos quadraticos assumem que a função f localmente pode ser aproximada como uma função quadrática. Para isso precisamos do gradiente (como na descida do gradiente) e da matriz Hessiana que é a versão multidimensional da segunda derivada.

H é o Hessiano da função e a entrada i j da matriz é \frac{\partial f}{\partial w_i \partial w_j}.

A matriz H é simétrica.

Se voce tem o H então o passo ótimo a ser dado na GD é

w_{i+1} = w_i - H^{-1}(w_i) \nabla f (w_i)

(veja a derivação em https://en.wikipedia.org/wiki/Quasi-Newton_method

Como no conjugado gradiente a direção do passo nao é \nabla f (w_i) mas sim H^{-1}(w_i) \nabla f (w_i) (lembre-se H é uma matriz que pode mudar a direção de \nabla f).

Métodos de quasi-Newton não usam uma função explicita para o H (e portanto o H^{-1}) mas aproximam o H^{-1} com uma computação interativa baseada nos w_i e nos \nabla f (w_i)

A intuição é que o H não muda muito e portanto H^{-1}(w_{i}) \approx H^{-1}(w_{i-1}) com alguma nova informação vinda de \nabla f (w_i)

Há vários algoritmos de aproximações para o H^{-1}, mas o mais usado é o BFGS que são as iniciais dos 4 autores. Em particular usa-se a versão L-BFGS (que usa menos memória).

Metodos least square

Métodos least square são métodos quadráticos (como os quasi Newton) mas que só funcionam para problemas onde a função f a ser minimizada é uma soma de erros quadrados, ou seja:

f(w) = \sum_k (y_k - g(x_k,w))^2

onde x_k é um dado de entrada, e y_k a sua saida correspondente. O erro tem que ser quadratico (e nao modulo ou outros).

Exemplos de metodos least square são:

Em particular o Levemberg-Marquardt era usado (de vez em quando) nos anos 90 para redes neurais (dos anos 90). Eu não tenho ouvido mais falar no Levenberg-Marquardt recentemente.

Métodos sem gradiente

Metodos que não usam o gradiente (ou o Hessiano). Dois exemplos:

O Nelder-Mead usa o equivalente a triângulos no espaço n-dimensional (chamados de simplex) e gera um novo ponto para substituir o vertice do “triangulo” que tem o maior valor para f. Se w é o vertice com maior valor de f, o novo ponto w^* estará entre o w e o centro geométrico do triangulo (contração - o triangulo diminui). Também pode estar nessa mesma direção mas além do ponto w (expansão - o triangulo cresce). Uma animação

O NEWUOA gera de 2n a n^2/2 pontos aleatórios e aproxima uma função quadrática usando os valores do f nesses pontos. Ele vai para o mínimo dessa função quadrática (aproximada) e usa esse novo ponto para gerar outra aproximação.

Minimizaçao em scipy

https://docs.scipy.org/doc/scipy/reference/optimize.html