Zero Shot Learning | 零样本学习算法解析(数据与算法)

@零本学习(Zero Shot Learning)

前言

之前在看故障诊断论文中,偶尔看到了关于零样本学习(Zero Shot Learning)的内容,一直就对零样本学习这个主题很感兴趣。然而,一直对零样本的数据设置与相关算法感到一知半解,直到最近看到了Liangjun_Feng(CSDN)大佬的博客,结合Relational Knowledge Transfer for Zero-Shot Learning论文,以及Liangjun_Feng复现的代码,才算初探了零样本学习的门径。因此,发表这一篇CSDN博客。

零样本算法之我见

零样本学习的数据集

一般我们讲机器学习算法时不会特别强调数据集,但是对于零样本学习,我觉得有必要强调一下数据集,因为其中有许多概念,如果一开始搞不清楚,后面就都乱掉了。

对于零样本学习,每个类别都有对应的属性, 因此相比于传统的分类学习,零样本额外多出了一个属性矩阵。

以数据集AWA2为例, 它是动物分类的数据集, 共50种, 每一种动物的85种属性特征, 于是AWA2的属性矩阵维度是(50,85)\left(50,85\right)(50,85)。 AWA2的属性矩阵有离散值和连续值两种,在RTK实验中仅采用了连续的属性值。

在实验设置中, 训练集Xs,ys\boldsymbol{X}_s, \boldsymbol{y}_sXs,ys, 包含40个类, 共30337个样本; 测试集Xu,yu\boldsymbol{X}_u, \boldsymbol{y}_uXu,yu, 包含剩余的10个类, 共6985个样本, 其中s表示seen, u表示unseen。在零样本学习中, 很多情况下, 我们不会直接使用图片本身, 而是使用预训练的resnet101提取的2048维图片特征.

以AWA2为例对符号进行说明

代码公式维度
trainfeaturesXs\boldsymbol{X}_sXs (30337,2048)\ \left(30337, 2048\right) (30337,2048)
testfeaturesXu\boldsymbol{X}_uXu (6985,2048)\ \left(6985, 2048\right) (6985,2048)
trainlabelys\boldsymbol{y}_sys (30337,)\ \left(30337, \right) (30337,)
testlabelyu\boldsymbol{y}_uyu (6985,)\ \left(6985, \right) (6985,)
train−_{-}attributetableΦs\boldsymbol{\Phi}_{s}Φs (40,85)\ \left(40, 85\right) (40,85)
test−_{-}attributetableΦu\boldsymbol{\Phi}_{u}Φu (10,85)\ \left(10, 85\right) (10,85)
train−_{-}attributelabelAs\boldsymbol{A}_{s}As (30337,85)\ \left(30337, 85\right) (30337,85)

训练样本集对应的标记 ys\boldsymbol{y}_sys和属性标记As\boldsymbol{A}_{s}As是已知的As\boldsymbol{A}_{s}As的取值都来自于Φs\boldsymbol{\Phi}_{s}Φs。但在模型训练过程中我们连甚至连测试样本Xu\boldsymbol{X}_uXu的信息都不知道。

Remak: 标记用类别值即可不用OneHot编码。

零样本学习算法之基本想法

由于ys∩yu=∅\boldsymbol{y}_s\cap \boldsymbol{y}_u=\emptysetysyu=,因此无法建立一个从样本空间X\cal{X}X到标记空间Y\cal{Y}Y的映射。

但是属性矩阵A\boldsymbol{A}A是已知的,于是可以尝试建立一个从样本空间X\cal{X}X到属性空间A\cal{A}A的映射f:X→Af:\cal{X}\rightarrow\cal{A}f:XA。特别的是想要通过Xs\boldsymbol{X}_sXsAs\boldsymbol{A}_{s}As,建立出Xu\boldsymbol{X}_uXuΦu\boldsymbol{\Phi}_{u}Φu间的映射关系。这就回到了传统的回归算法和分类算法,通过训练集训练模型,并将模型应用至测试样本集。

