李宏毅学习笔记16.半监督学习

前言

深度学习的内容到上节就结束了,接下来还剩下监督和半监督学习,半监督学习只有一个课时。半监督学习基于某种假设,本节课先介绍了在Generative Model中的应用,然后讲了两种常见假设,最后挖一坑,留待监督学习再讲。
公式输入请参考:在线Latex公式

简介

先来看非监督学习(Semi-supervised Learning)定义,如果是普通的监督学习:
{ ( x r , y ^ r ) } r = 1 R \left\{(x^r,\widehat y^r) \right\}_{r=1}^R {(xr,y r)}r=1R
假设我们有R笔training data,其中 x r x^r xr是function的输入(例如:一张图片), y ^ r \widehat y^r y r是function的输出(例如:分类标签)。对于非监督学习:
{ ( x r , y ^ r ) } r = 1 R , { x u } u = R R + U \left\{(x^r,\widehat y^r) \right\}_{r=1}^R,\left\{x^u\right\}_{u=R}^{R+U} {(xr,y r)}r=1R,{xu}u=RR+U
出了之前的R笔data之外,还有另外U组数据,只有输入,没有输出。通常U>>R,所以上标写成R+U没问题。

分类

非监督学习分为两种:
Transductive learning: unlabelled data is the testing data
Inductive learning: unlabelled data is not the testing data
这里注意:在train的过程使用testing data那么testing data还算testing data吗?这不是自己出题目自己测试(作弊)?不是的,这里只是使用testing data的feature,并没有看它的label,所以不存在作弊。
也就是说在训练的过程中使用了testing data的feature(不看label)称为:Transductive learning,否则称为Inductive learning。
用哪种方法要取决于比赛或者应用有没有把test set放出来。

原因

Collecting data is easy, but collecting “labelled” data is expensive.
We do semi-supervised learning in our lives.(小孩学习就是一种半监督学习)
在这里插入图片描述
半监督学习往往基于某种假设,所以有的时候很有用,有的时候是会出错,例如上图中的例子,根据分布会斜着划分分类,但是可能会分错(狗认成了猫)。

Supervised Generative Model

本节中讲如何在Generative Model中做半监督学习。先回顾之前监督学习的Probability 的Generative Model
在这里插入图片描述
注意:这里两个分类的分布的∑矩阵是共用的,效果会好一点,这里如果忘记了可以翻一下之前的笔记:李宏毅学习笔记4.分类
在这里插入图片描述
这里如果加入了unlabelled data(绿色点表示),可以发现可能会使得蓝色和橙色点点 μ 1 μ^1 μ1 μ 2 μ^2 μ2改变(分别可能是蓝色和橙色的虚线圆圈),两个分类的先验也可能发生变化,因为原来两个分类的数量差不多,现在明显橙色分类貌似多一些,总之,加入了unlabel data会影响很多因素 μ , Σ \mu,\Sigma μ,Σ(上图中最下面黑色字),最终影响到Decision boundary。这些都是非量化的分析,接下来看一下数学的描述(推导)。

步骤描述

在这里插入图片描述
首先是初始化 θ θ θ,可以是随机初始化,也可以从labelled data里面估算。
第一步:根据现有的 θ θ θ,估算每一笔data属于 x u x^u xu的几率(后验概率),当然如图所示,这个几率和初始化的 θ θ θ有关。
第二步:更新模型,如果没有考虑unlabelled data,那么计算公式为: P ( C 1 ) = N 1 N P(C_1)=\cfrac {N_1}{N} P(C1)=NN1,其中 N 1 和 N N_1和N N1N的意义见图所示。现在考虑上unlabelled data,出现 C 1 C1 C1的几率是出现的 x u x^u xu C 1 C1 C1的几率的和,加上属于 C 1 C_1 C1的数据的数量,然后除以总的数据数量。这里的重要思想是:unlabelled data并没有一定是属于 C 1 C_1 C1或者是 C 2 C_2 C2,而是根据概率来决定。
对于 μ 1 μ^1 μ1而言,如果不考虑unlabelled data,则只用计算上图中的第一项,考虑unlabelled data则要加上后面的项。
第二步完成后得到新的model,这个时候可以重新回到第一个步骤,一直反复。理论上这个算法是一定会收敛,但是结果受到参数的影响,如果从大的方向来看,这个算法实际上对应的是EM算法(可以参考李航的《统计学习方法》),第一步对应E,第二步对应M。
The algorithm converges eventually, but the initialization influences the results.

为什么会采用以上步骤?

