Skip to content

13 半监督学习 ​

让学习过程不依赖外界的咨询交互,自动利用未标记样本所包含的分布信息的方法便是半监督学习。

13.1 未标记样本 ​

我们有训练样本集Dl={(x1,y1),(x2,y2),…,(xl,yl)},这l个样本的类别标记已知,称为“有标记”样本;此外,我们还有Du={xl+1,…,xl+u},这u个样本的类别标记未知,称为“未标记”样本。若直接丢弃掉无标记样本集,使用传统的监督学习方法,常常会由于训练样本的不充足,使得其刻画总体分布的能力减弱,从而影响了学习器泛化性能。那如何利用未标记的样本数据呢?

主动学习 ​

一种简单的做法是通过专家知识对这些未标记的样本进行打标,但随之而来的就是巨大的人力耗费。若我们先使用有标记的样本数据集训练出一个学习器,再基于该学习器对未标记的样本进行预测,从中挑选出不确定性高或分类置信度低的样本来咨询专家并进行打标,最后使用扩充后的训练集重新训练学习器,这样便能大幅度降低标记成本,这便是主动学习(active learning),其目标是使用尽量少的/有价值的咨询来获得更好的性能。

显然,主动学习需要与外界进行交互/查询/打标,其本质上仍然属于一种监督学习。事实上,无标记样本虽未包含标记信息,但它们与有标记样本一样都是从总体中独立同分布采样得到,因此它们所包含的数据分布信息对学习器的训练大有裨益。如何让学习过程不依赖外界的咨询交互,自动利用未标记样本所包含的分布信息的方法便是半监督学习(semi-supervised learning),即训练集同时包含有标记样本数据和未标记样本数据。

1.webp

此外,半监督学习还可以进一步划分为纯半监督学习和直推学习,两者的区别在于:前者假定训练数据集中的未标记数据并非待预测数据,而后者假定学习过程中的未标记数据就是待预测数据。

img

13.2 生成式方法 ​

生成式方法(generative methods)是基于生成式模型的方法,即先对联合分布P(x,c)建模,从而进一步求解P(c|x),此类方法假定样本数据服从一个潜在的分布,因此需要充分可靠的先验知识。例如:前面已经接触到的贝叶斯分类器与高斯混合聚类,都属于生成式模型。现假定总体是一个高斯混合分布,即由多个高斯分布组合形成,从而一个子高斯分布就代表一个类簇(类别)。高斯混合分布的概率密度函数如下所示:

p(x)=∑i=1Nαi⋅p(x|μi,Σi)

其中αi是混合系数,μi是均值向量,Σi是协方差矩阵。

不失一般性,假设类簇与真实的类别按照顺序一一对应,即第i个类簇对应第i个高斯混合成分。与高斯混合聚类类似地,这里的主要任务也是估计出各个高斯混合成分的参数以及混合系数,不同的是:对于有标记样本,不再是可能属于每一个类簇,而是只能属于真实类标对应的特定类簇。

LL(Dl∪Du)=∑(xj,yj)∈Dlln⁡(∑i=1Nαi⋅p(xj|μi,Σi)⋅p(yj|Θ=i,xj))+∑xj∈Duln⁡(∑i=1Nαi⋅p(xj|μi,Σi))

其中p(xj|μi,Σi)表示有类标样本只在特定类簇中出现,p(yj|Θ=i,xj)表示当且仅当i=j时,p(xj|μi,Σi)表示无类标样本可能在所有类簇中出现。

直观上来看,基于半监督的高斯混合模型有机地整合了贝叶斯分类器与高斯混合聚类的核心思想,有效地利用了未标记样本数据隐含的分布信息,从而使得参数的估计更加准确。同样地,这里也要召唤出之前的EM大法进行求解,首先对各个高斯混合成分的参数及混合系数进行随机初始化,计算出各个PM(即γji,第i个样本属于j类,有标记样本则直接属于特定类),再最大化似然函数(即LL(D)分别对α、μ和Σ求偏导),对参数进行迭代更新。

μi=1∑xj∈Duγji+li(∑xj∈Duγjixj+∑(xj,yj)∈Dl∧yj=ixj)Σi=1∑xj∈Duγji+li(∑xj∈Duγji(xj−μi)(xj−μi)T+∑(xj,yj)∈Dl∧yj=i(xj−μi)(xj−μi)T)αi=1m(∑xj∈Duγji+li)

其中li是指第i类有标记样本数目。

当参数迭代更新收敛后,对于待预测样本x,便可以像贝叶斯分类器那样计算出样本属于每个类簇的后验概率,接着找出概率最大的即可:

