李宏毅深度学习笔记-半监督学习


半监督学习

image-20200609140706680

什么是半监督学习?

大家知道在监督学习里,有一大堆的训练数据(由input和output对组成)。例如上图所示\(x^r\)是一张图片,\(y^r\)是类别的label。

半监督学习是说,在label数据上面,有另外一组unlabeled的数据,写成\(x^u\) (只有input没有output),有\(U\)笔ublabeled的数据。

通常做半监督学习的时候,我们常见的情景是ublabeled的数量远大于labeled的数量(\(U >> R\))。

半监督学习可以分成两种:

  • 一种叫做转换学习,ublabeled 数据就是testing set,使用的是testing set的特征。
  • 另一种是归纳学习,不考虑testing set,学习model的时候不使用testing set。

unlabeled数据作为testing set,不是相当于用到了未来数据吗?

用了label 才算是用了未来数据,用了testing set的特征就不算是使用了未来数据。例如图片,testing set的图片特征是可以用的,但是不能用label。

什么时候使用转换学习或者归纳学习?

看testing set是不是给你了,在一些比赛里,testing set给你了,那么就可以使用转换学习。但在真正的应用中,一般是没有testing set的,这时候就只能做归纳学习。

为什么使用半监督学习?

缺有lable的数据,比如图片,收集图片很容易,但是标注label很困难。半监督学习利用未标注数据做一些事。

对人类来说,可能也是一直在做半监督学习,比如小孩子会从父母那边做一些监督学习,看到一条狗,问父亲是什么,父亲说是狗。之后小孩子会看到其他东西,有狗有猫,没有人会告诉他这些动物是什么,需要自己学出来。

image-20200609144837927

为什么半监督学习有用?

假设现在做分类任务,建一个猫和狗的分类器。有一大堆猫和狗的图片,这些图片没有label。

image-20200609145207275

假设只考虑有label的猫和狗图片,要画一个边界,把猫和狗训练数据集分开,可能会画一条如上图所示的红色竖线。假如未标注数据的分布如上图灰色点,可能会影响你的决定。未标注数据虽然只告诉我们input,但它们的分布可以告诉我们一些信息。

比如加入灰色点后,你会把边界画成红色斜线。

半监督学习使用未标注数据的方式,往往伴随着一些假设,所以有没有用取决于假设符不符合实际。你可能觉得左下的灰点是猫,但是可能是狗,因为两张图片的背景看起来很像。

生成模型与半监督学习

image-20200609145743461

这边要讲4件事:

  • 第一个是在生成模型的时候,怎么使用半监督学习
  • 然后会讲两个通用的假设,一个是低密度分离假设
  • 一个是平滑度假设
  • 最后讲半监督学习还有的一招,找一个好的代表

image-20200609151411502

在生成模型中为什么使用半监督学习?

在监督学习中,有一堆用来训练的样本,你知道它们分别属于类别1,还是类别2。

  • 会去估算类别1和类别2的先验概率\(P(C_1),P(C_2)\)
  • 然后计算类条件概率\(P(x|C_1),P(x|C_2)\) ,假设\(P(x|C_i)\)服从一个高斯分布。

假设类别1的数据是从均值为\(\mu_1\),协方差为\(\Sigma\)的分布中取出来的,而类别2的数据是从均值为\(\mu_2\),协方差也为\(\Sigma\)的分布中取出来的(之前讲过共享协方差,效果会好一点)。

然后可以计算后验概率\(P(C_1|x)\) ,决定一个决策边界在哪里。

image-20200609160838193

如果今天有一些未标注数据,如上图绿点,那仍然假设均值和方差是\(\mu_1,\mu_2,\Sigma\)显然不合理。

如上图左下所示,\(\Sigma\)应该比较接近圆圈(蓝色圆圈),也许在类1采样的时候有问题,所以采样到奇怪的分布(蓝色椭圆)。如上图右下,类2的\(\mu_2\)不应该在橙色椭圆内,而应该在更下面。

这样会使先验概率受到影响,本来两个分布,正例数据是一样多,但是加入未标注数据之后,你可能会觉得类2的正例数据更多(先验概率就更大)。总之加入未标注数据后,会影响对均值和协方差的估测,继而影响类条件概率,最后影响了你的决策边界。

image-20200609163730566

怎么做半监督学习?

初始化一组参数,如果是二分类任务,就是初始化类1和类2的先验概率、均值和协方差,可以随机初始化,用已经有标注的数据估测,统称为\(\theta\)

  • step1:根据已有的\(\theta\) 可以计算每一笔未标注数据的后验概率(属于类1 的概率)
  • step2:根据step1的后验概率更新模型,update的式子非常直觉

