天天看点

论文笔记:DeepMIML

感想

这篇论文是一篇17年AAAI发表的文章,文章的作者周志华教授,国内的机器学习大牛。花了点时间读完了这篇文章,然后代码我也找到了,代码的地址为:https://github.com/kingfengji/DeepMIML,代码是用keras写的,非常容易上手,由于官方只给了一个运行的demo,没有告诉我们怎么用自己的数据集跑,还是蛮遗憾的,不知道用自己的数据集跑模型效果会怎么样。论文本身提出了一个sub concepts层,能够捕获insance和label之间的关系,应该是multi insatnce multi label中的一个很好的深度学习模型。

1 介绍

在许多真实世界应用中,感兴趣的对象具有固定的结构,并且它可以表示了一袋实例(a bag of instances),多个标签和这个bag级别相关。例如,在文本分类中,每个文档可能有一些句子作为实例,并且有许多标签指派给文档级别。Multi-Instance Multi-Label为解决这种问题提供了一个框架。

精确地,以MIML的角度,训练数据为{(X1,Y1),…,(Xm,Ym)},包含 bags of instances,其中,没给bag Xi可以表示为Zi实例,例如{xi,1,xi,2,…xi,zi}。输出Yi是一个所有可能性标签{y1,y2,…yL}的子集,其中L为可能的单个标签的数量。过去几年提出了很多MIML的算法,并且应用到了不同域的任务中,例如图片分类,文本分类,视频标注,基因功能预测(gene function prediction),生态系统保护(ecosystem protection)等等。

大多数MIML的研究假设实例(instances)已经提前给出,或者通过一些手工的实例产生器(instance generators)产生,实例产生器直接从原数据集中提取实例。最近,在图片任务上的经验研究表明,无手工设计的实例产生器占据主导。考虑到特征学习技术已经在许多领域都击败了手工特征工程,这促使我们尝试去用自动表示学习来解决MLML问题,尽管这需要大量的数据。

2贡献

在这篇文章中,我们提出了DeepMIMLnetwork,正如其名,这是一个深度神经网络模型,DeepMIML天生具有深度模型的表示学习能力,因此,我们不需要使用另外的实例产生器来产生实例描述。相反,模型本身就可以完成实例表示产生和后继的学习过程。另外,我们仔细的设计了sub-concepts层,MIML的一个明显的优势是,例如,发现输入对和输出语义标签的潜在联系,这个层可以插曲其它类型的网络结构中,例如CNN,使他们具有发现pattern-label关系发现能力。DeepMIML的有效性在实验中被验证了。

3 提出的方法

3.1 2D Sub-Concept Layer for Single Instance

在语义丰富的任务中,类别标签可能带有复杂的信息,于是,直接的建模可能很困难。相反,我们提出了一个新的二维(2-Dimensional)神经网络层,我们叫做sub-concept layer,这可以使得模型能为每个类别标签在instance和sub-concepts之间匹配分数。精确地,一旦实例x的表示得到了,我们提出了一个全连接二维层(sub-concept layer)的大小为K*L。(这段我不是很明白,不知道作者能不能随后解释一下,翻译过来感觉怪怪的,还前言不搭后语),正式地,对于一个给定的实例向量x, 2D sub-concept层的第(I,j)个结点表示为实例x_(p,q)和第i个sub-concept对于第j个类别标签的匹配分数。第(i,j)个结点有着下面形式的激励:

论文笔记:DeepMIML

其中,f(.)是激励函数,权重向量w_(i,j)可以表示为匹配第j个label的第i个sub-concept的模板,我们选择的激励函数为ReLU(Rectified Linear Unit)的形式:

论文笔记:DeepMIML

2D sub-concept层,正如其名,尝试对一个实例和所有标签的sub-concepts的得分。为了得到标签级别的预测,后面采用了一个列级别的池化操作,会产生K*1个得分层,每一个条目就是实例x和对应输出标签的匹配得分。

池化操作不仅提取标签预测,而且也对sub-concepts有一些鲁棒性。即,当一个标签的sub-concepts少于K个时,池化操作会消除sub-concepts的过度指派。

       和其它一般网络结构相比,这里有一些点值得强调:

l  不像一般的卷积特征图(有局部连接滤波器),2D sub-concept层和输入示例向量是全连接的,激励可以表示为每个标签的sub-concept和示例的匹配得分。这里也注意每个结点的权重是不一样的,而卷积层共享权重。

l  不像1D全连接层,2D sub-concept层以一种可解释的方式排列。换句话说,每一列是一个每个标签的得分向量,当对这样的关系建模时,该层是一个直接的结果。这使得该层很容易直觉上进行解释,更重要的是,它可用于发现示例-标签的关系(instance-label relationships)。

简单来说,2D sub-concept层后面接一个池化层可以捕获输入对和最终每个标签的匹配得分。另外,每个sub-concept的匹配得分可以进一步用于instance-label关系发现。

3.2 3D Sub-Concept Layer for Multiple Instances

