本来想上个月写的,又拖延了

这个半监督深度学习又小结系列将会以某个主题来讲述半监督深度学习的现状,呃是我了解的现状,前一篇的主题是Consistency regularization,本次的主题为类协同训练

协同训练 Co-training

Co-training是基于分歧的方法,其假设每个数据可以从不同的角度(view)进行分类,不同角度可以训练出不同的分类器,然后用这些从不同角度训练出来的分类器对无标签样本进行分类,再选出认为可信的无标签样本加入训练集中。由于这些分类器从不同角度训练出来的,可以形成一种互补,而提高分类精度;就如同从不同角度可以更好地理解事物一样

但该方法理论很强,但却一定的假设条件(事实上半监督学习都是在一定的假设条件下进行的),引用周志华大大《基于分歧的半监督学习》中的描述,

协同训练法要求数据具有两个充分冗余且满足条件独立性的视图,

1. 「充分 (Sufficient)」 是指每个视图都包含足够产生最优学习器的信息, 此时对其中任一视图来说,另一个视图则是「冗余 (Redundant)」 的

2. 对类别标记来说这两个视图条件独立

这个数据假设就很强力了,既要求数据信息充分还冗余,你还要找到两个独立互补的视图。但是,在一定程度上满足条件的情况下,co-training 的效果也是非常给力。

那么,在半监督深度学习里,co-training会以什么方式呈现呢?问题的关键自然在于,如何去构建两个(或多个)近似代表充分独立的视图的深度模型,两个比较直观的方法就是:

  • 使用不同的网路架构(据我看过的论文[1][2]中指出,哪怕是对同一个数据集,不同的网路架构学习到的预测分布是不一样的)
  • 使用特殊的训练方法来得到多样化的深度模型

注:以下工作的推荐,是我自认为其思想类似于co-training,因此称为类协同训练,不是说下面的工作就一定是co-training...orz

Deep Co-Training for Semi-Supervised Image Recognition

这是一篇ECCV 2018的文章,论文首先指出,直接对同一个数据集训练两个网路,会有两个弊端:

  • 对同一个数据集训练两个网路,并不能保证两个网路具有不同的视图,更不能保证具有不同且互补的信息
  • 协同训练会使得两个网路在训练过程中趋于一致,会导致 collapsed neural networks,进而使得协同训练失效

为了解决上述问题,论文主要做了两个工作:

  1. 提出了一个新的代价函数,进行协同训练,其形式如下:

L_{cot} = H(frac{1}{2}(p_1(x)+p_2(x))) - frac{1}{2}(H(p_1(x)) + H(p_1(x)))

资讯理论学得不好请多见谅,大概就是均匀分布的熵最大,当两个预测分布不一致时,这两个预测分布求和取平均会使得熵增大(相反,如果预测一致熵就不会增加多少)

论文中还明确强调,该代价函数只用在无标签数据上,因为有标签数据的监督代价函数(论文用的交叉熵)已经使得预测趋于一致(趋于真实标签),用在有标签数据上没有必要,但是好像没说明也用在有标签数据上的后果。

2. (关键)提出了View Difference Constraint。其思路是:我们只有一个数据集D,但我们不能再同一个数据集上训练两个网路,因此需要从D中派生出另一个数据集D,而这个派生方法就是计算D的对抗样本。具体即使用对方的对抗样本来训练自己:

L_{dif}=H(p_1(x), p_2(g_1(x))) + H(p_2(x), p_1(g_2(x)))

其中, g_1(x) 表示网路 p_1 的对抗样本, H(cdot) 是某种代价函数(KL散度?),该约束的设计期望是使得两个网路具备不同却互补信息。

我个人觉得这是一个 very amazing 的想法。尽管我不知道理论上是否能保证两个网路不同却互补,但直观上...orz

实验效果非常的好,两个(或多个)网路使用的是同一种架构,就是感觉没有和集成方法比较感觉有点遗憾,毕竟论文用了多个网路。

PS:[论文][不用点,没有代码]

Tri-net for Semi-Supervised Deep Learning

Tri-net 是 IJCAI 2018 的论文,挂著周志华大大的名字,用的思想也是周志华提出来的 tri-training,可谓阵容豪华。

论文称类协同训练为 disagreement-based semi-supervised learning,其关键在于训练多个分类器,已经对不同视图上的不一致性的探索。为此,论文从三个方面改进:model initialization,diversity augmentation 和 pseudo-label editing

在展开这三个贡献点之前,我们先来看看 Tri-net 的网路架构:

按照把网路架构分为低层抽象和高层抽象部分,Tri-net 架构中的 Ms 是一个共享的低层抽象部分,而 Tri-net 的高层抽象部分是用三个不同的网路架构组成。

刚开始我看到这个架构时,一脸懵逼,但后来想想,这样设计也有一定道理。

