Bagaimana cara trik reparameterisasi untuk VAE bekerja dan mengapa itu penting?

57

Bagaimana cara trik reparameterisasi untuk variabel autoencoder (VAE) bekerja? Apakah ada penjelasan yang intuitif dan mudah tanpa menyederhanakan matematika yang mendasarinya? Dan mengapa kita membutuhkan 'tipuan'?

David Dao
sumber
5
Salah satu bagian dari jawabannya adalah memperhatikan bahwa semua distribusi Normal hanya diskalakan dan versi terjemahan dari Normal (1, 0). Untuk menggambar dari Normal (mu, sigma) Anda dapat menggambar dari Normal (1, 0), kalikan dengan sigma (skala), dan tambahkan mu (terjemahkan).
biarawan
@monk: seharusnya Normal (0,1), bukan (1,0) benar atau jika tidak, mengalikan dan menggeser akan benar-benar rusak!
Rika
@Breeze Ha! Ya tentu saja terima kasih.
biarawan

Jawaban:

57

Setelah membaca slide lokakarya NIPS 2015 Kingma , saya menyadari bahwa kita memerlukan trik reparameterisasi untuk melakukan backpropagate melalui node acak.

Secara intuitif, dalam bentuk aslinya, sampel VAE dari simpul acak yang diperkirakan oleh model parametrik dari posterior sejati. Backprop tidak dapat mengalir melalui simpul acak.q ( z ϕ , x )zq(zϕ,x)

Memperkenalkan parameter baru memungkinkan kita untuk membuat ulang dengan cara yang memungkinkan backprop mengalir melalui node deterministik.zϵz

bentuk asli dan reparameterised

David Dao
sumber
3
Mengapa deterministik sekarang di sebelah kanan? z
bringingdownthegauss
2
Bukan, tapi itu bukan "sumber keacakan" - peran ini telah diambil alih oleh . ϵ
quant_dev
Perhatikan bahwa metode ini telah diusulkan beberapa kali sebelum 2014: blog.shakirm.com/2015/10/10/...
quant_dev
2
Sangat sederhana, sangat intuitif! Jawaban bagus!
Serhiy
2
Sayangnya tidak. Namun bentuk aslinya masih dapat dipropagasi dengan varian yang lebih tinggi. Detail dapat ditemukan dari posting saya .
JP Zhang
56

Asumsikan kita memiliki distribusi normal yang diparameterisasi oleh , khususnya . Kami ingin menyelesaikan masalah di bawah ini Ini tentu saja merupakan masalah yang agak konyol dan optimal jelas. Namun, di sini kita hanya ingin memahami bagaimana trik reparameterisasi membantu dalam menghitung gradien dari tujuan ini .θ q θ ( x ) = N ( θ , 1 ) min θqθqθ(x)=N(θ,1)θ E q [ x 2 ]

minθEq[x2]
θEq[x2]

Salah satu cara untuk menghitung adalah sebagai berikut θ E q [ x 2 ] = θq θ ( x ) x 2 d x = x 2 θ q θ ( x ) q θ ( x )θEq[x2]

θEq[x2]=θqθ(x)x2dx=x2θqθ(x)qθ(x)qθ(x)dx=qθ(x)θlogqθ(x)x2dx=Eq[x2θlogqθ(x)]

Sebagai contoh kita di mana , metode ini memberikan qθ(x)=N(θ,1)

θEq[x2]=Eq[x2(xθ)]

Trik reparameterisasi adalah cara untuk menulis ulang harapan sehingga distribusi yang kita ambil gradien tidak bergantung pada parameter . Untuk mencapai ini, kita perlu membuat elemen stokastik di independen dari . Maka, kita menulis sebagai Kemudian, kita dapat menulis mana adalah distribusi , yaitu, . Sekarang kita dapat menulis turunan dari sebagai berikut θqθx

x=θ+ϵ,ϵN(0,1)
Eq[x2]=Ep[(θ+ϵ)2]
pϵN(0,1)Eq[x2]
θEq[x2]=θEp[(θ+ϵ)2]=Ep[2(θ+ϵ)]

Ini adalah notebook IPython yang saya tulis yang membahas perbedaan dari dua cara penghitungan gradien ini. http://nbviewer.jupyter.org/github/gokererdogan/Notebooks/blob/master/Reparameterization%20Trick.ipynb

