由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的表示。
隐层S层为属性层,和普通的自编码隐层不同,它是原样本X的抽象语义特征表示。
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))
假设:
可得
整体算法如下:
上面式子可写成Sylvester 等式的形式,可以使用Bartels-Stewart算法进行求解,借助Matlab工具箱可以直接求解。
整个算法最核心的地方是在自编码器进行编码和解码时,使用了原始数据作为约束,即编码后的数据能够尽可能恢复为原来的数据。
该方法在6个数据集上的zero-shot learning结果都为目前最好。该方法还能解决监督聚类问题(supervised clustering problem),并也能取得目前最好的效果。
以AWA数据集实验为例:
零次学习:基于以上算法有两种测试的方法:
监督聚类:在这个问题中,语义空间即为类别标签空间(one-hot class label)。所有测试数据被影射到训练类别标签空间,然后使用k-means聚合