【李宏毅2020 ML/DL】P58 Unsupervised Learning - Neighbor Embedding | LLE, t-SNE
我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的、自己不知道的东西。
已经有人记了笔记(很用心,强烈推荐):https://github.com/Sakura-gh/ML-notes
本节对应笔记:
- https://github.com/Sakura-gh/ML-notes/blob/master/ML-notes-md/21_Unsupervised%20Learning%20Neighbor%20Embedding.md
本节内容综述
- t-SNE 中 NE 就是 Neighbor Embedding 。在高维空间中,直接算 distance 肯能不符合常理,因为数据所处得形状可能不是均匀得。
- 第一个方法 Locally Linear Embedding (LLE)。
- 另一个方法为 Laplacian Eigenmaps ,拉普拉斯特征映射。
- 之前的方法假设了“相近的点是接近的”,但没有防止“不相近的点接近”。因此提出
T-distributed Stochastic Neighbor Embedding (t-SNE)
。
文章目录
- 本节内容综述
- 小细节
- Locally Linear Embedding (LLE)
- Laplacian Eigenmaps
- 复习一下半监督学习
- 于是我们把这个思维用在这里
- T-distributed Stochastic Neighbor Embedding (t-SNE)
- KL Divergence
- t-SNE Similarity Measure
小细节
Locally Linear Embedding (LLE)
在高维空间中,找到各个数据见的关系,用wijw_{ij}wij来描述。将 wijw_{ij}wij 值固定住。
此时,将 xxx 降维成 zzz 。然后我们的优化目标就是
∑i∣∣zi−∑jwijzj∣∣2\sum\limits_i||z^i-\sum\limits_j w_{ij}z^j ||_2i∑∣∣zi−j∑wijzj∣∣2
如上,规定 w
时,找几个邻居也很重要。
Laplacian Eigenmaps
之前将半监督学习时提到过 smoothness assumption ,两点间的“密度距离”也很重要。如果在很密的区域比较近,那才是真的近。
于是我们依据某个规则建立图,两点间距离即为通路边数。
复习一下半监督学习
L=∑xrC(yr,y^r)+λSL=\sum\limits_{x^r} C(y^r,\hat y^r) + \lambda SL=xr∑C(yr,y^r)+λS
S=12∑i,jwi,j(yi−yj)2=yTLyS=\frac{1}{2}\sum\limits_{i,j} w_{i,j}(y^i-y^j)^2=y^TLyS=21i,j∑wi,j(yi−yj)2=yTLy
其中,C是带有标签的项,而S表示平滑的正则。
于是我们把这个思维用在这里
于是,我们的目标就是最小化
下式:
S=∑i,jwi,j∣∣zi−zj∣∣2S=\sum\limits_{i,j} w_{i,j} ||z^i-z^j||_2S=i,j∑wi,j∣∣zi−zj∣∣2
注意,上式中,www表示相似度。
但是这样遇到问题,因为其最优解可以为zi=zj=0z^i=z^j=0zi=zj=0。
在半监督学习中,因为还有标签数据∑xrC(yr,y^r)\sum\limits_{x^r} C(y^r,\hat y^r)xr∑C(yr,y^r)的牵制,因此不好出现这种情况;在无监督学习中,我们只能照猫画虎地添加一些额外约束:
- 假设降维后z所处的空间为MMM维,则Span{z1,z2,...,zN}=RMSpan\{z^1,z^2,...,z^N\}=R^MSpan{z1,z2,...,zN}=RM,我们希望降维后的zzz占据整个MMM维的空间,而不希望它在一个比MMM更低维的空间里。
其实,最终得到的zzz就是拉普拉斯矩阵的特征向量。而谱聚类spectral clustering就是在这基础上做K-means。
拉普拉斯图矩阵的相关内容:【李宏毅2020 ML/DL】P24 Semi-supervised的smoothness。
T-distributed Stochastic Neighbor Embedding (t-SNE)
如上,没有让不同的类相互远离。
首先计算数据间的相似度:S(xi,xj)S(x^i, x^j)S(xi,xj)。
变成概率模型(归一化):
P(xj∣xi)=S(xi,xj)∑k≠iS(xi,xk)P(x^j|x^i)=\frac{S(x^i,x^j)}{\sum_{k\ne i}S(x^i,x^k)}P(xj∣xi)=∑k=iS(xi,xk)S(xi,xj)
对于 zzz 也同理:S(zi,zj)S(z^i, z^j)S(zi,zj)。
变成概率模型(归一化):
Q(zj∣zi)=S′(zi,zj)∑k≠iS′(zi,zk)Q(z^j|z^i)=\frac{S'(z^i,z^j)}{\sum_{k\ne i}S'(z^i,z^k)}Q(zj∣zi)=∑k=iS′(zi,zk)S′(zi,zj)
如何找 zzz ?则让 PPP 与 QQQ 的分布越近越好。
使用 KL散度(KL divergence)
:
L=∑iKL(P(∣xi)∣∣Q(∣zi))=∑i∑jP(xj∣xi)logP(xj∣xi)Q(zj∣zi)L=\sum\limits_i KL(P(|x^i)||Q(|z^i))\ =\sum\limits_i \sum\limits_jP(x^j|x^i)log \frac{P(x^j|x^i)}{Q(z^j|z^i)}L=i∑KL(P(∣xi)∣∣Q(∣zi))=i∑j∑P(xj∣xi)logQ(zj∣zi)P(xj∣xi)
运算量有些大。可能需要先降维,再用 t-SNE 。
此外,t-SNE只能把一堆数据输入,不能对单个数据学习。因此,t-SNE不适合训练模型,而适于做固定数据的可视化。比如将高维数据可视化到二维平面上。
KL Divergence
感谢Sakura-gh的分享,这里补充一下 KL 散度的基本知识。
KL 散度是从信息论里演化而来的。首先介绍信息熵:H=−∑i=1Np(xi)⋅logp(xi)H=-\sum\limits_{i=1}^N p(x_i)\cdot log\ p(x_i)H=−i=1∑Np(xi)⋅logp(xi)
其用于翻译一个概率分布所需要的平均信息量。
在信息熵的基础上,我们定义 KL 散度为:
DKL(p∣∣q)=∑i=1Np(xi)⋅(logp(xi)−logq(xi))=∑i=1Np(xi)⋅logp(xi)q(xi)\begin{aligned} & D_{KL}(p||q) & =\sum\limits_{i=1}^N p(x_i)\cdot (log\ p(x_i)-log\ q(x_i)) & \\ & & =\sum\limits_{i=1}^N p(x_i)\cdot log\frac{p(x_i)}{q(x_i)} & \\ \end{aligned}DKL(p∣∣q)=i=1∑Np(xi)⋅(logp(xi)−logq(xi))=i=1∑Np(xi)⋅logq(xi)p(xi)
显然,DKL(p∣∣q)D_{KL}(p||q)DKL(p∣∣q)表示的就是概率qqq与概率ppp之间的差异。很显然KL散度越小,qqq与ppp的差异越小。
t-SNE Similarity Measure
之前的方法常常采用欧式距离,并且使用了RBF function :S(xi,xj)=e−∣∣xi−xj∣∣2S(x^i,x^j)=e^{-||x^i-x^j||_2}S(xi,xj)=e−∣∣xi−xj∣∣2
这样欧式距离稍大一点,相似度将下降得很明显。
此外,SNE方法在降维后,也使用相同的相似度衡量公式:S′(zi,zj)=e−∣∣zi−zj∣∣2S'(z^i,z^j)=e^{-||z^i-z^j||_2}S′(zi,zj)=e−∣∣zi−zj∣∣2。
但是,t-SNE方法在降维后,采用了不同得衡量方法,即t-distribution:S′(zi,zj)=11+∣∣zi−zj∣∣2S'(z^i,z^j)=\frac{1}{1+||z^i-z^j||_2}S′(zi,zj)=1+∣∣zi−zj∣∣21
如上,这样得效果是:
- 如果原来的 ∣∣xi−xj∣∣2||x^i - x^j||_2∣∣xi−xj∣∣2 足够小,那么降维后∣∣zi−zj∣∣2||z^i - z^j||_2∣∣zi−zj∣∣2的值也不会太大;
- 但是如果原来的∣∣xi−xj∣∣2||x^i - x^j||_2∣∣xi−xj∣∣2有些大,那么降维后∣∣zi−zj∣∣2||z^i - z^j||_2∣∣zi−zj∣∣2将会进一步增加这个距离。
即,t-SNE让gap夸张化。
效果如上(当然不是直接做了像素,而是先降维,再t-SNE)。
【李宏毅2020 ML/DL】P58 Unsupervised Learning - Neighbor Embedding | LLE, t-SNE相关推荐
- 李宏毅svm_李宏毅2020 ML/DL补充Structured Learning Structured SVM
李宏毅2020 ML/DL补充Structured Learning Structured SVM [李宏毅2020 ML/DL]补充:Structured Learning: Structured ...
- 【李宏毅2020 ML/DL】P59 Unsupervised Learning - Auto-encoder
我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的.自己不知道的东西. 已经有人记了笔记(很用心,强烈推荐):https://github.com/Sakura-gh/ML-note ...
- 【李宏毅2020 ML/DL】P1 introduction
[李宏毅2020 ML/DL]P1 introduction 本节主要介绍了 DL 的15个作业 英文大意 Regression: 回归分析 Classification: 分类 RNN: 循环神经网 ...
- 【李宏毅2020 ML/DL】P86-87 More about Domain Adaptation
我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的.自己不知道的东西. 本节内容综述 本节课由助教 Chao Brian 讲解. 首先讲解些领域适配的基础内容,包括名词.定义等. 接 ...
- 【李宏毅2020 ML/DL】P15 Why Deep-
我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的.自己不知道的东西. 已经有人记了笔记(很用心,强烈推荐): https://github.com/Sakura-gh/ML-not ...
- 【李宏毅2020 ML/DL】P14 Tips for training DNN | 激活函数、Maxout、正则、剪枝 Dropout
我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的.自己不知道的东西. 已经有人记了笔记(很用心,强烈推荐): https://github.com/Sakura-gh/ML-not ...
- 台大李宏毅Machine Learning 2017Fall学习笔记 (16)Unsupervised Learning:Neighbor Embedding
台大李宏毅Machine Learning 2017Fall学习笔记 (16)Unsupervised Learning:Neighbor Embedding
- 李宏毅深度学习--《Unsupervised Learning:Neighbor Embedding》
<Unsupervised Learning:Neighbor Embedding> Manifold Learning Locally Linear Embedding (LLE) La ...
- 【李宏毅2020 ML/DL】P66 Self-supervised Learning
我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的.自己不知道的东西. 本节内容综述 本节课四十分钟,由助教 Chi-Liang Liu 讲解 Self-Supervised Lea ...
最新文章
- 简单实现ibatis的物理分页
- Intellij IDEA SpringBoot项目热部署解决方案
- IBASE business knowledge from Gerhard
- 使用openSSL构造一个支持https的nodejs服务器
- [BZOJ4815][CQOI2017]小Q的表格 数论+分块
- 【JavaScript高级教程】JavaScript prototype(原型对象)
- 第 1-5 课:深入了解 Java 中的异常处理 + 面试题
- 1.6数组-像素翻转
- 返回数组指针或引用。
- android 百度地图无法显示,Android Studio中使用百度地图API,不显示地图的问题解决办法...
- Python:实现Zip格式的文件压缩
- 乔布斯人物介绍PPT模板
- 电脑版微信提示音mp3_短的微信提示音什么好?40首好听的微信提示音试听下载...
- Cousera吴恩达机器学习week5笔记
- 任务11 雷达与超声波感应灯(arduino程序)
- IOS手机越狱并分身
- CUDA浅尝辄止-----什么是CUDA
- android o 结构光流程,OPPO 3D结构光技术完成,下半年实现量产,O粉们期待吗?
- org.xml.sax.SAXParseException: The markup in the document following the root element must be well-fo
- onHoverEvent
热门文章
- django.db.utils.OperationalError: (1050, “Table ‘表名‘ already exists)解决方法
- Android开发中常见的内存泄露案例以及解决方法总结
- IDEA使用@Data注解,类调用get、set方法标红的解决办法
- eslint 验证vue文件 报错 unexpected token =解决方法
- 全网最详细的HBase启动以后,HMaster进程启动了,几秒钟以后自动关闭问题的解决办法(图文详解)
- 超实用的mysql分库分表策略,轻松解决亿级数据问题
- 为什么我的程序在完全循环8192个元素时会变慢?
- win11关机后主机依旧运行怎么办 Windows11关机后主机依旧运行的解决方法
- Spring集合类型属性注入
- stm32 JTAG和SWD的使用区别简要介绍