Mengapa langkah saya semakin kecil saat menggunakan ukuran langkah tetap dalam gradient descent?

9

Misalkan kita sedang melakukan contoh mainan pada gradient layak, meminimalkan fungsi kuadrat , menggunakan ukuran langkah tetap . ( )α = 0,03 A = [ 10 , 2 ; 2 , 3 ]xTSEBUAHxα=0,03SEBUAH=[10,2;2,3]

Jika kita memplot jejak di setiap iterasi, kita mendapatkan gambar berikut. Mengapa poin mendapatkan "banyak padat" ketika kita menggunakan ukuran langkah yang tetap ? Secara intuitif, ini tidak terlihat seperti ukuran langkah yang tetap, tetapi ukuran langkah yang menurun.x

masukkan deskripsi gambar di sini


PS: Kode R termasuk 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")
Haitao Du
sumber
Kode Anda tidak cocok dengan deskripsi Anda: ia menggunakan alpha=3e-2lebih dari . 0,01
whuber

Jawaban:

12

Biarkan di mana adalah simetrik dan definit positif (saya pikir asumsi ini aman berdasarkan contoh Anda). Lalu dan kami bisa diagonalize sebagai . Gunakan perubahan basis . Maka kita memiliki Af(x)=AxAA=QΛQTy=QTxf(y)=1f(x)=12xTSEBUAHxSEBUAHf(x)=SEBUAHxSEBUAHSEBUAH=QΛQTy=QTx

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

Λ adalah diagonal sehingga kami mendapatkan pembaruan sebagai

y(n+1)=y(n)-αΛy(n)=(saya-αΛ)y(n)=(saya-αΛ)n+1y(0).

Ini berarti mengatur konvergensi, dan kami hanya mendapatkan konvergensi jika . Dalam kasus Anda, kami memiliki jadi 1-αλsaya|1-αλsaya|<1

Λ(10.5002.5)
saya-αΛ(0,89000,98).

Kami mendapatkan konvergensi relatif cepat ke arah yang sesuai dengan vektor eigen dengan nilai eigen seperti yang terlihat dengan bagaimana iterate turun bagian curam dari paraboloid cukup cepat, tetapi konvergensi lambat dalam arah vektor eigen dengan nilai eigen yang lebih kecil karena sangat dekat dengan . Jadi meskipun laju pembelajaran tetap, besaran sebenarnya dari langkah-langkah dalam arah ini meluruh menurut kira-kiraλ10.50,981α(0,98)nyang menjadi lebih lambat dan lebih lambat. Itulah penyebab perlambatan yang terlihat eksponensial dalam kemajuan dalam arah ini (itu terjadi di kedua arah tetapi arah lainnya cukup dekat cukup cepat sehingga kita tidak memperhatikan atau peduli). Dalam hal ini konvergensi akan jauh lebih cepat jika ditingkatkan.α

Untuk diskusi yang jauh lebih baik dan lebih menyeluruh tentang ini, saya sangat merekomendasikan https://distill.pub/2017/momentum/ .

jld
sumber
terima kasih atas jawaban terinci dan referensi hebat !. mengubah dasar benar-benar membantu saya. y
Haitao Du
11

Untuk fungsi yang lancar, di minimum lokal.f=0

Karena skema pembaruan Anda adalah , besarnyamengontrol ukuran langkah. Dalam kasus kuadrat Anda juga (hanya menghitung goni kuadrat dalam kasus Anda). Perhatikan bahwa ini tidak selalu benar. Misalnya coba skema yang sama pada . Maka ukuran langkah Anda selalu maka tidak akan pernah berkurang. Atau lebih menariknya, , di mana gradien menuju ke 0 pada koordinat y, tetapi bukan koordinat . Lihat jawaban Chaconne untuk metodologi untuk kuadratika.| f | | Δ f | 0 f ( x ) = x α f ( x , y ) = x + y 2 xαf|f||Δf|0f(x)=xαf(x,y)=x+y2x

Alex R.
sumber