0 前言
本文由整理李宏毅老师视频课笔记和个人理解所得,主要讲述了半监督学习的原理及实现方法。有问题欢迎在评论区下方交流,我会及时回复。
1 有监督和半监督的概念
有监督学习: { ( x r , y ^ r } r = 1 R \left\{\left(x^{r}, \hat{y}^{r}\right\}_{r=1}^{R}\right. {(xr,y^r}r=1R 训练时用了R个带标签的样本数据,用已经标记好的数据(labelled data),用来做训练来预测新数据的类型(class)。也就是说训练的过程中不仅参考了样本信息,也参考了标签信息。
半监督学习:假设有两组数据 { ( x r , y ^ r } r = 1 R , x u = R u R + U \left\{\left(x^{r}, \hat{y}^{r}\right\}_{r=1}^{R}, x_{u=R}^{u R+U}\right. {(xr,y^r}r=1R,xu=RuR+U一组是labelled,另外一组是unlabelled。通常一般的情况是U远大于R,也就是无unlabelled的数据更多。
一般可以分为两种:
-
(直推学习)Transductive learning:无标签数据就是测试数据,没有用label,只用了feature。
-
(归纳学习)Inductive Learning不把测试集考虑进来,也就是训练数据中使用的unlabelled的数据并非测试集中的数据。
如下图,假设我们要做分类的项目,要建立一个猫和狗的分类决策面,同时有一大堆有关猫和狗的图片,蓝色和橙色是有标签的,但是大部分灰色是没有标签的。那么如果只考虑有标签数据,那么决策面会是这样:
但是这些灰色点没有标签,但是它们还是可以告诉我们一些信息,那么可能决策面就会变成:
但是可能实际的unlabelled data是均匀分布两边的,那么就很难分,一般跟unlabelled data的假设有关系。比如下图红框实际上是狗狗,只是绿色背景让它分布在这边:
2 半监督学习中的生成模型
2.1 有监督的生成模型
先再讲一下监督学习中的生成模型:
这里实际上就是利用贝叶斯定理计算对于给定x,x属于类别的概率。当然先验分布
P
(
C
i
)
P(C_i)
P(Ci)是需要给出的,然后假设
P
(
x
∣
C
)
P(x|C)
P(x∣C)服从高斯分布,因为样本是已知的,那么其
μ
1
,
Σ
\mu^{1}, \Sigma
μ1,Σ 和
μ
2
,
Σ
\mu^{2}, \Sigma
μ2,Σ是固定,所以可以通过:
P
(
C
1
∣
x
)
=
P
(
x
∣
C
1
)
P
(
C
1
)
P
(
x
∣
C
1
)
P
(
C
1
)
+
P
(
x
∣
C
2
)
P
(
C
2
)
P\left(C_{1} \mid x\right)=\frac{P\left(x \mid C_{1}\right) P\left(C_{1}\right)}{P\left(x \mid C_{1}\right) P\left(C_{1}\right)+P\left(x \mid C_{2}\right) P\left(C_{2}\right)}
P(C1∣x)=P(x∣C1)P(C1)+P(x∣C2)P(C2)P(x∣C1)P(C1)
来计算数据属于哪个类别的概率更大。
2.2 半监督的生成模型
但是如果给了一些无标签的数据,就会影响决策。比如多的数据会影响你的均值和方差,最后影响了输出概率:
那么面对这个问题怎么做的呢?
- 初始化一组参数 θ = { P ( C 1 ) , P ( C 2 ) , μ 1 , μ 2 , Σ } 。 \theta=\left\{P\left(C_{1}\right), P\left(C_{2}\right), \mu^{1}, \mu^{2}, \Sigma\right\}_{\text {。 }} θ={P(C1),P(C2),μ1,μ2,Σ}。
- 计算每笔无标签数据的后验概率(posterior probability) P θ ( C 1 ∣ x u ) , x u P_{\theta}\left(C_{1} \mid x^{u}\right), x^{u} Pθ(C1∣xu),xu 表示无标签的数 据。
- 通过
N
1
+
∑
x
u
P
(
C
1
∣
x
u
)
N
(
N
\frac{N_{1}+\sum_{x^{u}} P\left(C_{1} \mid x^{u}\right)}{N}\left(N\right.
NN1+∑xuP(C1∣xu)(N 是所有样本的数量,
N
1
N_{1}
N1 是被标记为
C
1
C_{1}
C1 的样本数量)来更新
P
(
C
1
)
P\left(C_{1}\right)
P(C1) , 其中
C
1
C_{1}
C1 出现的次数就是所有无标签数据属于
C
1
C_{1}
C1 的概率之和。
μ 1 = 1 N 1 ∑ x r ∈ C 1 x r + 1 ∑ x u P ( C 1 ∣ x u ) ∑ x u P ( C 1 ∣ x u ) x u … … \mu^{1}=\frac{1}{N_{1}} \sum_{x^{r} \in C_{1}} x^{r}+\frac{1}{\sum_{x^{u}} P\left(C_{1} \mid x^{u}\right)} \sum_{x^{u}} P\left(C_{1} \mid x^{u}\right) x^{u} \ldots \ldots μ1=N11xr∈C1∑xr+∑xuP(C1∣xu)1xu∑P(C1∣xu)xu……
而 μ 1 \mu^{1} μ1 通过上面的公式更新(等式右边第一个式子是计算所有属于 C 1 C_{1} C1 的样本的均值, 第二个式子, 如果 x u x^{u} xu 偏向于 C 1 C_{1} C1, 那么就对 P ( C 1 ) P\left(C_{1}\right) P(C1) 的影响就大一点, 反之就小一点。把它们加起来,再除以所 有 x u x_{u} xu 中 P ( C 1 ∣ x u ) P\left(C_{1} \mid x^{u}\right) P(C1∣xu) 的和)。 - 有了新的参数后就可以回到第一步(EM算法)
为什么是这样?
- 假设原来只有有标签数据, 我们要做的事情是最大化似然log
L
(
θ
)
=
∑
x
r
log
P
θ
(
x
r
,
y
^
r
)
L(\theta)=\sum_{x^{r}} \log P_{\theta}\left(x^{r}, \hat{y}^{r}\right)
L(θ)=∑xrlogPθ(xr,y^r), 如
果给定参数 θ \theta θ, 那么每笔训练数据的 P θ ( x r , y ^ r ) P_{\theta}\left(x^{r}, \hat{y}^{r}\right) Pθ(xr,y^r) 是可以算出来的: P θ ( x r , y ^ r ) = P_{\theta}\left(x^{r}, \hat{y}^{r}\right)= Pθ(xr,y^r)=
P θ ( x r ∣ y ^ r ) P ( y ^ r ) P_{\theta}\left(x^{r} \mid \hat{y}^{r}\right) P\left(\hat{y}^{r}\right) Pθ(xr∣y^r)P(y^r) - 现在同时有有标签数据和无标签数据 使用log
L
(
θ
)
=
∑
x
r
log
P
θ
(
x
r
,
y
^
r
)
+
L(\theta)=\sum_{x^{r}} \log P_{\theta}\left(x^{r}, \hat{y}^{r}\right)+
L(θ)=∑xrlogPθ(xr,y^r)+
∑ x u log P θ ( x u ) \sum_{x^{u}} \log P_{\theta}\left(x^{u}\right) ∑xulogPθ(xu), 其中一笔无标签数据出现的几率 P θ ( x u ) = P θ ( x u ∣ C 1 ) P ( C 1 ) + P_{\theta}\left(x^{u}\right)=P_{\theta}\left(x^{u} \mid C_{1}\right) P\left(C_{1}\right)+ Pθ(xu)=Pθ(xu∣C1)P(C1)+
P θ ( x u ∣ C 2 ) P ( C 2 ) P_{\theta}\left(x^{u} \mid C_{2}\right) P\left(C_{2}\right) Pθ(xu∣C2)P(C2) 就是 C 1 C_{1} C1 的先验概率乘以 C 1 C_{1} C1 类别产生无标签数据的概率加上 C 2 C_{2} C2 的先验概率乘 以 C 2 C_{2} C2 类别产生无标签数据的概率(全概率公式)。就是说这笔无标签数据可能从 C 1 C_{1} C1 来,也可能 从 C 2 C_{2} C2 中来, 接下来就要最大化log L ( θ ) = ∑ x r log P θ ( x r , y ^ r ) + ∑ x u log P θ ( x u ) L(\theta)=\sum_{x^{r}} \log P_{\theta}\left(x^{r}, \hat{y}^{r}\right)+\sum_{x^{u}} \log P_{\theta}\left(x^{u}\right) L(θ)=∑xrlogPθ(xr,y^r)+∑xulogPθ(xu) 。
3 低密度分隔假设
基于低密度分割(Low-density Separation),也就是非黑即白。如果有颜色的是有标签的,那么在有标签的数据中间划分决策面,那么其实两根红线都可以,但是显然低密度区域的分界比较好:
3.1 自训练算法(Self-training)
其中最典型的方法就是自训练算法(Self-training):
- 先用有标签的数据训练出一个模型。
- 再把这个模型应用于无标签的数据,看输出的标签是什么,这些标签称为伪标签。
- 从无标签的数据中拿一些数据去训练模型,再把得到的数据放回标签数据集中。
在回归上有用吗?回归就是输出数字,没标签没用。
这里用的是hard label,生成模型用的是soft label,在做自训练时我们会强制一个训练样本数据一定属于某个类别;在生成模型时输出的是概率值。
考虑神经网络,将一笔无标签数据喂给NN,如果是Hard那么得到的输出是[1 0],如果是Soft得到的是[0.7 0.3]。如果用Soft,那么得到的结果和经过NN的输出没有变化。就不会有用,因此在NN中是要用Hard的方法:
3.2 基于熵的正则化(Entropy-based Regularization)
可能会觉得只依靠概率来判定过于武断,这里考虑使用熵(Entropy)。我们希望预测概率的分布是集中的,而不是分散的,如下图,那么怎么估计这个输出概率分布是集中的还是分散的呢?
我们可以计算分布的熵,描述了不确定性,熵值越小代表确定性越强,也就是越集中:
E
(
y
u
)
=
−
∑
m
=
1
N
y
m
u
ln
(
y
m
u
)
E\left(y^{u}\right)=-\sum_{m=1}^{N} y_{m}^{u} \ln \left(y_{m}^{u}\right)
E(yu)=−m=1∑Nymuln(ymu)
可见上图中熵值小的都是我们需要的。 现在我们可以重新设计损失函数:
L
=
∑
x
r
C
(
y
r
,
y
^
r
)
labelled
data
+
λ
∑
x
u
E
(
y
u
)
unlabeled
data
\begin{aligned} L &=\sum_{x^{r}} C\left(y^{r}, \hat{y}^{r}\right) & \begin{array}{c} \text { labelled } \\ \text { data } \end{array} \\ &+\lambda \sum_{x^{u}} E\left(y^{u}\right) & \begin{array}{c} \text { unlabeled } \\ \text { data } \end{array} \end{aligned}
L=xr∑C(yr,y^r)+λxu∑E(yu) labelled data unlabeled data
对于有标签数据集可以使用常用的损失函数,而对于无标签数据集,可以加入计算熵值的项,熵值越小越好。
3.3 半监督的SVM
对于unlabelled data,SVM会穷举所有的可能标签,然后每一种情况都给出一个分类的决策面,选择使得提供largest margin和least error的那种情况:
可能有同学会问,如果数据很多,那么怎么穷举完呢?这个文章里提出一个近似的方法。类似于伪标签的做法,一开始得到了伪标签,然后修改伪标签,看看会不会使得结果变好。
4 平滑性假设(Smoothness Assumption)
假设:相似的
x
x
x 有相同的输出
y
^
\hat{y}
y^
更精确的假设是:
- x x x 的分布是不平均的
- 如果
x
1
x^{1}
x1 和
x
2
x^{2}
x2 都空间分布中在同一个高密度的区域, 那么就假设有
x
1
x^{1}
x1和
x
2
x^{2}
x2 有相同的label。
4.1 基于密度的方式
如下图,
x
1
,
x
2
x^{1}, x^{2}
x1,x2 都属于某个高密度的区域,因此说它们的输出是一样的。
这种密度描述有点像是在两个点之间的还排布了很多过渡点,代表他们是相关的,比如考虑手写数字识别和头像的问题:
最简单实践就是聚类:
4.2 基于图的方式(Graph-based Approach)
用图结构来表示这些数据点,相连的话就是一类:
比如可以建立KNN的图,很像一个圆,有K个邻居。邻居间是否相连,就需要定义相似度,可以用很多方式,比如高斯径向基函数
s
(
x
i
,
x
j
)
=
exp
(
−
γ
∥
x
i
−
x
j
∥
2
)
s\left(x^{i}, x^{j}\right)=\exp \left(-\gamma\left\|x^{i}-x^{j}\right\|^{2}\right)
s(xi,xj)=exp(−γ∥∥xi−xj∥∥2),这个函数下降的速度很快,靠的很近效果才好,或者别的距离也可以:
有标签的数据会影响他的邻居,类别信息会传递。但是数据要足够多,才能传过去:
Smoothness function的假设
定义图的平滑程度 Define the smoothness of the labels。考虑两两之间的样本,计算权值乘标签差的平方:
S
=
1
2
∑
i
,
j
w
i
,
j
(
y
i
−
y
j
)
2
=
y
T
L
y
S=\frac{1}{2} \sum_{i, j} w_{i, j}\left(y^{i}-y^{j}\right)^{2}=\boldsymbol{y}^{T} L \boldsymbol{y}
S=21i,j∑wi,j(yi−yj)2=yTLy
S的值越小越平滑:
这一项整理一下:
建立图拉普拉斯,如果考虑神经网络,那么可以加入符合Smoothness 假设的正则项:
可以放在哪一层都可以。
参考:
- 李宏毅老师深度学习视频课2020
- https://blog.csdn.net/weixin_43603028/article/details/106642173?ops_request_misc=&request_id=&biz_id=102&utm_term=%E6%9C%89%E7%9B%91%E7%9D%A3%E7%9A%84%E5%AD%A6%E4%B9%A0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-5-.first_rank_v2_pc_rank_v29&spm=1018.2226.3001.4187
- https://blog.csdn.net/dukuku5038/article/details/82929071