图傅里叶变换

目录

什么是图信号?

如何理解图信号的”谱“?

图傅里叶变换是什么?

图傅里叶变换中特征值和图信号的总变差有什么关系?


让我们先总结一下,我们想要把图信号 \textbf{x} 正交分解到一组基 \textbf{U}=(\textbf{u}_1,\textbf{u}_2,...,\textbf{u}_N) 上;

那么\textbf{U}怎么得到?可以通过对图的拉普拉斯矩阵\textbf{L} 做特征分解得到,即\textbf{L}=\boldsymbol{U} \boldsymbol{\Lambda} \boldsymbol{U}^{\mathrm{T}}.

于是\hat{\boldsymbol{x}}=\boldsymbol{U}^T\boldsymbol{x}    \boldsymbol{x}=\boldsymbol{U}\hat{\boldsymbol{x}}           

总变差:\boldsymbol{T} \boldsymbol{V}(\boldsymbol{x}) =\sum_k^N \lambda_k \hat{\boldsymbol{x}}_k^2    \lambda_k是对角阵的第个特征值。

什么是图信号?

图信号定义:

给定图G=(V,E),V为节点集合,长度为N,图信号是一种描述V→R的映射,向量表示

每个x代表对应下标的节点上的信号强度。

与普通信号不同的是:图信号定义在节点上,节点存在固有的关联结构。

如何理解图信号的”谱“?

当我们在讨论图卷积神经网络时,”谱“意味着图拉普拉斯矩阵的特征分解。

假设 图信号 \textbf{x} 有 N个分量, 如果能找到一组正交基向量,我们就可以通过这组正交基向量的线性组合 来表达图信号。

用人话举个例子:

对于一个三维空间,一个向量\vec{a}是三维的,我们用一组正交基\vec{x},\vec{y},\vec{z}表示,假设\vec{a}=3\vec{x}+2\vec{y}+1\vec{z}

现在把图信号想象成\vec{a},我们要对这个图信号做正交分解,实际就是用一组正交基来表示图信号,在各个基上的强度就是那个变量 3 2 1,\vec{a}就是\vec{x},\vec{y},\vec{z}的线性组合。

在信号的傅里叶变换中,实际上也是把一个信号分解在了一组正交基上,这组正交基就是

现在对于图信号,我们也想做正交分解,假设这组正交基是

\textbf{U}=(\textbf{u}_1,\textbf{u}_2,...,\textbf{u}_N)

有了这组正交基,我们就可以定义图的傅里叶变换了。

图傅里叶变换是什么?

图的傅里叶变换就是一种数学变换。它将图的而拉普拉斯矩阵分解为特征值和特征向量。

图的拉普拉斯矩阵L=D-A(L是拉普拉斯矩阵,D是度矩阵,A是邻接矩阵,这里不细讲)

在图的傅里叶变换中,拉普拉斯矩阵中的而特征值\lambda,也就是该矩阵的谱,(你可以理解为各个分量前对应的系数)特征向量(理解为那组正交的向量)。

对于某个图信号 \textbf{x} 而言,它的离散傅里叶变换同样可以记作 点积 的形式,即

\hat{x}(\lambda _k)=\left \langle x,u_k \right \rangle=\sum_{i=1}^{N}x_iu_k(i),k=1,2,..,N

其中x_i表示图信号向量 \textbf{x}的第i个分量,\textbf{u}_k是特征值\lambda _k对应的特征向量,\textbf{u}_k(i)表示第k个特征向量\textbf{u}_k的第i个分量。

\hat{x}(\lambda _k)表示图信号在第 k个傅里叶基上的投影,即所谓的傅里叶系数。这个投影的大小实际也衡量了图信号和这个基之间的相似度,也可以说,他是信号在某个基上的强度。