Goker
sumber
4
Apa theta "jelas" untuk persamaan pertama?
gwg
2
itu adalah 0 salah satu cara untuk melihatnya yaitu dengan mencatat bahwa E [x ^ 2] = E [x] ^ 2 + Var (x), yaitu theta ^ 2 +1 dalam kasus ini. Jadi theta = 0 meminimalkan tujuan ini.
Goker
Jadi, itu tergantung sepenuhnya pada masalahnya? Untuk mengatakan min_ \ theta E_q [| x | ^ (1/4)] mungkin sama sekali berbeda?
Anne van Rossum
Apa yang tergantung pada masalahnya? Teta optimal? Kalau begitu, ya itu tentu tergantung masalah.
Goker
Dalam persamaan tepat setelah "metode ini memberi", bukankah seharusnya bukan hanya ? θEq[x2]=Eq[x2(xθ)qθ(x)]θEq[x2]=Eq[x2(xθ)]
AlphaOmega
17

Sebuah contoh yang masuk akal dari matematika dari "trik reparameterisasi" diberikan dalam jawaban goker, tetapi beberapa motivasi bisa membantu. (Saya tidak memiliki izin untuk mengomentari jawaban itu; jadi di sini ada jawaban yang terpisah.)

Singkatnya, kami ingin menghitung beberapa nilai dari formulir, Gθ

Gθ=θExqθ[]

Tanpa "trik reparameterisasi" , kita sering dapat menulis ulang ini, per jawaban goker, seperti , di mana, Exqθ[Gθest(x)]

Gθest(x)=1qθ(x)θqθ(x)=θlog(qθ(x))

Jika kita menggambar dari , maka adalah estimasi tidak bias . Ini adalah contoh "sampel penting" untuk integrasi Monte Carlo. Jika mewakili beberapa output dari jaringan komputasi (misalnya, jaringan kebijakan untuk pembelajaran penguatan), kita dapat menggunakan ini dalam propagasi balik (menerapkan aturan rantai) untuk menemukan turunan yang terkait dengan parameter jaringan.xqθGθestGθθ

Poin kuncinya adalah bahwa seringkali merupakan estimasi (varian tinggi) yang sangat buruk . Bahkan jika Anda rata-rata atas sejumlah besar sampel, Anda mungkin menemukan bahwa rata-rata tampaknya undershoot (atau overshoot) secara sistematis .GθestGθ

Masalah mendasar adalah bahwa kontribusi penting untuk dapat berasal dari nilai yang sangat jarang (yaitu, nilai yang kecil). Faktor meningkatkan penaksiran Anda untuk memperhitungkan ini, tetapi penskalaan itu tidak akan membantu jika Anda tidak melihat nilai ketika Anda memperkirakan dari sejumlah sampel. Baik atau (yaitu, kualitas estimasi, , untuk diambil dari ) dapat bergantung padaGθxxqθ(x)1qθ(x)xGθqθGθestxqθθ, yang mungkin jauh dari optimal (misalnya, nilai awal yang dipilih secara sewenang-wenang). Ini sedikit seperti kisah orang mabuk yang mencari kuncinya di dekat lampu jalan (karena di situlah dia bisa melihat / mencicipi) daripada di dekat tempat dia menjatuhkannya.

"Trik reparameterisasi" terkadang mengatasi masalah ini. Menggunakan notasi goker, triknya adalah menulis ulang sebagai fungsi dari variabel acak, , dengan distribusi, , yang tidak bergantung pada , dan kemudian menulis ulang ekspektasi dalam sebagai ekspektasi atas ,xϵpθGθp

Gθ=θEϵp[J(θ,ϵ)]=Eϵp[θJ(θ,ϵ)]
untuk beberapa .J(θ,ϵ)

Trik reparameterisasi sangat berguna ketika estimator baru, , tidak lagi memiliki masalah yang disebutkan di atas (yaitu, ketika kita dapat memilih sehingga mendapatkan estimasi yang baik tidak tergantung pada menggambar nilai langka ). Ini dapat difasilitasi (tetapi tidak dijamin) oleh fakta bahwa tidak bergantung pada dan bahwa kita dapat memilih untuk menjadi distribusi unimodal yang sederhana.θJ(θ,ϵ)pϵpθp