当输入以一袋实例来表示时(这里我们假设每袋有相同数量的示例,对于那些有不同数量示例的袋,我们用0来补齐),我们可以一般化2D sub-concept层的想法,融入到MIML视角中。基本的想法是通过堆叠许多2D层,把2D sub-concept层拓展为3D tensor层,tensor的每一个部分是每个示例的2D sub-concept层。

换句话说,给定一袋示例Xi,我们为每个示例X_ki构建2D sub-concept层,然后把这些2D层堆叠正一个3D 的张量。张量的深度和输入袋的示例数目相等。即第(I,j,k)个结点的激励表示在袋X_i中,对于第k个示例x_(k,i)的第j个标签的第i个sub-concept。注意在相同sub-concepts中的每个示例的匹配权重是不一样的。

为了探索instance和label之间的关系,我们做了两次池化操作。具体地,我们首先在3D tensor上垂直的进行池化,结果层是一个2维层,尺寸为L*M:在位置(i,j)的每个结点是对示例i和标签j的匹配得分。我们因此把第一个池化层作为Instance-Label Scoring Layer。

第二,另一个在2D Instance-Label Scoring Layer2D的池化操作会产生一个1D layer,大小为L*1.这可以解释为袋级别的标签的匹配得分:每一个条目j是对在整个输入bag下对第j个标签的匹配得分的建模。

简而言之,为了从3D张量层得到L*1的层,我们用了两次池化操作:垂直池化后接一个水平池化。

我们进行两次池化(没有永2D的池化)的原因是因为中间的instance-label得分层本身有其独特的解释,通过检验这层的值可以帮助理解instance label之间的关系。

3.3 The DeepMIML Network

深度学习的优势使得深度神经网络在学习特征表示尤其的好。例如,一个众所周知的技术,对一个图片编码作为一个dense 1D向量,这是通过从一个训练好的CNN的全连接层(FC7)提取的激励。

可是,这样的方法把输入作为了一个整体,于是,对于输入图片的dense 1D表示不能非常好的显示局部信息。这里,我们做得有点不一样:在一个深度卷积网络结构中,在最后的全连接1D层之前是一个3D的卷积张量层,通常的形状是14*14*512(例如VGG-16),在这个卷积层里面,每一个14*14的向量,维度为512*1,这可以被当做输入图片的一个示例。于是,以一个MIML的观点,我们卷积层的表示而不是FC层,这是为了获得一袋示例表示。

现在,我们引入Deep MIML网络,这是一个新颖的网络结果,它从原始输入中产生示例袋,学习instance级别下每个标签的sub-concept的得分函数,最终得到袋级别的预测。

具体地,原始输入被送入一个instancegenerator设备,这个设备在兴趣域内是独立的。对于图片任务,在FC层前面加一个深度卷机网络结构会使得效果变好,随后,一个3D sub-concept层接着两个池化层,这直接应用到instancegenerator,最终,加一个全连接层,层的大小和labels的数量是独立的,我们选择的损失函数是mean binary cross-entropy。在训练期间,我们使用SGD+dropout的方式。

有三点值得强调:

l  首先,这个更复杂的示例产生器(instance generator)可能用于特定的任务。例如,对于图片任务,可以应用一些方法(在用卷积网络前创造一些小边界框)首先得到示例的更好的表示。一个预训练的基于LSTM的编码器可以用于NLP任务。

l  第二点,有一些我们没有获得原始数据的情况,输入已经被编码为一袋示例。在这种情况下,我们仍然可以用DeepMIML框架直接把他们映射到3D sub-concept层。

l  最后,网络可以很容易的退化为一个单示例多类别或者多示例单类别的情况,根据情况改变sub-concept层的维度。

3.4 Instance-Label Relation Discovery

Instance-Label关系发现是定位关键示例对的发现过程,一次来触发输出标签。这和instance annotation不同,annotation关心的是把正确的标签指派给示例,不关心这个示例是否正确的触发输出的标签。因此,一个良好的示例标注的性能不会促使在instance label关系发现上的良好表现。

Instance label关系发现是DeepMIML网络的内置功能。3D sub-concept层的第一个池化层(叫做instance-label scoring layer)会产生对所有标签所有示例的一个匹配分数。通过在instance-label得分层来检验这些激励分数,这是直接对instance-label关系发现的路由。

具体地,对于MS-COCO数据集,每个输入图片转换为196个示例的袋,有80个候选标签可以进行标注,对应的instance-label得分层的大小是196*80,这层给了我们每个示例和每个标签的匹配得分。通过检验激励,我们可以容易的发现instances和labels之间的关系。

另外,通过回溯2D池化层有最高匹配得分的示例的位置,我们也可以检测哪一个关键instance激发一个特别的标签。碎玉一个VGG-16结构,定位关键示例的中心像素的公式可以容易的推导为:

论文笔记:DeepMIML

其中,在14*14的instance bag中,,是2D索引,通过这种方式,我们可以得到与attention机制相似的效果。

4 实验