\left(\begin{array}{c} \hat{f}\left(\lambda_1\right) \\ \hat{f}\left(\lambda_2\right) \\ \vdots \\ \hat{f}\left(\lambda_N\right) \end{array}\right)=\left(\begin{array}{c} \hat{\boldsymbol{x}}_1 \\ \hat{\boldsymbol{x}}_2 \\ \vdots \\ \hat{\boldsymbol{x}}_N \end{array}\right)=\left(\begin{array}{cccc} \boldsymbol{u}_1(1) & \boldsymbol{u}_1(2) & \cdots & \boldsymbol{u}_1(N) \\ \boldsymbol{u}_2(1) & \boldsymbol{u}_2(2) & \cdots & \boldsymbol{u}_2(N) \\ \vdots & \vdots & \ddots & \vdots \\ \boldsymbol{u}_N(1) & \boldsymbol{u}_N(2) & \cdots & \boldsymbol{u}_N(N) \end{array}\right)\left(\begin{array}{c} \boldsymbol{x}_1 \\ \boldsymbol{x}_2 \\ \vdots \\ \boldsymbol{x}_N \end{array}\right)

\hat{\boldsymbol{f}}=\hat{\boldsymbol{x}}=\boldsymbol{U}^T\boldsymbol{x}

图傅里叶的逆变换表达:

\begin{aligned} & \boldsymbol{x}=\boldsymbol{U}\hat{\boldsymbol{x}} =\hat{x}_1 \boldsymbol{u}_1+\hat{x}_2 \boldsymbol{u}_2+\cdots+\hat{x}_N \boldsymbol{u}_N \\ & =\sum_{i=1}^N \hat{x}_i \boldsymbol{u}_i \\ & \end{aligned}

从线性代数角度来看,(\textbf{u}_1,\textbf{u}_2,...,\textbf{u}_N)构成一组完备的正交基向量,因此图上的任意信号都可以表达为这些基向量的线性组合,组合的系数(权重)就是 它在基向量上的投影(傅里叶系数 \hat{x_1},...,\hat{x_N})。

图傅里叶变换中特征值和图信号的总变差有什么关系?

总变差(Total Variation)是一个标量,描述的是两个信号量两两之间的差值。

\begin{aligned} \boldsymbol{T} \boldsymbol{V}(\boldsymbol{x}) & =\boldsymbol{x}^{\mathrm{T}} \boldsymbol{L} \boldsymbol{x} \\ & =\boldsymbol{x}^{\mathrm{T}} \boldsymbol{U} \boldsymbol{\Lambda} \boldsymbol{U}^{\mathrm{T}} \boldsymbol{x} \\ & =(\boldsymbol{U} \hat{\boldsymbol{x}})^{\mathrm{T}} \boldsymbol{U} \boldsymbol{\Lambda} \boldsymbol{U}^{\mathrm{T}}(\boldsymbol{U} \hat{\boldsymbol{x}}) \\ & =\hat{\boldsymbol{x}}^{\mathrm{T}} \boldsymbol{U}^{\mathrm{T}} \boldsymbol{U} \boldsymbol{\Lambda} \boldsymbol{U}^{\mathrm{T}} \boldsymbol{U} \hat{\boldsymbol{x}} \\ & =\hat{\boldsymbol{x}}^{\mathrm{T}} \boldsymbol{I} \boldsymbol{\Lambda} \boldsymbol{I} \hat{\boldsymbol{x}} \\ & =\hat{\boldsymbol{x}}^{\mathrm{T}} \boldsymbol{\Lambda} \hat{\boldsymbol{x}} \\ & =\sum_k^N \lambda_k \hat{\boldsymbol{x}}_k^2 \end{aligned}

由表达式可知,总变差与特征值之间存在非常直接的线性关系,总变差是所有特征值的一个线性组合,其权重是图信号所对应的傅里叶系数的平方。总变差衡量图信号整体平滑度,可将特征值等价于频率,特征值越低,频率越低,相近节点信号趋于一致;频率越高,相近节点上信号差异越大。
 

例子

