我已经有两年 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

本节内容综述

  1. t-SNE 中 NE 就是 Neighbor Embedding 。在高维空间中,直接算 distance 肯能不符合常理,因为数据所处得形状可能不是均匀得。
  2. 第一个方法 Locally Linear Embedding (LLE)。
  3. 另一个方法为 Laplacian Eigenmaps ,拉普拉斯特征映射。
  4. 之前的方法假设了“相近的点是接近的”,但没有防止“不相近的点接近”。因此提出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 ||_2izijwijzj2


如上,规定 w 时,找几个邻居也很重要。

Laplacian Eigenmaps

之前将半监督学习时提到过 smoothness assumption ,两点间的“密度距离”也很重要。如果在很密的区域比较近,那才是真的近。

于是我们依据某个规则建立图,两点间距离即为通路边数。

复习一下半监督学习

L=∑xrC(yr,y^r)+λSL=\sum\limits_{x^r} C(y^r,\hat y^r) + \lambda SL=xrC(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,jwi,j(yiyj)2=yTLy

其中,C是带有标签的项,而S表示平滑的正则。

于是我们把这个思维用在这里

于是,我们的目标就是最小化下式:
S=∑i,jwi,j∣∣zi−zj∣∣2S=\sum\limits_{i,j} w_{i,j} ||z^i-z^j||_2S=i,jwi,jzizj2

注意,上式中,www表示相似度。

但是这样遇到问题,因为其最优解可以为zi=zj=0z^i=z^j=0zi=zj=0

在半监督学习中,因为还有标签数据∑xrC(yr,y^r)\sum\limits_{x^r} C(y^r,\hat y^r)xrC(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(xjxi)=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(zjzi)=k=iS(zi,zk)S(zi,zj)

如何找 zzz ?则让 PPPQQQ 的分布越近越好。

使用 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=iKL(P(xi)Q(zi))=ijP(xjxi)logQ(zjzi)P(xjxi)

运算量有些大。可能需要先降维,再用 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=1Np(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(pq)=i=1Np(xi)(logp(xi)logq(xi))=i=1Np(xi)logq(xi)p(xi)

显然,DKL(p∣∣q)D_{KL}(p||q)DKL(pq)表示的就是概率qqq与概率ppp之间的差异。很显然KL散度越小,qqqppp的差异越小。

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)=exixj2

这样欧式距离稍大一点,相似度将下降得很明显。

此外,SNE方法在降维后,也使用相同的相似度衡量公式:S′(zi,zj)=e−∣∣zi−zj∣∣2S'(z^i,z^j)=e^{-||z^i-z^j||_2}S(zi,zj)=ezizj2

但是,t-SNE方法在降维后,采用了不同得衡量方法,即t-distributionS′(zi,zj)=11+∣∣zi−zj∣∣2S'(z^i,z^j)=\frac{1}{1+||z^i-z^j||_2}S(zi,zj)=1+zizj21


如上,这样得效果是:

  • 如果原来的 ∣∣xi−xj∣∣2||x^i - x^j||_2xixj2 足够小,那么降维后∣∣zi−zj∣∣2||z^i - z^j||_2zizj2的值也不会太大;
  • 但是如果原来的∣∣xi−xj∣∣2||x^i - x^j||_2xixj2有些大,那么降维后∣∣zi−zj∣∣2||z^i - z^j||_2zizj2将会进一步增加这个距离。

即,t-SNE让gap夸张化。


效果如上(当然不是直接做了像素,而是先降维,再t-SNE)。

【李宏毅2020 ML/DL】P58 Unsupervised Learning - Neighbor Embedding | LLE, t-SNE相关推荐

  1. 李宏毅svm_李宏毅2020 ML/DL补充Structured Learning Structured SVM

    李宏毅2020 ML/DL补充Structured Learning Structured SVM [李宏毅2020 ML/DL]补充:Structured Learning: Structured ...

  2. 【李宏毅2020 ML/DL】P59 Unsupervised Learning - Auto-encoder

    我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的.自己不知道的东西. 已经有人记了笔记(很用心,强烈推荐):https://github.com/Sakura-gh/ML-note ...

  3. 【李宏毅2020 ML/DL】P1 introduction

    [李宏毅2020 ML/DL]P1 introduction 本节主要介绍了 DL 的15个作业 英文大意 Regression: 回归分析 Classification: 分类 RNN: 循环神经网 ...

  4. 【李宏毅2020 ML/DL】P86-87 More about Domain Adaptation

    我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的.自己不知道的东西. 本节内容综述 本节课由助教 Chao Brian 讲解. 首先讲解些领域适配的基础内容,包括名词.定义等. 接 ...

  5. 【李宏毅2020 ML/DL】P15 Why Deep-

    我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的.自己不知道的东西. 已经有人记了笔记(很用心,强烈推荐): https://github.com/Sakura-gh/ML-not ...

  6. 【李宏毅2020 ML/DL】P14 Tips for training DNN | 激活函数、Maxout、正则、剪枝 Dropout

    我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的.自己不知道的东西. 已经有人记了笔记(很用心,强烈推荐): https://github.com/Sakura-gh/ML-not ...

  7. 台大李宏毅Machine Learning 2017Fall学习笔记 (16)Unsupervised Learning:Neighbor Embedding

    台大李宏毅Machine Learning 2017Fall学习笔记 (16)Unsupervised Learning:Neighbor Embedding

  8. 李宏毅深度学习--《Unsupervised Learning:Neighbor Embedding》

    <Unsupervised Learning:Neighbor Embedding> Manifold Learning Locally Linear Embedding (LLE) La ...

  9. 【李宏毅2020 ML/DL】P66 Self-supervised Learning

    我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的.自己不知道的东西. 本节内容综述 本节课四十分钟,由助教 Chi-Liang Liu 讲解 Self-Supervised Lea ...

最新文章

  1. 简单实现ibatis的物理分页
  2. Intellij IDEA SpringBoot项目热部署解决方案
  3. IBASE business knowledge from Gerhard
  4. 使用openSSL构造一个支持https的nodejs服务器
  5. [BZOJ4815][CQOI2017]小Q的表格 数论+分块
  6. 【JavaScript高级教程】JavaScript prototype(原型对象)
  7. 第 1-5 课:深入了解 Java 中的异常处理 + 面试题
  8. 1.6数组-像素翻转
  9. 返回数组指针或引用。
  10. android 百度地图无法显示,Android Studio中使用百度地图API,不显示地图的问题解决办法...
  11. Python:实现Zip格式的文件压缩
  12. 乔布斯人物介绍PPT模板
  13. 电脑版微信提示音mp3_短的微信提示音什么好?40首好听的微信提示音试听下载...
  14. Cousera吴恩达机器学习week5笔记
  15. 任务11 雷达与超声波感应灯(arduino程序)
  16. IOS手机越狱并分身
  17. CUDA浅尝辄止-----什么是CUDA
  18. android o 结构光流程,OPPO 3D结构光技术完成,下半年实现量产,O粉们期待吗?
  19. org.xml.sax.SAXParseException: The markup in the document following the root element must be well-fo
  20. onHoverEvent

热门文章

  1. django.db.utils.OperationalError: (1050, “Table ‘表名‘ already exists)解决方法
  2. Android开发中常见的内存泄露案例以及解决方法总结
  3. IDEA使用@Data注解,类调用get、set方法标红的解决办法
  4. eslint 验证vue文件 报错 unexpected token =解决方法
  5. 全网最详细的HBase启动以后,HMaster进程启动了,几秒钟以后自动关闭问题的解决办法(图文详解)
  6. 超实用的mysql分库分表策略,轻松解决亿级数据问题
  7. 为什么我的程序在完全循环8192个元素时会变慢?
  8. win11关机后主机依旧运行怎么办 Windows11关机后主机依旧运行的解决方法
  9. Spring集合类型属性注入
  10. stm32 JTAG和SWD的使用区别简要介绍