DeepLearning | Semantic Autoencoder for Zero Shot Learning 零樣本學習 (論文、算法、數據集、代碼)

這兩天事情比較少,這裏再分享一個簡單好用的ZSL算法
Semantic Autoencoder for Zero Shot Learning
之前也寫過幾篇博客簡單描述了幾種基本的ZSL算法
DeepLearning | Relational Knowledge Transfer for Zero Shot Learning(論文、算法、數據集、代碼)
DeepLearning | Zero Shot Learning 零樣本學習(擴展內容、模型、數據集)
DeepLearning | Zero Shot Learning 零樣本學習
這篇博客會描述SAE方法的思想和理論解釋,在文章的最後會給出算法復現的python代碼

一、 Introduction

我們先明確一下符號標記XX表示數據,SS表示數據的屬性標籤,YY表示數據的標籤。

在之前的幾篇博客中,我們反覆提到了直接屬性預測(DAP)這一經典的ZSL方法,今天我們還是用它來引出SAE。DAP先用XX訓練多個學習器預測SS,在測試階段,用訓練好的學習器預測測試樣本,再對着屬性表進行近鄰搜索確定標籤YY

DAP存在着一些缺點,如沒有辦法克服域偏移的問題,訓練很多學習器也是一件費時的事。
那麼我們爲什麼不直接預測所有的屬性呢?這是因爲如果直接用1個網絡同時預測所有的屬性,會造成該網絡學習得到已知類別屬性的固有模式,而不具體的細分屬性,這樣一來,使用屬性嵌入的意義就不大了,還是沒有辦法預測未知類別。

Semantic autoencoder(SAE)則爲我們提供了另一種思路,它在普通的自編碼網絡上加上了一個約束,這個約束使得編碼後得到的屬性包含了更多數據樣本本身的特點,從而使得模型可以識別未知類別

二、Approach

我們先來看一下普通的自編碼器模型

minW,WXWWX2min_{W^{*},W}\left \| X- W^{*}WX\right \|^{2}

這一模型很好理解,即XX經過兩次映射WWWW^{*}後輸出XX本身,即通過一次映射WW編碼,第二次映射WW^{*}解碼

我們再來看一下SAE的自編碼模型

minWXWTWX2min_{W}\left \| X- W^{T}WX\right \|^{2}
s.t.WX=Ss.t. WX=S

相比於普通的自編碼器,SAE做出了兩點變化,一是要求WW^{*}=WTW^{T},這是爲了方便後面的優化求解,二是增加了線性約束,即 s.t.WX=Ss.t. WX=S

該模型可以圖解如下:
在這裏插入圖片描述
仔細研究該模型,可以發現,SAE其實要求所求得的WW具有兩重性質

  1. XX在經過WW映射之後可以通過WTW^{T}還原,即WXWX還包含 XX的所有信息
  2. WXWX應當儘可能的逼近SS

這兩條性質,使得映射後得到的WXWX具有較好的類別區分性質,這是普通的自編碼器做不到的。
該模型的求解也十分簡單,通過拉格朗日乘子法,並求導可以但模型轉化爲Sylvester等式的形式

AW+WB=CAW+WB=C

其中A=SSTA=SS^{T}, B=λXXTB=\lambda XX^{T}, C=(1+λ)SXTC=(1+\lambda)SX^{T}

該等式可以通過python 庫裏的Sylvester求解器直接求解, 要注意,SAE最後用於判斷屬性和類別遠近的距離是cos距離而不是歐式距離,這會很大程度上影響模型精度

三、算法復現

AwA2的數據鏈接在這裏:DeepLearning | AWA2 圖像數據集預處理
AwA和其他數據鏈接在這裏:https://blog.csdn.net/qq_38451119/article/details/81624468
python源代碼在這裏:https://github.com/LiangjunFeng/Implement-of-ZSL-algorithms

四、資源下載

微信搜索“老和山算法指南”獲取更多下載鏈接與技術交流羣
在這裏插入圖片描述
有問題可以私信博主,點贊關注的一般都會回覆,一起努力,謝謝支持。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章