Machine-Learning

當使用變分自動編碼器生成樣本時,我們從ñ(0,1)ñ(0,1)N(0,1)代替μ+σñ(0,1)μ+σñ(0,1)mu + sigma N(0,1)

  • October 1, 2018

背景:我試圖了解變分自動編碼器作為生成器的使用。我的理解:

  • 在訓練期間,對於一個輸入點 $ x_i $ 我們想學習潛在的 $ \mu_i $ 和 $ \sigma_i $ 然後採樣 $ z_i \sim N(\mu_i, \sigma_i) $ 並將其饋送到解碼器以進行重建 $ \hat{x}_i = \text{decode}(z_i) $ .
  • 但是我們不能用採樣算子做反向傳播,所以我們重新參數化並使用 $ z_i = \mu_i + \sigma_i \epsilon $ 在哪裡 $ \epsilon \sim N(0, 1) $ . 我們的重建變成 $ \hat{x}_i = \text{decode}(\mu_i + \sigma_i \epsilon) $ .

但是,當我們完成訓練並準備將其用作生成器時,我們會採樣 $ z \sim N(0, 1) $ 並將其提供給解碼器: $ x_{sample} = \text{decode}(z) $ .

讓我困惑的部分是,在訓練期間,解碼操作是使用 $ \mu_i + \sigma_i \epsilon $ 據我了解,這是使用 $ N(\mu_i, \sigma_i) $ 與不同 $ \mu_i $ 和 $ \sigma_i $ 對於每個訓練示例。然而,在生成期間,解碼操作(有效地)在 $ \epsilon $ 獨自從 $ N(0, 1) $ . 我們為什麼要設置 $ \mu = 0 $ 和 $ \sigma = 1 $ 在生成期間(即使用 $ z = 0 + 1 \cdot \epsilon $ )?

訓練時,我們在畫 $ z \sim P(z|x) $ ,然後用解碼 $ \hat x = g(z) $ .

在生成期間,我們正在繪製 $ z \sim P(z) $ ,然後解碼 $ x = g(z) $ .

所以這回答了你的問題:在生成過程中,我們希望從潛在代碼的先驗分佈中生成樣本,而在訓練期間,我們正在從後驗分佈中抽取樣本,因為我們正在嘗試重建特定的數據點。

引用自:https://stats.stackexchange.com/questions/369660

comments powered by Disqus