這兩天事情比較少,這裏再分享一個簡單好用的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
我們先明確一下符號標記表示數據,表示數據的屬性標籤,表示數據的標籤。
在之前的幾篇博客中,我們反覆提到了直接屬性預測(DAP)這一經典的ZSL方法,今天我們還是用它來引出SAE。DAP先用訓練多個學習器預測,在測試階段,用訓練好的學習器預測測試樣本,再對着屬性表進行近鄰搜索確定標籤。
DAP存在着一些缺點,如沒有辦法克服域偏移的問題,訓練很多學習器也是一件費時的事。
那麼我們爲什麼不直接預測所有的屬性呢?這是因爲如果直接用1個網絡同時預測所有的屬性,會造成該網絡學習得到已知類別屬性的固有模式,而不具體的細分屬性,這樣一來,使用屬性嵌入的意義就不大了,還是沒有辦法預測未知類別。
Semantic autoencoder(SAE)則爲我們提供了另一種思路,它在普通的自編碼網絡上加上了一個約束,這個約束使得編碼後得到的屬性包含了更多數據樣本本身的特點,從而使得模型可以識別未知類別
二、Approach
我們先來看一下普通的自編碼器模型
這一模型很好理解,即經過兩次映射和後輸出本身,即通過一次映射編碼,第二次映射解碼
我們再來看一下SAE的自編碼模型
相比於普通的自編碼器,SAE做出了兩點變化,一是要求=,這是爲了方便後面的優化求解,二是增加了線性約束,即
該模型可以圖解如下:
仔細研究該模型,可以發現,SAE其實要求所求得的具有兩重性質
- 在經過映射之後可以通過還原,即還包含 的所有信息
- 應當儘可能的逼近
這兩條性質,使得映射後得到的具有較好的類別區分性質,這是普通的自編碼器做不到的。
該模型的求解也十分簡單,通過拉格朗日乘子法,並求導可以但模型轉化爲Sylvester等式的形式
其中, ,
該等式可以通過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
四、資源下載
微信搜索“老和山算法指南”獲取更多下載鏈接與技術交流羣
有問題可以私信博主,點贊關注的一般都會回覆,一起努力,謝謝支持。