\(\large P(C_1)=\frac{N_1+\sum\limits_{x^u}P(C_1|x^u)}{N}\)\(\large \mu^1=\frac{1}{N_1}\sum\limits_{x^r\in C_1}x^r+\frac{1}{\sum\limits_{x^u}P(C_1|x^u)}\sum\limits_{x^u}P(C_1|x^u)x^u\)

先验概率更新公式:

  • \(\large \frac{N_1}{N}\)是没有未标注数据的时候的先验概率(\(N_1\)是被标注为\(C_1\)的样本),\(\large \sum\limits_{x^u}P(C_1|x^u)\)是未标注数据告诉我们的\(C_1\)出现的次数(所有未标注数据为\(C_1\)的后验概率之和),属于\(C_1\)还是\(C_2\)是根据概率来的,不是硬设计的。得到\(C_1\)受未标注数据影响的先验概率\(P(C_1)\)

均值更新公式:

  • 不考虑未标注数据时,\(\mu_1\) 就是所有属于\(C_1\)的标注数据的平均。加入未标注数据后,就加上未标注数据的后验概率权重和。如果未标注数据偏向\(C_1\),那对\(C_1\)的影响就大一点,反之则小一点。对\(C_2\)来说,计算方式是一样的。

接下来,返回step1 。有了新的model之后(新的\(\theta\)),\(P_{\theta}(C_1|x^u)\)会不一样,那在step2,model算出来也会不一样,接下来再返回step1更新概率......

理论上上述方法会收敛,但是初始值会影响最后收敛的结果。事实上,step1就是E步,step2就是M步。

image-20200609191742514

上述算法背后的理论是什么?

原来只有标注数据的时候,目标是最大化一个似然函数,那么给定\(\theta\),每一笔训练数据的似然函数值是可以计算的(\(=P_{\theta}(x^r|\hat{y}^r)P(\hat{y}^r)\) ),然后把所有的似然函数值相加,就是总的似然函数值,然后找\(\theta\)最大化。\(\theta\)有显式解,求最大值点(导数为0)。

