半監督深度學習


文章首發:xmoon.info

半監督學習

  • 在有標簽數據+無標簽數據混合成的訓練數據中使用的機器學習算法。一般假設,無標簽數據比有標簽數據多,甚至多得多。

  • 要求

    • 無標簽數據一般是有標簽數據中的某一個類別的(不要不屬於的,也不要屬於多個類別的);
    • 有標簽數據的標簽應該都是對的;
    • 無標簽數據一般是類別平衡的(即每一類的樣本數差不多);
    • 無標簽數據的分布應該和有標簽的相同或類似 。
  • 半監督學習算法

    • 簡單自訓練(simple self-training):用有標簽數據訓練一個分類器,然后用這個分類器對無標簽數據進行分類,這樣就會產生偽標簽(pseudo label)或軟標簽(soft label),挑選你認為分類正確的無標簽樣本(此處應該有一個挑選准則),把選出來的無標簽樣本用來訓練分類器

    • 協同訓練(co-training):是 self-training 的一種,但其思想是好的。假設每個數據可以從不同的角度(view)進行分類,不同角度可以訓練出不同的分類器,然后用這些從不同角度訓練出來的分類器對無標簽樣本進行分類,再選出認為可信的無標簽樣本加入訓練集中。由於這些分類器從不同角度訓練出來的,可以形成一種互補,而提高分類精度;就如同從不同角度可以更好地理解事物一樣。

    • 半監督字典學習:是 self-training 的一種,先是用有標簽數據作為字典,對無標簽數據進行分類,挑選出認為分類正確的無標簽樣本,加入字典中(此時的字典就變成了半監督字典了)

    • 標簽傳播算法(Label Propagation Algorithm):是一種基於圖的半監督算法,通過構造圖結構(數據點為頂點,點之間的相似性為邊)來尋找訓練數據中有標簽數據和無標簽數據的關系。只是訓練數據中,這是一種直推式的半監督算法,即只對訓練集中的無標簽數據進行分類,這其實感覺很像一個有監督分類算法...,但其實並不是,因為其標簽傳播的過程,會流經無標簽數據,即有些無標簽數據的標簽的信息,是從另一些無標簽數據中流過來的,這就用到了無標簽數據之間的聯系

    • 半監督支持向量機:監督支持向量機是利用了結構風險最小化來分類的,半監督支持向量機還用上了無標簽數據的空間分布信息,即決策超平面應該與無標簽數據的分布一致(應該經過無標簽數據密度低的地方)(這其實是一種假設,不滿足的話這種無標簽數據的空間分布信息會誤導決策超平面,導致性能比只用有標簽數據時還差)

  • 半監督學習分類

    • 純(pure)半監督學習:假定訓練數據中的未標記樣本並非待測的數據
    • 直推學習:假定學習過程中所考慮的未標記樣本恰是待預測數據,學習的目的就是在這些未標記樣本上獲得最優泛化性能

半監督深度學習

  • 半監督深度學習算法

    • 無標簽數據預訓練網絡后有標簽數據微調(fine-tune);
    • 有標簽數據訓練網絡,利用從網絡中得到的深度特征來做半監督算法;
    • 讓網絡 work in semi-supervised fashion。
  • 對於神經網絡來說,一個好的初始化可以使得結果更穩定,迭代次數更少。目前我見過的初始化方式有兩種:

    • 無監督預訓練:用所有訓練數據訓練自動編碼器(AutoEncoder),然后把自編碼網絡的參數作為初始參數,用有標簽數據微調網絡(驗證集)。
    • 偽有監督預訓練:通過半監督算法或聚類算法等方式,給無標簽數據附上偽標簽信息,先用這些偽標簽信息來預訓練網絡,然后再用有標簽數據來微調網絡(驗證集)。
  • 有標簽數據提取特征的半監督學習

  1. 先用有標簽數據訓練網絡(此時網絡一般過擬合...)
  2. 通過隱藏層提取特征,以這些特征來用某種分類算法對無標簽數據進行分類
  3. 挑選認為分類正確的無標簽數據加入到訓練集
  4. 重復上述過程
  • 網絡本身的半監督學習(端到端的半監督深度模型

    • ICML 2013 的文章Pseudo-Label : The Simple and Efficient Semi-Supervised Learning Method for Deep Neural Networks:該文章簡單的說就是在偽標簽學習中使用深度學習網絡作為分類器,就是把網絡對無標簽數據的預測,作為無簽數據的偽標簽(Pseudo label),用來對網絡進行訓練。方法雖然簡單,但是效果很好,比單純用有標簽數據有不少的提升

    • 其主要的貢獻在於損失函數的構造:

      \[L=\sum_{m=1}^n\sum_{i=1}^C L(y_i^m, f_i^m)+\alpha(t)\sum_{m=1}^{n^\prime}\sum_{i=1}^CL({y^\prime}_i^m, {f^\prime}_i^m) \]

      損失函數的第一項是有標簽數據的損失,第二項是無標簽數據的損失
      在無標簽數據的損失中, \(y'\)為無標簽數據預測得到的偽標簽,是直接取網絡對無標簽數據的預測的最大值為標簽。
      其中 \(\alpha (t)\)決定着無標簽數據的代價在網絡更新的作用,選擇合適的 \(\alpha (t)\) 很重要,太大性能退化,太小提升有限。
      在網絡初始時,網絡的預測時不太准確的,因此生成的偽標簽的准確性也不高。
      在初始訓練時, \(\alpha (t)\) 要設為 0,然后再慢慢增加,論文中給出其增長函數。

    • Semi-Supervised Learning with Ladder Networks

      ladderNet 是有監督算法和無監督算法的有機結合。前面提及到的無監督預訓練+有監督微調的思想中所有監督和無監督是分開的,兩個階段的訓練相互獨立,並不能稱之為真正的半監督學習。

      無監督學習是用重構樣本進行訓練,其編碼(學習特征)的目的是盡可能地保留原始數據的信息;而有監督學習是用於分類,希望只保留其本質特征,去除不必要的特征。

      舉例來說:分類任務判斷一張人臉圖片是單眼皮,還是雙眼皮;那么有監督學習經過訓練完畢后,就會盡可能的把與這個分類任務無關的信息過濾掉,過濾的越好,那么分類的精度將會更高。
      比如一個人的嘴巴、鼻子信息這些都是與這個分類任務無關的,那么就要盡量的過濾掉,因此,基於這個原因以至於一直以來有監督學習和無監督學習不能很好的兼容在一起。
      ladderNet 成功的原因在於損失函數和 skip connection 。通過在每層的編碼器和解碼器之間添加跳躍連接(skip connection),減輕模型較高層表示細節的壓力,使得無監督學習和有監督學習能結合在一起,並在最高層添加分類器。

      \[Cost=-\sum_{n=1}^NlogP(\hat{y}(n)=y^*(n)\mid x(n))+\sum_{n=N+1}^M\lambda_l ReconsructionCost({z^{(l)}}_{(n)},{\hat{z}^{(l)}}_{(n)}) \]

      損失函數的第一項是有標簽樣本數據的交叉熵損失函數,第二項是無監督各層噪聲解碼器重構誤差歐式損失函數

參考


免責聲明!

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



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