为了验证我们提出的网络结构的有效性,我们在文本数据和图片数据上做了实验,在训练规模上有相当大的规模。目标是显示Deep MIML网络是一个一般的网络结构,能够适合许多不同域的MIML问题,只需要很少的修改就可以应用到不同的任务中。

另外,我们显示通过简单的把3Dsub-concept层插入VGG-net结构中,我们得到了一个更好的精度,并且知道了label-instance的关系。

为了和传统的方法有一个公平的比较,验证其sub-concept层的有效性,我们在没有深度特征的数据集上做了实验。特别地,我们使用了两个众所周知的MIML基准数据集,叫做MIML News和MIMLScene。其中原始数据已经预处理成instance的袋格式,我们对最好的MIML算法进行了比较。

具体地,我们报告如下的实验结果:

l  基于DeepMIML的文本任务:我们在2016 Yelp数据集挑战上做了实验。每个评论属于一个或者多个类别(例如“restaurant”,“Thai Food”),我们提取了有评论标注的100类别。

l  基于DeepMIML的图像任务:我们使用MS-COCO数据集,包含82783张图片,用于训练,有80个标签。为了得到每张图片的一个instance。我们在最后一个卷积层上使用了一个预训练的VGG-16网络。

l  基于非深度特征的DeepMIML:我们把我们的算法和最好的MIML算法进行了比较,数据集为传统的MIML数据集。每个示例已经被手工编码为特征向量了,为了公平起见,于是我们也使用相同的输入数据作为表示。

我们用Keras实现了这个模型,keras是一个开源的python库,用于深度学习,它允许用户能够定制他们自己的网络结构和层,我们使用了2个Nvidia Titan-X GPU来加速训练时间。

4.1 文本数据的结果

对于文本的MIML任务,我们在2016 Yelp dataset challenge上做了实验。特别地,我们从19934条评论中提取了评论,每个评论属于一个或者多个类别,总共有100个类别。我们把数据分为训练集和测试集合,分割的比例为0.7.

       为了把每个输入评论编码为multi-instance表示,我们使用一个预训练的skip-thought模型作为现成的每个句子的编码器(作为instances)。这个输入可以是一串任意长度的单词,输出是一个4800维度的向量。表1显示的是一个给定的查询和它在yelp数据集上最近的邻居。

论文笔记:DeepMIML

我们把每个评论分成了10个单词序列,每个序列包含一个句子。如果一个评论有超过10个句子。最后的部分包含所有保留的单词。有示例袋表示在手,我们直接应用3D sub-concept层。我们使用二分类cross-entropy作为损失函数,使用SGD,dropout比率为0.5.这里唯一的参数是K,即sub-concepts的数量。在验证过程中,我们发现变化K不会对性能影响很大,因此这里我们把K设置为4.

为了比较,我们仍然使用skip-thought来编码整个评论到一个稠密的表示,维度为4800,我们之后用了一个soft-max和一个MLP(两个隐藏层的大小为1024,后面接着一个512维的ReLU激励)作为基准比较。我们这里使用的评估尺度是用于multi-label任务的标准,实验结果如表2.

论文笔记:DeepMIML

4.2 图片数据结果

       对于图片任务,我们在Miscrosoft COCO数据集上做了我们的实验,MS-COCO数据集包含82 783张图片,用于训练集,40 504张图片用于测试。每张图片提供了80个类别标签。这里,我们只使用图片级别的标注文本作为标签,在最后的卷积层使用使用一个预训练的VGG-16,作为instance generator。如果我们固定VGG-16,训练时间少于30分钟。

论文笔记:DeepMIML

       图5是测试集上instance-label关系的预测的阐明。通过sub-concept层,我们很容易得到注意力机制的结果。

论文笔记:DeepMIML

表3显示的是比较结果,和vanillaVGG网络相比,在加入额外的concept层以后,我们得到了一个更好的准确率。

       和更复杂的CNN-RNN模型相比,我们的方法显示了次优的性能。这是因为我们使用的instancegenerator非常的简单,直接的,微型物体,例如停车计时器不能很好的编码到实例中。另一方面,CNN-RNN是在图片任务上的最好的模型,但它不是很容易应用到非CV的任务中。再次,DeepMIML的目标是以最小的代价对不同域的任务足够通用。另外,我们的模型可以很容易的退化为multi-instance single-label框架,而CNN-RNN方法不能有效的适应。

4.3 把DeepMIML应用到一般的示例

我们比较了一些最好的MIML算法,有KISASR,MIML,SVM,MIML KNN,MIML RBF,MIML Boost方法。

为了公平比较,我们使用了前面说的基准数据集,数据集已经使用tf-idf和SBN特征进行了预处理。因此,我们直接把这些示例映射到3D sub-concept层,剩下的网络层和之前的一样。注意,这些数据集在示例数量和可能的标签数量上相对比较少。

论文笔记:DeepMIML

参考文献

[1]. A Keras implementation of the DeepMIMLNetwork for multi-instance multi-label learning. ​​https://github.com/kingfengji/DeepMIML​​

[2]. JiFeng, Zhi-Hua Zhou:Deep MIML Network. AAAI 2017: 1884-1890