Xu\boldsymbol{X}_uXu输入可以得到test_attributelabel Au\boldsymbol{A}_{u}Au的预测值A^u\hat{\boldsymbol{A}}_{u}A^u。对于一个测试样本xui\boldsymbol{x}_u^ixui,就可以得到其对应的属性预测值a^ui\hat{\boldsymbol{a}}_{u}^ia^ui, 将a^ui\hat{\boldsymbol{a}}_{u}^ia^ui与属性表Φu\boldsymbol{\Phi}_{u}Φu比照即可确定其标记值。(公式化)

Remark: 这里说建立出Xu\boldsymbol{X}_uXuΦu\boldsymbol{\Phi}_{u}Φu间的映射关系其实就是指 f:Xu↦A^uf:\boldsymbol{X}_u\mapsto\hat{\boldsymbol{A}}_{u}f:XuA^u,之所以没有这么写是因为建立映射之前A^u\hat{\boldsymbol{A}}_{u}A^u还没有;同时其真实值Au\boldsymbol{A}_{u}Au在训练过程中也是不知道(如果知道问题就没必要做了)。

一些经典的算法

Semantic Autoencoder for Zero-Shot Learning

该算法直接建立X\boldsymbol{X}XA\boldsymbol{A}A之间的线性映射关系

min⁡W∥X−W⊤WX∥F2s.t.WX=A \min_{\boldsymbol{W}} \left\|\boldsymbol{X}-\boldsymbol{W}^\top\boldsymbol{W}\boldsymbol{X}\right\|_F^2 \quad s.t. \quad\boldsymbol{W}\boldsymbol{X} = \boldsymbol{A} WminXWWXF2s.t.WX=A

Relational Knowledge Transfer for Zero-Shot Learning

该算法没有直接建立X\boldsymbol{X}XA\boldsymbol{A}A之间的映射关系。而是建立了Φu\boldsymbol{\Phi}_{u}ΦuΦs\boldsymbol{\Phi}_{s}Φs间的映射, i.e.,

min⁡W∥(Φu)⊤−(Φs)⊤W∥F2+λΩ(W) \min_{\boldsymbol{W}} \left\|(\boldsymbol{\Phi}_{u})^\top - (\boldsymbol{\Phi}_{s})^\top \boldsymbol{W} \right\|_F^2 + \lambda\Omega\left(\boldsymbol{W}\right) Wmin(Φu)(Φs)WF2+λΩ(W)

其实将上式改写一下

min⁡W∥WΦs−Φu∥F2+λΩ(W) \min_{\boldsymbol{W}} \left\|\boldsymbol{W} \boldsymbol{\Phi}_{s} - \boldsymbol{\Phi}_{u} \right\|_F^2 + \lambda\Omega\left(\boldsymbol{W}\right) WminWΦsΦuF2+λΩ(W)

Φs\boldsymbol{\Phi}_{s}Φs每一行表示一类的属性,左乘矩阵就是进行行变换,意思不就是用已知的属性的线性组合去表示未知的属性

计算出每一类的样本均值,记为μsi(2048,),i=1,2,⋯ ,40\boldsymbol{\mu}_{s}^{i} (2048,), i=1,2, \cdots, 40μsi(2048,),i=1,2,,40

然后就可以通过W(40,10)\boldsymbol{W}(40,10)W(40,10)去对 testfeature_meanμuj(2048,),j=1,2,⋯ ,10\boldsymbol{\mu}_{u}^{j} (2048,), j=1,2, \cdots, 10μuj(2048,),j=1,2,,10进行预测,i.e., virtual_testfeature_mean为μ^uj=∑iWi,jμsi\hat{\boldsymbol{\mu}}_{u}^{j} =\sum_{i} W_{i,j}\boldsymbol{\mu}_{s}^{i}μ^uj=iWi,jμsi

设置每一个未见类服从一个高斯分布
N=(μ^uj,σI){\cal{N}}=\left( \hat{\boldsymbol{\mu}}_{u}^{j}, \sigma I\right)N=(μ^uj,σI)

其中σ\sigmaσ是一个预设的参数。

这样就可以生成未见类的虚拟样本X~u\tilde{\boldsymbol{X}}_{u}X~u了。

