天天看點

遷移學習論文(一):Domain Separation Networks論文原理及複現工作前言原理闡述總結

目錄

  • 前言
  • 原理闡述
    • 文章介紹
    • 模型結構
      • 私有特征提取器
      • 共享特征提取器
      • similarity loss
      • difference loss
      • 解碼器
      • 标簽分類器
      • 總損失函數
  • 總結

前言

  • 本文屬于我遷移學習專欄裡的一篇,該專欄用于記錄本人研究所學生階段相關遷移學習論文的原理闡述以及複現工作。
  • 本專欄的文章主要内容為解釋原理,論文具體的翻譯及複現代碼在文章的github中。

原理闡述

文章介紹

  • 這篇文章于2016年發表在NIPS會議,作者是來自谷歌的研究人員。
  • 這篇文章開篇點出,目前領域自适應的研究主要着眼于以下兩個方向:1.将不同域的資料映射到同一個域,進而使得源域和目标域盡可能的相近。2.不同域,但不采用映射到同一域的方法,而是提取兩者之間域不變的特征,兩個域之間總有相同的特征,不然何談遷移,要做的就是提取到域不變的特征用這些特征進行預測,進而得到同時适用于兩個域的預測模型。簡而言之,上面兩種方法分别是映射到同一域和提取域不變特征。
  • 然而作者從另一個角度考慮問題,他先是說到了負遷移,他認為每個領域都有域不變的特征和獨有的特征(共享和私有特征),而倘若試圖利用私有特征進行預測則會适得其反,造成負遷移,反之,隻有使用共享特征才能達到遷移學習的目标。也就是說有些私有特征甯可不用,這個地方我埋個伏筆,作者竟然提取了兩個域各自的私有特征并作為一個loss(differ-loss),思路非常清奇。
  • 上面的介紹大家大體看一下就可以,很多疑惑不要緊,看下面的模型結構就能了解的更深入一些。

模型結構

  • DSN的模型是這樣的:
    遷移學習論文(一):Domain Separation Networks論文原理及複現工作前言原理闡述總結

私有特征提取器

  • 上圖中的Private Source/Target Encoder是源域和目标域資料的私有特征提取器,用于提取各自的私有特征,是以每個提取器的參數是不共享的。
  • 兩個私有特征提取器内部結構是一樣的,由多個卷積層提取特征,然後flatten一下,得到圖中的 h p t 、 h p s h^{t}_{p}、h^{s}_{p} hpt​、hps​。
  • 具體結構可以參考下述代碼:
# private target encoder
        self.private_target_encoder=nn.Sequential(
            nn.Conv2d(3,32,5),
            nn.MaxPool2d(2,2),
            nn.ReLU(),
            nn.Conv2d(32,64,5),
            nn.MaxPool2d(2,2),
            nn.ReLU(),
            Flatten2(),
            nn.Linear(64*4*4,100)
        )
           

共享特征提取器

  • 上圖中的Shared Encoder是共享特征提取器,用于提取源域資料和目标域資料的公有特征。由于是公有特征,是以自然參數是共享的。
  • 相關結構如代碼所示:
# source and target shared encoder
        self.shared_encoder=nn.Sequential(
            nn.Conv2d(3,32,5),
            nn.MaxPool2d(2,2),
            nn.ReLU(),
            nn.Conv2d(32,64,5),
            nn.MaxPool2d(2,2),
            nn.ReLU(),
            Flatten2(),
            nn.Linear(64*4*4,100)
        )
           

similarity loss

  • similarity loss用于衡量源域資料和目标域資料經過Shared Encoder到的公有特征的相似度,衡量方法是将兩個域的feature map放入到梯度翻轉層然後輸入到全連接配接層進行域分類,共分為兩類,源域資料類标簽為1,目标域資料類标簽為0。誤差使用交叉熵(CrossEntropyLoss)。
    遷移學習論文(一):Domain Separation Networks論文原理及複現工作前言原理闡述總結
  • 倘若提取到了有力的公有特征,那麼域分類器的loss會很大。然而由于梯度翻轉層的存在使得反向傳播試圖降低誤差進而無法提取到有力的公有特征時對于特征提取層(即公有特征提取器)起到反作用,進而抑制誤差降低,進而有利于提取公有特征。
  • 這部分結構其實就是DANN中的全局域分類器。
  • 代碼示例如下:
