半监督学习,一般应用于少量带标签的数据(数量R)和大量未带标签数据的场景(数量U),一般来说,U>>R。
半监督学习一般可以分为2种情况,一种是transductive learning
,这种情况下,将unlabeled data
的feature
利用进来。另外一种是inductive learning
,这种情况下,在训练的整个过程中,完全不看任何unlabeled data
的信息。
为什么要做semi-supervised learning
呢,因为我们现实中大多数情况下,搜集数据比较容易,但是数据标注比较困难。包括我们的人生中,我们自己也是一直在做semi-supervised learning
.
为什么semi-supervised learning
会有用呢,因为unlabeled data
可以告诉我们一些信息。通常,我们在做semi-supervised learning
时,会做出一些假设,这个假设很关键,会影响最后的结果。
这节课的主要讲述4个部分,第一个是讲generative model
时如何做semi-supervised learning
。然后在讲述2个常用的通用假设,分别是low density separation
假设和smoothness
假设,最后,semi-supervised learning
还有一个比较好用的一招是better representation
。
1、Generative Model
假设说我们已知标签的数据,有两个类别C1和C2,假设他们是属于高斯分布。我们可以画出我们的决策边界,对于任何一个数据,可以求出这个数据x
属于类别C1
的概率,如上图所示。
但是,这个时候如果再给了一个unlabeled data,那么我们上面的决策边界就会受到影响。这在直觉上是这样。
实际操作是怎么做的呢?
首先,先初始化一组参数 θ \theta θ。初始化可以随机设定参数,虽然说初始化的值也很重要。
第一步, 根据初始设定的参数,可以估计每个unlabeled data属于class 1的概率。
第二步,算出第一步的概率之后,便可以update 我们的model。
后续不断重复第一步和第二步。
如果我们知道EM算法的话,那么第一步就是E的过程,第二步就是M的过程。
这件事情直觉上可以理解为何这样做,我们实际上还是分析下原因,如上图所示。
2、Low density Separation Assumption
我们认为这个世界是一个非黑即白的世界。意思就是,在两个类别的交界处,密度是比较低的,data量是很少的,基本上不太会出现data。Low density
最具代表性的方法就是self training
。
self training
的方法非常的直觉和通俗易懂,我们不做过多的讲述。
我们现在需要来考虑的一个问题时,self training
的方法如果用来做回归regression
,会怎么样呢?work吗?
我们可以花5s的时间思考一下。
答案其实是无效的。拿最简单的线性回归为例,不断self training
出来的数据,再加入到model中进行训练,model不会发生变化,因此这招对于regression
是无效的。
self training
的过程和之前的generative model
的过程还是非常相似的,但也有不同之处。主要的不同之处在于hard label
和soft label
的区别。以神经网络为例,我们可以想下hard label
和soft label
哪个有效?
实际上,如果以ANN为例,soft label
是完全无效的。为什么呢?因为在现有的参数上这个unlabeled data都可以做到[0.7,0.3]的输出,如果此时标签还是[0.7,0.3],那么就完全不需要更新参数了,不需要更新model了。
Entropy-based Regularization
熵要越小越好。可以在损失函数时将unlabeled data
的熵一起加入作为最小化项。
3、Smoothness Assumption
Smoothness Assumption
的基本思想是,如果x相似,那么具有相同的标签。更具体的来说,如果数据的分布并不平均,那么假如两个x之间数据流非常密集,那么两个x具有相同的标签。如上图所示,虽然x2与x3的距离更近,但是x1和x2具有相同的标签。
这种假设往往更符合真实假设,因为同一种类别之间会有非常多的过渡形态。
如何实现Smoothness Assumption
1 cluster and then label
最简单的方法是聚类和打标。这个方法的前提假设是我们可以将同一个class的label都聚集在一起。但是,例如说在图像识别中,可能同一个class会长的很不像,不同的class会长的很像。因此,如果要使得这个方法有用,那么你的cluster的方法要很强。
在我们尝试的时候,可以用deep autoencoder来实现。
一般先用deep autoencoder进行call feature,然后再call clustering,这样一般就会work。
2 graph-based approach
我们使用graph来表达connected by a high density path
这件事情。我们把所有的data points都建立成一个graph
。这样的话,如果有2个点,在graph上是相连的,是走的到的,那么他们就是同一个class.
有时候,建立这个graph是一件很自然的事情,但有时候,我们要自己想办法去建立这个graph。
一个graph对结果的影响是非常重要的。但是这个事情做起来,很多的时候,凭的是自己的直觉。通常我们可以这样做:
首先需要定义如何去计算他们之间的相似度,例如说对于图像,直接从像素层面去建立相似度,可能效果会比较差。但是如果经过auto-encoder之后再建立相似度,结果可能会比较好。
算完相似度之后,我们便可以开始建立graph了。可以利用KNN的方法,相连固定k个值,也可以用e-neighborhood
,只相连相似度超过一定阈值的点。也可以用RBF函数来计算相似度。使用RBF函数的优点在于,只要距离远一点点,那么相似度就下降非常快。
在这种机制下,类别会不断的传播。
之前算是定性地计算这种graph,接下来我们来定量地表示。
我们需要定义一个量,smoothness
,例如说上图中存在2个例子,左右都有4个点,连线上的数字代表的是权重weight。现在我们来考虑下,左右两边哪边比较smooth一些。我们都会觉得左边更加smooth一些。我们可以用一个公式来定量的描述左右两边到底有多smooth。smooth程度用s表示,左边s=0.5,右边s=3。s值越小越好。
s的公式描述可以简化写成上图中的公式。其中W就是每个点之间的连接权重。例如说x1和x2之间的权重是2,因此w[1,2]和x[2,1]均为2.D则是一个对角矩阵,将w的每一行加起来刚好可以得到D上的对角元素。L也称为Graph Laplacian
。
在训练ANN模型时,我们可以将smoothness
作为损失项加入进去,类似于正则项一样。当然,这个smooth可以放在网络结构的任何地方,不一定要求输出要smooth,也可以要求其他地方要smooth。