由于X~u\tilde{\boldsymbol{X}}_{u}X~u是根据每个类的均值和方差生成的,所以很容易为其对应上相应的属性标记A~u\tilde{\boldsymbol{A}}_{u}A~u

这样就可以根据虚拟的输入X~u\tilde{\boldsymbol{X}}_{u}X~u和输出A~u\tilde{\boldsymbol{A}}_{u}A~u建立每一个属性值的回归模型(共85个)。

然后将Xu(6985,2048)\boldsymbol{X}_u \left(6985, 2048\right)Xu(6985,2048)输入这85个回归模型预测得到输出值,
test_pre_attribute A^u(6985,85)\hat{\boldsymbol{A}}_{u} \left(6985, 85\right)A^u(6985,85)

根据A^u(6985,85)\hat{\boldsymbol{A}}_{u} \left(6985, 85\right)A^u(6985,85)结合 Φu\boldsymbol{\Phi}_{u}Φu就可以得到标记y^u(6985,)\hat{\boldsymbol{y}}_u \left(6985, \right)y^u(6985,)。具体地

y^ui=arg min⁡kdis(a^ui,ϕuk)\hat{y}_u^i=\argmin_{k}dis\left(\hat{\boldsymbol{a}}_{u}^{i} ,\boldsymbol{\phi}_{u}^{k}\right)y^ui=kargmindis(a^ui,ϕuk)

Fault Description Based Attribute Transfer for Zero-Sample Industrial Fault Diagnosis

该算法首先通过Supervised Principal Component Analysis对[Xs,Au][\boldsymbol{X}_{s},\boldsymbol{A}_{u}][Xs,Au]进行特征提取。由于故障属性矩阵是离散值,因此建立了特征SPCA(Xs)SPCA\left(\boldsymbol{X}_{s}\right)SPCA(Xs)到每个属性值auk\boldsymbol{a}_{u}^kauk之间的分类模型。

Transfer Increment for Generalized Zero-Shot Learning

该算法的目标而是建立了Φu\boldsymbol{\Phi}_{u}ΦuΦs\boldsymbol{\Phi}_{s}Φs间的映射, 该映射以W\boldsymbol{W}W为参数,并通过增量学习的方式优化W\boldsymbol{W}W

算法实现

至于算法实现我参考了文献中的github,在其基础上删除了一些不必要的代码,并做了一些细微的改动,跑通了三个模型。这是我编写的程序链接https://github.com/ArtistVcc/Zero-Shot-Learning。

参考文献

  1. https://blog.csdn.net/Liangjun_Feng/article/details/85225574?spm=1001.2014.3001.5501
  2. https://blog.csdn.net/Liangjun_Feng/article/details/105612206?spm=1001.2014.3001.5501
  3. Donghui Wang, Yanan Li, Yuetan Lin, and Yueting Zhuang. 2016. Relational knowledge
    transfer for zero-shot learning. In Proceedings of the Thirtieth AAAI Conference on Artificial Intelligence (AAAI’16). AAAI Press, 2145–2151.
  4. E. Kodirov, T. Xiang and S. Gong, “Semantic Autoencoder for Zero-Shot Learning,” 2017 IEEE Conference on Computer Vision and Pattern Recognition (CVPR), Honolulu, HI, USA, 2017, pp. 4447-4456, doi: 10.1109/CVPR.2017.473.
  5. L. Feng and C. Zhao, “Fault Description Based Attribute Transfer for Zero-Sample Industrial Fault Diagnosis,” in IEEE Transactions on Industrial Informatics, vol. 17, no. 3, pp. 1852-1862, March 2021, doi: 10.1109/TII.2020.2988208.
  6. L. Feng and C. Zhao, “Transfer Increment for Generalized Zero-Shot Learning,” in IEEE Transactions on Neural Networks and Learning Systems, vol. 32, no. 6, pp. 2506-2520, June 2021, doi: 10.1109/TNNLS.2020.3006322.
  7. https://github.com/LiangjunFeng/Implement-of-ZSL-algorithms
  8. https://github.com/LiangjunFeng/Industrial_ZSL

有问题可以私信博主,欢迎大家一起讨论交流,一起努力进步,谢谢支持。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值