Model difusi dari nol dalam perspektif teoretis baru
- Model difusi baru-baru ini menunjukkan hasil yang mengesankan dalam pemodelan generatif, dan sangat unggul khususnya dalam sampling dari distribusi multimodal.
- Model difusi tidak hanya diadopsi luas dalam alat pembangkit teks-ke-gambar seperti Stable Diffusion, tetapi juga menunjukkan kinerja unggul di berbagai bidang aplikasi seperti generasi audio/video/3D, desain protein, dan perencanaan lintasan robot.
- Tutorial ini memperkenalkan model difusi dari sudut pandang optimisasi, mencakup teori sekaligus kode untuk menjelaskan cara mengimplementasikan model difusi dari nol.
Melatih model difusi
- Model difusi bertujuan menghasilkan sampel dari himpunan yang dipelajari dari contoh pelatihan.
- Pelatihan model difusi mencakup proses berikut:
- Sampling
x0 dari K, sampling level noise σ antara σmin dan σmax, lalu sampling noise ϵ dari N(0,I).
- Menghasilkan data ber-noise
xσ=x0+σϵ.
- Memprediksi
ϵ (arah noise) dari xσ sambil meminimalkan loss kuadrat.
- Pelatihan aktual dilakukan melalui fungsi
training_loop, yang mengiterasi x0 dalam batch, lalu menggunakan generate_train_sample untuk melakukan sampling level noise sigma dan vektor noise eps.
Jadwal noise
- Dalam praktiknya,
σ tidak disampling secara uniform pada interval [σmin,σmax]; interval ini didiskretkan menjadi jadwal σ yang terdiri dari N nilai berbeda.
- Kelas
Schedule mengenkapsulasi daftar sigmas yang mungkin dan melakukan sampling dari daftar ini selama pelatihan.
- Digunakan jadwal log-linear, dan disediakan plot yang membandingkan jadwal ini dengan jadwal lain menggunakan parameter default.
Contoh mainan
- Tutorial ini menggunakan dataset mainan yang terdiri dari titik-titik yang disampling dari spiral.
- Untuk dataset sederhana ini, digunakan multilayer perceptron (MLP) untuk mengimplementasikan denoiser.
- MLP menerima masukan berupa konkatenasi
x∈R2 dan level noise σ, lalu memprediksi noise ϵ∈R2.
- Setelah semua komponen yang diperlukan tersedia, model difusi dapat dilatih.
Menafsirkan denoising sebagai proyeksi aproksimatif
- Prosedur pelatihan difusi mempelajari denoiser
ϵθ(x,σ), dan dalam makalah ini denoiser yang dipelajari ditafsirkan sebagai proyeksi aproksimatif ke manifold data K.
- Ini memotivasi diperkenalkannya model aproksimasi galat relatif untuk menganalisis konvergensi algoritme sampling difusi.
Fungsi jarak dan proyeksi
- Untuk himpunan
K⊆Rn, fungsi jarak didefinisikan sebagai distK(x), dan proyeksi dari x∈Rn didefinisikan sebagai himpunan titik-titik yang mencapai jarak tersebut.
- Jika
projK(x) unik, maka gradien dari distK(x) mengarah ke proyeksi tunggal tersebut.
Denoiser ideal
- Denoiser ideal atau optimal
ϵ∗ untuk level noise tertentu σ adalah peminimum eksak dari fungsi loss pelatihan.
- Ketika data merupakan distribusi uniform diskret di atas himpunan berhingga pada
K, denoiser ideal memiliki bentuk tertutup yang eksak.
Model galat relatif
- Untuk menganalisis konvergensi algoritme sampling difusi, diperkenalkan model galat relatif.
- Model ini mengasumsikan bahwa proyeksi yang diprediksi oleh denoiser,
x−σϵθ(x,σ), mengaproksimasi projK(x) dengan baik ketika σ memperkirakan distK(x)/n dengan baik untuk input x.
Sampling dari model difusi
- Untuk memperoleh titik
x0 yang termasuk dalam K dengan melakukan sampling dari denoiser terlatih ϵθ(x,σ), denoiser ϵθ(xt,σt) dengan noise xt dan level noise σt memprediksi x0.
Menafsirkan sampling difusi sebagai minimisasi jarak
- Iterasi sampling difusi dapat ditafsirkan sebagai gradient descent pada fungsi
f(x)=12distK(x)2.
- Cara memilih jadwal
σt menentukan jumlah dan ukuran langkah gradien yang diambil selama sampling.
Sampler yang ditingkatkan melalui estimasi gradien
- Melalui estimasi gradien, diturunkan sampler efisien baru.
- Sampler ini menunjukkan konvergensi yang lebih cepat dibanding sampler DDIM yang sudah ada.
Contoh skala besar
- Kode pelatihan yang disediakan di atas dapat digunakan bukan hanya untuk dataset mainan, tetapi juga untuk melatih model difusi gambar dari nol.
- Kode sampling bekerja tanpa modifikasi untuk melakukan sampling dari model difusi laten canggih yang sudah dipra-latih.
Materi lain
- Posting blog berikut tentang model difusi juga direkomendasikan:
- Apa itu model difusi? memperkenalkan model difusi dari sudut pandang waktu-diskret yang membalik proses Markov.
- Pemodelan generatif dengan mengestimasi gradien distribusi data memperkenalkan model difusi dari sudut pandang waktu-kontinu yang membalik persamaan diferensial stokastik.
- The Annotated Diffusion Model menjelaskan implementasi PyTorch dari model difusi secara rinci.
Opini GN⁺
- Tutorial ini memperkenalkan model difusi dari sudut pandang optimisasi dan membuatnya dapat diakses bahkan bagi insinyur perangkat lunak pemula dengan menghubungkan latar belakang teoretis dan implementasi kode nyata.
- Model difusi dapat diterapkan pada berbagai tipe data, yang menunjukkan kegunaannya di beragam bidang aplikasi tempat sampling dari distribusi multimodal menjadi penting.
- Tutorial ini menjelaskan proses pelatihan dan sampling model difusi langkah demi langkah, sehingga membantu pemahaman mendalam tentang cara kerja model dan cara mengimplementasikannya.
- Proses pelatihan dan sampling model difusi relatif kompleks, sehingga diperlukan pengetahuan dasar tentang machine learning dan deep learning untuk memahami dan mengimplementasikannya.
- Saat mengadopsi teknologi ini, faktor-faktor seperti biaya komputasi, kualitas data pelatihan, dan kompleksitas model perlu dipertimbangkan; dengan begitu, teknologi ini memiliki potensi untuk menghasilkan sampel yang lebih canggih dan beragam.
1 komentar
Komentar Hacker News
Kata penulis: saat mencoba memahami model difusi, ia menyadari bahwa kode dan matematikanya bisa dibuat jauh lebih sederhana, dan hal ini mendorongnya menulis artikel blog serta library difusi. Ia siap dengan senang hati menjawab pertanyaan.
Artikel bagus lainnya, 'Diffusion Models From Scratch', membahas detail matematis dengan lebih mendalam dan disertai implementasi yang mudah dipahami dalam kurang dari 500 baris.
Senang artikel ini menyertakan kode. Makalah difusi terkenal penuh dengan banyak rumus, tetapi kode lebih jelas dan lebih mudah dipahami bagi orang seperti kita. Semua makalah teoretis seharusnya disertai kode implementasi referensi.
Ingin melihat perluasan tentang diffusion transformer. Ini digunakan untuk menjalankan Sora dan model generasi video lainnya. Akan bagus jika artikel ini digabung dengan 'GPT From Scratch' untuk membuat pengantar 'Diffusion Transformer From Scratch'.
Artikel yang bagus, tetapi melewatkan karakteristik penting bahwa model difusi memodelkan turunan dari log probabilitas, yaitu fungsi skor, dan bahwa sampling difusi mirip dengan dinamika Langevin. Ini menjelaskan mengapa model tersebut lebih mudah dilatih daripada GAN.
Sangat menarik. Mengingatkan pada makalah Iterative alpha-(de)Blending. Makalah itu juga menyusun model difusi yang secara konseptual lebih sederhana dan merumuskannya sebagai proses proyeksi iteratif yang kasar. Pendekatan ini memungkinkan eksperimen yang lebih menarik, seperti analisis kesalahan denoising.
Apakah salah satu ide difusi adalah memperoleh data pelatihan dalam jumlah besar? Maksudnya, membandingkan gambar yang didifusikan secara acak dengan gambar yang tidak didifusikan?
Penjelasan teori yang bagus. Tampaknya independen terhadap dataset. Penasaran dengan hal-hal spesifik dalam generasi gambar. Misalnya, mengapa generator gambar kesulitan menghasilkan tuts piano? Sepertinya diperlukan representasi kendala jarak menengah yang lebih baik.
Ingatlah bahwa semua model machine learning adalah convolution.
Ada perkumpulan rahasia yang menggunakan komentar artikel ini untuk mengirim pesan rahasia, jadi jangan di-google.