半监督学习笔记(四):熵最小化、代理变量

半监督学习笔记(四)

昨天的更新中,我们学习了几种基于对抗方法的一致性正则化的策略,接下来让我们做一个简单的复习:

1、 Fast-SWA:采用了退火算法的思想,逼近多个最小值点后求平均。

2、 Virtual Adversarial Training:通过找到网络的薄弱点,选择性的挑取噪声进行训练。

3、 Adversarial Dropout:采用对抗性的方法找到最弱的随机丢弃层,其中运用了元素级丢弃和通道级丢弃的方法。

4、 Interpolation Consitency training:插值一致性训练,体现了奥卡姆剃刀准则。

5、 Unsuperviesd Data Augmentation:从数据本身的角度对数据进行增强。

之前更新的两篇文章已经结束了对一致性正则化方法的阐述,我们可以从中找到核心思路:主要利用了集成学习和对抗训练的思想,使得模型更加平滑。接下来我们来学习一些新的半监督学习的知识。

三、Entropy Minimization(熵最小化)

由于半监督学习的样本过少,所以一种比较好的思路就是再本次训练中将网络在上一次产生的,自信程度比较高的预测(我们就当他是预测对了的)加入到本次的训练中,这样反复的迭代,就从中体现了聚类的思想,使得决策边界能更加趋于真实。因此,在训练的时候我们需要让网络的预测更加自信,而不是比较犹豫。而熵最小化这套理论则是希望让网络的预测更加自信,也就是进行低熵预测。

所以,我们基于绝大部分数据点都远离决策边界的假设下,我们需要阻止网络的决策边界在数据点附近。这个方法我们可以通过增加一个对于预测的损失项来实现:

L = − ∑ k = 1 c f θ ( x ) k l o g f θ ( x ) k L=-\sum_{k=1}^cf_{\theta}(x)_{k}logf_{\theta}(x)_{k} L=k=1cfθ(x)klogfθ(x)k
对于分类问题,网络最后必然是通过一个softmax来输出,而softmax是所有的类别经过归一化之后自信程度。假设网络对每一个类的自信程度都相近,那么整体的熵值就会越大,反之则越小。通过添加这一项正则化项就能实现让网络的预测更加自信。当然,这也有不好的情况:倘若网络预测错了,那人家对自己的错误答案也会十分自信。

四、Proxy-label Methods(代理变量方法)

代理变量方法的定义之前已经说过,我们来复习一下:通过给没有标签的数据提供标签的方法利用无标签数据,从而优化网络的训练。代理变量的方法可以分为两类。

1、 自训练(self-training):每一个数据的标签由网络自己提供。

2、 多视角学习(Multi-view learning):代理变量由对数据的不同观测训练出的模型提供。

首先,我们先介绍自训练。

4.1 self-training

整体概念开头已经提过了,算法表述如下:给定数据集,利用有标记的数据训练网络,再让网络对未标记的数据进行预测,取自信程度最大的数据和预测,和原本有标记的数据整合作为新的训练集,再训练网络,如此循环。自训练也可以和熵最小化的方法结合,毕竟从目标上来说,都是希望网络不管预测的结果是对是错,都能让网络的判断更加自信。

#### 代理标签

Shi 提出了一种“自适应传输半监督学习”的方法,通过将未标记的样本的标签作为变量,并且通过迭代训练过程层最小化损失函数,尝试确定其标签和最好的模型参数。对于生成的代理标签的处理方法如下:将所有的标签视作“硬标签”。对所有的没有标记的样本,对其引入不确定性权重,这包括类间不确定性权重和类内一致性权重。以及具有不同扰动的样本之间的一致性项。

Iscen等人在伪标签中集成了标签传播算法,该方法交替使用了标记示例和伪标签训练网络,然后利用学习到的表示构建最近邻图,在该图中应用标签传播来优化伪标签。他们还引入了两个不确定性分数,一个是基于输出概率熵的每个样本的不确定性分数,以克服预测中的不平等置信度;另一个是基于类的频率都类间分数,来处理类间的不平衡。

这段话的重点是标签传播算法,从概念上来理解,这十分的简单:A和B有一定的相似度,B和C有一定的相似度。此时我们确定了C是什么,那么B和A在类别上和C就可能会一致。标签传播算法的应用也可以使得网络学到更好的表示。