p(Θ=i|x)=αi⋅p(x|μi,Σi)∑i=1Nαi⋅p(x|μi,Σi)f(x)=arg⁡maxj∈Y∑i=1Np(y=j|Θ=i,x)⋅p(Θ=i|x)

可以看出:基于生成式模型的方法十分依赖于对潜在数据分布的假设,即假设的分布要能和真实分布相吻合,否则利用未标记的样本数据反倒会在错误的道路上渐行渐远,从而降低学习器的泛化性能。因此,此类方法要求极强的领域知识和掐指观天的本领。

13.3 半监督SVM ​

监督学习中的SVM试图找到一个划分超平面,使得两侧支持向量之间的间隔最大,即“最大划分间隔”思想。对于半监督学习,S3VM则考虑超平面需穿过数据低密度的区域。TSVM是半监督支持向量机中的最著名代表,其核心思想是:尝试为未标记样本找到合适的标记指派,使得超平面划分后的间隔最大化。TSVM采用局部搜索的策略来进行迭代求解,即首先使用有标记样本集训练出一个初始SVM,接着使用该学习器对未标记样本进行打标,这样所有样本都有了标记,并基于这些有标记的样本重新训练SVM,之后再寻找易出错样本不断调整。整个算法流程如下所示:

minw,b,y^,ξ12∥w∥22+Cl∑i=1lξi+Cu∑i=l+1mξi s.t. yi(wTxi+b)⩾1−ξi,i=1,2,…,ly^i(wTxi+b)⩾1−ξi,i=l+1,l+2,…,mξi⩾0,i=1,2,…,m

其中ξi是松弛变量hinge损失。

输入:有标记样本集Dl={(x1,y1),(x2,y2),…,(xl,yl)};
   未标记样本集Du=xl+1,xl+2,…,xl+u;
   折中参数Cl,Cu
过程:
  1: 用Dl训练一个SVMl(初始SVM);
  2: 用SVMl对Du中样本进行预测,得到y^=(y^l+1,y^l+2,…,y^l+u)
  3: 初始化Cu≪Cl
  4: while Cu<Cl do   5:   基于Dl,Du,y^,Cl,Cu求解式(1),得到(w,b),ξ
  6:    while ∃{i,j|(y^iy^j<0)∧(ξi>0)∧(ξj>0)∧(ξi+ξj>2)} do(松弛变量越大表示离超平面越近,越容易分错)
  7:     $\hat{y}_i = -\hat{y}_i $
  8:     $\hat{y}_j = -\hat{y}_j $
  9:     基于Dl,Du,y^,Cl,Cu重新求解式(1),得到(w,b),ξ
10:   end while
11:   Cu=min{2Cu,Cl}(逐渐增大Cu)
12: end while
输出:未标记样本的预测结果:y^=(y^l+1,y^l+2,…,y^l+u)(最终调整后的结果)

基于分歧的方法 ​

  基于分歧的方法通过多个学习器之间的分歧(disagreement)/多样性(diversity)来利用未标记样本数据,协同训练就是其中的一种经典方法。协同训练最初是针对于多视图(multi-view)数据而设计的,多视图数据指的是样本对象具有多个属性集,每个属性集则对应一个试图。例如:电影数据中就包含画面类属性和声音类属性,这样画面类属性的集合就对应着一个视图。首先引入两个关于视图的重要性质:

  • 相容性:即使用单个视图数据训练出的学习器的输出空间是一致的。例如都是{好,坏}、{+1,−1}等。
  • 互补性:即不同视图所提供的信息是互补/相辅相成的,实质上这里体现的就是集成学习的思想。

  协同训练正是很好地利用了多视图数据的“相容互补性”,其基本的思想是:首先基于有标记样本数据在每个视图上都训练一个初始分类器,然后让每个分类器去挑选分类置信度最高的样本并赋予标记,并将带有伪标记的样本数据传给另一个分类器去学习,从而你依我侬/共同进步。

img

输入:有标记样本集Dl={(⟨x11,x12⟩,y1),…,(⟨xl1,xl2⟩,yl)};
   未标记样本集Du={⟨xl+11,xl+12⟩,…,⟨xl+u1,xl+u2⟩};
   缓冲池大小s;
   每轮挑选的正例数p;
   每轮挑选的负例数n;
   基学习算法L;
   学习轮数T; 过程:
  1: 从Du中随机抽取s个样本构成缓冲池Ds(设置缓冲池,减少了每轮计算置信度的次数)
  2: Du=Du∖Ds
  3: for j=1,2 do
  4:   Dlj={(xij,yi)|(⟨xij,xi3−j⟩,yi)∈Dl}(各视图的有标记样本)
  5: end for
  6: for t=1,2,…,T do
  7:    for j=1,2 do
  8:     hj←L(Dlj)(基于每个视图训练初始学习器)
  9:     考察hj在Dsj={xij|⟨xij,xi3−j⟩∈Ds}上的分类置信度,挑选p个正例置信度最高的样本Dp⊂Ds、n个反例置信度最高的样本Dn⊂Ds;