Namun, trik reparamerization bahkan mungkin "bekerja" ketika adalah tidak estimator yang baik . Secara khusus, bahkan jika ada kontribusi besar untuk dari yang sangat jarang, kami secara konsisten tidak melihatnya selama optimasi dan kami juga tidak melihatnya ketika kami menggunakan model kami (jika model kami adalah model generatif ). Dalam istilah yang sedikit lebih formal, kita dapat berpikir untuk mengganti tujuan kita (ekspektasi atas ) dengan tujuan efektif yang merupakan ekspektasi atas beberapa "set tipikal" untuk . Di luar set yang khas, kamiθJ(θ,ϵ)GθGθϵppϵ mungkin menghasilkan nilai buruk secara sewenang-wenang - lihat Gambar 2 (b) dari Brock et. Al. untuk GAN yang dievaluasi di luar himpunan tip sampel selama pelatihan (dalam makalah itu, nilai pemotongan yang lebih kecil sesuai dengan nilai-nilai variabel laten lebih jauh dari himpunan khas, meskipun mereka kemungkinan lebih tinggi).J

Saya harap itu membantu.

Seth Bruder
sumber
"Faktor 1 / qθ (x) meningkatkan penaksiran Anda untuk memperhitungkan ini, tetapi jika Anda tidak pernah melihat nilai x seperti itu, penskalaan itu tidak akan membantu." Bisakah Anda menjelaskan lebih lanjut?
czxttkl
@czxttkl Dalam praktiknya kami memperkirakan nilai yang diharapkan dengan jumlah sampel yang terbatas. Jika sangat kecil untuk beberapa , maka kami mungkin sangat kecil untuk mengambil sampel . Jadi meskipun mencakup faktor besar , dan dapat memberikan kontribusi yang berarti pada nilai yang diharapkan, itu dapat dikecualikan dari estimasi kami tentang nilai yang diharapkan untuk jumlah sampel yang wajar. qθxxGθest(x)1/qθ
Seth Bruder
10

Biarkan saya jelaskan dulu, mengapa kita perlu trik Reparameterization di VAE.

VAE memiliki encoder dan decoder. Decoder secara acak sampel dari posterior sejati Z ~ q (z∣ϕ, x) . Untuk menerapkan encoder dan decoder sebagai jaringan saraf, Anda perlu melakukan backpropogate melalui pengambilan sampel acak dan itu adalah masalah karena backpropogation tidak dapat mengalir melalui node acak; untuk mengatasi kendala ini, kami menggunakan trik reparameterisasi.

Sekarang mari kita mulai. Karena posterior kami terdistribusi normal, kami dapat memperkirakannya dengan distribusi normal lainnya. Kami memperkirakan Z dengan ε terdistribusi normal .

masukkan deskripsi gambar di sini

Tetapi bagaimana ini relevan?

Sekarang alih-alih mengatakan bahwa Z diambil sampelnya dari q (z), x) , kita dapat mengatakan Z adalah fungsi yang mengambil parameter (ε, (µ, L)) dan µ ini , L berasal dari jaringan saraf atas (encoder) . Oleh karena itu sementara backpropogation yang kita butuhkan adalah turunan parsial wrt µ, L dan ε tidak relevan untuk mengambil turunan.

masukkan deskripsi gambar di sini

Sherlock
sumber
Video terbaik untuk memahami konsep ini. Saya akan merekomendasikan untuk menonton video lengkap untuk pemahaman yang lebih baik tetapi jika Anda ingin memahami hanya trik reparameterisasi maka tontonlah dari 8 menit. youtube.com/channel/UCNIkB2IeJ-6AmZv7bQ1oBYg
Sherlock
9

Saya pikir penjelasan yang ditemukan di Stanford CS228 tentang model grafis probabilistik sangat bagus. Itu dapat ditemukan di sini: https://ermongroup.github.io/cs228-notes/extras/vae/

Saya telah merangkum / menyalin bagian-bagian penting di sini untuk kenyamanan / pemahaman saya sendiri (walaupun saya sangat merekomendasikan hanya memeriksa tautan asli).

Jadi, masalah kita adalah kita memiliki gradien ini yang ingin kita hitung:

ϕEzq(z|x)[f(x,z)]

