Por que minhas etapas estão diminuindo ao usar tamanho fixo de etapa em descida de gradiente?


9

Suponha que estejamos fazendo um exemplo de brinquedo decente em gradiente, minimizando uma função quadrática , usando tamanho de passo fixo . ( )α = 0,03 A = [ 10 , 2 ; 2 , 3 ]xTAxα=0.03A=[10,2;2,3]

Se traçarmos o traço de x em cada iteração, obteremos a figura a seguir. Por que os pontos ficam "muito densos" quando usamos tamanho de passo fixo ? Intuitivamente, ele não se parece com um tamanho de etapa fixo, mas com um tamanho de etapa decrescente.

insira a descrição da imagem aqui


Código PS: R inclui plot.

A=rbind(c(10,2),c(2,3))
f <-function(x){
  v=t(x) %*% A %*% x
  as.numeric(v)
}
gr <-function(x){
  v = 2* A %*% x
  as.numeric(v)
}

x1=seq(-2,2,0.02)
x2=seq(-2,2,0.02)
df=expand.grid(x1=x1,x2=x2)
contour(x1,x2,matrix(apply(df, 1, f),ncol=sqrt(nrow(df))), labcex = 1.5, 
        levels=c(1,3,5,10,20,40))
grid()

opt_v=0
alpha=3e-2
x_trace=c(-2,-2)
x=c(-2,-2)
while(abs(f(x)-opt_v)>1e-6){
  x=x-alpha*gr(x)
  x_trace=rbind(x_trace,x)
}
points(x_trace, type='b', pch= ".", lwd=3, col="red")
text(x_trace, as.character(1:nrow(x_trace)), col="red")

Seu código não corresponde à sua descrição: ele usa em alpha=3e-2vez de . 0.01
whuber

Respostas:


12

Seja onde é simétrico e positivo definido (acho que essa suposição é segura com base no seu exemplo). Em seguida, e podemos diagonalizar como . Use a mudança de base . Então temos Af(x)=AxAA=QΛQTy=QTxf(y)=1f(x)=12xTAxAf(x)=AxAA=QΛQTy=QTx

f(y)=12yTΛyf(y)=Λy.

Λ é diagonal, portanto, recebemos nossas atualizações como

y(n+1)=y(n)αΛy(n)=(IαΛ)y(n)=(IαΛ)n+1y(0).

Isso significa que governa a convergência e só obtemos convergência se . No seu caso, temos então | 1 - α λ i | < 1 Ganhe muitos ( 10,5 0 0 2,5 ) I - ct Ganhe muitos ( 0,89 0 0 0,98 ) .1αλi|1αλi|<1

Λ(10.5002.5)
IαΛ(0.89000.98).

Obtemos convergência relativamente rapidamente na direção correspondente ao vetor próprio com autovalor como visto pelas iterações descendo rapidamente a parte mais íngreme do parabolóide, mas a convergência é lenta na direção do vetor próprio com o autovalor menor porque é tão próximo de . Portanto, mesmo que a taxa de aprendizado seja fixa, as magnitudes reais dos passos nessa direção decaem de acordo com aproximadamente0,98 1 α ( 0,98 ) n αλ10.50.981α(0.98)nque se torna cada vez mais lento. Essa é a causa dessa desaceleração de aparência exponencial no progresso nessa direção (acontece nas duas direções, mas a outra direção chega perto o suficiente o suficiente para que não notemos nem nos importemos). Nesse caso, a convergência seria muito mais rápida se fosse aumentado.α

Para uma discussão muito melhor e mais aprofundada disso, recomendo fortemente https://distill.pub/2017/momentum/ .


obrigado pela resposta detalhada e ótima referência !. mudar a base de realmente me ajudou. y
Haitao Du

11

Para uma função suave, nos mínimos locais.f=0

Como o seu esquema de atualização é , a magnitudecontrola o tamanho da etapa. No caso do seu quadrático também (apenas calcule o hessian do quadrático no seu caso). Observe que isso nem sempre precisa ser verdade. Por exemplo, tente o mesmo esquema em . Então o tamanho do seu passo é sempre portanto, nunca diminui. Ou, mais interessante, , em que o gradiente vai para 0 na coordenada y, mas não na coordenada . Veja a resposta de Chaconne para a metodologia quadrática.| f | | Δ f | 0 f ( x ) = x α f ( x , y ) = x + y 2 xαf|f||Δf|0f(x)=xαf(x,y)=x+y2x

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.