在深度学习中,自训练和协同训练是两种常见的半监督学习算法,本文将简单介绍两种算法的基本思想。
一、自训练
自训练(Self-Training,或 Self-Teaching),也叫自举法(Bootstrapping),是一种非常简单的半监督学习算法。自训练是首先使用标注数据来训练一个模型,并使用这个模型来预测无标注样本的标签,把预测置信度比较高的样本及其预测的伪标签加入训练集,然后重新训练新的模型,并不断重复这个过程。具体算法流程可参照下图:

自训练算法通过不断地迭代来提高模型能力。但自训练的缺点是无法保证每次加入训练集的样本的伪标签是正确的。此时如果选择样本的伪标签是错误的,反而会损害模型的预测能力。因此,自训练算法最关键的步骤是如何设置挑选样本的标准。
二、协同训练
协同训练(Co-Training)是自训练的一种改进方法,通过两个基于不同视角(view)的分类器来互相促进。很多数据都有相对独立的不同视角。比如互联网上的每个网页都由两种视角组成:文字内容(text)和指向其他网页的链接(hyperlink)。如果要确定一个网页的类别,既可以根据文字内容来判断,也可根据网页之间的链接关系来判断。
假设一个样本 𝒙 = [𝒙1 , 𝒙2 ],其中 𝒙1 和 𝒙2 分别表示两种不同视角 𝑉1 和𝑉2 的特征,并满足下面两个假设: 1.条件独立性。给定样本标签 𝑦 时,两种特征条件独立𝑝(𝒙1 , 𝒙2 |𝑦) = 𝑝(𝒙1 |𝑦)𝑝(𝒙2 |𝑦); 2.充足和冗余性。当数据充分时,每种视角的特征都足以单独训练出一个正确的分类器。 我们令 𝑦 = 𝑔(𝒙) 为需要学习的真实映射函数,𝑓1 和𝑓2 分别为两个视角的分类器,有: ∃𝑓1 , 𝑓2 , ∀𝒙 ∈ 𝒳, 𝑓1 (𝒙1 ) = 𝑓2 (𝒙2 ) = 𝑔(𝒙)
其中 𝒳 为样本𝒙的取值空间。
协同算法要求两种视角是条件独立的。如果两种视角完全一样,则协同训练退化成自训练算法。协同训练算法的具体流程如下图所示:
由于不同视角的条件独立性,在不同视角上训练出来的模型就相当于从不同视角来理解问题,具有一定的互补性。协同训练就是利用这种互补性来进行自训练的一种方法。首先在训练集上根据不同视角分别训练两个模型 𝑓1 和 𝑓2,然后用 𝑓1 和 𝑓2 在无标注数据集上进行预测,各选取预测置信度比较高的样本加入训练集,重新训练两个不同视角的模型,并不断重复这个过程。