潜在空间可视化(Latent space visualization)

news2024/11/15 15:44:49

在“深度学习”系列中,我们不会看到如何使用深度学习来解决端到端的复杂问题,就像我们在《A.I. Odyssey》中所做的那样。我们更愿意看看不同的技术,以及一些示例和应用程序。

1、引言

上次(Autoencoders - Deep Learning bits #1),我们已经了解了什么是自动编码器(autoencoders),以及它们时如何工作的。今天,我们将看到它们如何以一些非常酷的方式帮助我们将数据可视化。为此,我们将使用**卷积自编码器架构(Convolutional AutoEncoder architecture,CAE)**处理图像。

① 什么是潜在空间?

自动编码器由两个组件组成,这里有一个快速提示。编码器(encoder)将来自高维输入的数据带到瓶颈层(bottleneck layer),那里的神经元数量最少。然后,解码器接受这个编码输入并将其转换回原始输入形状—在我们的例子中是图像。潜在空间是数据位于瓶颈层的空间。

img

卷积编码器-解码器架构

潜在空间包含图像的压缩表示(compressed representation),这是解码器允许使用的唯一信息,以尽可能忠实地重建输入。为了表现良好,网络必须学会在瓶颈层中提取最相关的特征。

让我们看看我们能做什么!

2、数据

我们将研究可能是最著名的计算机视觉手写数字的MNIST数据集。为了多样性,我通常更喜欢使用不太传统的数据集,但MNIST对于我们今天要做的事情来说真的很方便。

注意:尽管MNIST可视化在互联网上很常见,但本文中的图像是100%由代码生成的,因此您可以将这些技术用于您自己的模型。

img

MNIST是一个有28×28个手写数字图像的标记数据集。

3、基线—自动编码器的性能

为了理解编码器能够从输入中提取什么样的特征,我们可以首先看一下重建的图像。

注意:在这篇文章中,瓶颈层只有32个单元,这是一些非常非常残酷的维数缩减。如果它是一张图像,它甚至不会是6×6像素。

img

每个数字都显示在其模糊的重建旁边。

我们可以看到,自动编码器成功地重建了数字。重建是模糊的,因为输入在瓶颈层被压缩。我们需要查看验证样本的原因是为了确保我们没有过度拟合训练集。

这是训练过程动画:

img

每一步重建训练样本(左)和验证样本(右)。

4、t-SNE 可视化
① 什么是t-SNE?

在处理数据集时,我们要做的第一件事是一种有意义的方式将数据可视化。在我们的例子中,图像(或像素)空间有784维(28×28×1),我们显然无法绘制它。我们面临的挑战是将所有这些维度压缩成我们可以掌握的2D或3D形式。

这就是t-SNE,一种将高维空间映射到2D或3D空间的算法,同时试图保持点之间距离不变。我们将使用这种技术来绘制我们数据集的嵌入,首先直接从图像空间,然后从较小的潜在空间。

注意:t-SNE比它的近亲PCA和ICA更适合于可视化。

② 投影像素空间(Projecting the pixel space)

让我们从绘制数据集(来自图像空间)的t-SNE嵌入开始,看看它是什么样子。
img

来自验证集的图像空间表示的t-SNE投影。

我们已经可以看到一些数字大致聚集在一起。这是因为数据集非常简单,我们可以使用简单的启发式像素对样本进行分类。看看数字8、5、7和3是如何没有聚类的,这是因为它们都是由相同的像素组成的,只有微小的变化才能区分它们。

对于更复杂的数据,如RGB图像,唯一的聚类将是相同颜色的图像。

③ 投影潜在空间(Projecting the latent space)

我们知道潜在空间包含了一个比像素空间更简单的图像表示,所以我们可以希望t-SNE能给出一个有趣的潜在空间的二维投影。

img

来自验证集的潜在空间表示的t-SNE投影。

虽然不完美,但投影显示了更密集的星团。这表明,在潜在空间中,相同的数字彼此接近。我们可以看到,数字8、7、5和3现在更容易区分,并且出现在小集群中。

5、插值(Interpolation)

现在我们知道了模型能够提取的详细程度,我们可以探测潜在空间的结构。为了做到这一点,我们将比较插值在图像空间和潜在空间中的表现。

① 在图像空间中的线性插值(Linear interpolation in image space)

我们首先从数据集中获取两幅图像,并在它们之间进行线性插值。这有效地将图像以一种幽灵般的方式混合在一起。

img img img

像素空间插值。

造成这种混乱过渡的原因是像素空间本身的结构。在图像空间中,从一个图像平滑地转换到另一个图像是不可能的。这就是为什么把空杯子的图像和满杯子的图像混合在一起不会得到半满杯子的图像的原因。

② 在潜在空间中的线性插值(Linear interpolation in latent space)

现在,我们对潜在空间做同样的处理。我们取相同的起始和结束图像,并将它们输入编码器以获得它们的潜在空间表示。然后我们在两个潜在向量之间进行插值,并将这些输入到解码器中。

img img img

潜在空间插值。

结果更有说服力。我们可以清楚地看到形状从一个数字慢慢地转变为另一个数字,而不是两个数字的褪色覆盖。这显示了潜在空间对图像结构的理解程度。

这是两个空间的插值动画:

img img img img

图像空间(左)和潜在空间(右)的线性插值。

6、更多技术和样例
① 插值样例

在更丰富的数据集和更好的模型上,我们可以得到令人难以置信的视觉效果。

img

3-way潜在空间插值的人脸。

img

3D形状的插值。

② 潜在空间算术(arithmetics)

我们也可以在潜在空间中做算术。这意味着我们可以添加或减去潜在空间表示,而不是差值。

举个例子,man with glasses - man without glasses + woman without galsses = woman with glasses。这种方法会产生令人兴奋的效果。

img

3D形状的算术。

注意:我在代码中放置了一个函数,但是它在MNIST上看起来很糟糕。

7、总结

在这篇文章中,我们已经看到了几种技术来可视化嵌入在自编码器神经网络潜在空间中的学习特征。这些可视化有助于理解网络正在学习什么。在此基础上,我们可以利用潜在空间进行集群、压缩和许多其他应用程序。

你可以试试那边的代码:

  • 一个卷积自编码器的潜在空间的可视化技术:https://github.com/despoisj/LatentSpaceVisualization?ref=hackernoon.com

8、名词解释
① 什么叫端到端的复杂问题(complex problems end-to-end)?

“端到端的复杂问题”通常指的是那些需要多个步骤或组件协同工作才能解决的问题。在深度学习领域,这可能意味着一个系统需要从原始数据直接学习到最终输出,而不需要人为地进行中间步骤的干预或特征工程。这类问题通常具有以下特点:

  • 数据驱动:问题解决过程完全依赖于数据输入,系统通过学习数据模式来做出决策。
  • 自动化:系统能够自动地从数据中学习并进行预测或决策,无需人为设置特定的规则或参数。
  • 多步骤处理:问题可能包含多个阶段,如特征提取、模式识别、决策制定等,这些阶段在系统内部自动串联起来。
  • 高复杂性:问题本身可能非常复杂,涉及多种变量和不确定性,需要高级的算法和模型来处理。

例如,在《A.I. Odyssey》中,可能描述了一个深度学习系统如何从原始图像数据中自动学习并识别出图像中的对象,这个过程包括了图像预处理、特征提取、分类等多个步骤,但整个过程是自动完成的,不需要人为干预。

与之相对的,是一些更简单的问题,可能只需要单一的模型或算法就能解决,或者需要人为地进行一些预处理或后处理步骤。在深度学习的“系列”中,可能更倾向于展示不同的技术、算法和它们在特定问题上的应用,而不是深入探讨如何构建一个完整的端到端系统来解决极其复杂的问题。

② 简单了解t-SNE

t-SNE,降维方法之一。降维在机器学习中非常重要。这是因为如果使用高维数据创建模型,则很容易欠拟合。换句话说,有太多无用的数据需要学习。可以通过从各种数据中仅选择最重要的数据在模型中使用它,也可以使用多个数据创建新数据并使其低维。无论如何,有必要将此类高维数据转换为低维数据。这称为降维。还有其他方法可以创建要素,例如“特征消除”和“特征选择”。降维方法有两种类型:线性方法(主成分分析法PCA,独立成分分析法,线性判别分析法等)和非线性方法(歧管,自动编码器等)。t-SNE是非线性方法之一。

它是从SNE(随机邻居嵌入)演变为t-SNE(t分布随机邻居嵌入),然后发展到UMAP(均匀流形近似和投影)。

  • t-SNE是由t和SNE组成,t分布和随机近邻嵌入(Stochastic Neighbor Embedding)。
  • t-SNE是一种可视化工具,将高维数据降到2-3维,然后画成图。
  • t-SNE是目前效果最好的数据降维和可视化方法。
  • t-SNE的缺点是:占用内存大,运行时间长。

t-SNE的实现过程:How to Use t-SNE Effectively:https://distill.pub/2016/misread-tsne/

t-SNE算法步骤:

  • 找出高维空间中相邻点之间的成对相似性;
  • 根据高维空间中点的成对相似性,将高维空间中的每个点映射到低维空间;
  • 使用基于Kullback-Leibler散度(KL散度)的梯度下降找到最小化条件概率分布之间的不匹配的低维数据表示;
  • 使用Student-t分布计算低维空间中两点之间的相似度。
③ t-SNE是线性方法还是非线性方法?

t-SNE(t-分布随机邻域嵌入)是一种非线性降维技术,它用于将高维数据集嵌入到低维空间(通常是二维或三维),同时尽可能地保留数据点之间的相对距离。t-SNE的核心思想是将数据点在高维空间的相似度转换为在低维空间中的相似度,并通过优化过程来调整数据点的位置,使得在高维空间中距离较近的点在低维空间中也尽可能地靠近。

t-SNE的非线性特性主要体现在以下几个方面:

  • 概率分布的转换:t-SNE将高维空间中的数据点之间的欧氏距离转换为概率分布,然后通过优化过程将这些概率分布转换为低维空间的相似度。
  • t分布的使用:t-SNE使用t分布(一种具有重尾的分布)来更好地捕捉数据点之间的距离关系,这与线性降维方法(如PCA)使用的高斯分布不同。
  • 优化过程:t-SNE通过梯度下降或其他优化算法来调整数据点在低维空间中的位置,这个过程是非线性的。
  • 局部结构的保持:t-SNE特别强调保持数据点的局部结构,这通常需要非线性的方式来实现。

因此,t-SNE是一种非线性的降维方法,它在许多情况下能够生成更易于解释和可视化的数据表示。

9、实践

案例:随机生成数据并进行降维

import matplotlib.pyplot as plt
from sklearn.manifold import TSNE
 
tsne = TSNE(n_components=2)
x = [[1,2,2],[2,2,2],[3,3,3]]
y = [1,0,2]#y是x对应的标签
x_tsne = tsne.fit_transform(x)
plt.scatter(x_tsne[:,0],x_tsne[:,1],c=y)
plt.show()

我自己的代码:在3个同配图和6个异配图上进行t-SNE可视化(在上面代码的基础上改了一丢丢)

import matplotlib.pyplot as plt
from sklearn.manifold import TSNE
 
tsne = TSNE(n_components=2)
#x = [[1,2,2],[2,2,2],[3,3,3]]
#y = [1,0,2]#y是x对应的标签
x = features
y = labels
x_tsne = tsne.fit_transform(x)
# 添加标题
plt.title('cora')
plt.scatter(x_tsne[:,0],x_tsne[:,1],c=y)
plt.show()

可视化结果(以cora为例):

原始空间的t-SNE可视化:

在这里插入图片描述

潜在空间的t-SNE可视化:在这里插入图片描述

10、参考资料
  • Latent space visualization - Deep Learning bits #2:https://hackernoon.com/latent-space-visualization-deep-learning-bits-2-bd09a46920df?source=post_page-----de5a7c687d8d--------------------------------
  • Use your eyes and Deep Learning to command your computer — A.I. Odyssey part.2:https://medium.com/hackernoon/talk-to-you-computer-with-you-eyes-and-deep-learning-a-i-odyssey-part-2-7d3405ab8be1
  • kimi:https://kimi.moonshot.cn/
  • Autoencoders - Deep Learning bits #1:https://hackernoon.com/autoencoders-deep-learning-bits-1-11731e200694?ref=hackernoon.com
  • PCA(主要成分分析法):https://www.cs.cmu.edu/~elaw/papers/pca.pdf?ref=hackernoon.com
  • ICA:http://www2.hawaii.edu/~kyungim/papers/baek_cvprip02.pdf?ref=hackernoon.com
  • RGB image:https://www.cs.toronto.edu/~kriz/cifar.html?ref=hackernoon.com
  • 一个卷积自编码器的潜在空间的可视化技术:https://github.com/despoisj/LatentSpaceVisualization?ref=hackernoon.com
  • 实用篇|T-SNE可视化工具详情及代码示例:https://blog.csdn.net/weixin_44649780/article/details/133987875
  • How to Use t-SNE Effectively:https://distill.pub/2016/misread-tsne/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1910754.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PLC物联网关在工业自动化领域的应用的意义-天拓四方

随着信息技术的飞速发展,物联网技术正逐步渗透到各个行业领域,其中,工业自动化领域的PLC与物联网的结合,为工业自动化的发展开辟了新的道路。PLC物联网关作为连接PLC与物联网的重要桥梁,其重要性日益凸显。 PLC物联网…

STM32 低功耗模式 睡眠、停止和待机 详解

目录 1.睡眠模式(Sleep Mode) 2.停止模式(stop mode) 3.待机模式(Standby Mode) STM32提供了三种低功耗模式,分别是睡眠模式(Sleep Mode)、停止模式(Stop …

Python基于you-get下载网页上的视频

​ 1.python 下载地址 下载 : https://www.python.org/downloads/ 2. 配置环境变量 配置 python_home 地址 配置 python_scripts 地址 在path 中加入对应配置 3. 验证 ​ C:\Users>python --version Python 3.12.4C:\Users>wheel version wheel 0.43.04. 下载 c…

公开课备课思路有哪些?

在准备公开课时,你是否曾感到迷茫,不知从何下手?作为一名教师,我们深知公开课的重要性,它不仅是展示个人教学水平的舞台,也是与同行交流、学习的机会。那么,如何高效地备课,让公开课…

Linux--深入理与解linux文件系统与日志文件分析

一、文件与存储系统的 inode 与 block 1.1 硬盘存储 最小存储单位:扇区( sector )每个扇区存储大小:512 字节1.2 文件存取--block block(块),每个 block 块大小为:4k由连续的八个扇区组成一个 block 块是文件索引最小的单位每个 block 块中包括:文件数据文件数据:就…

开源数字人项目Hallo

硬件条件: gpu最低12G 软件: cuda需支持 Python选择3.10吧,我的版本3.11 源码: GitHub - fudan-generative-vision/hallo: Hallo: Hierarchical Audio-Driven Visual Synthesis for Portrait Image Animation models文件&…

v-model双向绑定的实现原理

在前端处理表单时&#xff0c;我们常常需要将表单输入框的内容同步给 JavaScript 中相应的变量。手动连接值绑定和更改事件监听器可能会很麻烦&#xff0c;这里我们先用input属性写入输入框&#xff0c;代码如下&#xff1a; <template><view class"out"&g…

从零开始搭建互联网医院系统:技术与案例解析

随着信息技术的飞速发展和人们对医疗服务需求的增加&#xff0c;互联网医院逐渐成为医疗服务的重要模式。本文将详细介绍从零开始搭建互联网医院系统的关键技术和具体案例&#xff0c;帮助读者理解如何构建一个高效、可靠的互联网医院系统。 一、互联网医院系统的核心技术 1…

【EI稳定检索】第五届大数据、人工智能与软件工程国际研讨会(ICBASE 2024)

>>>【独立出版&#xff0c;Ei稳定检索】<<< 第五届大数据、人工智能与软件工程国际研讨会&#xff08;ICBASE 2024&#xff09; 2024年09月20-22日 | 中国温州 一轮截稿时间&#xff1a;2024年7月8日 二轮截稿时间&#xff1a;2024年8月5日 大会简介 *会议…

全能型CAE/CFD建模工具SimLab 详解Part1: Geomtry,轻松集成力学、电磁学、疲劳优化等功能

SimLab的建模功能 SimLab集成了结构力学&#xff0c;流体力学&#xff0c;电磁学&#xff0c;疲劳和优化等功能&#xff0c;是全能型的CAE / CFD建模工具。 具有强大的几何、网格编辑功能&#xff0c;能够快速的清理复杂模型&#xff0c;减少手动修复的工作量&#xff0c;提高…

通俗易懂--.csproj 文件

.csproj 文件 .csproj&#xff0c;是C#项目文件的扩展名&#xff0c;它是“C Sharp Project”的缩写。.net开发环境中建立项目时&#xff0c;会产生.csproj文件&#xff0c;这是C#的工程文件&#xff0c;其中记录了与工程有关的相关信息&#xff0c;例如包含的文件&#xff0c;…

192.168.1.1路由器管理系统使用教程

节选自&#xff1a;192.168.1.1路由器管理系统-厂商有哪些-如何使用-无法登录原因-苏州稳联 什么是 192.168.1.1 路由器管理系统&#xff1f; 192.168.1.1 是大多数家庭路由器的默认 IP 地址&#xff0c;用于访问路由器的管理控制台。通过这个管理系统&#xff0c;用户可以配…

快速掌握 ==== js 正则表达式

git 地址 https://gitee.com/childe-jia/reg-test.git 背景 在日常开发中&#xff0c;我们经常会遇到使用正则表达式的场景&#xff0c;比如一些常见的表单校验&#xff0c;会让你匹配用户输入的手机号或者身份信息是否规范&#xff0c;这就可以用正则表达式去匹配。相信大多数…

base SAS programming学习笔记10(combine data)

1.一对一合并 基本格式如下&#xff1a; data output-data-set; set data-set1; set data-set2;(data-set1和data-set2可以是相同的数据集&#xff0c;可以添加多个set 语句来实现上述的一对一合并) run; 输出数据集结果如下&#xff1a; a.会包含所有输入数据的变量名&#x…

Linux 系统 CPU 100% 异常问题,能否用一个 Shell 脚本完美解决?

昨天下午突然收到运维邮件报警&#xff0c;显示数据平台服务器cpu利用率达到了98.94%&#xff0c;而且最近一段时间一直持续在70%以上&#xff0c;看起来像是硬件资源到瓶颈需要扩容了&#xff0c;但仔细思考就会发现咱们的业务系统并不是一个高并发或者CPU密集型的应用&#x…

【linux服务器篇】-Redis-RDM远程连接redis

redis desktop manager 使用远程连接工具RDM连接redis 市面上比较常见的其中一款工具redis desktop manager 简单的说&#xff1a; Redis Desktop Manager 简单的来讲就是Redis可视化工具&#xff0c;可以让我们看到Redis中存储的内容。 redis desktop manager是一款功能强…

《梦醒蝶飞:释放Excel函数与公式的力量》10.2 COMPLEX函数

第二节 10.2 COMPLEX函数 10.2.1函数简介 COMPLEX函数是Excel中的一个工程函数&#xff0c;用于将实部和虚部组合成一个复数。复数广泛应用于工程、电气、物理等领域&#xff0c;COMPLEX函数提供了方便的复数表示和计算方法。 10.2.2语法&#xff1a; COMPLEX(real_num, i_…

AcWing 1073:树的中心 ← 树形DP

【题目来源】https://www.acwing.com/problem/content/1075/【题目描述】 给定一棵树&#xff0c;树中包含 n 个结点&#xff08;编号1~n&#xff09;和 n−1 条无向边&#xff0c;每条边都有一个权值。 请你在树中找到一个点&#xff0c;使得该点到树中其他结点的最远距离最近…

nvm 管理多版本 node

1、下载 先不安装node 下载 nvm 1.1.10-setup.zip 解压&#xff1a;nvm&#xff1a;https://nvm.uihtm.com/ 新建nodejs/node、nodejs/nvm文件夹用于存放node版本和nvm安装路径 安装nvm&#xff1a;上述链接有安装教程 查看是否安装成功&#xff1a;重新打开cmd 输入 nvm nv…

西瓜杯CTF(1)

#下班之前写了两个题&#xff0c;后面继续发 Codeinject <?php#Author: h1xaerror_reporting(0); show_source(__FILE__);eval("var_dump((Object)$_POST[1]);"); payload 闭合后面的括号来拼接 POST / HTTP/1.1 Host: 1dc86f1a-cccc-4298-955d-e9179f026d54…