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

文章目录

  • 前言
  • 简介
    • 分类
    • 原因
  • Supervised Generative Model
    • 步骤描述
    • 为什么会采用以上步骤?
  • 第一种假设Low-density Separation
    • self-training
    • self-training的进阶:Entropy-based Regularization
    • 其他半监督学习方法:Semi-supervised SVM
  • 第二种假设:Smoothness Assumption
    • Cluster and then Label方法
    • Graph-based 方法
      • Graph-based方法精神
      • 定量研究
  • 挖坑
  • Reference:

前言

深度学习的内容到上节就结束了,接下来还剩下监督和半监督学习,半监督学习只有一个课时。半监督学习基于某种假设,本节课先介绍了在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。

原因

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

Supervised Generative Model

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

步骤描述

李宏毅学习笔记12.半监督学习_第4张图片
首先是初始化 θ θ θ,可以是随机初始化,也可以从labelled data里面估算。
第一步:根据现有的 θ θ θ,估算每一笔data属于 x u x^u xu的几率,当然如图所示,这个几率和初始化的 θ θ θ有关。
第二步:更新模型,如果没有考虑unlabelled data,那么计算公式为: P ( C 1 ) = N 1 N P(C_1)=\frac {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的几率的和,加上属于C1的数据的数量,然后除以总的数据数量。这里的重要思想是:unlabelled data并没有一定是属于 C 1 C1 C1或者是 C 2 C2 C2,而是根据概率来决定。
对于 μ 1 μ^1 μ1而言,如果不考虑unlabelled data,则只用计算上图中的第一项,考虑unlabelled data则要加上后面的项。
第二步完成后得到新的model,这个时候可以重新回到第一个步骤,一直反复。理论上这个算法是一定会收敛,但是结果受到参数的影响,如果从大的方向来看,这个算法实际上对应的是EM算法(可以参考李航的《统计学习方法》),第一步对应E,第二步对应M。

为什么会采用以上步骤?

对于labelled data,采用的是对数似然函数构造损失函数来解决这个问题
李宏毅学习笔记12.半监督学习_第5张图片
推导对数似然函数是把右边蓝色框里面的东西带入左边,然后求解。整个求解的思想是最大似然,找到最相近的形式,这个也是最大似然求解的思想。
对于unlabelled data,可以看到下图,第一项和上面是一样的,是labelled data的部分,对于unlabelled data
李宏毅学习笔记12.半监督学习_第6张图片
我们并不知道它是属于哪一类,我们如何估测它的几率呢?蓝色框中给出的一笔data: x u x^u xu出现的几率,由于不知道它是从 C 1 C1 C1还是 C 2 C2 C2来,所以这里两者都有可能。
接下来要求解上图中的 l o g L ( θ ) logL(θ) logL(θ),这个式子不是凸函数,所以用EM的方式来解。

第一种假设Low-density Separation

李宏毅学习笔记12.半监督学习_第7张图片
就是在分类中间会有明显的分界,在分界线附近只有比较稀疏(Low-density)的数据。

self-training

比较简单的算法,先上图:
李宏毅学习笔记12.半监督学习_第8张图片
解释一下步骤:模型的数据包含标记和非标记数据。
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
实际上这里用到了软分类和硬分类的概念
李宏毅学习笔记12.半监督学习_第9张图片
如果用神经网络来做分类,最后的输出是硬分类就是上面,软分类是下面。
老师说软分类是没有用的,一来是因为我们使用的是Low-density的假设,世界上的数据是非黑即白的;二来,如果使用软分类进行训练目标和输出没什么区别,所以参数不会有什么改善。
ng的课(忘记是ng还是231n)里面貌似是这样解释,你明确的告诉你的模型输入x的分类是什么,有利于增强模型的信心,这样模型才会学得更好。

self-training的进阶:Entropy-based Regularization

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

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

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

第二种假设:Smoothness Assumption

和第一种假设相对:近朱者赤,近墨者黑
蓬生麻中,不扶而直;白沙在涅,与之俱黑。《劝学篇》荀子。二次元+古文,老师还真博学。
李宏毅学习笔记12.半监督学习_第12张图片
直接字面去理解相近的输入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、数字识别
李宏毅学习笔记12.半监督学习_第13张图片
上图中的左边的2相当于 x 1 x^1 x1,中间的2相当于 x 2 x^2 x2,右边的3相当于 x 3 x^3 x3
2、人脸识别
李宏毅学习笔记12.半监督学习_第14张图片
左右两张脸的图片对于电脑而且实际上是不一样,但是如果收集够多的data,那么就会找到两张脸的过渡形态,从而得到两张脸一样的结论。
3、文件分类
想要划分天文学和旅游类文章
李宏毅学习笔记12.半监督学习_第15张图片
可能单篇文章词和词之间还没有什么联系,如果收集的数据够多,可能会产生下面的传递(propagate)效果:
李宏毅学习笔记12.半监督学习_第16张图片生词表补充:
Asteroid小行星
Comet彗星
zodiac黃道帶
Zion耶路撒冷zaɪən

Cluster and then Label方法

很简单的方法,就是通过聚类来进行unlabelled data的划分:
李宏毅学习笔记12.半监督学习_第17张图片
但是这个方法在图像分类上不好,可以想象,如果是根据pixel来进行聚类的效果。正确的方法是先用***抽取feature,然后再clustering。这里***老师讲的是英文,没听懂,-_-||。

Graph-based 方法

李宏毅学习笔记12.半监督学习_第18张图片
就是把数据变成图中的点,如果两个点之间没有连接(就算距离很近),则认为它们没有在一个high density region。例如上图中的蓝色红红色点。图的建立一般都很nature,例如网页与网页可以有hyperlink连接,文章与文章可以有引用。当然有时候需要自己想办法建立图:
李宏毅学习笔记12.半监督学习_第19张图片
1、计算相似度
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足够过,例如右上角的由于没有收集到足够多的数据,导致数据之间的连接断开了。
李宏毅学习笔记12.半监督学习_第20张图片

定量研究

smoothness的数字化:
两两相连节点拿出来乘以权重乘以0.5,下图可以试着计算对比下结果。
李宏毅学习笔记12.半监督学习_第21张图片
这个结果越小越好。把这个S公式改进一下:
李宏毅学习笔记12.半监督学习_第22张图片
吧y串成一个vector,由于y包含标签数据和未标签数据,所以这个vector的维度是R+U。则
s = y T L y s=\bold y^TL\bold y s=yTLy
中间的矩阵如上图所示,称为:Graph Laplacian拉普拉斯矩阵,大小是: ( 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算出来什么含义?怎么用?
李宏毅学习笔记12.半监督学习_第23张图片
S与图是有关的的,在计算损失函数的时候相当于正则化项,可以在NN中的任意一层用。正则化的用途之前有讲的拉,就是平滑函数。

挖坑

Semi-supervised Learning
Better Representation
去蕪存菁,化繁為簡
就是要找到模型中的隐藏因素(通常比较简单)更好的表达真实世界。

Reference:

MIT出版,老师混MIT。。。
参考材料
李宏毅学习笔记12.半监督学习_第24张图片

你可能感兴趣的:(李宏毅机器学习笔记)