对于labelled data,采用的是对数似然函数构造损失函数来解决这个问题
在这里插入图片描述
推导对数似然函数是把右边蓝色框里面的东西带入左边,然后求解。整个求解的思想是最大似然,找到最相近的形式,这个也是最大似然求解的思想。
对于unlabelled data,可以看到下图,第一项和上面是一样的,是labelled data的部分,对于unlabelled data
在这里插入图片描述
我们并不知道它是属于哪一类,我们如何估测它的几率呢?蓝色框中给出的一笔data: x u x^u xu出现的几率,由于不知道它是从 C 1 C1 C1还是 C 2 C2 C2来,所以这里两者都有可能,因此把二者的可能性加起来,然后最大化这个likelihood。每次跌点会让这个likelihood增加一点,最后收敛。
接下来要求解上图中的 l o g L ( θ ) logL(θ) logL(θ),这个式子不是凸函数,所以用EM的方式来解。

第一种假设Low-density Separation

在这里插入图片描述
就是在分类中间会有明显的分界,在分界线附近只有比较稀疏(Low-density)的数据。

self-training

比较简单的算法,先上图:
在这里插入图片描述
解释一下步骤:模型的数据包含标记和非标记数据。
1、用标记数据去训练目标函数 f ∗ f^* f
2、将unlabelled data丢入训练好的 f ∗ f^* f获得 { ( x u , y u ) } u = l R + U \left\{(x^u,y^u)\right\}_{u=l}^{R+U} {(xu,yu)}u=lR+U,称为Pseudo-label伪标签。
3、从unlabelled data中拿出一部分data加入到labelled data set中。这里加那些?可以自己定,甚至可以为加的unlabelled data添上weight(根据confidence)。
重复以上步骤。
问题:如果这个方法用在regression上面效果会怎么样。
答案:不适用,因为把regression中的unlabelled data的pseudo-label加入labelled data set中并不会影响 f ∗ f^* f
实际上这里用到了软标签和硬标签的概念
在这里插入图片描述
如果用神经网络来做分类,最后的输出是硬分类就是上面,软分类是下面。
老师说软分类是没有用的,一来是因为我们使用的是Low-density的假设,世界上的数据是非黑即白的;二来,如果使用软分类进行训练目标和输出没什么区别,所以参数不会有什么改善。
ng的课(忘记是ng还是231n)里面貌似是这样解释,你明确的告诉你的模型输入x的分类是什么,有利于增强模型的信心,这样模型才会学得更好。

self-training的进阶:Entropy-based Regularization

在这里插入图片描述
假设我们的NN输入 x u x^u xu得到的输出 y u y^u yu是一个分布,根据非黑即白的假设,我们希望输出概率 y u y^u yu集中到某一个分类(unlabelled data我们也不知道是哪一类)因此左边三个图中,上面两个是好的,下面那个平均的概率不好。那如何使用数字来评估这个分布是好还是不好?答案就是熵。
PS:为什么熵能干这个事情,如果看过李开复讲熵的原理就容易明白,熵其实是表达数据的混乱程度,如果越平均(平均意味则不确定,那么就意味混乱),越混乱,熵的值越大。例如上图左边上面两个的熵都为0,都是确定为某一种分类,最下面熵最大,因为不确定是哪个类。
最后改进的损失函数 L L L就是分两部分,一部分是标记数据输出与label之间的交叉熵,另一部分是非标记数据的熵然后乘上浪打惩罚因子。目标是最小化 L L L

其他半监督学习方法:Semi-supervised SVM

由于SVM后面还会讲,这里就先简单讲下,传统SVM有两个条件:
1、分类后要有最大的margin,两个分类分得越开越好;
2、同时要有最小的分类错误。
半监督的SVM如何做?
在这里插入图片描述
如上图所示,左边有四个未标记的数据,SVM会穷举这四个数据所有可能的分类(右边列举了三个例子),然后对各种可能都计算分类;然后去找刚才穷举的情况里面那个情况最能满足传统SVM的两个条件,以上图为例,应该是中间黑框那个。
论文控:Thorsten Joachims, ”Transductive Inference for Text Classification using Support Vector Machines”, ICML, 1999
实作的时候如果未标签数据很多,穷举方式效率太低,那么可以采用approximate的方法,就是一次弄一个unlabelled data进行,然后改变它的分类,看分界的变化,然后确定分类。

第二种假设:Smoothness Assumption

