MIML系列(一):Fast Multi-Instance Multi-Label Learning 快速多示例多标签学习
目前的研究方向是基于MIML的,然而网上关于MIML的论文讲解有点少,因此打算自己看一些论文记录一下:
摘要
本篇论文主要是为了有效地处理大数据集而提出了MIMLfast方法,该方法首先构造所有标签共享的低维子空间,然后通过随机梯度下降法,对特定的线性模型进行排序,优化近似排序损失失。虽然MIML问题比较复杂,但是MIMLfast通过利用标签与共享空间的关系,发现复杂标签的子概念,可以获得很好的性能。此外,论文中的方法能够为每个标签识别最具代表性的实例,从而为理解输入模式和输出语义之间的关系提供了机会
介绍
MIMLSVM是将MIML问题退化为单实例多标签任务来解决。MIMLBoost则是将MIML退化到多实例单标签学习(这两个方法单独去看一下),但是这些方法通常是耗时的,并且不能处理大规模数据,因此极大地限制了MIML的应用。
本文提出了一种基于多实例多标签数据的MIMLfast快速学习方法,虽然使用了简单的线性模型来提高效率,但是MIMLfast提供了一个原始MIML问题的有效近似,具体来说,为了利用多个标签之间的关系,我们首先从原始特征中学习所有标签的共享空间,然后从共享空间中训练标签特定的线性模型,为了识别表示特定标签的包的关键实例,我们在实例级训练分类模型,然后选择具有最大预测的实例,为了使学习更有效率,我们使用随机梯度下降法(SGD)来优化近似的排名损失,在每次迭代中,MIMLfast随机抽取由一个袋子、一个袋子的相关标签和一个不相关标签组成的三元组作为样本,并且优化模型,如果排序是违反的(也就是与包不相关的标签的预测值大于相关标签预测值+1,1是
m
a
r
g
i
n
margin
margin),则将相关标签的排序在非相关标签前面,而大多数MIML方法的另一个重要任务是提高泛化能力,MIML的另一个任务是为了理解输入模式和输出语义之间的关系,MIMLfast可以自然地为每个标签识别最具代表性的实例。此外,我们建议发现复杂标签的子概念,它们经常出现在MIML任务中,此外,MIMLfast使用监督模型而不是启发式聚类来发现子概念
MIMLfast方法
我们用 { ( X 1 , Y 1 ) , ( X 2 , Y 2 ) , ⋅ ⋅ ⋅ ( X n , Y n ) } \{(X_{1},Y_{1}),(X_{2},Y_{2}), \cdot \cdot \cdot (X_{n},Y_{n})\} {(X1,Y1),(X2,Y2),⋅⋅⋅(Xn,Yn)}表示训练数据,其中包含 n n n个例子,且每个包 X i X_{i} Xi包含 z i z_{i} zi个实例 { x i , 1 , x i , 2 , ⋅ ⋅ ⋅ x i , z i } \{x_{i,1},x_{i,2}, \cdot \cdot \cdot x_{i,z_{i}}\} {xi,1,xi,2,⋅⋅⋅xi,zi},且 Y i Y_{i} Yi包含与包 X i X_{i} Xi关联的标签,是所有可能的标签的子集 { y 1 , y 2 , ⋅ ⋅ ⋅ y n } \{y_{1},y_{2},\cdot \cdot \cdot y_{n}\} {y1,y2,⋅⋅⋅yn}
1、示例级建立分类模型
我们首先讨论如何在实例级建立分类模型,然后尝试从实例预测中获得袋子的标签,要处理多个标签的问题,最简单的方法是通过独立地为每个标签训练一个模型,将其退化为一系列的单个标签问题,然而,这种退化的方法可能会丢失信息,因为模型是单独对待标签,将每个标签独立开来而忽略它们之间的关系。本文将模型表示为两个组件的组合,第一个组件学习
x
x
x从原始特征空间到低维空间的线性映射,所有标签都共享该映射(共享空间),然后,第二个组件根据共享空间学习标签特定的模型,这两个组件交互优化,以适应所有标签的训练示例, 这样,来自每个标签的示例将有助于共享空间的优化,相关标签将互相帮助。在形式上,给定一个实例
x
x
x,我们将标签
l
l
l上的分类模型定义为:
f
l
(
x
)
=
w
l
T
W
0
x
f_{l}\left ( x\right )=w_{l}^{T}W_{0}x
fl(x)=wlTW0x 在公式中
W
0
W_{0}
W0表示一个
m
×
d
m \times d
m×d维的矩阵,是用来将原始特征向量映射到共享空间,
w
l
w_{l}
wl是标签
l
l
l的
m
m
m维权重向量(维度:我们通常会说矩阵的维度,这里的维度也不是指的空间,而是指矩阵的行数),
d
d
d和
m
m
m分别是特征空间和共享空间的维数(
p
s
:
ps:
ps:将每个实例从
d
d
d维映射到
m
m
m维,
x
x
x为
d
d
d维,则
W
0
x
W_{0} x
W0x为
m
m
m维,然后
w
l
T
w_{l}^{T}
wlT为
1
∗
m
1*m
1∗m,最终得到的
f
l
(
X
)
f_l (X)
fl(X)为一个数字,也就是当前标签属于x的预测值)
多实例多标签学习任务中的对象通常具有复杂的语义;因此,内容不同的示例可能被赋予相同的标签。例如,一个标记为apple的图像的内容可以是移动电话、笔记本电脑或一个真正的苹果,因此训练一个单一的模型将内容如此不同的图像分类到同一类别是很困难的,相反,我们建议为一个复杂的标签学习多个模型,为每一个子概念学习一个模型,并自动决定一个例子属于哪个子概念,每个子概念的模型要简单得多,并且可以更容易地训练以适应数据,我们假设每一个标签有K个子概念,对于给定的标签为l的例子,首先检查K个模型的预测值,然后选择预测值最大的子概念,自动确定其所属的子概念,现在我们可以将实例x在标签l上的预测重新定义为:
w
l
,
k
w_{l,k}
wl,k对应于标签
l
l
l的第
k
k
k个子概念的权重(就像apple标签对应三个子概念:苹果,苹果电脑,苹果手机)。注意,虽然我们假设每个标签有K个子概念,但是允许有空的子概念,即,一个简单标签的例子可能只分布在几个甚至一个子概念中,属于标签的预测值也就是属于子概念中最大的预测值)
2、示例级模型获得包预测
我们看看如何从实例级模型中获得包的预测,通常假定一个包是正的,当且仅当它包含至少一个正的实例,在此假设下,袋子X在标签l上的预测(就是是否这个标签属于这个袋子)可以定义为袋子中所有实例预测的最大值:
我们将具有最大预测的实例称为标签 l l l上的 X X X的关键实例,以上面的模型为例,对于一个包 X X X和它的一个相关标签 l l l,我们定义了 R ( X , l ) R(X,l) R(X,l):
Y ˉ \bar{Y} Yˉ表示一组与 X X X包不相关的标签, I [ ⋅ ] I[\cdot] I[⋅]是指示性函数,如果参数为真,则返回1,否则返回0,本质上来说, R ( X , l ) R(X,l) R(X,l)计算在袋子X上的标签l之前排列了多少个不相关的标签(也就是说,不属于这个包的标签的预测值大于属于这个包的标签的预测值,然后计算出来有多少个不相关的标签在l前面),可以进一步定义排序误差,是关于一个标签 l l l上的包 X X X:
可以明显的看出,当标签 l l l的排名越靠后,则 R ( X , l ) R(X,l) R(X,l)越大,则错误会越大,最终,我们可以获得整个数据集的排名错误:
基于公式(2),排序错误 ϵ ( X , l ) ϵ(X,l) ϵ(X,l)可以被传播到所有不相关的标签 Y ˉ \bar{Y} Yˉ上:
这里我们使用约定 0 / 0 = 0 0/0=0 0/0=0,如果 R ( X , l ) = 0 R(X,l)=0 R(X,l)=0,由于非凸性和不连续性,直接对上述方程进行优化是相当困难的,因为这种优化往往会导致np困难的问题,我们转而研究以下 h i n g e hinge hinge损耗,它已被证明是所有凸替代损耗的最佳选择:
∣
q
∣
+
=
m
a
x
{
q
,
0
}
|q|_{+}=max\{q,0\}
∣q∣+=max{q,0},我们用边界1来惩罚
R
(
X
,
l
)
R(X,l)
R(X,l),也就是和超平面距离为1的线上面的点作为支持向量,在这里我们介绍一下
∣
1
+
f
j
(
X
)
−
f
l
(
X
)
∣
|1+f_{j}(X)-f_{l}(X)|
∣1+fj(X)−fl(X)∣,我们可以知道,在
h
i
n
g
e
hinge
hinge
l
o
s
s
loss
loss当中,形式是
l
=
m
a
x
{
0
,
1
−
f
(
x
)
}
l=max\{0,1-f(x)\}
l=max{0,1−f(x)},此处,
f
j
(
X
)
f_{j}(X)
fj(X)是不相关标签预测值,
f
l
(
X
)
f_{l}(X)
fl(X)是相关标签的预测值,如果我们设定
m
a
r
g
i
n
=
1
margin=1
margin=1,那么需要横坐标值越大越好,损失越小越好,那此时假设
l
o
s
s
=
m
a
x
{
0
,
1
+
f
j
(
X
)
−
f
l
(
X
)
}
=
m
a
x
{
0
,
1
−
(
f
l
(
X
)
−
f
j
(
X
)
)
}
loss=max\{0,1+f_j (X)-f_l (X)\}=max\{0,1-(f_l (X)-f_j (X))\}
loss=max{0,1+fj(X)−fl(X)}=max{0,1−(fl(X)−fj(X))} 那横坐标为
(
f
l
(
X
)
−
f
j
(
X
)
)
(f_l (X)-f_j (X))
(fl(X)−fj(X)),也就是说相关标签的预测值-非相关标签的预测值应该越大越好,当
f
l
(
X
)
−
f
j
(
X
)
<
0
f_l (X)-f_j (X)<0
fl(X)−fj(X)<0时,此时相关标签预测值比非相关标签预测值小,此时分类有误;当
0
<
f
l
(
X
)
−
f
j
(
X
)
<
1
0<f_l (X)-f_j (X)<1
0<fl(X)−fj(X)<1时,则能够分好类了,但是此时
l
o
s
s
loss
loss值在
(
0
,
1
)
(0,1)
(0,1)之间,因此会进行惩罚;而当
f
l
(
X
)
−
f
j
(
X
)
=
1
f_l (X)-f_j (X)=1
fl(X)−fj(X)=1时,此时
l
o
s
s
loss
loss达到最小,分类就很好了,但是不鼓励分类器分的太好,也就是说,当
f
l
(
X
)
−
f
j
(
X
)
>
1
f_l (X)-f_j (X)>1
fl(X)−fj(X)>1时,则相关标签的预测值超过不相关的标签预测值很远,但是此时没必要关注那些离超平面很远的样本,为此,我们可以通过对距分离超平面的距离选择一个阈值,来过滤这些离超平面很远的样本,这样目的在于使分类器更专注于整体的分类误差,最终可以让与包X相关的标签和不相关的标签用超平面分离开来,1就是阈值,也就是超平面和最近的点的距离
则对
R
(
X
,
l
)
R(X,l)
R(X,l)重新定义为:
此时只有当不相关标签的预测值大于1+相关标签的预测值,也就是说真实标签的预测值和不相关标签的预测值在1之内则算是误差,在1之外则算进去,显然,Eq. 5是Eq. 4的一个上界,(因为 h i n g e hinge hinge l o s s loss loss只有 m a r g i n margin margin取1时正好是上界)
3、使用SGD最小化排名误差
我们使用随机梯度下降法(SGD)来最小化排名误差,(SGD 一次只进行一次更新,就没有冗余,而且比较快,并且可以新增样本),在每一次迭代中,随机获得一个三元组 ( X , y , y ˉ ) (X,y,\bar{y}) (X,y,yˉ),包括一个包,与其相关的标签和不相关的标签,从而产生一个损失:
如果
y
ˉ
\bar{y}
yˉ造成了一个非0的损失,则称此标签为违反标签,也就是说,查看此
f
y
(
X
)
f_{y}(X)
fy(X)是否小于1+
f
y
ˉ
(
X
)
f_{\bar{y}}(X)
fyˉ(X),如果小于,此时就成为违反标签了,在
R
(
X
,
y
)
>
0
R(X,y)>0
R(X,y)>0的情况下(也就是一定有不相关的标签在相关标签排序之前),排除来自
Y
ˉ
\bar{Y}
Yˉ的不相关不违反标签(不会造成损失),随机选择一个违背的无关标签
y
ˉ
\bar{y}
yˉ的概率是
1
/
R
(
X
,
y
)
1/R(X,y)
1/R(X,y) ,因为只有违反标签才算进 ,这样
Ψ
(
X
,
y
)
\Psi (X,y)
Ψ(X,y)能够被看成是
L
(
X
,
y
,
(
ˉ
y
)
)
L(X,y,\bar(y))
L(X,y,(ˉy))的期望:
为了最小化
L
(
X
,
y
,
(
ˉ
y
)
)
L(X,y,\bar(y))
L(X,y,(ˉy)) ,需要提前计算
R
(
X
,
y
)
R(X,y)
R(X,y),我们需要对每一个
y
ˉ
ϵ
(
Y
ˉ
)
\bar{y}\epsilon(\bar{Y})
yˉϵ(Yˉ),也就是对每一个非相关标签,计算其预测值
f
y
ˉ
(
X
)
f_{\bar{y}}(X)
fyˉ(X)以及相关标签预测值
f
y
(
X
)
f_{y}(X)
fy(X) ,然而,当可能的标签数量很大时,这可能会很耗时,因此我们采用近似法来估计
R
(
X
,
y
)
R(X,y)
R(X,y),具体来说,在每一个SGD的迭代中,我们从不相关的标签集合
Y
ˉ
\bar{Y}
Yˉ中随机抽取一个标签,直到一个违反标签
y
ˉ
\bar{y}
yˉ的出现,在不失一般性的前提下,我们假设第一个违反的标签是在第v个采样步骤中发现的,此时
R
(
X
,
y
)
R(X,y)
R(X,y)可以被近似成
⌊
∣
Y
ˉ
/
v
∣
⌋
\left \lfloor |\bar{Y}/v|\right \rfloor
⌊∣Yˉ/v∣⌋(意思是说,如果是第v次,那么很可能里面有的违规标签的个数为总个数/v 下采样),我们假设在第
t
t
t次迭代中三元组 ,在标签
y
y
y上,关键实例为
x
x
x,并且在在第
k
k
k个子概念上达到最大预测值,并且在标签
y
ˉ
\bar{y}
yˉ上,实例
x
ˉ
\bar{x}
xˉ在第
k
k
k个子概念上获得最大预测值,这样我们则可以对三元组进行近似值排名损失:
为了便于表述,在这里我们介绍
如果抽取到一个违反标签 y ˉ \bar{y} yˉ,我们对这三个参数进行梯度下降:
其中
γ
t
\gamma_{t}
γt是SGD的步长,参数更新后,
w
y
,
k
,
w
y
ˉ
,
k
ˉ
w_{y,k},w_{\bar{y},\bar{k}}
wy,k,wyˉ,kˉ和
W
0
W_{0}
W0的每一列,被标准化为L2模,且小于常数C
在算法1中给出了MIMLfast的伪代码,首先,所有标签
l
l
l和所有子概念
k
k
k的
W
0
W_{0}
W0和
w
l
k
w_{l}^{k}
wlk的每一列都是随机初始化的,均值为0,标准差为
1
/
d
1/\sqrt{d }
1/d,然后在SGD的每次迭代中,随机抽取一个三元组
(
X
,
y
,
y
ˉ
)
(X,y,\bar{y})
(X,y,yˉ) ,识别其对应的关键实例和子概念,然后进行梯度下降,更新三个参数:根据公式7到9中的
w
y
,
k
,
w
y
ˉ
,
k
ˉ
w_{y,k},w_{\bar{y},\bar{k}}
wy,k,wyˉ,kˉ和
W
0
W_{0}
W0 ,最后对更新后的参数进行归一化,使得它们的范数是C的上界,重复此过程,直到达到停止条件。在我们的实验中,我们从训练数据中抽取一个小的验证集作为样本,一旦验证集上的排名损失没有减少,我们就停止训练,我们在一份技术报告中提出了一些关于算法收敛性的理论结果,同时,我们也将这一技术用于多标签主动学习
算法介绍:首先输入训练数据、参数,然后在训练的过程中先初始化权重,然后随机选取一个包和一个与其相关的标签,并且挑选出关键实例和子概念,接着查找每一个不相关标签,并选出其关键实例和子概念,如果预测值>相关标签预测值+1,则此标签为违反标签,此时用SGD进行参数更新并且归一化,
在算法的测试阶段,对于一个包
X
t
e
s
t
X_{test}
Xtest,我们可以得到每个标签的预测值,从而得到所有标签的排名, 对于单标签分类问题,可以通过选择预测值最大的标签来获得
X
t
e
s
t
X_{test}
Xtest的标签。然而,在多标签学习中,包
X
t
e
s
t
X_{test}
Xtest可以有多个标签;因此,人们不知道排名的标签列表中应该选择多少个与包相关的标签, 为了解决这个问题,我们给每个袋子分配一个虚拟标签,用y ̂表示,并训练模型将虚拟标签排在所有不相关的标签之前,排在相关的标签之后, 为了实现这一思想,我们特别考虑构造不相关的标签集
Y
ˉ
\bar{Y}
Yˉ,具体来说,当一个包
X
X
X和它的标签
y
y
y被抽取时,算法首先检查
y
y
y是否为虚拟标签也就是
y
=
y
^
y=\hat{y}
y=y^,如果y
y
=
y
^
y=\hat{y}
y=y^,那么
Y
ˉ
\bar{Y}
Yˉ包含所有不相关的标签,这意味着
y
y
y(虚拟标签)将排在所有不相关的标签之前,否则
Y
ˉ
\bar{Y}
Yˉ既包含了虚拟标签,又包含了所有不相关的标签,这意味着相关的标签
y
y
y会排在虚拟标签和不相关标签之前,通过这种方式,对模型进行训练,将虚拟标签在相关标签和不相关标签之间进行排序。对于一个测试包,在虚拟标签之前的标签被选为相关的标签。
结论
MIML是一个学习复杂对象的框架,在许多应用中被证明是有效的。然而,现有的MIML方法在处理大规模问题时通常过于耗时。在本文中,我们提出了一种利用MIML实例快速学习的MIMLfast方法。一方面,基于两层线性模型,采用SGD对近似排序损失进行优化,有效地提高了排序效率;另一方面,通过在共享空间中利用标签关系,发现复杂标签的子概念来实现有效性。此外,MIMLfast可以检测每个标签的键实例,从而有机会发现输入模式和输出标签语义之间的关系。在未来,我们会尽量优化其他的 l o s s f u n c t i o n loss function lossfunction,而不是 r a n k l o s s rank loss rankloss。此外,更大规模的问题和非线性模型将被研究