# domain predictor
        self.domain_predictor=nn.Sequential(
            nn.Linear(100, 100),
            nn.ReLU(),
            nn.Linear(100, 2)
        )
		# similar loss 其實就是域損失,因為倘若足夠相似,域損失很小的。
        Reverse_X_src=ReverseLayerF.apply(shared_src,alpha)
        Reverse_X_tar=ReverseLayerF.apply(shared_tar,alpha)

        domain_src=torch.ones(len(Reverse_X_src)).long().to(self.device)
        domain_tar=torch.zeros(len(Reverse_X_tar)).long().to(self.device)

        result_X_src=self.domain_predictor(Reverse_X_src)
        result_X_tar=self.domain_predictor(Reverse_X_tar)

        loss_similar=nn.CrossEntropyLoss()(result_X_src,domain_src)+nn.CrossEntropyLoss()(result_X_tar,domain_tar)

           

difference loss

  • difference loss使用的是squared Frobenius norm來計算,關于這個,網上有說這就是L2範數的平方。
    遷移學習論文(一):Domain Separation Networks論文原理及複現工作前言原理闡述總結
    H c s 和 H p s H^s_{c}和H^s_{p} Hcs​和Hps​就是 多 個 樣 本 的 h c s 和 h p s 多個樣本的h^s_{c}和h^s_{p} 多個樣本的hcs​和hps​,每一行是一個樣本的 h c s 和 h p s h^s_{c}和h^s_{p} hcs​和hps​。

解碼器

  • shared decoder是這個模型的重點結構,它将源域和目标域的私有及共享特征整合到一起,然後進行上采樣得到和樣本尺寸一樣的矩陣 X ′ X' X′,即根據特征還原了樣本,然後通過計算 scale-invariant mean squared error得到Loss-rec。這個損失與MSE有差別:
    遷移學習論文(一):Domain Separation Networks論文原理及複現工作前言原理闡述總結
    ∣ ∣ x − x ′ ∣ ∣ 2 2 ||x-x'||^2_{2} ∣∣x−x′∣∣22​是L2正則化的平方。即:
    遷移學習論文(一):Domain Separation Networks論文原理及複現工作前言原理闡述總結
    關于這個損失大家可以移步:https://www.cnblogs.com/MTandHJ/p/14381010.html
  • 至于作者為什麼用這個損失,原文是這麼說的,均方誤差損失(MSE)傳統上用于重建任務,但是對于縮放項下正确的預測它都會進行懲罰,這個是可以了解的,因為MSE要求“一字不差”,而我們事實上隻要比例上特征是正确的,數值上有所差距是可以容忍的。而scale-invariant mean squared error會懲罰成對像素之間的差異,這樣就隻會懲罰整體形狀的差異,而不會在輸入的絕對顔色或強度上花費模組化能力,這樣就不顯得那麼死闆。作者說的其實是比較好了解的。
  • loss:
    遷移學習論文(一):Domain Separation Networks論文原理及複現工作前言原理闡述總結

标簽分類器

  • 這個就不多說了。
    遷移學習論文(一):Domain Separation Networks論文原理及複現工作前言原理闡述總結

總損失函數

  • 見下圖:
    遷移學習論文(一):Domain Separation Networks論文原理及複現工作前言原理闡述總結
    作者并沒有給出權重參數 α β γ αβγ αβγ的推薦值。

總結

  • 在測試的時候,測試資料經過共享編碼層,然後使用标簽分類器進行分類。由此可見影響分類精度的主要就是共享編碼層和标簽分類層的參數。标簽分類層相對獨立,主要由分類損失來調整參數。而共享編碼層的similarity loss是可以了解的,用于生成相似的源域和目标域特征,但是共享編碼層的參數同樣受loss_rec影響,這個重構損失有點讓人摸不着頭腦,作者非得讓私有特征和公有特征分開,然後重構損失是為了讓分開的私有特征和公有特征合在一起是可以盡可能的複原樣本的,這樣是為了讓私有特征和公有特征不重複,是彼此獨立的,difference loss也是這個目的,作者的目的就是單獨提取出共有和私有特征,隻依靠公有特征來進行域适應,哇哦,感覺作者對于自己的理論是相當自信的,也就是說他堅持認為隻有一部分特征是具有域不變性的,我們隻需要用這部分進行域适應,而作者也是這麼履行的,他不惜使用loss-rec和difference loss來将這部分特征提取出來,與不能參數域适應的特征劃清界限。很佩服作者的想象力,不管效果如何,我覺得這種能力十分可貴。

繼續閱讀