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

四、资源下载

微信搜索“老和山算法指南”获取更多下载链接与技术交流群
在这里插入图片描述
有问题可以私信博主,点赞关注的一般都会回复,一起努力,谢谢支持。

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