變分自動編碼器 - 潛在空間的維度
我做了一些實驗來了解 VAE 中潛在空間維度的影響,似乎空間越高,生成逼真的圖像就越困難。我可能對原因有直覺,我想听聽你的意見或任何其他關於它的理論見解。
首先,我注意到:
- 在 MNIST 上訓練具有大潛在空間 (8x8x1024) 的深度卷積 VAE 後,重建效果非常好。此外,當我提供任何樣品時對於我的編碼器,輸出意味著接近 0 並且輸出 std接近 1。重建損失和潛在損失似乎都很低。
- 但是,如果我從對於我的解碼器,輸出是黑色背景上的一些隨機白色筆劃(如 MNIST 樣本,但看起來不像數字)。
- 如果我給一個圖像到我的編碼器,它會輸出一個平均值(接近 0),如果我給我的解碼器隨機樣本,輸出將是代表與輸入相同數字的圖像(既真實又與輸入不同)
我的結論是:
- VAE生成了許多真實圖像的高斯分佈,其中心接近0但不完全為0。因此,真實圖像的分佈是高斯的混合
- 的實際支持不與實際支持重疊(除了一組測量零)。通過實際支持,我指的是實際生成大多數點的空間。對於高維高斯,它對應於一個肥皂泡。
所以這裡是一個高維潛在空間會發生什麼的可視化:
紅色氣泡將是實際支持而黑色氣泡的結合將是實際的支持 . 只有黑色氣泡包含逼真的圖像,而紅色氣泡幾乎不包含逼真的圖像。維度越高,氣泡越細,重疊空間越小。
這種直覺正確嗎?高維潛在空間不能正常工作還有其他原因嗎?
您似乎誤解了您的架構,並且很簡單,過度擬合了您的數據。
看起來你對潛在空間的解釋是它代表了許多逼真的圖像。在最好的情況下這不太可能,並且如果您的解碼器對採樣輸出執行任何轉換(可能是仿射轉換除外) - 不可能。
自動編碼器(或更確切地說是它們的編碼器組件)通常是壓縮算法。這意味著他們用更小、更抽象的特徵來逼近“真實”數據。
例如,字符串“ 33333333000000000669111222222 ”可以通過非常簡單的算法無損壓縮為“ 8:3/9:0/2:6/1:9/3:1/6:2 ”-出現次數:次數,保持位置. 如果您的標準是文本長度,則編碼要短六個字符 - 不是一個巨大的改進,但仍然是一個改進。
發生的事情是我們引入了一個抽象的、更高維度的特徵——“重複次數”——它可以幫助我們更簡潔地表達原始數據。您可以進一步壓縮輸出;例如,注意到即使位置只是分隔符,您可以將它們編碼為一位填充而不是 ASCII 代碼。
自動編碼器正是這樣做的,除了它們自己選擇特徵,而變分自動編碼器強制最終編碼級別(至少)以一種可以操縱的方式是模糊的。
因此,您在模型中所做的就是使用超過六萬五千個特徵來描述您的輸入圖像。在變分自動編碼器中,每個特徵實際上是一個特徵的兩個不同版本之間的滑動比例,例如面部的男性/女性,或 MNIST 數字的寬/細筆觸。
你能想出一百種方式來有意義地描述兩張真實照片之間的差異嗎?可能,我想,但是當你試圖繼續時,他們會變得越來越強迫。
有了這麼多的剩餘空間,優化器可以輕鬆地將每個不同的訓練圖像的特徵編碼到潛在空間的非重疊切片中,而不是學習全局獲取的訓練數據的特徵。
所以,當你給它一個驗證圖片時,它的編碼落在了局部適用的特徵編碼島之間,所以結果是完全不連貫的。