现在加入未标注数据后,我们不知道未标注数据来自哪一个类别,那么未标注数据出现的概率就是和\(C_1\)的联合概率+和\(C_2\)的联合概率(相当于是\(\sum\limits_{C}P(x^u,C^i)\) 。接下来目标就是最大化\(P_{\theta}(x^u)\),但是\(P_{\theta}(x^u)\)的式子是非凸的,所以使用EM算法求解。

假设一:低密度分离

image-20200609192938127

这个世界是非黑即白的,什么是非黑即白?

假设现在有一大堆的data,有标注数据,有非标注数据,在两个类别之间会有一个明显的鸿沟。给一些标注数据,可以把边界分在上图右边的线,也可以把边界分在上图左边的线。但是考虑非标注数据,那么左边的边界会好一点,在边界处,两个类别的密度是低的(不会出现data)。

self-training

image-20200609200805022

低密度分离最代表性、最简单的方法是self-training,非常直觉。

我们有一些标注数据,和一些未标注数据。接下来:

  • 从标注数据训练一个model \(f^*\) (用DNN,deep、shallow还是其他机器学习的方法都可以)

  • 根据\(f^*\) 标注未标注数据,丢入\(x^u\),得到\(y^u\)\(\{(x^u,y^u)\}_{u=l}^{R+U}\)叫做伪标签数据

  • 接下来,从伪标签数据集移除一些数据加到标注数据集(移除哪些数据需要自己决定,设计一些启发式的规则,或者给权重,有些数据的标签比较确定,那就给大的权重)

  • 有了更多的标注数据之后,回头再去训练model \(f^*\)

self-training在回归上有用吗?

回归是output一个数值,通过\(f^*\)得到\(\{x^u,y^u\}\),加到训练数据集里再训练\(f^*\) ,不会影响到\(f^*\),从均方误差角度思考,\(y^u\)就是在\(f^*\)上,距离为0。

image-20200609204213726

可能觉得self-training很像是刚才生成模型里面用的EM算法,唯一的差别是在做self-training的时候,用的是硬标签,生成模型里用的是软标签(概率)。在做self-training的时候,会强制分配一个数据属于某一个类别,在生成模型里,使用的是后验概率,部分属于类1,部分属于类2。

那哪一个比较好?

我们考虑使用神经网络,从标注数据学习到一组参数\(\theta^*\),一笔未标注数据通过\(f^*\) ,得到分类概率\(\begin{bmatrix} 0.7\\0.3 \\ \end{bmatrix}\)

  • 如果是硬标签,就直接分为类1,\(x^u\)的新target为\(\begin{bmatrix} 1\\0 \\ \end{bmatrix}\)
  • 如果是软标签,0.7的概率属于类1,0.3的概率属于类2,\(x^u\)的新target为\(\begin{bmatrix} 0.7\\0.3 \\ \end{bmatrix}\)

软标签没有用,如果使用的target为\(\begin{bmatrix} 0.7\\0.3 \\ \end{bmatrix}\),意味着参数不变。必须使用硬标签。

使用硬标签意味着什么?

用硬标签的时候,用的就是低密度分离的概念。得到的概率\(\begin{bmatrix} 0.7\\0.3 \\ \end{bmatrix}\)意味着为类1的概率高,但是在非黑即白的世界看来,就是等于类1。

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

image-20200609210041170

熵:一个事件的不确定程度

Entropy-based Regularization(基于熵的正则化)是self-training的进阶版,self-training里用概率划分类别,可能觉得比较武断,那就可以用Entropy-based的这个方法。

Entropy-based是说,如果使用神经网络,output是一个分布,我们不去限制output具体属于哪一个类别,而是假设分布很集中(非黑即白的世界)。假设做5类别的分类的model:

  • 类别1的概率为1,其他类别概率为0,那就是好的
  • 类别5的概率为1,其他类别概率为0,那也是好的
  • 所有类别的概率很平均,那就是不好的,不符合低密度分离的假设(非黑即白)

怎么用数值的方法评估分布是集中还是不集中?

使用熵,分布的熵告诉你集中还是不集中。式子如上图右上,每个类别的概率*log(每个类别的概率),再对类别个数求和取负数。

  • 第一个分布,熵为0,分布集中
  • 第二个分布,熵也为0,分布集中
  • 第三个分布,熵为\(\large 5*-(\frac{1}{5}ln(\frac{1}{5}))=ln(5)\) ,分布比较散

我们希望model的output在标注集上正确,在未标注集上的熵越小越好。

  • 根据这个目标,重新设计损失函数。原来只是希望model在标注集上的output和label距离越近越好,用交叉熵来评估它们之间的距离。
  • 现在在原来的基础上,加上未标注集的output分布的熵。
  • 然后在未标注集部分乘上一个权重,来表明偏向标注部分还是未标注部分。

上图右下的损失函数可以算微分,那就使用梯度下降最小化这个损失函数,迭代求解参数。加入未标注部分,作用就类似于正则化(在原来损失函数后加一个L1正则或者L2正则),这里则加入一个未标注集熵来防止过拟合,所以称之为基于熵的正则化。

Semi-supervised SVM(半监督SVM)

image-20200609213923208

我们知道SVM是找边界,给你两个类别的数据,SVM找一个边界,这个边界一方面要有最大的间隔(让两个class分的越开越好),一方面要有最小的分类错误。

假设现在有一些未标注数据,半监督SVM会穷举所有可能的label。

例如上图左边,有四笔未标注数据,每笔数据既可以属于class1,也可以属于class2,可能的情况如上图右边所示(有很多可能,这里没画完)。然后对每个可能的结果,都去做一个SVM,边界如上图红色线。然后再去找让间隔最大,错误最小的那一种结果。在例子里可能是黑色框这种结果。

穷举所有方法运算量很大啊?

在上图reference里,提出了一个近似方法,基本精神是一开始有一些label,然后每次改一笔未标注数据的label,看看能不能让目标函数变大,变大就改。

假设二:平滑度假设

image-20200612215349126

精神是近朱者赤近墨者黑。

image-20200612215515681

假设:相似的\(x\)有相似的\(\hat{y}\)

这个假设听起来没有什么,而且光有这个假设是不精确的,因为给model(不是很深)相似的\(x\),output本来就是差不多的。

更精确的假设:

\(x\)的分布是不平均的,在某些地方很集中,在某些地方又很分散。如果今天\(x_1\)\(x_2\)在一个高密度的区域很相似的话,\(\hat{y}^1\)\(\hat{y}^2\)才会很像。

什么叫在高密度区域下呢?

意思是说可以用高密度的路径做连接

举个例子,假设数据的分布如上图右边所示,像一个血轮眼。现在有3笔数据\(x^1,x^2,x^3\),考虑粗略的假设(\(x\)\(\hat{y}\)像),会说\(\hat{y}^2\)\(\hat{y}^3\)比较像,\(\hat{y}^1\)\(\hat{y}^2\)比较不像。

但是平滑度假设不是这样,更精确的假设是说,“像”要两个数据中间为高密度区域下,比如\(x^1\)\(x^2\)中间是一个高密度区域(\(x^1\)\(x^2\)由一个高密度区域连接),有很多数据(中间想成平原地带,地势平坦,人烟很多),而\(x^2\)\(x^3\)之间数据稀少(中间想成一座山,人烟稀少),那么走平原会比走山容易,\(x^2\)走到\(x^1\)更容易(更相似)。

image-20200613190825992

image-20200613191217587

image-20200613191722183

为什么会有高密度区域假设?

因为在真实情况下,这个假设成立的可能性很高。

我们考虑手写数字识别的例子,有两个2一个3,如果计算像素点相似度的话,可能上图右边的2和3更像。但是从所有数据中看,左边的2到右边的2中间会有很多连续的形态。所以根据平滑度假设,左边的2和右边的2更像,因为右边的2和3之间没有过渡的形态。

看人脸识别也是一样的,比如左脸像和右脸像差很多,两个人的左脸像计算像素点相似度的话,可能比同一个人的两张侧脸像更高。但是如果收集到足够多的未标注数据,会找到两个侧脸像的很多过渡形态,根据高密度区域假设,这两张侧脸像就是同一个人。

image-20200613191817343

高密度区域假设,在文件上非常有用,假如现在要区分天文学和旅游的文章。

天文学的文章会出现asteroid、bright,而旅游的文章会出现yellowstone、zion。如果未标注文章和标注文章的词语有重叠,那可以很容易分类。但真实情况情况是,未标注文章和标注文章可能没有任何词语重叠,因为世界上的词语太多了,一篇文章词汇不会很多,每篇文章的词语是非常稀疏的。

image-20200613192728998

但是收集到够多的数据的话,就可以说上图\(d_1、d_5\)像,\(d_5、d_6\)像,传播下去就可以说\(d_1、d_3\)是一类,\(d_2、d_4\)是一类。

聚类、然后标注

image-20200613193019189

如何实践平滑度假设?

最简单的方法是聚类、然后标记。

假如数据分布如上图,橙色是class 1,绿色是class 2,蓝色是未标注数据。接下来做聚类,可能把所有数据分成3个簇。在簇1里,class 1的label最多,那簇1里所有数据标记为class 1,同样的簇2和簇3都标记为class 2。把标记后的数据拿去learn就结束了。

这个方式不一定有用,因为要求簇正确,这个方法有效的假设是同一个class的东西聚集在一起。但是在图像里要把同一个class的东西聚集在一起没有那么容易。之前深度学习讲过,不同class的图像可能会很像,同一个class可能会不像,只用像素点做聚类,结果八成是不好的。没办法把同一个class的数据聚集在一起,那未标注数据就没有用。

所以要有用,就要有一个好的方法来描述一张图像,比如用Deep Autoencoder抽特征,然后再做聚类。

基于图的方法

image-20200614143220120

上面是比较直觉的方法。另一个方法是引入图结构,来表达通过高密度路径进行连接这件事情。

把现在所有的数据点都建成一个图,每个数据点就是图上的一个点,想办法计算它们之间的奇点,想办法把它们之间的边建出来。

所谓的高密度路径的意思是说,如果有两个点,在图上是相连的,那它们就是同一个class,如果没有相连,就算距离很近,也走不到。

如何构建图?

有些时候,图的表示可以很自然的得到。举例说网页的分类,你有记录网页和网页之间的超链接,那超链接就很自然的告诉你网页是怎么连接的。或者你要做的是论文的分类,论文和论文之间有引用的关系,这种引用的关系也是另外一种图的边,可以很自然地把这种图画出来。

当然有时候,需要自己想办法构建图

image-20200614151617799

怎么自己想办法构建图?

其实的图的好坏对结果的影响是非常严重的,但是自己用什么方法做还是很启发的,用自己觉得合适的方式做就可以了。

通常的做法是:

  1. 先定义两个对象之间的相似度,比如图像可以是基于像素点的相似度(可能效果不好),也可以是基于自动编码器抽取出来的特征计算相似度(效果可能好一点)

  2. 定义完相似度后,就可以构建图了(添加边),图有很多种:

    • K近邻的图,现在有一大堆数据,可以计算数据与数据之间的相似度,然后设置k例如3,就是3个最相似的点相连

    • e-Neighborhood的图,只有相似度超过某个阈值的点才会相连

所谓的边也不是只有相连和不相连这两种选择,可以给边一些权重,让边跟两个数据点的相似度成正比。相似度可以用Gaussian Radial Basis Function来定义,\(s(x^i,x^j)=exp(-\gamma||x^i-x^j||^2)\)

怎么计算这个相似度?

可以先算\(x^i,x^j\)的欧式距离,乘以一个参数取负号,再取exp。取exp很有必要,在经验上最后效果比较好。因为取exp,下降速度很快,只有当\(x^i,x^j\)非常靠近时,奇点才会大,距离远一点奇点就会下降很快变得很小。这样才能制造如上图右下方所示的,两个距离近的橙色点有连接,绿色点和橙色点虽然距离也近,但是使用了exp导致只有很近很近的点才有连接,即使远一点点就不会有连接了,有这样的机制才能避免跨海沟的连接(橙色点和绿色点连接)。

image-20200614162840922

基于图的方法精神是,如果现在在图上面有一些标注数据,比如上图左上方,已经知道了蓝色圈的数据属于class 1,那么跟他们有相连的数据点属于class 1的概率也会上升。每一笔数据会去影响它的邻居。

光会影响邻居还不够,因为有连接说明本来就很像,那很像的input ,output本来也就很像。这种方法真正的精髓是,class是会传递的,虽然一个点没有与标注数据直接相连,但是有连接路径,那么class 1就会随着边传递。

例如上图右上方,所有数据点构建成一个图(理想的例子),然后有一个蓝色点属于class 1,一个红色点属于class 2。经过基于图的方法,蓝色点会传递,红色点也会传递,如上图右下方所示。

image-20200614163138196

要让基于图的这种半监督学习方法有用的话,一个重要的原则是你的数据要多,如果数据不够多,例如上图所示,中间有断开,那信息就传递不过去。

image-20200614163344586

之前是定性说一下怎么使用图,这里要说一下怎么定量使用图。

定量的使用方式是在这个图的结构上面定一个东西,叫做label的平滑度,来表明这个label有多符合平滑度假设。

怎么定平滑度?

看上图两个例子,这两个例子都有4个数据点,数据点之间连接的数字代表了边的权重。现在给两个例子的数据不同的label,左边例子的label是1,1,1,0,右边例子的label是0,1,1,0,那谁更平滑呢?

直观感觉就是左边例子更平滑,但我们需要定量描述。常见的方法是,考虑两两相连的点(不管有label还是没有label),在所有的配对上,计算label差值的平方,然后乘上权重 ,最后求和。

所以左边这个例子的S就是0.5,右边例子的S是3,S越小越平滑。

image-20200614164542068

S可以稍微整理下,写成向量形式如上图。

\(\large y\)串成一个向量,\(\large y\)包括标注数据和未标注数据,所以有\(R+U\)维。

\(L\)\((R+U)\times(R+U)\)的矩阵,叫做图拉普拉斯,\(L\)的定义是\(D-W\)\(W\)是两两数据点之间的权重,\(D\)\(W\)每行值之和(放在对角线)。

image-20200614165157169

现在可以用 \({\bf{y^T}}L{\bf{y}}\) 来评估现在得到的label有多平滑,式子里面的\({\bf{y}}\)是label的值,取决于神经网络的参数。那么如果要把平滑度考虑到神经网络里时,就是在原来的损失函数里加上\(\lambda S\)\(\lambda\)是某一个想要调的参数)。\(\lambda S\)像一个正则化项,在调整参数时,不只是让标注数据的output跟真正的label越近越好,同时还要让output的label在标注数据和未标注数据上符合平滑度假设。平滑度假设由\(S\)衡量。

不一定要在output上计算平滑度,在深度神经网络里,可以把平滑度计算放在网络的任何地方。你可以假设你的output是平滑度,也可以把某个隐藏层乘上一些别的transform,它也要平滑,也可以要求每个隐藏层的output都是平滑的。

Better Representation

image-20200614170528097

image-20200614170634844

精神是:

我们观察到的世界其实是比较复杂的,在背后有一些比较简单的向量,比较简单的东西在操控这个复杂的世界。那只要看透假象,直指核心,就可以让学习变得比较容易。

例如上图右方剪胡子,胡子的变化是很复杂的,但是胡子受头操控,头的变化是有限的。所以胡子是观测,而头就是Better Representation。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM