《Pseudo-Label : The Simple and Efficient Semi-Supervised Learning
Method for Deep Neural Networks》
1. 摘要
We propose the simple and efficient method of semi-supervised learning for deep neural networks. Basically, the proposed network is trained in a supervised fashion with labeled and unlabeled data simultaneously. For un- labeled data, Pseudo-Labels
, just picking up the class which has the maximum predicted probability, are used as if they were true labels. This is in effect equivalent to Entropy Regularization. It favors a low-density sepa- ration between classes, a commonly assumed prior for semi-supervised learning. With Denoising Auto-Encoder and Dropout, this simple method outperforms conventional methods for semi-supervised learning with very small labeled data on the MNIST handwritten digit dataset.
我们提出了用于深度神经网络的简单而有效的半监督学习方法。基本上,所提出的网络以有监督的方式同时使用标记和未标记的数据进行训练。对于未标记的数据,伪标签,只是选择具有最大预测概率的类,就好像它们是真正的标签一样使用。这实际上等同于熵正则化。它有利于类之间的低密度分离,这是半监督学习中通常假设的先验。借助降噪自动编码器和 Dropout,这种简单的方法在 MNIST 手写数字数据集上使用非常小的标记数据优于传统的半监督学习方法。
Question:
写在前面,摘要是论文的门面,按理来说,只需要看摘要我们就知道论文做了什么,只是其中的细节不知道。所以在阅读完摘要后,提出几个问题,然后带着问题阅读论文。
Q1:
文中提出一个模型能同时使用有标签数据和无标签数据训练,是怎样的模型?
Q2:
伪标签是同时打的,还是分批次打的?
Q3:
打伪标签的模型与最终训练的模型是一个,还是独立运行的?
2. 算法描述
算法分为两个阶段, 一个是模型预训练,另外一个是模型微调
2.1 Unsupervised Pre-training Phase
预训练阶段用到了Denoising Auto-Encoder
这个是已有的模型(《Extracting and Composing Robust Features with Denoising Autoencoders》),是一个无监督模型,也就是说没有用到标签信息。具体内容可以参考博客。在本文中的作用是初始化网络参数,我一般都是随机初始化的(😓)。
2.2 Fine-tuning Phase
这部分内容才是论文的主要贡献,在预训练好的模型上进行微调。
L
=
1
n
∑
m
=
1
n
∑
i
=
1
C
L
(
y
i
m
,
f
i
m
)
+
α
(
t
)
1
n
′
∑
m
=
1
n
′
∑
i
=
1
C
L
(
y
i
′
m
,
f
i
′
m
)
(1)
L = \frac{1}{n}\sum^{n}_{m=1}\sum^{C}_{i=1}L(y_i^m, f^m_i) + \alpha(t)\frac{1}{n'}\sum^{n'}_{m=1}\sum^{C}_{i=1}L(y_{i}^{'m}, f^{'m}_i) \tag{1}
L=n1m=1∑ni=1∑CL(yim,fim)+α(t)n′1m=1∑n′i=1∑CL(yi′m,fi′m)(1)
其中:
- n n n 是已标注样本一个 batch_size 的样本数, n ′ n^{'} n′是未标注样本的一个 batch_size 的样本数, C C C 是类别数;
- f i m f_i^m fim是已标注样本的输出, y i m y_i^m yim是已标注样本的真实标签;
- f i ′ m f_i^{'m} fi′m是未标注样本的输出, y i ′ m y_i^{'m} yi′m是未标注样本的伪标签;
- α ( t ) \alpha(t) α(t)是平衡已标注样本损失和未标注样本损失的系数,对模型的性能有着至关重要的影响。如果 α ( t ) \alpha(t) α(t) 太大,即使是标记数据也会干扰训练;而如果 α ( t ) \alpha(t) α(t) 太小,则不能利用未标注数据。
- L L L这里表示交叉熵损失。
其中需要注意的是这里的伪标签:
y
i
′
=
{
1
,
if
i
=
arg max
i
′
f
i
′
(
x
)
0
,
otherwise
(2)
y^{'}_i= \begin{cases} 1, & \text{if}\, i = \argmax_{i^{'}}{f_{i^{'}}(x)}\\ 0, & \text{otherwise}\\ \end{cases}\tag{2}
yi′={1,0,ifi=argmaxi′fi′(x)otherwise(2)
3. 问题回答
Q1:
文中提出一个模型能同时使用有标签数据和无标签数据训练,是怎样的模型?
这个问题,是本文的主要贡献,可以通过等式(1)
回答。
Q2:
伪标签是同时打的,还是分批次打的?
这个问题论文中回答的很隐秘。
For unlabeled data, Pseudo-Labels recalculated every weights update are used for the same loss function of supervised learning task.
由此可知,这里是说每次模型参数更新,伪标签也会随之更新。通过等式(2)
可知,伪标签是预测概率最大的类别。举个例子,对于一个无标签数据
x
i
\mathbf{x}_i
xi,模型预测输出为
f
i
′
m
=
<
0.15
,
0.15
,
0.6
,
0.1
>
f_i^{'m}=<0.15, 0.15, 0.6, 0.1>
fi′m=<0.15,0.15,0.6,0.1>,通过等式(2)
可知,对应的伪标签为
y
i
′
m
=
<
0
,
0
,
1
,
0
>
y_i^{'m}=<0, 0, 1, 0>
yi′m=<0,0,1,0>,由此无监督损失得以计算。所以说这里的伪标签应该算是随用随打。
Q3:
打伪标签的模型与最终训练的模型是一个,还是独立运行的?
有这个疑问主要是存在一个模型预训练阶段。值得注意的是这里的伪标签很暴力,直接认为样本属于概率最大的那个类别。所以说,毫无疑问,这里的伪标签模型与最终模型是一个。