Arazo表明了,一个未经充分训练的伪标记算法,通常会因为确认性偏差(Confirmation bias)会产生过拟合,以至于没有良好的性能。另外也证明了MixUp和设定每一个采样的minibatch数量中的样本最少数是一个减小确认性偏差(Confirmation bias)的好方法。

这段话该怎么理解呢?有两个重点,一个是确认性偏差,另一个是MixUp。首先我们先解释确认性偏差:

Overfitting to incorrect pseudo-labels Predicted by the network is known as confirmation bias(摘自Arazo原文)

这表明,对错误代理标签的过拟合就是确认性偏差。简单的来说,就是老师教了你一个错的东西,你还把他学过来了。


MixUp是什么呢?简单的说,就是把两个训练样本做一个插值,应用公式如下:

x ~ = λ x i + ( 1 − λ ) x j \tilde{x}=\lambda x_{i}+(1-\lambda)x_{j} x~=λxi+(1λ)xj, where x i x_{i} xi, x j x_{j} xj are raw input vectors.

y ~ = λ y i + ( 1 − λ ) y j \tilde{y}=\lambda y_{i}+(1-\lambda)y_{j} y~=λyi+(1λ)yj, where y i y_{i} yi, y j y_j yj are one-hot label encodings.

因此,MixUP就是对两个数据做一个插值,假设对一个二元分类问题而言,如果两个数据的label y y y相同,那么他们数据的中间值应该也会接近。对于独热编码的标签 y y y而言,这也引入了软标签的概念。

To sum up,代理标签的关键词如下:自适应传输半监督学习、标签传播算法、确认性偏差与校正。

Meta Pseudo Labels(元代理标签,MPL)

这里首先要解释一个概念:元学习(Meta learning)

元学习,简单的来说,就是“让机器学习去学习”。我们可以去想,假设让机器去拟合一个函数,我们需要自己设定学习率,超参数,甚至网络的架构(几层隐藏层)等。但是元学习就是训练一个函数,让这个函数观察了所要求解的问题之后,自己生成一个函数的架构,来最好的适应这个学习任务。

简单的来说,就是套娃。

好了,那么Meta Pseudo label是什么意思呢?

首先还是一个teacher和一个student。teacher生成代理标签给student学习,然后teacher根据student学习的反馈更新自己的参数,然后在下一次生成一批新的标签(按理说是更好的标签)给student继续学习。这是不是有点强化学习的味道?

一个MPL的步骤包括下面两步:

  • phase1:student从teacher这边学习,首先给定一个样本集 x ∈ D l x\in{D_{l}} xDl,teacher f θ ′ f_{\theta '} fθ 生成目标的类别分布区训练学生,每一个样本 ( x i , f θ ′ ( x ) ) (x_i,f_{\theta'}(x)) (xi,fθ(x))作为一个训练数据,然后通过正常的机器学习算法来学习。

  • phase2:teacher收集到学生的测试损失(通俗的来说,就是答卷)来更新自己的参数,得到 θ ′ ( t + 1 ) \theta ' (t+1) θ(t+1),从上述过程可以得知, θ ′ ( t + 1 ) \theta '(t+1) θ(t+1)都是从学生训练得到的参数中得出来的,因此也可以用梯度下降来求解。

    也就是说,老师可以通过学生的表现进行调整,就是师生相互学习,共同进步。

4.2 Multi-view training(多视角训练,MVL)

多视角训练利用了在现实中非常常见的多视角数据,这是什么意思呢?比如针对一个实践,我们要写调研,我们需要图片数据、文本数据等多元的数据。当同一个问题能收集到的数据形式多种多样,且每一种数据形式的样本数量都十分的有限时,MVL就希望学得一个函数集,函数集中的函数能对对这些真实数据 x x x对应的视角数据 v i ( x ) v_i(x) vi(x)进行建模,并且同时优化这些函数,以让最后的性能更好。当然,我们也希望这些函数集中的函数能够相互影响,互相学习,用来提高整体和彼此的预测性能。

4.2.1 Co-training(联合训练)

联合训练就是每一个数据 x x x有两个视角 v 1 ( x ) v_1(x) v1(x) v 2 ( x ) v_2(x) v2(x),并且每一个视角收集到的数据都足够多,能来训练一个函数。在两个预测函数 f θ 1 f_{\theta _1} fθ1 f θ 2 f_{\theta _2} fθ2训练成功之后,接下来进入循环:如果模型A对一个数据点有足够自信的预测(超过某个阈值),那么这个数据点就被用来作为另一个模型的训练集对模型B进行训练。简单的来说,就是一个模型能给另外一个模型提供该模型不确定的数据。

