李宏毅机器学习——半监督学习

引言

要介绍半监督学习(Semi-supervised learning)需要先介绍下监督学习(Supervised learning)。

  • 监督学习: { ( x r , y ^ r } r = 1 R \{(x^r,\hat{y}^r\}^R_{r=1} 假设有 R R 笔训练数据,每笔训练数据都有对应的输出 y ^ r \hat{y}^r (标签/类别)
  • 半监督学习: { ( x r , y ^ r } r = 1 R , x u u = R R + U \{(x^r,\hat{y}^r\}^R_{r=1},{x^u}^{R+U}_{u=R} 有另外一组没有标签的数据
    • 通常 U > > R U>>R ,没有标签的数量远大于有标签的
    • 直推学习(Transductive learning) : 学习过程中所考虑的未标记样本恰是待预测数据
    • 归纳学习(Inductive learning):训练数据中的未标记样本并非待测的数据

为什么做半监督学习?

  • 数据数据很容器,但是收集有标签的数据很麻烦
  • 人类一直在做半监督学习

在这里插入图片描述

假设我们要做分类的项目,要建一个猫和狗的分类器,同时有一大堆有关猫和狗的图片,但是这些图片是没有关于哪些是猫哪些是狗的标签的。只有少一部分是有标签的。

在这里插入图片描述

假设我们只考虑这些有标签的数据,然后需要找到一个边界,将猫和狗的训练数据分开。可能会像上图红线那样画。如果哪些未标记的数据的分布像是灰色点那样,
虽然这些灰色点没有标签,但是它们还是可以告诉我们一些信息。比如你可能会改成下面这样划分。

在这里插入图片描述

半监督学习使用无标签的数据往往伴随着一些假设,这些假设的精确程度会影响半监督学习的有用程度。

在这里插入图片描述

可能红框的那个灰点实际上是狗,它们因为背景都是绿色的而看起来很像。

半监督学习中的生成模型

先来回顾下监督学习中的生成模型。

在这里插入图片描述

假设有有标签的训练数据 x r x^r 属于类别 C 1 C_1 C 2 C_2

  • 估测 P ( C i ) P(C_i) P ( x C i ) P(x|C_i)
  • 假设每个类别的分布都是高斯分布,它们分别由 μ 1 , Σ \mu^1,\Sigma μ 2 , Σ \mu^2,\Sigma 生成出来

有了这些参数后,就可以做分类问题,就可以计算一笔新的数据属于哪个类别的概率大。

如果给了很多无标签的数据,它们就会影响判断。在这里插入图片描述

上面的绿色点都是无标签的数据,那么上面的参数是不合理的,因为还有很多分布没有考虑到。
在这里插入图片描述

虚线圆圈的分布可能更加合理。总之这些无标签的数据会影响对 P ( C 1 ) , P ( C 2 ) , μ 1 , μ 2 , Σ P(C_1),P(C_2),\mu^1,\mu^2,\Sigma 的估测。

那么实际上要怎么做呢

  • 初始化一组参数 θ = { P ( C 1 ) , P ( C 2 ) , μ 1 , μ 2 , Σ } \theta = \{P(C_1),P(C_2),\mu^1,\mu^2,\Sigma\}
  • 第一步:计算每笔无标签数据的后验概率(posterior probability) P θ ( C 1 x u ) P_\theta(C_1|x^u) , x u x^u 表示无标签的数据。
  • 第二步:通过 N 1 + x u P ( C 1 x u ) N \frac{N_1+\sum_{x^u} P(C_1|x^u)}{N} ( N N 是所有样本的数量, N 1 N_1 是被标记为 C 1 C_1 的样本数量)来更新 P ( C 1 ) P(C_1) ,其中 C 1 C_1 出现的次数就是所有无标签数据属于 C 1 C_1 的概率之和。
    在这里插入图片描述
    μ 1 \mu^1 通过上面的公式更新(等式右边第一个式子是计算所有属于 C 1 C_1 的样本的均值,第二个式子,如果 x u x^u 偏向于 C 1 C_1 ,那么就对 P ( C 1 ) P(C_1) 的影响就大一点,反之就小一点。把它们加起来,再除以所有 x u x_u P ( C 1 x u ) P(C_1|x^u) 的和)。
  • 有了新的参数后就可以回到第一步(EM算法)

为什么是这样。

  • 假设原来只有有标签数据,我们要做的事情是最大化似然 log L ( θ ) = x r log P θ ( x r , y ^ r ) \log L(\theta) = \sum_{x^r} \log P_\theta(x^r,\hat{y}^r) ,如果给定参数 θ \theta ,那么每笔训练数据的 P θ ( x r , y ^ r ) P_\theta(x^r,\hat{y}^r) 是可以算出来的: P θ ( x r , y ^ r ) = P θ ( x r y ^ r ) P ( y ^ r ) P_\theta(x^r,\hat{y}^r) = P_\theta(x^r | \hat{y}^r)P(\hat{y}^r)
  • 现在同时有有标签数据和无标签数据 使用 log L ( θ ) = x r log P θ ( x r , y ^ r ) + x u log P θ ( x u ) \log L(\theta) = \sum_{x^r} \log P_\theta(x^r,\hat{y}^r) + \sum_{x^u} \log P_\theta(x^u) ,其中一笔无标签数据出现的几率 P θ ( x u ) = P θ ( x u C 1 ) P ( C 1 ) + P θ ( x u C 2 ) P ( C 2 ) P_\theta(x^u) = P_\theta(x^u|C_1)P(C_1) + P_\theta(x^u|C_2)P(C_2) 就是 C 1 C_1 的先验概率乘以 C 1 C_1 类别产生无标签数据的概率加上 C 2 C_2 的先验概率乘以 C 2 C_2 类别产生无标签数据的概率(全概率公式)。就是说这笔无标签数据可能从 C 1 C_1 来,也可能从 C 2 C_2 中来,接下来就要最大化 log L ( θ ) = x r log P θ ( x r , y ^ r ) + x u log P θ ( x u ) \log L(\theta) = \sum_{x^r} \log P_\theta(x^r,\hat{y}^r) + \sum_{x^u} \log P_\theta(x^u)

上面是生成模型,下面介绍一种比较通用的方式,基于低密度分离(Low-density Separation),也就是非黑即白
在这里插入图片描述

就是说在这两个类别的交界处密度很低,可以很容易的分开这两个类别。
其中最典型的方法就是Self-training(自训练算法)

Self-training

  • 给定有标签数据集 { ( x r , y r ^ ) } r = 1 R \{(x^r,\hat{y^r})\}^R_{r=1} ,和无标签数据集 { x u } u = l R + U \{x^u\}^{R+U}_{u=l}
  • 重复
    • 从有标签数据集中训练模型 f f^*
    • f f^* 应用到无标签数据集
      • 获得 { ( x u , y u ) } u = l R + U \{(x^u,y^u)\}^{R+U}_{u=l}
    • 从无标签数据集中拿出一些数据,加到有标签数据集中

与基于生成模型的半监督学习类似。
在做自训练时用的是Hard label,在做生成模型的时候用的是Soft label;在做自训练时我们会强制一笔训练数据一定属于某个类别;在生成模型时,可能一部分属于类别A,另一部分属于类别B。

那么哪个好呢。

假设用于神经网络, θ \theta^* 是来自有标签数据。

在这里插入图片描述
将一笔无标签数据喂给NN,如果是Hard那么得到的输出是[1 0],如果是Soft得到的是[0.7 0.3]。如果用Soft,那么得到的结果和经过NN的输出没有变化。就不会有用,因此在NN中是要用Hard的方法。

基于熵的正则化(Entropy-based Regularization)

如果用NN的时候,输出是一个分布的话,我们可以不限制它一定是某个类别,但是假设它的这个分布很集中。

在这里插入图片描述

上图中最后一个例子中,分布是平均的,这样就不符合非黑即白的假设。

那我们如何用数值的方法来计算这个分布的好坏。

E ( y u ) = m = 1 N y m u ln ( y m u ) E(y^u)=-\sum_{m=1}^Ny^u_m\ln(y^u_m)

这里类别数N=5。
y m u y^u_m 是这笔数据属于某个类别的概率。

在这里插入图片描述

通过上面的公式可以算出它们对应的 E ( y u ) E(y^u)

我们希望这个模型的输出在无标签数据上的熵越小越小。

现在我们可以重新设计损失函数:

在这里插入图片描述

λ \lambda 是权重,可以调的。

Smoothness Assumption

  • 假设:相似的 x x 有相同的输出 y ^ \hat{y}
  • 更精确的假设是:
    • x x 的分布是不平均的
    • 如果 x 1 x^1 x 2 x^2 都接近于某个高密度区域,那么说它们的输出是一样的

在这里插入图片描述

x 1 , x 2 x^1,x^2 都属于某个高密度的区域,因此说它们的输出是一样的。

我们考虑手写数字识别的例子。

在这里插入图片描述
我们看这两个2,第一2有个圈圈,第二个2没有,粗看上去这两个2不太相似。

在这里插入图片描述

但是如果考虑更多的数据,会发现这两个2之间有很多连续的形态,因此这两个2应该属于同一个类别。

这一招在文本分类中也很有用。

在这里插入图片描述

假设它们会出现左边那些单词,可以说 d 1 d_1 d 5 d_5 像, d 5 d_5 d 6 d_6 像,最终得到 d 1 d_1 d 3 d_3 像。

聚类打标签(Cluster and then Label)

在这里插入图片描述

基于图的方式(Graph-based Approach)

如何知道 x 1 x^1 x 2 x^2 是否接近于某个高密度区域。

用图结构来表示这些数据点。

在这里插入图片描述

如果这两个顶点是相连的,就说它们属于同一个高密度区域。

例如,通过引用关系来进行论文的分类。

参考

  1. 李宏毅机器学习
发布了148 篇原创文章 · 获赞 57 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/yjw123456/article/details/103916045