Misalkan kita sedang melakukan contoh mainan pada gradient layak, meminimalkan fungsi kuadrat , menggunakan ukuran langkah tetap . ( )α = 0,03 A = [ 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.
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")
r
machine-learning
optimization
gradient-descent
Haitao Du
sumber
sumber
alpha=3e-2
lebih dari .Jawaban:
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 A∇f(x)=AxAA=QΛQTy=QTxf(y)=1f( x ) = 12xTA x SEBUAH ∇ f( x ) = A x SEBUAH A = Q Λ QT y= QTx
Ini berarti mengatur konvergensi, dan kami hanya mendapatkan konvergensi jika . Dalam kasus Anda, kami memiliki jadi1 - α λsaya | 1-α λsaya| <1
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.5 0,98 1 α ( 0,98 )n yang 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/ .
sumber
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| → 0 f( x ) = x α f( x , y) = x + y2 x
sumber