但是多数情况下, x x x只有一个视角 v ( x ) v(x) v(x),那么我们就可以使用不同的学习算法,或者不同的参数设定来训练两个分类器,然后执行相同的迭代过程。我们还可以对视角 v ( x ) v(x) v(x)加入噪声或者通过不同的增强方法来生成不同的视角。

Democratic Co-training

这就是把2个模型变成多个模型来替换对输入数据的不同视图,不过说来,这不就是集成学习的思想嘛?

4.2.2 Tri-Training (三重训练)

首先,有标记的数据集 D l D_l Dl被用来训练三个模型: f θ 1 f_{\theta_1} fθ1 f θ 2 f_{\theta_2} fθ2 f θ 3 f_{\theta_{3}} fθ3.对于一个给定的未标记数据 x ∈ D u x\in{D_{u}} xDu,如果有两个模型对他们的分类都是一致的,那么这个数据就加入用来训练另一个函数的监督学习数据集。直到没有数据被放入任何模型的监督学习训练集中,训练结束。三重训练集不需要多视角,也不需要独特的学习算法,因此这样的训练方法更加普遍。但是这样的问题在于:训练的开销太大了。每一次对一个样本进行预测,都需要三个模型来共同执行前向传播。

Multi-task tri-training(多任务三重训练)

当然,对于分类问题,我们可以通过让三个分类器都共享一个特征提取层来减少训练时间和采样的复杂性。比如对于图像,我们都可以用VGG16的骨架。在这种方法中,每一个模型在训练时,都需要增加一个正则化损失项来保证自己和另外两个模型是正交的。以防止模型出现相似性,最后以至于走向了自训练的路。Tri-Net就采取了上述方法,但是还额外加了一个输出涂抹去初始化这些模块。在代理标签迭代完成后,最后还增加了一个微调步骤,以用来消除可疑的伪标签。

Cross-View Training(交叉视角训练)

在自训练中,模型起了双重作用:自己又当老师又当学生,在交叉视角训练中,也有一种更好的解决方法:根据一个数据的不同视角,不同的模型被训练去尝试生成一致性的预测。首先,所有的模型共享编码层,然后增加一些辅助预测模块,用来将编码的表示转移成预测。这些模块被分成学生预测模块和主要的教室模块。每一个学生的预测都是模型的一部分。参考LSTM/双向LSTM层。这样所有的学生就会相互影响。主要教室模型只会被有标记的数据训练,并且教室模型需要根据所有的无标签输入的视角生成为标签。学生被按照跟教师产生一致性预测的方式被训练。

其中,给定一个编码器 e e e,一个教师模块 t t t K K K个学生模块 s i s_{i} si i ∈ [ 0 , K ] i\in{[0,K]} i[0,K],每一个学生都收到了一个输入的有限视角。损失函数如下:
L = L u + L s = 1 ∣ D u ∣ ∑ x ∈ D u ∑ i = 1 K d M S E ( t ( e ( x ) ) , s i ( e ( x ) ) ) + 1 ∣ D l ∣ ∑ x , y ∈ D l H ( t ( e ( x ) ) , y ) L=L_u+L_s=\frac{1}{|D_u|}\sum_{x\in{D_{u}}}\sum_{i=1}^K d_{MSE}(t(e(x)),s_i(e(x)))+\frac{1}{|D_l|}\sum_{x,y\in{D_l}}H(t(e(x)),y) L=Lu+Ls=Du1xDui=1KdMSE(t(e(x)),si(e(x)))+Dl1x,yDlH(t(e(x)),y)
其中 L u L_u Lu是无监督学习损失, L s L_s Ls是有监督学习损失。

交叉视图训练通过改进编码器的表示学习来利用未标记的数据。学生预测模块可以从教师模块的预测中学习,因为该主要模块对输入有更好的、不受限制的视图。当学生模块学习在输入视图受限的情况下做出准确预测时,他们提高了编码器生成的表示的质量,这反过来又改进了使用相同共享表示的完整模型。

你可能感兴趣的:(机器学习笔记,神经网络,机器学习,深度学习)