⚠️ 版本與存取:以 CS1810 Spring 2026 HW4(
hw4_release.tex/ipynb)與 Section 6 講義為準,2026-09-29 實際打開。本課整體為 A3,但沒有當期錄影、沒有作業解答。Section 6 的 autoencoder 段落講到 sparse 與 denoising AE 為止,沒有涵蓋 VAE;Week 6 的 Representation Learning / Autoencoders 講課投影片本篇沒有取得,所以 VAE 部分只根據作業題目本身。
這是 Harvard CS181 逐週導讀第 7 篇,接在 HW4(上)Transformer 之後。
場景:它能把臉還原,卻畫不出一張新臉
HW4 Problem 2 的開場很有說服力。你先訓練一個卷積 autoencoder,把 CelebA 的臉壓成 128 維向量再還原,重建看起來不錯。然後題目要你做一件看似合理的事:從標準常態 N(0, I) 隨機抽一個 128 維向量,丟給 decoder。出來的東西通常不像臉。
整題就在回答一個問題:一個能重建的 latent space,為什麼不能拿來生成?VAE 又加了什麼,讓隨便抽一個點也能解碼成像樣的圖?
題目標題寫 76 分,但各小題標示的分數加起來是 78(12+4、4、8+4+8、4+4+4、8+6+12)。以 Gradescope 實際配分為準,這裡只提醒有落差。
直覺:地圖上的空白
把 latent space 想成一張地圖。Autoencoder 的訓練目標只有一個:每張訓練圖的座標,decoder 都要能還原回去。它沒有被要求讓座標落在哪一區,也沒有被要求座標之間的空地有意義。結果是訓練資料散落在地圖上某些奇怪的角落,中間大片空白區域 decoder 從來沒見過。
從 N(0, I) 抽樣,等於閉著眼睛往地圖中心附近丟飛鏢。飛鏢多半落在空白處,decoder 只能亂畫。
VAE 的修正是:規定所有座標都要擠在 N(0, I) 那一團裡,而且每張圖不是一個點,是一小片霧。霧跟霧之間彼此重疊,空白就被填掉了。之後從 N(0, I) 抽樣,才會落在 decoder 看過的地方。
機制:五個步驟對應五組小題
1. Autoencoder 與取樣失敗(1(a) 12 分、1(b) 4 分)
Encoder f_φ 把 x 壓成 d 維 z,decoder g_θ 還原成 x̂,loss 是重建誤差的平均平方和。題目特別強調:讓一個模型成為 autoencoder 的是「編碼器—解碼器配對加上重建 loss」這個訓練方式,不是某種架構。
notebook 給了明確的架構指引:
- 資料:Hugging Face 上的
tpremoli/CelebA-attrs,訓練集只取前 30,000 張加速,CenterCrop(178)後縮成 64×64 - Encoder:4 層 stride-2
Conv2d(通道 3→32→64→128→256),每層接BatchNorm2d+ReLU,空間 64→32→16→8→4,攤平成 4096 維後Linear(4096, 128) - Decoder:用
ConvTranspose2d鏡像回去,最後一層Sigmoid - 訓練 20 epoch、Adam
lr=1e-3
1(a) 要附訓練與測試 loss 曲線、前 5 張測試圖與重建;1(b) 用 1–2 句解釋為什麼 AE 沒有理由讓 N(0, I) 的樣本解碼成有意義的輸出。上面「地圖上的空白」就是這題要你講的東西。
2. 為什麼不直接最大化 log p(x)(2(a) 4 分)
想生成,自然的想法是學出資料分布,用最大概似訓練:
log p(x) = log ∫ p(x | z) p(z) dz
問題是這個積分算不出來:p(x | z) 是神經網路,z 是高維的。題目追問:為什麼不能抽很多 z ~ p(z) 再平均 p(x | z)?作答方向是想一想:對一張特定的臉,高維空間裡隨機抽到的 z 有多少比例會讓 p(x | z) 不是幾乎為 0?
3. 推出 ELBO(2(b) 共 20 分)
既然真正的後驗 p(z | x) 算不出來,就引進一個網路 q_φ(z | x) 當近似後驗,用 KL 散度衡量它跟真後驗差多少。三小題依序:
- 用 Bayes 展開
log p(z | x),整理出log p(x) = KL(q ‖ p(z|x)) + ELBO - 因為 KL ≥ 0,所以
ELBO ≤ log p(x),最大化 ELBO 是合理的替代目標 - 把
log p(x, z)拆成log p(x | z) + log p(z),改寫成「重建項 − KL(q ‖ p(z))」
推導骨架(每一步用到什麼)
步驟 1:從
KL(q ‖ p(z|x)) = E_q[log q(z|x) − log p(z|x)]
代入 log p(z|x) = log p(x, z) − log p(x)。log p(x) 跟 z 無關,可以移出期望值。移項後,剩下的期望值就是題目定義的 ELBO。
步驟 2:KL 非負,所以 log p(x) ≥ ELBO,等號在 q 等於真後驗時成立。最大化 ELBO 同時做兩件事:把 log p(x) 往上推,並讓 q 貼近真後驗。
步驟 3:把 E_q[log p(x, z) − log q] 裡的 log p(x, z) 拆開,E_q[log p(z) − log q] 正好是 −KL(q ‖ p(z))。
4. 讀懂 VAE loss 的兩項(2(c) 共 12 分)
負的 ELBO 就是 VAE loss:
L_VAE = −E_q[log p(x | z)] + KL(q_φ(z | x) ‖ p(z))
三小題問的都是詮釋:
- 第一項怎麼接回第 1 部分的重建 loss(當
p(x|z)是固定變異數的高斯時,負對數似然就是平方誤差加常數) - 第二項怎麼解決 1(b) 的問題:它懲罰 encoder 輸出偏離
N(0, I),等於把所有「霧」往同一團拉 - 兩項互相拉扯的結果:跟 AE 比,VAE 的重建通常比較模糊,但取樣出來的圖比較像樣。題目把這題叫「Tensity」
5. Reparameterization、KL 封閉解與實作(3(a) 8 分、3(b) 6 分、3(c) 12 分)
VAE 的 encoder 共用同一個卷積骨幹,攤平後接兩個線性頭:fc_mu 輸出 μ,fc_logvar 輸出 log σ²。
3(a) Reparameterization:取樣這個動作對分布參數不可微。改寫成 z = μ + σ ⊙ ε、ε ~ N(0, I),隨機性全在 ε,z 對 μ、σ 是確定的可微函數,梯度就能傳回 encoder。題目要你證明這樣得到的 z 分布確實是 q_φ(z | x)。
3(b) KL 封閉解:當 q = N(μ, diag(σ²))、p = N(0, I),要推出
KL(q ‖ p) = ½ Σⱼ (μⱼ² + σⱼ² − ln σⱼ² − 1)
推導提示
對角高斯的 KL 可以逐座標相加。對單一座標 j,寫出 log q(zⱼ) − log p(zⱼ) 的高斯密度,兩個 ½ log 2π 抵銷,剩下 −½ ln σⱼ² − (zⱼ − μⱼ)²/(2σⱼ²) + zⱼ²/2。取 q 下的期望值,用題目給的 E[zⱼ] = μⱼ、E[zⱼ²] = μⱼ² + σⱼ²:第二項期望值是 ½,第三項是 ½(μⱼ² + σⱼ²)。
3(c) 實作:notebook 已經把 vae_loss 寫好給你,KL 那行正是 3(b) 的公式用 logvar 表示的版本。你要補的是 encoder 骨幹、reparameterize(由 logvar 算出 std,再抽 eps),訓練 30 epoch,畫出重建、KL、總 loss 三組訓練與測試曲線,附重建圖,再從 N(0, I) 取樣,跟 1(b) 比較。
有一個 notebook 細節值得注意:AE 的測試 loss 用 F.mse_loss 預設的逐像素平均,VAE 的重建項用 reduction="sum" 再除以 batch 大小。一張 3×64×64 的圖有 12,288 個像素,兩種 loss 的數值尺度差很多,別直接拿兩張 loss 曲線的數字比大小。比較 AE 和 VAE 要看圖,不是看 loss 數字。
連回生成模型
VAE 的「encoder 把圖壓成分布、decoder 從 latent 還原」這個結構,後來成了影像生成系統的零件之一,例如 Latent Diffusion 先用一個 autoencoder 把圖壓進 latent space,再在 latent 裡做擴散生成。HW4 只到原始 VAE 為止;CS181 在 Week 10 接著講 Self-Supervised Learning / Generative Models 與 Contrastive Learning、GANs、EBMs(見官方課表),對應 HW5。
另外,Section 6 §2.5 有一個跟下一份作業直接相關的結論:線性 encoder/decoder 加平方誤差的 autoencoder,最佳解張成的子空間就是前 m 個主成分,也就是 PCA。非線性 AE 可以看成 PCA 的非線性推廣。這會在 HW5 的 PCA 題再遇到。
想深入
- CMU 11-785 Lecture 22:變分自編碼器:同一套 ELBO 推導的另一個講法
- Kingma & Welling 2013, Auto-Encoding Variational Bayes:VAE 原始論文,reparameterization 與高斯 KL 封閉解都在這裡
上一篇/下一篇
參考資料
- CS1810 Spring 2026 HW4 題目 hw4_release.tex
- CS1810 Spring 2026 HW4 notebook hw4_release.ipynb
- CS1810 Spring 2026 Section 6(Autoencoders and Representation Learning 在 §2)(solutions)
- CS1810 Spring 2026 官方課表(Google Sheet)
- CelebA-attrs dataset(Hugging Face, notebook 使用的版本)
- Kingma & Welling 2013, Auto-Encoding Variational Bayes
- Rombach et al. 2022, High-Resolution Image Synthesis with Latent Diffusion Models
- CS181 2026 課程網站
Loading...