[論文理解] Good Semi-supervised Learning That Requires a Bad GAN


Good Semi-supervised Learning That Requires a Bad GAN

恢復博客更新,最近沒那么忙了,記錄一下學習。

Intro

本文是一篇稍微偏理論的半監督學習的文章,通過證明一個能夠生成非目標分布的、低樣本密度的樣本的生成器,對半監督學習的效果有很大的提升,這樣的生成器作者稱之為Complement Generator,而提升的原因是生成的bad樣本填充了特征空間的低密度區域,從而使得分類的分類面在低密度區域,從而避免了分類面穿過流形的情況,因而能夠提升分類的精度。為了得到這樣的生成器,首先利用最大熵使得生成器的熵最大,一方面最大熵可以防止mode collapse,第二方面可以增加生成樣本的豐富度,從而保證生成器能夠生成低密度區域的樣本;然后,利用pixel cnn來估計生成樣本的概率密度,懲罰過於接近流形的生成器生成的樣本。

參考了官方的代碼,復現了一下本文的算法。

Theoretical Analysis

GAN-Based Semi-Supervised Learning

GAN-Based半監督學習一般采用K+1分類的方式來訓練,與傳統的兩分類的GAN不同的是,用於半監督學習的GAN前K個類別負責預測具體類別,最后一個(K+1)負責預測true or fake。

因此,對於有標簽的樣本,我們大可將其分為前K類中的一類,對於無標簽的樣本,我們認為它們是真實樣本,因此可以將前K個類別的和和第K+1類看成是二分類問題,對於生成的fake樣本同理。

因此,GAN-Based半監督學習的Loss一般為:

\[\max_D \mathbb{E}_{x,y \backsim \ell} \log P_D(y|x,y\le K) + \mathbb{E}_{x \backsim p} \log P_D(y\leq K|x) + \mathbb{E}_{x \backsim p_G} \log P_D(K+1|x) \]

其中\(\ell\) 代表有標簽的數據,\(p\)代表無標簽的數據,\(p_G\)代表生成器生成的數據。

而“Improved techniques for training gans”中則提到,可以將第K+1類的權重設為0,這樣可以減少全連接的參數,事實上,這樣會讓第K+1類的概率的分子項變為常值1,仍然滿足K+1個類別的和為1.所以與原來K+1分類是等價的。

這里我記得代碼里還有個trick是,計算log softmax可以減去一個值防止上溢,即:

\[Softmax(x_i) = \frac{exp(x_i)}{\sum exp(x_j)} \\ LogSoftmax(x_i) = Log \frac{exp(x_i - c + c)}{\sum exp(x_j - c + c)} \\ = Log \frac{exp(x_i - c)}{\sum exp(x_j - c)} \cdot \frac{exp(c)}{exp(c)} \\ = Log \frac{exp(x_i - c)}{\sum exp(x_j - c)} \\ = (x_i - c) - Log \sum exp(x_j - c) \]

Perfect Generator

一個完美的生成器,當然是生成圖像的概率分布\(p_G\)和真實圖像的概率分布\(p\)完全一致,即\(p_G = p\),此時作者給出了命題1:

Proposition 1

如果一個生成器是Perfect Generator,並且D有infinite capacity,那么對其實下式Loss的任意一個最優解D,都可以找到上面的Loss的最優解\(D^*\),使得\(P_D(y|x,y \le K) = P_{D^*}(y|x,y \leq K)\)。而下式的Loss則完全只包含分類的Loss,因此當生成器很完美的時候,很容易退化為下面的Loss,則相當於只做了有監督部分,而無標簽的數據並沒有得到充分利用。

\[\max_D \mathbb{E}_{x,y \backsim \ell} \log P_D(y|x, y \le K) \]

命題1的證明也很簡單:

可以看出來,我們要讓\(J_D\)取得最大值,所以要同時使得\(L_D\)和后面那一項最大,而后面那一項取得最大值的結果就是\(P_D(K+1|x) = \frac{1}{2}\),然后根據(6),是可以找到這樣一組解的。因此證明了可以得到一組解,可以使得只用有監督部分的Loss和兩者都用的Loss一樣,從而證明了其實存在局部解可以使半監督部分失去意義。

Complement Generator

假定映射\(f\)可以將輸入空間映射到特征空間,令\(p_k(f)\)表示第k類樣本在特征空間的概率密度,給定一個閾值\(\epsilon_k\),令\(F_k = {f:p_k(f) > \epsilon_k}\),並且假定給定\(\{\epsilon_k\}_{k=1}^{K}\)\(F_k\)之間都有一個margin,這就可以理解為,可以找到一組\(\epsilon\)使得任意兩個分類面的流形完全分開,分開的距離是一個margin,當然,最好的情況就是\(\epsilon\)足夠小,這樣才能保證泛化性能。那么Complement Generator做的就是生成這些流形之外的樣本,也就是流形與流形之間的樣本。

以一維為例,則就是下圖所示的樣子了:

Assumption 1. Convergence conditions.

\(D\)收斂之后,認為\(D\)能夠學習到一個很好的分類面使得所有的訓練的不同類別樣本都可以分開,也就是說,必須滿足以下三個條件:

  1. 對於任意的\((x,y) \in \ell\)均有\(w^T_yf(x) > w_k^Tf(x)\)成立,k表示其他類別(\(k \neq y\))
  2. 對於任意的\(x \in \mathcal{G}\),均有\(\max_{k=1}^Kw_k^Tf(x)<0\)成立
  3. 對於任意的\(x\in \mathcal{U}\),均有\(\max_{k=1}^Kw_k^Tf(x) > 0\)成立

