【李宏毅机器学习笔记】11、 Semi-supervised
【李宏毅机器学习笔记】5、Logistic Regression
【李宏毅机器学习笔记】6、简短介绍Deep Learning
【李宏毅机器学习笔记】7、反向传播(Backpropagation)
【李宏毅机器学习笔记】8、Tips for Training DNN
【李宏毅机器学习笔记】9、Convolutional Neural Network(CNN)
【李宏毅机器学习笔记】10、Why deep?(待填坑)
【李宏毅机器学习笔记】11、 Semi-supervised
【李宏毅机器学习笔记】 12、Unsupervised Learning - Linear Methods
【李宏毅机器学习笔记】 13、Unsupervised Learning - Word Embedding(待填坑)
【李宏毅机器学习笔记】 14、Unsupervised Learning - Neighbor Embedding(待填坑)
【李宏毅机器学习笔记】 15、Unsupervised Learning - Auto-encoder(待填坑)
【李宏毅机器学习笔记】 16、Unsupervised Learning - Deep Generative Model(待填坑)
【李宏毅机器学习笔记】 17、迁移学习(Transfer Learning)
【李宏毅机器学习笔记】 18、支持向量机(Support Vector Machine,SVM)
【李宏毅机器学习笔记】 19、Structured Learning - Introduction(待填坑)
【李宏毅机器学习笔记】 20、Structured Learning - Linear Model(待填坑)
【李宏毅机器学习笔记】 21、Structured Learning - Structured SVM(待填坑)
【李宏毅机器学习笔记】 22、Structured Learning - Sequence Labeling(待填坑)
【李宏毅机器学习笔记】 23、循环神经网络(Recurrent Neural Network,RNN)
------------------------------------------------------------------------------------------------------
【李宏毅深度强化学习】视频地址:https://www.bilibili.com/video/av10590361?p=22
课件地址:http://speech.ee.ntu.edu.tw/~tlkagk/courses_ML17_2.html
-------------------------------------------------------------------------------------------------------

在supervised learning中,每一个样本
,都有对应的label
\hat 。
而Semi-supervised learning,则不仅包含
、
\hat,还包含了没label的data
。
- 通常做Semi-supervised learning,没label的data会远多于有label的data 。
Semi-supervised learning 有 Transductive learning和Inductive learning 两种方法。
- 在Transductive learning中,没label的data在 testing data里面(个人觉得testing data是指validation data那个意思)
- 在Inductive learning中,没label的data没在 testing data里面(个人觉得testing data是指validation data那个意思)
为什么是Semi-supervised learning?
- 获取有label的data成本太高。也可以说不缺data,但缺有label的data。
- 人类也在做Semi-supervised learning
Semi-supervised Learning for Generative Model
Supervised Generative Model

这个是Supervised Generative Model(具体内容可看第4篇笔记)
Semi-supervised Generative Model

在刚才已经有label的data的基础上,再加上如上图的绿色的没label的data 。
此时,由于这些没label的data会影响
,所以最后分界线也跟着变了
具体公式怎么做,如下。

- 初始化参数,这些参数可以用有label的data估测而来。
- 根据已有的参数,估测unlabel data属于哪一类的概率,比如属于class 1的概率等。
- 按照图中所示公式,更新模型
- 重复2、3步
上图的step 1就对应EM算法的E,step 2就对应EM算法的M 。

由第4篇笔记知道 ,Generative Model 就是根据label data生成一个能最大化Likelihood(
)的model。
而现在加了unlabel data,
的公式就变成上图所示的那样。
Low-density Separation

Low-density Separation,就是说两个类之间,如果存在一个density比较小(data比较少)的地方,那么这两个类的分界线应该就在这里。
Self-training

- 通过label data 算出model(随便什么方法计算都可以)
- 用这个model去给unlabeled data打标签(这个叫Pseudo-label),然后抽一些(怎么抽随便你)放到label data里。
重复1、2步。
注意:方法不能用于regression的问题上。

刚才有说过要给unlabel data 打标签,这里打的标签要是hard label,体现了Low-density Separation这个方法的“非黑即白”的特点。 什么是hard label,如上图。
把 unlabel data 丢到 network 里,输出这个unlabel data属于class 1的几率是0.7,属于class 2的几率是0.3。
- 用hard label就是直接将这个data的target设为class 1 。
- 用soft label,则仍然是把这个data的target设为
,和网络的输出是一样的。所以后面这个data丢给网络训练是没起作用的。
Self-training有一个进阶版,就是Entropy-based Regularization。
Entropy-based Regularization

