---
# System prepended metadata

title: '自編碼器（Autoencoder）與變分自編碼器（Variational Autoencoder, VAE）'
tags: [深度學習]

---

## 介紹自編碼器（Autoencoder）
自編碼器（Autoencoder, AE）是一種經典的神經網路架構，屬於自監督學習（self-supervised learning）的一種應用，其核心目的是將輸入資料壓縮（編碼）成一個潛在空間表示（latent representation），再從中重建回原始資料，藉此學得有意義的特徵表示。

### Autoencoder 的基本架構與原理
自編碼器包含兩個主要部分，分別是編碼器（Encoder）以及解碼器（Decoder），編碼器主要將高維的輸入資料，例如圖片、音訊或文字等，壓縮成低維的向量，稱為 Dimension reduction，而解碼器主要根據這個低維向量重建出接近原始輸入的資料，目標盡量讓輸出與輸入盡可能相似。

![image](https://hackmd.io/_uploads/r1q6_iiHgg.png)

### Autoencoder 的應用
1. 語音轉換（Voice Conversion）
將說話者 A 的語音內容轉換為說話者 B 的聲音，過程中利用 Feature disentangle 分離「內容資訊」與「語者特徵」，再將 A 的內容資訊加上 B 的語者特徵。
![image](https://hackmd.io/_uploads/SJWacsiHle.png)
2. 無監督文本摘要（Unsupervised Summarization）
透過文本自編碼器模型學習語義壓縮與還原能力，再結合對抗訓練或循環架構（如 CycleGAN）加上一個 Discriminator 辨別是否為真人寫的摘要內容，如此就能讓 Encoder 的輸出具有可讀性。
![image](https://hackmd.io/_uploads/rJSe2oiSxe.png)
3. 異常檢測（Anomaly Detection）
自編碼器可用於只接觸過「正常樣本」的場景中，如機器監測、金融詐騙辨識等。測試資料若無法有效重建，則視為潛在異常。
![image](https://hackmd.io/_uploads/Sy07hoireg.png)


## 介紹變分自編碼器（Variational Autoencoder, VAE）
變分自編碼器（Variational Autoencoder, VAE）是一種結合了深度學習與概率模型的生成模型，由 Diederik P. Kingma 和 Max Welling 於 2013 年提出，奠基於自編碼器（Autoencoder, AE）的架構，然而，AE 的潛在空間通常是不連續或不規則的，難以直接用於生成新樣本。

VAE 的創新在於將潛在空間的表示從固定的向量轉變為概率分佈，具體而言，通常假設潛在向量服從高斯分佈，編碼器不再輸出單一向量，而是生成均值（Mean）和方差（Variance），描述數據在潛在空間的概率分佈，如下圖所示，從這個由編碼器定義的潛在分佈 q(z∣x)（其中 x 是輸入數據）中進行採樣，得到一個潛在向量 z，這個採樣過程引入了隨機性，接著解碼器 p(x∣z) 會接收這個採樣得到的潛在向量 z，並嘗試重建出原始的輸入數據 x，這一特性使VAE成為生成模型的強大工具。

![image](https://hackmd.io/_uploads/SJ3OJqPlgg.png)

## VAE 訓練過程以及方式
AE的訓練目標函數包含兩個主要部分：

1. 重建損失（Reconstruction Loss）: 
衡量解碼器輸出的重建數據與原始輸入數據之間的差異，例如使用均方誤差（MSE）或交叉熵（Cross-Entropy），確保模型能夠盡可能準確地還原輸入，學習到數據的有效表徵。 
2. KL 散度（Kullback-Leibler Divergence）: 
衡量編碼器產生的潛在分佈 q(z∣x) 與一個預先設定的先驗分佈 p(z)（通常是標準正態分佈，即均值為 0、方差為 1 的高斯分佈）之間的差異，確保編碼器學習到的潛在分佈盡可能接近標準正態分佈，使得整個潛在空間變得更加規整、平滑且連續。

通過最小化這兩部分損失的總和，VAE不僅學會了如何壓縮和重建數據，更重要的是學會了一個結構良好、適合生成新數據的潛在空間，這使得VAE成為一個強大的生成工具，能夠創造出與訓練數據風格類似但內容全新的圖像、聲音或其他類型的數據。

## VAE 在 Deepfake 技術中的應用
在 Deepfake 的應用中，訓練過程通常涉及兩個人臉數據集，例如人臉 A和人臉 B。編碼器 A 被訓練來提取人臉 A 的特徵，並生成對應的潛在向量，而解碼器 B 則被訓練來根據這些潛在向量生成人臉 B 的圖像，這樣的設計使得系統能夠將人臉 A 的表情、動作等特徵遷移到人臉 B 上，實現人臉替換的效果，圖中展示的流程正是這種結構的簡化表示：編碼器A提取特徵後，通過潛在向量傳遞信息，解碼器B生成最終的替換結果。

這種訓練策略背後的關鍵在於，所有的 Encoder 都學習提取「通用臉部動作特徵」，而 Decoder 則學會將這些動作特徵對應回各自人物的長相，一旦訓練完成，我們可以使用任意人物的 Encoder 來輸出 latent vector，並用另一人物的 Decoder 進行臉部生成，如此便能實現臉部交換的 Deepfake 效果。

![image](https://hackmd.io/_uploads/SJL-U9Dllg.png)

:::info
生成對抗網絡（GAN）也是 Deepfake 技術中常用的工具，GAN 由生成器和判別器組成，生成器負責創建假數據，而判別器則判斷數據的真偽，二者通過對抗訓練來提升生成圖像的質量，詳細內容可參考此篇文章[生成式對抗網路 (Generative Adversarial Network, GAN)](https://hackmd.io/@lcaMuWOwR1Ox5o5yeTEupA/B1H-exjHC)，與自編碼器相比，GAN 生成的圖像通常更為細膩和逼真，這使得它在高解析度的 Deepfake 視頻製作中更為常見。

然而，自編碼器的優勢在於訓練穩定且結構簡單，特別適合初期的特徵提取和遷移任務，在實際應用中，許多Deepfake系統會結合這兩種技術，先用自編碼器進行特徵映射，再用GAN優化細節，以達到最佳效果。
:::