和第一种假设相对:近朱者赤,近墨者黑
蓬生麻中,不扶而直;白沙在涅,与之俱黑。《劝学篇》荀子。
二次元+古文,老师还真博学。
在这里插入图片描述
直接字面去理解相近的输入x会有相近的输出y不太准确,准确假设定义如上图(写轮眼。。。):
输入x的分布是不均匀的,如果 x 1 x^1 x1 x 2 x^2 x2在一个高密度(High density region)范围内相近,那么 y ^ 1 \widehat y^1 y 1 y ^ 2 \widehat y^2 y 2会很相近。或者说 y ^ 1 \widehat y^1 y 1 y ^ 2 \widehat y^2 y 2能用high density path相连接。看右边例子:
有三笔输入: x 1 x^1 x1 x 2 x^2 x2 x 3 x^3 x3,如果只看距离判断, x 2 x^2 x2 x 3 x^3 x3最像, x 1 x^1 x1 x 2 x^2 x2没有那么像,这个是不太准确的假设,准确的假设应该是这样:
x 1 x^1 x1 x 2 x^2 x2最像,它们两个是High density的像,它们中间有一个High density region,而 x 2 x^2 x2 x 3 x^3 x3中间有白色区域,所以它们不太像。
看实例:
1、数字识别
在这里插入图片描述
上图中的左边的2相当于 x 1 x^1 x1,中间的2相当于 x 2 x^2 x2,右边的3相当于 x 3 x^3 x3
没有中间的path,中间的2和右边的3比较像。
2、人脸识别
在这里插入图片描述
左右两张脸的图片对于电脑而且实际上是不一样,但是如果收集够多的data,那么就会找到两张脸的过渡形态,从而得到两张脸一样的结论。
3、文件分类
想要划分天文学和旅游类文章
在这里插入图片描述
可能单篇文章词和词之间还没有什么联系(因为世界上的单词很多,单词的表示很sparse,只有两篇文章我们可以看到很少有overlap的部分。),如果收集的数据够多,可能会产生下面的传递(propagate)效果:
在这里插入图片描述生词表补充:
Asteroid小行星
Comet彗星
zodiac黃道帶
Zion耶路撒冷zaɪən

Cluster and then Label方法

很简单的方法,就是通过聚类来进行unlabelled data的划分:
在这里插入图片描述
但是这个方法在图像分类上不好,可以想象,如果是根据pixel来进行聚类的效果。正确的方法是先用deep autoencoder抽取feature,然后再clustering。

Graph-based 方法

在这里插入图片描述
就是把数据变成图中的点,如果两个点之间没有连接(就算距离很近),则认为它们没有在一个high density region。例如上图中的蓝色红红色点。图的建立一般都很nature,例如网页与网页可以有hyperlink连接,文章与文章可以有引用。当然有时候需要自己想办法建立图:
在这里插入图片描述
1、计算相似度(这里注意:图像一般不用pixel算相似度,效果不好,一般用autoencoder抽feature来做相似度计算)
2、添加边建立图,可以用KNN或者e-Neighborhood(超过阈值e才建立边)来建立边
可以根据相似度确定边的权重: s ( x i , x j ) = e x p ( − γ ∥ x i − x j ∥ 2 ) s\left (x^i,x^j\right)=exp\left(-γ\left \| x^i-x^j \right \|^2\right) s(xi,xj)=exp(γxixj2)
这里要解释下为什么用exp,exp只有两个点比较近值会大,如果稍微远一点exp的值会decrease很大。就像上图右下角中两个橙色是连的,但是和绿色稍微远一点就不连了。这样可以很有效的防止跨边界连接。

Graph-based方法精神

主要两点:
1、标记数据会影响他的邻居,如下图左边的x属于Class 1,它会使得和它相连的节点为Class 1的几率增加(看蓝色箭头)
2、第一点的特性会传递propagate,例如,右边那个节点没有直接连接到x,但是它为Class 1的几率也增加(看蓝色箭头),这就是传递,为了充分说明这个,右下角边还给出具体传递的例子。
缺点就是要data足够多,例如右上角的由于没有收集到足够多的数据,导致数据之间的连接断开了。
在这里插入图片描述

定量研究

smoothness的数字化:
两两相连节点(无论是否labeled)拿出来乘以权重乘以0.5,下图可以试着计算对比下结果。
在这里插入图片描述
这个结果越小越好。把这个S公式改进一下:
在这里插入图片描述
吧y串成一个vector,由于y包含标签数据和未标签数据,所以这个vector的维度是R+U。则
s = y T L y s=\bold y^TL\bold y s=yTLy
中间的矩阵如上图所示,称为:Graph LaplacianGNN之拉普拉斯矩阵,大小是: ( R + U ) × ( R + U ) (R+U) × (R+U) (R+U)×(R+U)
L = D − W L=D-W L=DW
W是节点连接关系,1分别和2、3号节点连接,把连接的权重写在第一行,1和自己连接权重为0,1和4不连接,权重为0;
把W的每一行累加后放到相对应的位置,得到D。
证明过程简单枯燥,基本就是把矩阵展开就是左边。
S算出来什么含义?怎么用?
在这里插入图片描述
S与图是有关的的,在计算损失函数的时候相当于正则化项,可以在NN中的任意一层用。正则化的用途之前有讲的拉,就是平滑函数。

挖坑

Semi-supervised Learning
Better Representation
去蕪存菁,化繁為簡
就是要找到模型中的隐藏因素(通常比较简单)更好的表达真实世界。
神雕侠侣:杨过 vs 樊一翁
在这里插入图片描述

Reference:

MIT出版,老师混MIT。。。
参考材料
在这里插入图片描述

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

oldmao_2000

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值