import numpy as np
np.set_printoptions(precision = 2, suppress = True)A = np.array([[0, 1, 1, 0, 0],[1, 0, 1, 1, 0],[1, 1, 0, 1, 0],[0, 1, 1, 0, 1],[0, 0, 0, 1, 0]],
)
A_sum = np.sum(A, axis = 0)  #度数矩阵的按列求和D = np.diag(A_sum)     #求得度数矩阵L = D - A  #求得拉普拉斯矩阵print(L)    #输出拉普拉斯矩阵(evals,evecs) = np.linalg.eig(L) #求拉普拉斯特征值及其向量sorted_index =  np.argsort(evals) #特征值降序lambda_matrix = np.diag(evals[sorted_index]) #获取特征值对角阵print(lambda_matrix)sorted_vectors = evecs[:,sorted_index] #特征值对应的特征向量print(sorted_vectors)

Reference:

《从深度学习到图神经网络》 张玉宏、杨铁军著

图卷积网络原来是这么回事(一)——拉普拉斯矩阵初探 - 知乎 (zhihu.com)icon-default.png?t=N7T8https://zhuanlan.zhihu.com/p/290755442

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL 基础学习笔记(二)

目录 1 约束1.1 约束概述1.2 非空约束1.3 唯一约束1.4 主键约束1.5 默认约束1.6 外键约束 2 数据库设计2.1 数据库设计概述2.2 表关系 3 多表查询3.1 多表查询概述3.2 内连接查询3.3 外连接查询3.4 子查询 4 事务4.1 事务概述4.2 四大特征 1 约束 1.1 约束概述 约束是作用于表…

Labview2018安装教程(超级详细)

网盘资源见文末 一 .简介 LabVIEW 2017是National Instruments(NI)开发的一款图形化编程环境。LabVIEW是一种流程导向的编程语言,它使用图形符号表示程序的逻辑和数据流,并且以数据流的方式执行程序,使得用户可以通过…

双证齐发!移远通信通过ISO 26262功能安全流程认证及产品认证

近日,国际知名的认证和咨询机构法国BV(Bureau Veritas)向移远通信颁发了ISO 26262:2018功能安全ASIL B流程认证证书,同时为移远车规级GNSS模组LG69T(AB)颁发了ISO 26262 ASIL-B产品认证证书。移…

Java多线程篇(13)——FutureTask、Disruptor的使用

文章目录 FutureTaskCompletionServiceCompletableFuture DisruptorDisruptor 核心概念运行流程不同生产者模式的区别Disruptor设计精髓 FutureTask 现有一个场景,10个线程执行10个任务,然后主线程获取任务结果。 比较广泛的一个说法就是,r…

Django开发实例总结(入门级、4.2.6、详细)

目录 概述 Django的核心组件包括 Django的项目结构 创建工程(4.2.6) 实例一:Hello world 实例二:访问一个自定义主页 实例三:通过登录跳转到主页 实例四:主页添加静态文件,包含js、css、…

MVCC(多版本并发控制)

一、什么是MVCC MVCC是为了解决数据库在不加锁的前提下提升并发性和读取效率的一种思想 数据库有已下几种并发情况 读-读:不会产生并发问题读-写:发生隔离性问题,可能导致脏读、幻读、不可重复度写-写:可能存在数据丢失 为了防…

CRM软件助力企业科学决策

我们常说“选择大于努力”,这对于企业发展同样适用。每一家企业管理者在日常工作中都要做大量决策,员工只是将决策落地,而这些决策往往决定了公司大大小小项目实施的顺利与否。因此,采用CRM软件助力企业科学决策显得十分关键。 越…

缓存击穿只会逻辑过期 OR 互斥锁?深入思考 == 鹤立鸡群

网上但凡看得见的文章,大部分在说缓存穿透时都是无脑分布式锁 / 逻辑过期,分布式锁一点问题都没有么?逻辑过期一点问题都没有么?还能不能再进一步优化? 在聊聊缓存击穿的双重判定锁之前,我们将按照循循渐进…

WebSocket协议在java中的应用

文章目录 一、WebSocket介绍1.Http和WebSocket比较:2.应用场景 二、WebSocket使用步骤1.客户端搭建2.导入maven坐标3.导入WebSocket服务端组件WebSocketServer,用于和客户端通信1.ServerEndpoint2.OnOpen3.OnMessage4.OnClose 4.导入配置类WebSocketConf…

【进程】利用 Linux 下的 /proc/pid/ 的内容学习进程

1. 进程号 在计算机中,每一个进程都有一个进程号,进程号类似于一个索引,操作系统就是通过这个进程号快速地找到进程。在 linux 使用 ps -aux 查看进程,可以看到进程号pid: rootswd-Lenovo-G40-80:/proc/4234# ps -au…

设计模式之两阶段终止模式

文章目录 1. 简介 2. 常见思路3. 代码实战 1. 简介 两阶段终止模式(Two-Phase Termination Pattern)是一种软件设计模式,用于管理线程或进程的生命周期。它包括两个阶段:第一阶段是准备阶段,该阶段用于准备线程或进程…

arcgis删除细长图斑的方法

1、有一张图斑数据如下: 如上图,有很多细长的面要素,需要保留的仅是图中的块状要素。 2、首先要将被合并的要素进行拆分,具体拆分步骤如下: 将所有要素选中,点击高级编辑中的拆分按钮。 3、拆分后图斑就…

汽车贴膜店展示服务预约小程序的作用是什么

很多家庭都有车辆,除了车身自带颜色或外观,部分消费者会选择贴车衣、改色膜以及其它装饰类服务;而市场高需求下也促进了商家生意增长。 但随着线上化程度加深,传统线下门店也面临多重困境,品牌需要线上发展获得生意及…

Sqoop的安装和使用

目录 一.安装 二.导入 1.全量导入 一.MySQL导入HDFS 二.MySQL导入Hive 2.增量导入 一.过滤导入hdfs/hive 二.导出 一.安装 1.下载地址:sqoop下载地址 2.解压 tar -zxvf ./sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz -C ../module/ 3.改名和配置归属权限 #改名…

SDL Passolo 2022.0.135 Crack

SDL Passolo是一款非常专业的本地化工具。它能够满足软件本地化和游戏行业的特定需求,可以显着加快本地化流程并提高输出质量,简化软件本地化,加快翻译流程,高效翻译图形用户界面,SDL Passolo的是一个特定的软件本地化…

WhatsApp Business为什么会被封号?该如何解决

目前,作为全球即时通讯领域的重要平台之一的WhatsApp已成为企业在营销和与客户沟通时的首选工具。但是长时间、高强度的营销行为很容易导致WhatsApp Business账户突然被封禁,无法再使用账号。即使后续再去进行申诉,要求官方解封该账户&#x…

ARPG----C++学习记录02 Section6位置,偏移,函数

设置actor位置 这一句代码就可以更改位置和旋转 给位置添加偏移offset 将debug的持久都设置为false,在tick中调用,球就会动。这是每帧移动,所以移动速度和帧率有关,需要更改 void Aitem::Tick(float DeltaTime) {Super::Tick(DeltaTime);Ad…

C++设计模式_24_Visitor 访问器

Visitor 访问器也是属于“行为变化”模式。 文章目录 1. 动机( Motivation)2. 代码演示Visitor 访问器3. 模式定义4. 结构(Structure)5. 要点总结6. 其他参考 1. 动机( Motivation) 在软件构建过程中,由于需求的改变,某些类层次结构中常常需要增加新的行…

HR怎么看待PMP证书呢?

作为之前在hr面试过的我来说,这些证书什么的还是很重要的,当你选择一个适合自己的职位时候,大多都是需要看到你的专业能力来进行判断你薪资和适合岗位的依据,pmp证书就是一个很好的衡量证据,而且这个含金量不用了说了非…