10:      由Dpj生成伪标记正例D~p3−j={(xi3−j,+1)|xij∈Dpj};
11:      由Dnj生成伪标记反例D~n3−j={(xi3−j,−1)|xij∈Dnj};
12:      Ds=Ds∖(Dp∪Dn)(两个学习器挑选的不会有重复)
13:    end for
14:    if h1,h2均未发生改变 then
15:      break
16:    else
17:     for j=1,2 do
18:        Dlj=Dlj∪(D~pj∪D~nj)(加入打过伪标的未标记样本)
19:     end for
20:      从Du中随机抽取2p+2n个样本加入Ds(补充缓冲池)
21:   end if
22: end for
输出:分类器h1,h2(最终输出两个分类器做集成)

13.4 半监督聚类 ​

  前面提到的几种方法都是借助无标记样本数据来辅助监督学习的训练过程,从而使得学习更加充分/泛化性能得到提升;半监督聚类则是借助已有的监督信息来辅助聚类的过程。一般而言,监督信息大致有两种类型:

  • 必连与勿连约束:必连指的是两个样本必须在同一个类簇,勿连则是必不在同一个类簇。
  • 标记信息:少量的样本带有真实的标记。

  下面主要介绍两种基于半监督的K-Means聚类算法:第一种是数据集包含一些必连与勿连关系,另外一种则是包含少量带有标记的样本。两种算法的基本思想都十分的简单:对于带有约束关系的k-均值算法,在迭代过程中对每个样本划分类簇时,需要检测当前划分是否满足约束关系,若不满足则会将该样本划分到距离次小对应的类簇中,再继续检测是否满足约束关系,直到完成所有样本的划分。算法流程如下图所示:

输入:样本集D={x1,x2,…,xm}
   必连约束集合M;
   勿连约束集合C;
   聚类簇数k
过程:
  1: 从D中随机选取k个样本作为初始均值向量{μ1,μ2,…,μk}
  2: repeat
  3:   Cj=∅(1⩽j⩽k);
  4:   for i=1,2,…,m do
  5:     计算样本xi与各均值向量μj(1⩽j⩽k)的距离:dij=∥xi−μj∥2;
  6:     K={1,2,…,k};
  7:     is_merged=false
  8:     while !is_merged do
  9:       基于K找出与样本xi距离最近的簇:r=arg⁡minj∈K{dij}
10:       检测将xi划入聚类簇Cr是否会违背M与C中的约束;
11:       if !is_voilated then
12:         Cr=Cr∪{xi}
13:         is_merged=true
14:       else
15:         K=K∖{r}(若不满足则虚招距离次小的类簇)
16:         if K=∅ then
17:           break并返回错误提示
18:         end if
19:       end if
20:     end while
21:   end for
22:   for j=1,2,…,k do
23:     uj=1|Cj|∑x∈Cjx
24:   end for
25: until 均值向量均未更新
输出:簇划分{C1,C2,…,Ck}

其中8-20表示对样本进行划分时,需检测是否满足约束关系,其他步骤均相同。

  对于带有少量标记样本的k-均值算法,则可以利用这些有标记样本进行类中心的指定,同时在对样本进行划分时,不需要改变这些有标记样本的簇隶属关系,直接将其划分到对应类簇即可。算法流程如下所示:

输入:样本集D={x1,x2,…,xm};
   少量有标记样本S=⋃j=1kSj;
   聚类簇数k
过程:
  1: for j=1,2,…,k do
  2:   uj=1|Sj|∑x∈Sjx
  3: end for
  4: repeat
  5:   Cj=∅(1⩽j⩽k)
  6:   for j=1,2,…,k do
  7:     for all x∈Sj do
  8:       Cj=Cj∪{x}
  9:     end for
10:   end for
11:   for all x∈D∖S do
12:     计算样本xi与歌均值向量μj(1⩽j⩽k)的距离:dij=∥xi−μj∥2;
13:     找出与样本xi距离最近的簇:r=arg⁡minj∈{1,2,…,k}dij
14:     将样本xi划入相应的簇:Cr=Cr∪{xi}(划分无标记样本)
15:   end for
16:   for j=1,2,…,k do
17:     μj=1|Cj|∑x∈Cjx;(重新计算类中心)
18:   end for
19: until 均值向量均未更新
输出:簇划分{C1,C2,…,Ck}

  上面算法过程中,1-3表示使用带标记样本各类别的均值向量作为初始类中心,6-10表示带标记样本直接划入对应类簇。