首先,根据我了解的迁移学习理论,低层抽象部分确实是可以共用,用预训练模型进行迁移学习时,低层抽象部分是建议使用很小的学习率或者不学习的。

其次,不同的高层部分对低层抽象还是有一定程度不同的影响,作为共享低层部分,能学习到满足不同高层部分的低层抽象,即更具泛化性的低层抽象(当然这是我猜的...orz)

然后其训练过程主要分为两部分:

1.使用Output Smearing处理的有标签数据初始化网路,可以使不同的高层抽象具有不同的预测分布。

2.Tri-training 网路:如果有两个高层抽象对一个样本具有一致预测,且该预测可信且稳定,则把该样本作为加入到第三个高层抽象的训练数据中。同时,为了防止 collapsed neural networks 问题(Deep Co-Training提到),还会在某些epoch中继续使用 Output Smearing 训练网路,以增加不同高层抽象的 diversity。

OK,现在来看看论文的三个贡献点:

  1. Output Smearing. 同上文的 Deep Co-Training 的论文一样,该论文也认为不能直接在同一个数据集 D 上直接训练网路,Output smearing 通过向有标签数据的添加随机杂讯来构造不同的数据集 D1,D2,D3,分别用来初始化对应的高层抽象部分 M1,M2,M3,这样就能使用高层抽象部分多样化(即代表不同的视图)
  2. Diversity Augmentation. 为了解决 collapsed neural networks 问题,在特定的epoch继续使用 output smearing 数据集来 fine-tune 网路,以继续增强多样化。
  3. Pseudo-Label Editing. Tri-training 训练时,需要挑选可靠稳定的无标签样本加入训练集,如何确定预测的样本是可靠且稳定?本身 Tri-training 这种类协同训练挑选的样本就具有很强的可靠,论文提出一个的方法 Pseudo-label editing:通过 Dropout 的随机性,对样本进行多次预测,如果多次预测的结果都几乎一样,则认为是稳定的。

模型的缺点也相对明显,训练过程相对复杂,感觉靠经验设计;Pseudo-label editing 需要进行多次预测,估计计算负担也挺重的。

PS:[论文]

Consensus-Driven Propagation in Massive Unlabeled Data for Face Recognition

这篇ECCV 2018 的论文是做人脸识别的,主要提出了一个 Consensus-driven propagation 的演算法,该演算法主要由三部分:committee,mediator 和 pseudo label propagation 组成。

  1. committee

Commitee 需要用有标签数据训练一个 base model 和 N 个 committee models,而且这些 models 都需要使用不同的网路架构,以保证 diversity (信息的多样性)。然后使用这些 models 提取深度特征,构建 KNN 图,并进一步获取三种信息:

Relationship:0-1邻接图,若两个节点在所有的 committee models 的 KNN图中都邻接,则为1.(为什么要排除 base model?)

Affinity:节点间的相似性信息,论文用余弦相似度。

Local structures w.r.t each node:一个节点与其他所有节点的相似性信息,论文用余弦相似度。

2. mediator

一个全连接网路,用来融合上面的多视图信息,来判断正的样本对,和负的样本对。

3. Pseudo Label Propagation

一个对无标签数据赋 pseudo label 的演算法,通过 mediator 给出的正样本对的概率作为相似度量,貌似通过一种类似聚类的方法,给样本赋 pseudo label。

论文里面提到的一些概念和想法挺有意思,实验上也很充分,一定程度上佐证了我的一些思考。

PS:[论文][代码]

小结

最后,我们来总结一下类协同训练在深度学习中应用的三个关键点:

  1. 怎么训练具有不同视图信息的分类器?目前看到的方法有二:1. 构建不同的数据集;2. 使用不同的网路架构。看起来两种方法一起用效果会更好。
  2. 如何解决 collapsed neural networks 问题,即如何保持分类器的 diversity,这问题非常重要。
  3. 如何训练「好」的无标签样本加入训练集?虽然协同训练本身通过一致性原则选择的样本就具有一定的可靠性,但是否有很好的挑选方法?如稳定性

最后的最后,再安利另一篇文章,是中大凌亮老师团队的 Deep Co-Space: Sample Mining Across Feature Transformation for Semi-Supervised Learning,利用样本间关系的时序差异,来挑选「好」的无标签样本。这想法非常赞,值得研读。

终于又分享了一篇...还有另外计划中的要赶快写一写才行,不然都快过时了...orz

文中引用的参考文献

[1]Tong He, Zhi Zhang, Hang Zhang, Zhongyue Zhang, Junyuan Xie, Mu Li. Bag of Tricks for Image Classification with Convolutional Neural Networks. ArXiv:1812.01187

[2]Wei Han, Ruyi Feng, Lizhe Wang, Yafan Cheng. A semi-supervised generative framework with deep learning features for high-resolution remote sensing image scene classification. ISPRS Journal of Photogrammetry and Remote Sensing.


推荐阅读:
相关文章