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'?
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'?
Jawaban:
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 )z q(z∣ϕ,x)
Memperkenalkan parameter baru memungkinkan kita untuk membuat ulang dengan cara yang memungkinkan backprop mengalir melalui node deterministik.zϵ z
sumber
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 ]
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]
Sebagai contoh kita di mana , metode ini memberikanqθ(x)=N(θ,1)
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
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
sumber
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θ=∇θEx∼qθ[…]
Tanpa "trik reparameterisasi" , kita sering dapat menulis ulang ini, per jawaban goker, seperti , di mana,Ex∼qθ[Gestθ(x)] Gestθ(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.x qθ Gestθ Gθ θ
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 .Gestθ Gθ
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θ x x qθ(x) 1qθ(x) x Gθ qθ Gestθ x qθ θ , 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
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θ ϵ p p ϵ 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.
sumber
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 .
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.
sumber
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:
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.
Sekarang, alih-alih perlu mendapatkan gradien dari ekspektasi q (z), kita dapat menulis ulang sebagai gradien ekspektasi sehubungan dengan fungsi lebih sederhana .p(ϵ)
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
sumber
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:
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.
sumber
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 memilikiz(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),ϕ)
sumber