《Semantic Autoencoder for Zero-Shot learning》阅读笔记

一、介绍

由CVPR2017收录。利用语义自编码器实现zero-shot learning的工作,其主要贡献是:

(1)提出了一种新的用于zero-shot learning语义自编码模型;

(2)提出了模型对应的高效的学习算法;

(3)算法具有扩展性,可以用于监督聚类问题(supervised clustering问题)。实验证明,该算法在多个数据集上能取得最好效果。

--------------------------------------------------------------------------------------------------------------------------------------------------------------

(1)提出了SAE算法

(2)在一定程度上解决了训练集和测试集的领域漂移(Domain Shift)问题

领域漂移(Domain Shift)问题:当训练集和测试集当的类别相差很大的时候,结果受影响较大。如训练集是动物,测试集为建筑类别;又如马的尾巴和猪的尾巴长度相差较大。

二、整体结构

下图为作者使用的自编码器,共3层(X,S,X~),对原始样本进行编码。

其中X为样本,S为自编码器的隐层,X ~为由隐层重建的X的表示。

《Semantic Autoencoder for Zero-Shot learning》阅读笔记_第1张图片

隐层S层为属性层,和普通的自编码隐层不同,它是原样本X的抽象语义特征表示。

三、SAE(语义自编码器)

1.设输入层到隐层的映射为W,隐层到输出层的映射为W*,其中W*等于W的转置。由于我们希望输入和输出尽可能相似,则可设目标函数为:

2.文中希望隐层S能够具有抽象的语义,能表示样本属性或者类别标签,所以加入约束WX=S,其中S是样本X对应的特征向量 。每个样本X都可以表示为一个向量S,而这个S是训练集已有的。原本自编码器属于非监督学习,通过这一约束条件就成为了监督学习问题,此时目标函数可以表示为:

因为W*等于W的转置,所以优化为:

进一步优化为:

目标函数中,有WX=S,这样的约束太强,可以想象,需要自编码器的中间层完全等于事先定义好的值,这样的条件实在是太苛刻了。因此,可以将原式写成

这样同时将约束写入了目标函数中,也不需要拉格朗日法进行求解了,只需要简单的步骤就可以进行求解。而上式是个标准二次型的形式,利用矩阵迹的运算进行改写(Tr(X)=Tr(X转置),Tr(W转置乘S)=Tr(S转置W))

求导,导数等于0,可得:

假设:

可得

整体算法如下:

《Semantic Autoencoder for Zero-Shot learning》阅读笔记_第2张图片
上面式子可写成Sylvester 等式的形式,可以使用Bartels-Stewart算法进行求解,借助Matlab工具箱可以直接求解。

整个算法最核心的地方是在自编码器进行编码和解码时,使用了原始数据作为约束,即编码后的数据能够尽可能恢复为原来的数据。

四、实验

该方法在6个数据集上的zero-shot learning结果都为目前最好。该方法还能解决监督聚类问题(supervised clustering problem),并也能取得目前最好的效果。

以AWA数据集实验为例:

《Semantic Autoencoder for Zero-Shot learning》阅读笔记_第3张图片

零次学习:基于以上算法有两种测试的方法:

  • 将一个未知的类别特征样本Xi通过W映射到语义空间(属性)S,通过比较语义空间的距离找到离它最近的类别(无训练样本),即为它的标签;
  • 将所有无训练数据类别的语义特征S通过W*映射到特征空间X~,通过比较一个未知类别的样本Xi和映射到特征空间的类别中心X的距离,找到离它最近的类别,即为它的标签
  • 以上两种算法得到结果的准确度基本相同。(W*=W的转置)

监督聚类:在这个问题中,语义空间即为类别标签空间(one-hot class label)。所有测试数据被影射到训练类别标签空间,然后使用k-means聚合

你可能感兴趣的:(python,algorithm)