李宏毅学习笔记12.半监督学习
文章目录
前言
深度学习的内容到上节就结束了,接下来还剩下监督和半监督学习,半监督学习只有一个课时。半监督学习基于某种假设,本节课先介绍了在Generative Model中的应用,然后讲了两种常见假设,最后挖一坑,留待监督学习再讲。
公式输入请参考:在线Latex公式
简介
先来看非监督学习(Semi-supervised Learning)定义,如果是普通的监督学习:
假设我们有R笔training data,其中是function的输入(例如:一张图片),是function的输出(例如:分类标签)。对于非监督学习:
出了之前的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。
原因
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(绿色点表示),可以发现可能会使得蓝色和橙色点点和改变(分别可能是蓝色和橙色的虚线圆圈),两个分类的先验也可能发生变化,因为原来两个分类的数量差不多,现在明显橙色分类貌似多一些,总之,加入了unlabel data会影响很多因素(上图中最下面黑色字),最终影响到Decision boundary。这些都是非量化的分析,接下来看一下数学的描述(推导)。
步骤描述
首先是初始化,可以是随机初始化,也可以从labelled data里面估算。
第一步:根据现有的,估算每一笔data属于的几率,当然如图所示,这个几率和初始化的有关。
第二步:更新模型,如果没有考虑unlabelled data,那么计算公式为:,其中的意义见图所示。现在考虑上unlabelled data,出现的几率是出现的是的几率的和,加上属于C1的数据的数量,然后除以总的数据数量。这里的重要思想是:unlabelled data并没有一定是属于或者是,而是根据概率来决定。
对于而言,如果不考虑unlabelled data,则只用计算上图中的第一项,考虑unlabelled data则要加上后面的项。
第二步完成后得到新的model,这个时候可以重新回到第一个步骤,一直反复。理论上这个算法是一定会收敛,但是结果受到参数的影响,如果从大的方向来看,这个算法实际上对应的是EM算法(可以参考李航的《统计学习方法》),第一步对应E,第二步对应M。
为什么会采用以上步骤?
对于labelled data,采用的是对数似然函数构造损失函数来解决这个问题
推导对数似然函数是把右边蓝色框里面的东西带入左边,然后求解。整个求解的思想是最大似然,找到最相近的形式,这个也是最大似然求解的思想。
对于unlabelled data,可以看到下图,第一项和上面是一样的,是labelled data的部分,对于unlabelled data
我们并不知道它是属于哪一类,我们如何估测它的几率呢?蓝色框中给出的一笔data:出现的几率,由于不知道它是从还是来,所以这里两者都有可能。
接下来要求解上图中的,这个式子不是凸函数,所以用EM的方式来解。
第一种假设Low-density Separation
就是在分类中间会有明显的分界,在分界线附近只有比较稀疏(Low-density)的数据。
self-training
比较简单的算法,先上图:
解释一下步骤:模型的数据包含标记和非标记数据。
1、用标记数据去训练目标函数
2、将unlabelled data丢入训练好的获得,称为Pseudo-label伪标签。
3、从unlabelled data中拿出一部分data加入到labelled data set中。这里加那些?可以自己定,甚至可以为加的unlabelled data舔上weight(根据confidence)。
重复以上步骤。
问题:如果这个方法用在regression上面效果会怎么样。
答案:不适用,因为把regression中的unlabelled data的pseudo-label加入labelled data set中并不会影响。
实际上这里用到了软分类和硬分类的概念
如果用神经网络来做分类,最后的输出是硬分类就是上面,软分类是下面。
老师说软分类是没有用的,一来是因为我们使用的是Low-density的假设,世界上的数据是非黑即白的;二来,如果使用软分类进行训练目标和输出没什么区别,所以参数不会有什么改善。
ng的课(忘记是ng还是231n)里面貌似是这样解释,你明确的告诉你的模型输入x的分类是什么,有利于增强模型的信心,这样模型才会学得更好。
self-training的进阶:Entropy-based Regularization
假设我们的NN输入得到的输出是一个分布,根据非黑即白的假设,我们希望输出概率集中到某一个分类(unlabelled data我们也不知道是哪一类)因此左边三个图中,上面两个是好的,下面那个平均的概率不好。那如何使用数字来评估这个分布是好还是不好?答案就是熵。
PS:为什么熵能干这个事情,如果看过李开复讲熵的原理就容易明白,熵其实是表达数据的混乱程度,如果越平均(平均意味则不确定,那么就意味混乱),越混乱,熵的值越大。例如上图左边上面两个的熵都为0,都是确定为某一种分类,最下面熵最大,因为不确定是哪个类。
最后改进的损失函数就是分两部分,一部分是标记数据输出与label之间的交叉熵,另一部分是非标记数据的熵然后乘上浪大惩罚因子。
其他半监督学习方法: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的分布是不均匀的,如果和在一个高密度(High density region)范围内相近,那么和会很相近。或者说和能用high density path相连接。看右边例子:
有三笔输入:、和,如果只看距离判断,和最像,和没有那么像,这个是不太准确的假设,准确的假设应该是这样:
和最像,它们两个是High density的像,它们中间有一个High density region,而和中间有白色区域,所以它们不太像。
看实例:
1、数字识别
上图中的左边的2相当于,中间的2相当于,右边的3相当于。
2、人脸识别
左右两张脸的图片对于电脑而且实际上是不一样,但是如果收集够多的data,那么就会找到两张脸的过渡形态,从而得到两张脸一样的结论。
3、文件分类
想要划分天文学和旅游类文章
可能单篇文章词和词之间还没有什么联系,如果收集的数据够多,可能会产生下面的传递(propagate)效果:生词表补充:
Asteroid小行星
Comet彗星
zodiac黃道帶
Zion耶路撒冷zaɪən
Cluster and then Label方法
很简单的方法,就是通过聚类来进行unlabelled data的划分:
但是这个方法在图像分类上不好,可以想象,如果是根据pixel来进行聚类的效果。正确的方法是先用***抽取feature,然后再clustering。这里***老师讲的是英文,没听懂,-_-||。
Graph-based 方法
就是把数据变成图中的点,如果两个点之间没有连接(就算距离很近),则认为它们没有在一个high density region。例如上图中的蓝色红红色点。图的建立一般都很nature,例如网页与网页可以有hyperlink连接,文章与文章可以有引用。当然有时候需要自己想办法建立图:
1、计算相似度
2、添加边建立图,可以有个KNN或者e-Neighborhood(超过阈值e才建立边)
可以根据相似度定权重:
这里要解释下为什么用exp,exp只有两个点比较近值会大,如果稍微远一点exp的值会decrease很大。就像上图右下角中两个橙色是连的,但是和绿色稍微远一点就不连了。这样可以很有效的防止垮边界连接。
Graph-based方法精神
主要两点:
1、标记数据会影响他的邻居,如下图左边的x属于Class 1,它会使得和它相连的节点为Class 1的几率增加(看蓝色箭头)
2、第一点的特性会传递propagate,例如,右边那个节点没有直接连接到x,但是它为Class 1的几率也增加(看蓝色箭头),这就是传递,为了充分说明这个,右下角边还给出具体传递的例子。
缺点就是要data足够过,例如右上角的由于没有收集到足够多的数据,导致数据之间的连接断开了。
定量研究
smoothness的数字化:
两两相连节点拿出来乘以权重乘以0.5,下图可以试着计算对比下结果。
这个结果越小越好。把这个S公式改进一下:
吧y串成一个vector,由于y包含标签数据和未标签数据,所以这个vector的维度是R+U。则
中间的矩阵如上图所示,称为:Graph Laplacian拉普拉斯矩阵,大小是: 。
W是节点连接关系,1分别和2、3号节点连接,把连接的权重写在第一行,1和自己连接权重为0,1和4不连接,权重为0;
把W的每一行累加后放到相对应的位置,得到D。
证明过程简单枯燥,基本就是把矩阵展开就是左边。
S算出来什么含义?怎么用?
S与图是有关的的,在计算损失函数的时候相当于正则化项,可以在NN中的任意一层用。正则化的用途之前有讲的拉,就是平滑函数。
挖坑
Semi-supervised Learning
Better Representation
去蕪存菁,化繁為簡
就是要找到模型中的隐藏因素(通常比较简单)更好的表达真实世界。
Reference:
MIT出版,老师混MIT。。。
参考材料