生成式視覺:GAN 與 VAE

自編碼器

自編碼器是一種訓練來把輸入複製成輸出的神經網路——但要通過一個刻意設計的瓶頸(bottleneck),迫使它丟棄大部分資料、只保留重要的部分。可以把它想成學會把一張影像濃縮成一段簡短的「編碼」,再從這段摘要重建出圖片。由於網路必須從壓縮後的編碼重建影像,它被迫去發現一種有效率、有意義的表示,而非死記原始像素。

自編碼器有兩個部分。編碼器是一個函數 f,把輸入影像 x 映射成潛在編碼 z = f(x),其維度通常遠低於 x——這就是瓶頸。解碼器是一個函數 g,把編碼映射回重建結果 x̂ = g(z)。兩者共同訓練,以最小化重建損失,例如均方誤差 ||x − x̂||²(逐像素差的平方)或逐像素交叉熵,並在整個訓練集上取平均。不需要任何標籤——目標就是輸入本身——因此這是自監督、非監督式的學習。

瓶頸是關鍵的正則化手段:如果 z 的維度和 x 一樣多又毫無限制,網路大可學成恆等映射,什麼有用的東西都學不到。各種變體會用其他限制取代狹窄瓶頸,或在其之上再加限制。去雜訊自編碼器(denoising autoencoder)破壞輸入,要求網路還原乾淨影像;稀疏自編碼器(sparse autoencoder)懲罰啟動的編碼單元數量;收縮自編碼器(contractive autoencoder)懲罰編碼對輸入變動的敏感度。自編碼器可用於降維(PCA 的非線性推廣)、表示學習與預訓練、異常偵測(重建誤差高即標示為離群值),以及影像去雜訊。

一個 784→32→784 的自編碼器在 MNIST 上把每張 28×28 影像(784 個數字)壓縮成僅僅 32 個數字再重建;重建結果略微模糊,但清楚地是同一個數字——這顯示 32 個潛在維度捕捉到了數字的身分與風格,同時丟棄了像素層級的雜訊。

一般的自編碼器並不是生成模型。它的潛在空間沒有被強制賦予結構,所以若你隨機挑一個 z 來解碼,通常只會得到雜亂無章的結果——真實影像的編碼之間存在「空洞」。變分自編碼器所補上的,正是修正這一點:讓潛在空間變得平滑、可供取樣。

又稱
AE自動編碼器