最近因为比赛的原因看了一些关于Zero Shot Learning (ZSL)的论文,总的来说这个方向还是有一些前人的工作的,不过有些内容个人觉得确实有些不太靠谱和跑偏,找了两篇我个人认为思路比较清晰和实用的论文,在这里介绍一下关于Zero Shot Learning的基本问题,思路以及方法算是科普性的文章
一篇是 Lampert 2009年在CVPR上发表的
Learning to Detect Unseen Object Class by Between-Class Attribute Transfer
这是最早提出 Zero Shot Learning 这一问题和概念的文章
同样是2009年,Hinton在NIPS上发表的
Zero Shot Learning with Semantic Output Codes
这里还有几篇零样本算法的介绍和复现:
DeepLearning | Semantic Autoencoder for Zero Shot Learning 零样本学习 (论文、算法、数据集、代码)
DeepLearning | Relational Knowledge Transfer for Zero Shot Learning 零样本学习(论文、算法、数据集、代码)
一、Zero Shot Learning 的基本问题
首先,我们来说清楚,ZSL是针对怎样的问题提出的
假设这样一个场景,现在我们有了一个训练用的数据集,里面有A、B、C三类样本,可是在测试集中却有A、B、C、D四类,那么我们如何去用一个只有A、B、C三类样本的训练集去预测测试集中的D类呢?这就是零样本学习Zero Short Learning 所需要解决的问题,如果测试集中存在训练集中不存在的类别,我们应该如何建模?
##二、Zero Shot Learning 的类间属性迁移
利用只有A类、B类和C类的数据集去预测D类,这个问题乍看上去似乎十分困难,现在我们将这个问题具体化,我们就会发现这个问题并不是那么刁钻,而是我们在现实中确实有可能遇到的,我们来看下面这张图
现在的A、B、C类分别是老虎、大熊猫和马,而D类则是斑马
那么Zero Shot Learning的问题我们可以用下面这种方式进一步理解
小明(小明躺枪…)的爸爸带他去动物园看动物,分别看了老虎,大熊猫和马,然后又告诉他希望他在动物园中去找一种叫做斑马的动物,这种动物有老虎的斑纹,大熊猫的黑白混色以及马的外形。
这样来看,这个问题就显得不是那么困难了,这一思路,也正是Lampert在论文中所提到的类间属性迁移,通常我们做有监督学习的思路,是实现数据的特征空间到数据标签之间的映射,而这里,我们利用数据特征预测的却是样本的某一属性
Lampert在论文中给出了两种属性预测的结构
-
直接属性预测 Direct attribute prediction (DAP)
这一方法先将数据从特征空间映射到中间层的属性向量层,属性向量层的标签是通过收集来的每一类特征的总结,比如是否有尾巴,有几只脚等等,通过利用数据预测属性,再通过属性映射到标签来实现对于未知类别的预测,这一方法也是接受和应用最为广泛的一种 -
间接属性预测 Indirect attribute prediction (IAP)
这一方法使用了两层标签,属性层作为中间层,在实际中使用较少,这里不多做介绍
##二、Zero Shot Learning 的语意输出编码
还有一个觉得比较有意思的是Hinton在论文里提到的语意输出编码方式,这里的思想其实与DAP的思路类似,也是在以往的特征空间与标签之间增加了一层
这里增加的一层不再是数据本身的属性比如动物的一些特征之类的,而是标签本身的编码,说简单点就是NLP里面的词向量,通过将标签进行词向量的编码,利用模型基于数据矩阵对编进行预测,得到结果之后,通过衡量输出与各个类别词向量之间距离,判别样本的类别
总结一下,上面提到的两篇论文里的方法,都是将数据对标签的预测转化成了对中间层的预测,继而利用中间层的结果实现对标签的确定,我觉得这是一种独具一格的思路,可以借鉴一下
这篇博客写了之后个人感觉不是很充分,于是又扩展写了一篇
DeepLearning | Zero Shot Learning 零样本学习(扩展内容、模型、数据集)
二、更多资源下载
微信搜索“老和山算法指南”获取更多下载链接与技术交流群
有问题可以私信博主,点赞关注的一般都会回复,一起努力,谢谢支持。