Memahami cara mesin menciptakan data baru: konsep GAN dan VAE, lalu diffusion models yang mendasari Stable Diffusion 3.5 dan FLUX.1, plus praktik denoising diffusion dan pipeline text-to-image dengan Diffusers.

Semua model sejauh ini adalah discriminative: mempelajari batas antar kelas, memetakan input ke label. Ada keluarga lain yang jauh lebih ambisius: generative models, yang mempelajari distribusi data sehingga bisa menciptakan data baru — gambar yang belum pernah ada, suara, teks, video.
Dari episode 1 kita sudah singgung GAN di 2014. Sekarang kita bedah tiga arsitektur generatif — GAN, VAE, dan diffusion — dan mengapa diffusion akhirnya memenangkan generasi gambar. Di akhir episode kalian menjalankan pipeline text-to-image dengan Diffusers, gerbang menuju dunia generative AI yang meledak di 2025-2026.
GAN (Generative Adversarial Network) memperkenalkan ide jenius: dua jaringan yang saling bersaing.
Keduanya dilatih bergantian. Generator berusaha membodohi discriminator; discriminator makin pintar membedakan. Secara teori, ketika seimbang, output generator tak bisa dibedakan dari data asli:
Generator: minimalkan log(1 - D(G(z)))
Discriminator: maksimalkan log(D(x)) + log(1 - D(G(z)))Kendala terkenalnya: mode collapse — generator menemukan satu output yang selalu membodohi discriminator dan berhenti memproduksi variasi. Training GAN yang stabil adalah seni yang sulit. Di 2026, GAN masih kuat untuk super-resolution dan domain transfer, tetapi untuk generasi bebas (text-to-image), diffusion mengambil alih.
VAE (Variational AutoEncoder) berbeda: ia menyandikan input ke distribusi probabilitas dalam ruang latent, bukan titik tunggal. Encoder menghasilkan mean dan varians; sampel diambil dari distribusi itu lalu didecode kembali. Penalti KL memaksa distribusi latent mendekati normal standar.
Hasilnya: ruang latent yang kontinu dan terstruktur — interpolasi dua titik latent menghasilkan gambar transisi yang halus. VAE tidak menghasilkan gambar setajam GAN/diffusion, tetapi konsep ruang latent-nya dipakai di hampir semua model generatif modern, termasuk latent diffusion di bawah ini.
Diffusion bekerja mundur dari proses perusakan:
Pada saat inference, model mulai dari noise acak murni lalu denoise berulang kali sampai muncul gambar. Ide briliannya: alih-alih mempelajari distribusi data secara langsung (sulit), model hanya belajar "seperti apa noise pada tahap ini" — tugas yang jauh lebih sederhana.
gambar → +noise → +noise → ... → noise murni (forward)
noise → -noise → -noise → ... → gambar (reverse, dilatih)Denoising langsung pada piksel 1024x1024 sangat mahal. Stable Diffusion mengatasi dengan bekerja di ruang latent: VAE menyusutkan gambar ke representasi kecil, diffusion denoise di ruang itu, lalu decoder VAE mengembalikannya ke piksel. Text disuntikkan lewat cross-attention antara prompt text dan feature U-Net.
Inilah arsitektur di balik Stable Diffusion 3.5 dan FLUX.1 (yang memperbaiki prompt following dan kualitas teks dalam gambar).
Hugging Face diffusers menjadikan semua ini beberapa baris:
from diffusers import DiffusionPipeline
import torch
pipeline = DiffusionPipeline.from_pretrained(
"stabilityai/sdxl-turbo",
torch_dtype=torch.float16,
variant="fp16",
).to("cuda")
image = pipeline(
prompt="sebuah kucing memakai kacamata, gaya ilustrasi",
num_inference_steps=4,
guidance_scale=0.0,
).images[0]
image.save("kucing.png")num_inference_steps mengontrol jumlah langkah denoise — lebih banyak = kualitas lebih tinggi tapi lebih lambat. guidance_scale mengontrol seberapa kuat model mengikuti prompt (lebih tinggi = patuh, tapi bisa oversaturate).
Tip
Jumlah langkah dan guidance_scale adalah dua knob utama kualitas text-to-image. Mulai dari nilai default model (lihat model card), lalu bereksperimen: prompt kompleks butuh guidance lebih tinggi, prompt sederhana tidak. Model "turbo" dan "LCM" menjalankan pipeline dengan sangat sedikit langkah untuk kecepatan real-time.
Ekosistem diffusion lebih dari text-to-image:
from diffusers import AutoPipelineForInpainting
pipeline = AutoPipelineForInpainting.from_pretrained(
"runwayml/stable-diffusion-inpainting", torch_dtype=torch.float16
).to("cuda")
image = pipeline(prompt="langit malam berbintang", image=photo, mask_image=mask).images[0]fp16 atau bf16 untuk GPU Ampere+ — VAE di fp32 saat pipeline fp16 adalah sumber artefak warna paling umum.guidance_scale.Warning
Model generatif tidak netral secara etika dan legal: cek lisensi model (beberapa arsitektur dan weight punya syarat komersial), dan jangan generate konten melanggar kebijakan atau memakai wajah orang tanpa izin. Verifikasi hasil sebelum disebar — diffusion bisa membuat objek yang tampak meyakinkan tapi salah secara faktual.
Pada episode 18 ini, kalian telah mengenal generasi data.
Inti yang harus dibawa pulang:
Di episode 19 selanjutnya kita akan membuat model ringan: optimisasi inference — quantization FP16/INT8/GGUF/AWQ/GPTQ, pruning, dan distillation, plus praktik ONNX Runtime, TFLite, dan llama.cpp untuk edge. Sampai jumpa di episode 19!