这里的分歧是指多学习器间的差异,如,不同视图、不同算法、不同数据采样、不同参数设置等等,而不仅指标记的分歧。
此类方法的典型代表有协同训练算法
基于分歧的方法
基于分歧的方法的典型代表有协同训练算法【西瓜书图13.6】,我们重点来理解一下该算法:
(1)多视图表示:如,电影片断=<音频片断,视频片断>,假定只考虑这两视图,则样本
x
i
=
<
x
i
1
,
x
i
2
>
\boldsymbol{x}_i=<\boldsymbol{x}_i^1,\boldsymbol{x}_i^2>
xi=<xi1,xi2>(上标为视图编号),这时,有标记的样本
(
x
i
,
y
i
)
(\boldsymbol{x}_i,y_i)
(xi,yi)变为
(
<
x
i
1
,
x
i
2
>
,
y
i
)
(<\boldsymbol{x}_i^1,\boldsymbol{x}_i^2>,y_i)
(<xi1,xi2>,yi),则有标记的样本集为:
D
l
=
{
(
<
x
i
1
,
x
i
2
>
,
y
i
)
}
i
=
1
l
D_l=\{(<\boldsymbol{x}_i^1,\boldsymbol{x}_i^2>,y_i)\}_{i=1}^l
Dl={(<xi1,xi2>,yi)}i=1l,将其分拆为
D
l
1
=
{
(
x
i
1
,
y
i
)
∣
(
<
x
i
1
,
x
i
2
>
,
y
i
)
∈
D
l
}
i
=
1
l
D
l
2
=
{
(
x
i
2
,
y
i
)
∣
(
<
x
i
1
,
x
i
2
>
,
y
i
)
∈
D
l
}
i
=
1
l
\begin{align*} D_l^1=\{(\boldsymbol{x}_i^1,y_i)|(<\boldsymbol{x}_i^1,\boldsymbol{x}_i^2>,y_i)\in D_l\}_{i=1}^l \\ D_l^2=\{(\boldsymbol{x}_i^2,y_i)|(<\boldsymbol{x}_i^1,\boldsymbol{x}_i^2>,y_i)\in D_l\}_{i=1}^l \end{align*}
Dl1={(xi1,yi)∣(<xi1,xi2>,yi)∈Dl}i=1lDl2={(xi2,yi)∣(<xi1,xi2>,yi)∈Dl}i=1l
这两个式子即为第3至5句,之所以用一个循环,是为了方便推广到
k
k
k个视图情况(若为
k
k
k视图,其任一视图记为
j
j
j时,则其他的
k
−
1
k-1
k−1个视图分别为
(
j
+
i
)
%
k
,
(
i
=
1
,
2
,
⋯
,
(
k
−
1
)
)
(j+i)\%k\,,\, (i=1,2,\cdots,(k-1))
(j+i)%k,(i=1,2,⋯,(k−1)))。
同样,也可对未标记的数据集
D
u
D_u
Du进行分拆。
基于两个视图,容易想到训练两个对应的学习器,但这样的两个学习器各自独立,没有交互,达不到“相互学习”的目的。
(2)假定有大量的未标记的样本,我们逐步拿出 D u D_u Du中的样本,使得学习循序渐进地进行。
(I)先拿出
D
u
D_u
Du的一个子集
D
s
,
∣
D
s
∣
=
s
D_s,|D_s|=s
Ds,∣Ds∣=s,并依两视图分拆为
D
s
1
D_s^1
Ds1和
D
s
2
D_s^2
Ds2,虽然,基于
D
l
1
∪
D
s
1
D_l^1\cup D_s^1
Dl1∪Ds1和
D
l
2
∪
D
s
2
D_l^2\cup D_s^2
Dl2∪Ds2可以分别训练出这两视图的学习器,但我们不这样做,而是考虑交替训练,以便相互学习。 我们以图13.3 )及其中的编号进行说明:
-
设已训练出视图1的学习器 h 1 h_1 h1(初始时为 h 1 = L ( D l 1 ) h_1=\mathfrak{L} (D_l^1) h1=L(Dl1)(有监督学习)),它有对应的置信度判别函数,也可以是分类器本身充当置信度判别函数,如,以函数符号进行分类时,则函数值的绝对值即为置信度。 绝对值越大则分类预测越可信(越有把握)。 将 h 1 h_1 h1作用于视图1的未标记样本集 D s 1 D_s^1 Ds1(对 D s 1 D_s^1 Ds1中的样本进行预测并给出预测的置信度);
-
依置信度从高到低排序后,可选出 p p p个置信度高的预测正例(伪正例),选出 n n n个置信度高的预测反例(伪反例),其中, p , n p,n p,n为超参且 p + n ≪ s p+n \ll s p+n≪s,得到伪正例集 D p 1 D_p^1 Dp1和伪反例集 D n 1 D_n^1 Dn1。 图中简记为伪例集 D p n 1 = D p 1 ∪ D n 1 D_{pn}^1=D_p^1\cup D_n^1 Dpn1=Dp1∪Dn1;
-
根据前述分拆规则,用视图1的伪例集 D p n 1 D_{pn}^1 Dpn1对应出视图2的伪例集 D ~ p n 2 \tilde{D} _{pn}^2 D~pn2;
-
训练视图2的学习器 h 2 h_2 h2,这时训练的基础除了有标记的样本集 D l 2 D_l^2 Dl2之外,还有伪标记集 D ~ p n 2 \tilde{D} _{pn}^2 D~pn2,由于我们是依置信度判别函数选出置信度排前的(置信度高),故我们将它“当成”实际标记,以 D l 2 ∪ D ~ p n 2 D_l^2\cup \tilde{D} _{pn}^2 Dl2∪D~pn2作为样例集,进行有监督学习训练出视图2上的学习器 h 2 h_2 h2;
-
在 D s D_s Ds中剔除掉已经使用 D ~ p n 2 \tilde{D} _{pn}^2 D~pn2所对应的样本,仍记为 D s D_s Ds,视图2的学习器 h 2 h_2 h2作用于 D s D_s Ds的 D s 2 D_s^2 Ds2(与第1步对称);
-
依置信度选出伪例集 D p n 2 = D p 2 ∪ D n 2 D_{pn}^2=D_p^2\cup D_n^2 Dpn2=Dp2∪Dn2(与第2步对称);
-
用视图2的伪例集 D p n 2 D_{pn}^2 Dpn2对应出视图1的伪例集 D ~ p n 1 \tilde{D} _{pn}^1 D~pn1(与第3步对称);
-
以 D l 1 ∪ D ~ p n 1 D_l^1\cup \tilde{D} _{pn}^1 Dl1∪D~pn1作为样例集,进行有监督学习,训练出视图1上的学习器 h 1 h_1 h1,在 D s D_s Ds中剔除掉已经使用 D ~ p n 1 \tilde{D} _{pn}^1 D~pn1所对应的样本,仍记为 D s D_s Ds,完成本轮交替学习。
( II)图中虚线框中过程表示:经过上述第1至8步完成了一轮交替训练(第4步训练视图2的学习器
h
2
h_2
h2,第8步训练视图2的学习器
h
1
h_1
h1),这时
D
s
D_s
Ds中的样本由于两次剔除而减少,从而需要补充样本,图左上角所示,
即
D
s
:
=
D
s
⋃
{
从
D
u
中抽取
2
n
+
2
p
个样本
}
D
u
:
=
D
u
∖
{
已抽取的
2
n
+
2
p
个样本
}
\begin{align*} D_s:&=D_s\bigcup \{\text{从$D_u$中抽取$2n+2p$个样本}\} \\ D_u:&=D_u\setminus \{\text{已抽取的$2n+2p$个样本}\} \end{align*}
Ds:Du:=Ds⋃{从Du中抽取2n+2p个样本}=Du∖{已抽取的2n+2p个样本}
补充样本后,又可以应用上述第1至8步进行下一轮交替训练,如此交替地训练 h 1 h_1 h1和 h 2 h_2 h2,直至用完 D u D_u Du中的样本。 这即是协同训练算法。
本文为原创,您可以:
- 点赞(支持博主)
- 收藏(待以后看)
- 转发(他考研或学习,正需要)
- 评论(或讨论)
- 引用(支持原创)
- 不侵权