由此,提出引理1

Lemma 1

假設對於所有的k,都有\(||w_k||_2 \leq C\),假設存在一\(\epsilon >0\),使得對於任意的\(f_G \in F_G\),存在一\(f'_G \in \mathcal{G}\)使得\(||f_G - f_G'||_2 \leq \epsilon\), 根據假設1,則有對任意\(k \leq K\),都有\(w_k^T < C\epsilon\)

證明比較簡單:

因此可以得到下面的推論

Corollary 1

如果能夠生成無窮的樣本,則有\(\lim_{|\mathcal{G}| \to \infty}w_k^Tf_G <0\)

Proposition 2

在引理1的條件下,對於任意類別\(k \leq K\),對於任意特征空間中的點\(f_k \in F_k\),都有\(w_k^T f_k > w_j^Tf_k\)成立,其中\(j \neq k\)

可以用反證法來證明,如果假設\(w_k^T f_k \leq w_j^Tf_j\),那么一定存在一個\(\alpha\),得到一個特征空間中的點\(f_G = \alpha w^T_kf_k + (1 - \alpha)w^T_j f_j\)在流形之外,則有\(w_j^Tf_G \leq 0\),而\(w_k^Tf_k >0\)並且\(w_j^Tf_j>0\)矛盾了。

事實上,如果生成的樣本把流形之外的空間填充的足夠好,這樣相當於強行讓分類面落在流形的邊界處,從而避免了分類面穿過流形的情況。

Case Study on Synthetic Data

上面都是偏理論的分析,然后作者以簡單的demo來淺顯的說明上述觀點的可行性。

以如圖所示的2D demo為例,fig 1中每種顏色代表一種流形,點代表有標簽的數據。

fig 2 是 Complement Generator生成的樣本點去分類之后的分類面,可以看出無論是真假樣本分類還是具體類別的分類,分類面都比較完美。

fig 3是特征空間的demo 可視化,是以fig 1中第二個圖為例展示的,可以看出生成的樣本基本都在流形之間,並且可以找到最佳的分類面,也就是藍色的線,將流形分開。

fig 4 是直接使用feature matching方式生成樣本的結果,可以看到大多數樣本其實都生成在來流形內部,右邊的分類面也不完美,因此傳統的feature matching方法是存在很大的問題的。

Approach

為了得到這樣的生成器,本文依據feature matching GAN的不足,提出以下幾點改進:

  1. 使用最大熵防止collapse,並且生成流形之外的樣本
  2. 估計生成樣本的概率並將生成的太接近流形的樣本去掉

對於最大熵,本文提出兩種方式實現,

第一種是通過變分推斷的方式,由於生成器的熵的負值具有變分上界,即\(-\mathcal{H}(p_G(x)) \leq - \mathbb{E}_{x,z \backsim p_G}log q(z|x)\),通過限定高斯分布的方差范圍從而避免任意大方差分布,這樣就可以利用高斯分布的熵來達到最大化生成器熵的目的。

這樣做的原因是,由於生成器的熵很難求,生成器只能得到分布中采樣得到的樣本,無法得到概率分布,因此通過變分推斷來求解,引入變量z,\(p_G(z) = p_z(z)\),根據定義有\(\mathcal{H}(p_G(x)) = \mathcal{H}(p_G(z)) + \mathcal{H}(p_G(x|z))-\mathcal{H}(p_G(z|x))\),然后由於我們假定了z是服從高斯分布的,所以等式右邊第一項是不需要考慮,同時還有一個假設是\(p_G(x|z)\)也是服從高斯分布的,一般GAN的任務我們都認為\(p_G(x|z)\)是服從單點分布,當然也可以理解為方差極小的高斯分布,所以這一項的熵理論上也是一定值。因此只需要考慮右邊最后一項,所以很容易得到\(\mathcal{H}(p_G(x)) \geq -\mathcal{H}(p_G(z|x))\),從而很容易推出上式了。
於是又有一個假設,就是認為q也是服從高斯分布的,只不過均值和方差不是確定的,而是網絡學習得到的。這樣,z的分布是有公式可以得到的,q的分布也是有公式可以得到的,就可以帶入高斯分布的公式條件熵了。

第二種是通過使用pull-away term的輔助loss來實現,盡量讓生成的樣本之間的距離增大,從而增大生成器的熵。

為了保證生成樣本都在低密度區域,必須把生成樣本接近流形的點去掉。而去掉不會幫助生成器來優化生成的樣本,因此可以加懲罰項懲罰接近流形的樣本,繼而優化生成器。

\[\mathbb{E}_{x\backsim p_G logp(x)\mathbb{I}[p(x) > \epsilon]} \]

此外,文章對無標簽的數據加了個條件熵最小化的Loss,因為這類樣本沒有標簽,可能學習到一個對所有標簽均勻分布的結果,因此最小化標簽的熵,可以讓網絡D盡量將概率分布變為一個確定的分布,最確定的情況也就是熵最小的情況,就是某一類的概率為1,其他皆為0.

復現和實驗

參考官方的代碼,復現了一下MNIST上的結果,沒有加PT和PixelCNN,但是結果已經相當不錯了,僅僅幾個epoch,在每類只給5個樣本下的MNIST上就能達到95%的TOP1 ACC。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM