Deep Learning - Unsupervised Learning
Unsupervised Learning
- Datasets: $\mathbf{X} = {\mathbf{x}_1, \mathbf{x}_2, \ldots, \mathbf{x}_N}$
- 沒有標籤 (labels)
Clustering
目標是把所有 $x$ 分成 $K$ 個群集 (clusters)。
K-Means
- 初始化 $K$ 個中心點 (centroids) ${\mu_1, \mu_2, \ldots, \mu_K}$
- 對每個點 $x_i$,分配到最近的中心點:
$$
c_i = \arg\min_k ||x_i - \mu_k||^2
$$ - 更新中心點:
$$
\mu_k = \frac{1}{N_k} \sum_{i: c_i = k} x_i
$$ - 重複步驟 2 和 3,直到收斂。
- 缺點: 需要預先指定 $K$,要知道群集數量
Hierarchical Clustering
- 建立樹狀結構 (dendrogram)
- 不需要預先指定群集數量
- 可以視覺化群集關係
- 開始時每個點都是一個群集
- 計算群集間距離,合併最近的兩個群集
- 重複直到所有點合併成一個群集
Factorization and Recommendation
目標: 將高維資料分解成低維表示。
Non-negative Matrix Factorization (NMF)
- 給定非負矩陣 $X$,找到非負矩陣 $W$ 和 $H$,使得 $X \approx WH$。
$$
\argmin_{W \ge O, H \ge 0} ||X - WH||_F
$$找到為 $X$ 的低維表示 (原因)
- $X^* = W^* H^*$ 也是 Low Rank,且是 dense matrix,用來預測 user-item 評分。
Dimensionality Reduction
目標: 將高維資料映射到低維空間,同時保留重要資訊。
Principal Component Analysis (PCA)
- 找到資料中變異數最大的方向 (principal components)
- 將資料投影到這些方向上,達到降維效果
Predictive Learning
目標: 學習一個 Model 能做填空題,
Word2Vec
CBOW (Continuous Bag of Words)
- 給定上下文詞彙,預測中心詞彙
- 範例: “The ___ is blue.” → “sky”
Skip-gram
- 給定中心詞彙,預測上下文詞彙
- 範例: “sky” → “The ___ is blue.”
可以學習到詞彙之間的語義關係 (semantic relationships)
Doc2Vec
考慮 Paragraph ID 作為額外資訊,捕捉 context。
Filling Images
- 給定部分遮蔽的圖像,預測缺失部分
- PixelRNN, PixelCNN
Autoencoders
- 結構: Encoder + Decoder
- 目標: 壓縮資料並重建
- 損失函數: 重建誤差 (reconstruction error)
Manifold Learning
- Autoencoder 會將輸入資料 $x$ 壓縮成一個編碼 $c$(Latent code)。
- 我們希望這個 $c$ 不僅僅是壓縮數據,而是能代表資料在 Manifold 上的座標。
- 假設人臉照片是高維度的數據,但實際上人臉的變化(如角度、表情)是有限的,這些變化構成了一個低維度的 Manifold。我們希望 $c$ 能準確抓到這些有意義的變化軸向,而不是隨機的雜訊。
Contractive Autoencoder 可以解決這問題。它的核心思想是在原本的 Loss Function 中加入一個 Regularization term $\Omega(\mathbf{c})$:
$$\Omega(\mathbf{c}) = \sum_{n} \left| \frac{\partial \mathbf{c}^{(n)}}{\partial \mathbf{x}^{(n)}} \right|_F^2$$
$\frac{\partial \mathbf{c}^{(n)}}{\partial \mathbf{x}^{(n)}}$ (Jacobian Matrix):
- 代表 編碼 $c$ 對輸入 $x$ 的敏感度(即:當輸入 $x$ 改變一點點時,編碼 $c$ 會改變多少)。
$| \cdot |_F^2$ (Frobenius Norm):
- 這是在計算矩陣中所有元素的平方和。
- 我們希望這個值越小越好。這意味著我們希望模型對輸入 $x$ 的微小變化「不敏感」。
Invariance:
透過最小化上述的 Jacobian,模型會傾向讓編碼 $c$ 保持不變。這表示如果輸入圖片有一些隨機雜訊(不重要的變化),編碼 $c$ 不會因此劇烈跳動。這讓模型具有抗噪能力。
Tangent Vectors
雖然正規化項希望 $c$ 都不變,但自動編碼器還有另一個任務是 Reconstruction Loss。
- 為了能重建影像,模型被迫在重要的方向(流形的切線方向,Tangent vectors)上保留敏感度。
- 模型學會了忽略無意義的雜訊(各個方向的微小擾動),但保留了沿著流形變化的有意義特徵。
Tangent Vectors
對 Jacobian matrix 做 SVD 分解後,取最大幾個奇異值對應的向量,這些向量就是流形的切線方向 (tangent vectors)。
- 這些向量代表資料在流形上變化的主要方向。
- 可以用來分析資料的結構,或作為下游任務的特徵。
- 例如,在人臉資料中,tangent vectors 可能對應到不同的表情、角度等變化。
Tangent Propagation
既然我們已經抓到了這些 Tangent Vectors, $v$,我們可以用它來訓練一個更強的分類器(Classifier)。這就是 Tangent Prop 的核心思想。
$$\Omega[f] = \sum_{i,j} \nabla_{\mathbf{x}} f(\mathbf{x}^{(i)})^T \mathbf{v}^{(i,j)}$$
- $\nabla_{\mathbf{x}} f(\mathbf{x}^{(i)})$:
- 這是分類器對輸入 $\mathbf{x}^{(i)}$ 的梯度,表示當輸入改變時,分類器的輸出會如何變化。
- $\mathbf{v}^{(i,j)}$:
- 這是第 $i$ 個資料點的第 $j$ 個切線向量,代表資料在流形上的一個重要變化方向。
- 內積 $\nabla_{\mathbf{x}} f(\mathbf{x}^{(i)})^T \mathbf{v}^{(i,j)}$:
- 這個內積衡量了分類器在切線方向上的敏感度。我們希望這個值越小越好,表示分類器對流形上的變化不敏感。
Autoencoder 的 Decoder 當作 Data Generator
- 同個 $c$ 輸出一樣的東西
- 生成的圖片會很模糊
- 因為 MSE 損失函數會導致平均化效果
Generative Adversarial Networks (GANs)
Cost Function
$$
\begin{aligned}
& \argmin_{\Theta_g} \argmax_{\Theta_f} \mathbf{}{C}(\Theta_g, \Theta_f) \newline
&= \argmin_{\Theta_g} \argmax_{\Theta_f} \sum_{n} \log f(x^{(n)}) + \sum_{m} \log (1 - f(g(c^{(m)}))) \newline
&= \argmin_{\Theta_g} \argmax_{\Theta_f} \sum_{n} \log \rho^{(n)} + \sum_{m} \log (1 - \rho ^ {(m)}) \newline
\end{aligned}
$$
- $\rho^{(n)} depends$ on $\Theta_f$
- $\rho^{(m)}$ depends on $\Theta_g$ and $\Theta_f$
Training
- 重複 $K$ 次更新 Discriminator (D) (固定 Generator (G))
- Sample $N$ 真實資料 ${x^{(n)}}$ 和 N codes from $c \sim \mathcal{N}(0, I)$
- $\Theta_f \leftarrow \Theta_f + \eta \nabla_{\Theta_f} C(\Theta_g, \Theta_f)$
- 更新一次 Generator (G) (固定 Discriminator (D))
- Sample $N$ codes from $c \sim \mathcal{N}(0, I)$
- $\Theta_g \leftarrow \Theta_g - \eta \nabla_{\Theta_g} C(\Theta_g, \Theta_f)$
- 限制 $K$,
- 不然 $f$ 會 overfit data 而導致 $g$ 無法學習
Challenges
- 不一定會 Converge
Mode Collapsing
當 $K$ 很小時,SGD 分不出 $min_{Θ_g} max_{Θ_f}$ 和 $max_{Θ_f} min_{Θ_g}$,$g$ 每次都會把 code map 到 $f$ 容易分辨的點,導致生成的資料缺乏多樣性。
- Minibatch Discrimination
- 在 Discriminator 中加入 Minibatch 資訊,讓 $f$ 可以比較同一批次的多個樣本,避免 $g$ 每次都生成相似的樣本。
- Unrolled GANs
- 在更新 Generator 時,模擬多步的 Discriminator 更新,讓 Generator 能更好地適應 Discriminator 的變化。
Balance between G and D
$K$ 的選擇很重要,影響訓練的穩定性和效果
- $K$ 太大
- $f$ 會過度擬合,導致 $g$ 無法學習
- Vanishing Gradient
- $K$ 太小
- $f$ 無法有效區分真實和生成的資料,導致 $g$ 無法學習
- $K$ 太大
GAN from Information Theory Perspective
- 把 $P_{data}$ 和 $P_{g}$ 當作兩個分布
- 目標是找到 $\argmin_{\Theta_g} D_{KL}(P_{data} || P_{g})$,使得兩個分布越接近越好
GAN:
$$
\argmin_{\Theta_g} \argmax_{\Theta_f} \sum_{n} \log f(x^{(n)}) + \sum_{m} \log (1 - f(g(c^{(m)})))
$$
其中 max 的部分可以看成在算 Jensen-Shannon Divergence:
$$
D_{JS}(P_{data} || P_{g}) = \frac{1}{2} D_{KL}(P_{data} || M) + \frac{1}{2} D_{KL}(P_{g} || M)
$$
其中 $M = \frac{1}{2}(P_{data} + P_{g})$。剛剛的 max 變成
$$
\argmin_{\Theta_g} -2log(2) + 2 D_{JS}(P_{data} || P_{g})
$$
Wasserstein GAN (WGAN)
$$
W(P_{data}, P_{g}) = \inf_{\gamma \in \Pi(P_{data}, P_{g})} \mathbb{E}_{(x,y) \sim \gamma} [||x - y||]
$$