Bagaimana generator di GAN dilatih?

9

The kertas pada Gans mengatakan diskriminator menggunakan gradien berikut untuk kereta:

θd1msaya=1m[catatanD(x(saya))+catatan(1-D(G(z(saya))))]

The nilai-nilai yang sampel, melewati generator untuk menghasilkan sampel data, dan kemudian diskriminator yang backpropogated menggunakan sampel data yang dihasilkan. Setelah generator menghasilkan data, generator tidak lagi berperan dalam pelatihan diskriminator. Dengan kata lain, generator dapat sepenuhnya dihapus dari metrik dengan membuatnya menghasilkan sampel data dan kemudian hanya bekerja dengan sampel.z

Saya sedikit lebih bingung tentang bagaimana generator dilatih. Ini menggunakan gradien berikut:

θg1msaya=1m[catatan(1-D(G(z(saya))))]

Dalam hal ini, pembeda adalah bagian dari metrik. Itu tidak bisa dihapus seperti kasus sebelumnya. Hal-hal seperti kuadrat terkecil atau log kemungkinan dalam model diskriminatif biasa dapat dengan mudah dibedakan karena mereka memiliki definisi yang bagus, bentuknya dekat. Namun, saya agak bingung tentang bagaimana Anda melakukan backpropogate ketika metrik tergantung pada jaringan saraf lain. Apakah Anda pada dasarnya melampirkan output generator ke input diskriminator dan kemudian memperlakukan semuanya seperti satu jaringan raksasa di mana bobot dalam porsi diskriminator konstan?

Phidias
sumber

Jawaban:

10

Ini membantu untuk memikirkan proses ini dalam pseudocode. Membiarkan generator(z)menjadi fungsi yang mengambil vektor noise sampel seragam zdan mengembalikan vektor dengan ukuran yang sama dengan vektor input X; sebut panjang ini d. Membiarkan discriminator(x)menjadi fungsi yang mengambil dvektor dimensi dan mengembalikan probabilitas skalar xmilik distribusi data yang benar. Untuk latihan:

G_sample = generator(Z)
D_real = discriminator(X)
D_fake = discriminator(G_sample)

D_loss = maximize mean of (log(D_real) + log(1 - D_fake))
G_loss = maximize mean of log(D_fake)

# Only update D(X)'s parameters
D_solver = Optimizer().minimize(D_loss, theta_D)
# Only update G(X)'s parameters
G_solver = Optimizer().minimize(G_loss, theta_G)

# theta_D and theta_G are the weights and biases of D and G respectively
Repeat the above for a number of epochs

Jadi, ya, Anda benar bahwa pada dasarnya kami menganggap generator dan pembeda sebagai satu jaringan raksasa untuk berganti minibatch karena kami menggunakan data palsu. Fungsi kehilangan generator menangani gradien untuk setengah ini. Jika Anda memikirkan pelatihan jaringan ini secara terpisah, maka ia dilatih seperti halnya Anda biasanya melatih MLP dengan inputnya sebagai keluaran lapisan terakhir dari jaringan generator.

Anda dapat mengikuti penjelasan terperinci dengan kode di Tensorflow di sini (di antara banyak tempat): http://wiseodd.github.io/techblog/2016/09/17/gan-tensorflow/

Seharusnya mudah diikuti setelah Anda melihat kode.

tejaskhot
sumber
1
Bisakah Anda menguraikan D_lossdan G_loss? Memaksimalkan ruang apa? IIUC, D_realdan D_fakemasing-masing batch, jadi kami memaksimalkan batch ??
P i
@ Pi Ya, kami memaksimalkan lebih dari satu batch.
tejaskhot
1

Apakah Anda pada dasarnya melampirkan output generator ke input diskriminator>> dan memperlakukan semuanya seperti satu jaringan raksasa di mana bobot di bagian> diskriminator konstan?

Singkatnya: Ya. (Saya menggali beberapa sumber GAN untuk memeriksa ulang ini)

Ada juga banyak lagi pelatihan GAN seperti: apakah kita harus memperbarui D dan G setiap kali atau D pada iterasi aneh dan G pada genap, dan banyak lagi. Ada juga makalah yang sangat bagus tentang topik ini:

"Peningkatan Teknik untuk Pelatihan GAN"

Tim Salimans, Ian Goodfellow, Wojciech Zaremba, Vicki Cheung, Alec Radford, Xi Chen

https://arxiv.org/abs/1606.03498

Liberus
sumber
Bisakah Anda memberikan tautan ke sumber yang Anda cari? Akan sangat membantu bagi saya untuk membacanya.
Vivek Subramanian
0

Baru-baru ini saya telah mengunggah koleksi berbagai model GAN ​​di github repo. Berbasis torch7, dan sangat mudah dijalankan. Kode ini cukup sederhana untuk dipahami dengan hasil eksperimen. Semoga ini bisa membantu

https://github.com/nashory/gans-collection.torch

nashory
sumber