在这个方法中,network的不是直接输出 x 属于什么class。而是输出一个分布,这个分布是 x 属于所有class的概率。
- 这个分布,越能明确看出 x 属于某一class就越好。
- 如果这个分布是 x 属于所有class的几率都差不多,那就是不好的。
这里用entropy
来衡量这件事情。同时把这项entropy 加到原来(只有label data)的Loss Function上,所以希望这一项越小越好。
- 第一个分布,x 属于class 1的概率是1,符合刚才说的比较好的情形,能明确看出x属于某一类,此时
= 0 。 - 第三个分布,x 属于每一类的概率都差不多,约等于1/5,符合刚才说的不好的情形,此时
=
。
Outlook: Semi-supervised SVM

Semi-supervised SVM的想法是这样,找一条分界线,将class 1和class 2区隔开。这条分界线要求在错误率比较低的前提下,还要把使得margin尽量比较大。如上图,第2中就符合这个要求。
Smoothness Assumption


Smoothness Assumption这个假设是这样:
如上图,以人类直觉来看
和
离得比较近、
和
离得比较远。但这并不意味着
和
比较像(或者说属于同一类)。因为
和
有一个地方是data比较稀疏的区域。而
、
虽然距离比较远,但它们中间都是的区域是有很多data“挤在一起”(即 high density region)。所以Smoothness Assumption的想法,应该判断
、
是同一类的。
下面是一个更具体的例子。

以左图为例子,如果只看这三个数字,感觉
和
会更像,而
和
比较不相像。
但当我们搜集更多data,此时变成右图的样子。
就会觉得,
和
应该是属于同一类的。
同理,上图中的人脸的识别也一样。

上图是一个文章分类的例子,d1、d2、d3、d4等代表不同的文章。
左图中,data数量不够,此时我们说d1和d3属于同一类,可能不是那么自信。
而当我们搜集更多data,变成右图的样子。
就可以看出d1和d5比较像,d5和d6比较像,d6和d7比较像,d7和d3比较像。这时就可以下判断,d1和d3是属于同一类。
现在知道了Smoothness Assumption的想法,怎么实践呢?用Cluster and then Label 或者 Graph-based Approach。
Cluster and then Label

对所有data进行聚类(Cluster),如上图。cluster 1 里 label data 是class 1 的比较多,就把cluster 1里的所有unlabel data
都归于class 1。
Graph-based Approach

把data(图中的点)连接起来,形成一张图(graph)。即便data间距离很远,但只要“有路相通”,就是属于同一类的。
下面看下怎么建这个图(graph)。

- 为了把data(图中的点)连接成图,需要可以使用Gaussian Radial Basis Function(公式如上图)计算data间的相似性。
- 使用K Nearest Neighbor(kNN)或者e-Neighborhood将这些相似性比较高的点连接起来,两种方法的效果图如上图所示。
其中,Gaussian Radial Basis Function取exp的原因是为了防止出现错误,取了exp后,整个function的下降速度会快很多,这样只有两个点距离比较近,才能被认为是同一类。这样就能防止了图中的绿色点和橙色点,会被误认为同一类。

如上图,初始时只有 x 那个点是被label为class 1,但通过建立关系后,会慢慢往外“感染”。到最后,即便没有和 x 直接相连的data,也可以归为class 1。 但是还是要说一下,这个前提一定要是data足够多,能互相建立起关系才可以。

刚才说的都是比较定性的概念,这里用具体公式来定义有多smoothness。
套上图里的公式,这时可以得出左边的图比右边的图smooth。

衡量smoothness的公式S也可以写成上图的样子,它们结果会相等的。
R+U指的是包括了label的data和unlabel的data。
W矩阵的数值代表weight,1行2列代表
到
的weight ,其他以此类推。
D的第一行指的是W的第一行的总和,其他以此类推。

把S加到Loss Function后面,作为一项正则项。此时Loss Function要做的事情,不仅是要最小化Cross entropy,还要最小化S这一项。可以用gradient descent来做这件事情。
S之所以能最小化,是因为:上图的公式S的 y 就是 x 作为输入后,Network输出的结果。所以可以通过调网络的参数,来使S最小化。
另外,也可以使Network中间的layer的output变smooth,并不是只有最后的output可以变smooth。