Jika Anda terbiasa dengan penaksir fungsi skor (saya percaya REINFORCE hanya kasus khusus ini), Anda akan melihat bahwa cukup banyak masalah yang mereka pecahkan. Namun, penaksir fungsi skor memiliki varians yang tinggi, menyebabkan kesulitan dalam model pembelajaran banyak waktu.

Jadi, dalam kondisi tertentu, kita dapat menyatakan distribusi sebagai proses 2 langkah.qϕ(z|x)

Pertama-tama kita sampel variabel noise dari distribusi sederhana seperti standar Normal. Selanjutnya, kami menerapkan transformasi deterministik yang memetakan derau acak ke distribusi yang lebih kompleks ini. Bagian kedua ini tidak selalu memungkinkan, tetapi memang benar untuk banyak kelas .ϵp(ϵ)gϕ(ϵ,x)qϕ

Sebagai contoh, mari kita gunakan q yang sangat sederhana dari mana kita sampel.

zqμ,σ=N(μ,σ)
Sekarang, alih-alih mengambil sampel dari , kita dapat menulis ulang ini sebagai dimana .q
z=gμ,σ(ϵ)=μ+ϵσ
ϵN(0,1)

Sekarang, alih-alih perlu mendapatkan gradien dari ekspektasi q (z), kita dapat menulis ulang sebagai gradien ekspektasi sehubungan dengan fungsi lebih sederhana .p(ϵ)

ϕEzq(z|x)[f(x,z)]=Eϵp(ϵ)[ϕf(x,g(ϵ,x))]

Ini memiliki varian yang lebih rendah, karena alasan imo, tidak sepele. Periksa bagian D dari lampiran di sini untuk penjelasan: https://arxiv.org/pdf/1401.4082.pdf

mengerikan dia
sumber
Hai, tahukah Anda, mengapa dalam implementasi, mereka membagi std dengan 2? (yaitu std = torch.exp (z_var / 2)) dalam reparameterisasi?
Rika
4

Kami memiliki model probablistik kami. Dan ingin memulihkan parameter model. Kami mengurangi tugas kami untuk mengoptimalkan batas bawah variasional (VLB). Untuk melakukan ini kita harus dapat membuat dua hal:

  • hitung VLB
  • dapatkan gradien VLB

Penulis menyarankan menggunakan Estimator Monte Carlo untuk keduanya. Dan sebenarnya mereka memperkenalkan trik ini untuk mendapatkan Estimator Gradient Monte Carlo yang lebih tepat dari VLB.

Itu hanya peningkatan metode numerik.

Anton
sumber
2

Trik reparameterisasi mengurangi varian penduga MC untuk gradien secara dramatis. Jadi ini adalah teknik reduksi varians :

Tujuan kami adalah untuk menemukan estimasi

ϕEq(z(i)x(i);ϕ)[logp(x(i)z(i),w)]

Kita dapat menggunakan "estimator fungsi skor": Tetapi skor estimator fungsi memiliki varian tinggi. Misalkan jika probabilitas sangat kecil maka nilai absolut dari sangat besar dan nilainya sendiri negatif. Jadi kita akan memiliki varian yang tinggi.

ϕEq(z(i)x(i);ϕ)[logp(x(i)z(i),w)]=Eq(z(i)x(i);ϕ)[logp(x(i)z(i),w)ϕlogqϕ(z)]
p(x(i)z(i),w)logp(x(i)z(i),w)

Dengan Reparametrization kami memiliki z(i)=g(ϵ(i),x(i),ϕ)

ϕEq(z(i)x(i);ϕ)[logp(x(i)z(i),w)]=Ep(ϵ(i))[ϕlogp(x(i)g(ϵ(i),x(i),ϕ),w)]

Sekarang ekspektasinya adalah wrt dan tidak tergantung pada parameter gradien . Jadi kita dapat menempatkan gradien langsung di dalam ekspektasi yang dapat dengan mudah dilihat dengan menuliskan ekspektasi secara eksplisit. Nilai gradien jauh lebih kecil sehingga kami memiliki varian yang lebih rendah secara intuitif.p(ϵ(i))p(ϵ(i))ϕ

Catatan: Kita dapat melakukan trik reparametrization ini hanya jika kontinu sehingga kita dapat mengambil gradien .z(i)z(i)=g(ϵ(i),x(i),ϕ)

chris elgoog
sumber