GAN的發明者Ian Goodfellow2016年在Open AI任職期間發表了這篇論文,其中提到了GAN用於半監督學習(semi supervised)的方法。稱爲SSGAN。
作者給出了Theano+Lasagne實現。本文結合源碼對這種方法的推導和實現進行講解。1
考慮一個分類問題。
如果訓練集中大部分樣本沒有標記類別,只有少部分樣本有標記。則需要用半監督學習(semi-supervised)方法來訓練一個分類器。
wiki上的這張圖很好地說明了無標記樣本在半監督學習中發揮作用:
如果只考慮有標記樣本(黑白點),純粹使用監督學習。則得到垂直的分類面。
考慮了無標記樣本(灰色點)之後,我們對樣本的整體分佈有了進一步認識,能夠得到新的、更準確的分類面。
在半監督學習中運用GAN的邏輯如下。
舉個通俗的例子:就算沒人教認字,多練練分辨「是不是字」也對認字有好處。有粗糙的反饋,也比沒有反饋強。
GAN中的兩個核心模塊是生成器(Generator)和鑑別器(Discriminator)。這裏用分類器(Classifier)代替了鑑別器。
訓練集中包含有標籤樣本xlxl和無標籤樣本xuxu。
生成器從隨機噪聲生成僞樣本IfIf。
分類器接受樣本II,對於KK類分類問題,輸出K+1K+1維估計ll,再經過softmax函數得到概率pp:其前KK維對應原有KK個類,最後一維對應「僞樣本」類。
pp的最大值位置對應爲估計標籤yy。
softmax(xi)=exp(xi)∑jexp(xj)softmax(xi)=exp(xi)∑jexp(xj)
整個系統涉及三種誤差。
對於訓練集中的有標籤樣本,考察估計的標籤是否正確。即,計算分類爲相應的概率:
對於訓練集中的無標籤樣本,考察是否估計爲「真」。即,計算不估計爲K+1K+1類的概率:
對於生成器產生的僞樣本,考察是否估計爲「僞」。即,計算估計爲K+1K+1類的概率:
考慮softmax函數的一個特性:
期望號略去不寫,利用explK+1=1,explK+1=1,後兩種代價變爲:
上述推導可以讓我們省去lK+1lK+1,讓分類器仍然輸出K維的估計ll。
對於第一個代價,由於分類器輸入必定來自前K類,所以可以直接使用ll的前K維:
引入兩個函數,使得書寫更爲簡潔:
LSE(x)=ln[∑j=1expxj]LSE(x)=ln[∑j=1expxj]softplus(x)=ln(1+expx)softplus(x)=ln(1+expx)
三個誤差:
對於分類器來說,希望上述誤差儘量小。引入權重ww,得到分類器優化目標:
對於生成器來說,希望其輸出的僞樣本能夠騙過分類器。生成器優化目標與分類器的第三項相反: