GNN笔记:卷积
Posted 刘文巾
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GNN笔记:卷积相关的知识,希望对你有一定的参考价值。
1 卷积
我们先来看一下卷积的定义,卷积是指通过两个函数 f 和 g 生成第三个函数的一种数学算子,表征函数 f 与经过翻转和平移的 g 的乘积函数所围成的曲边梯形的面积。
对于连续卷积来说,可以定义为:
对于离散卷积来说,可以定义为:
但无论是连续还是离散的卷积,他们都有一个特点,就是f和g中的下标之和是一个定值
1.1 连续卷积举例——信号分析
如下图所示,输入信号是 f(t) ,是随时间变化的。
系统响应函数是 g(t) ,是随时间指数下降的,它的物理意义是说:如果在 t=0 的时刻有一个输入,那么随着时间的流逝,这个输入将不断衰减。
换言之,到了 t=T时刻,原来在 t=0 时刻的输入f(0)的值将衰减为f(0)g(T)。
考虑到信号是连续输入的,也就是说,每个时刻都有新的信号进来。
所以,某一时刻最终输出的是所有之前输入信号的累积效果。
如下图所示,在T=10时刻,输出结果跟图中带标记的区域整体有关。
其中,f(10)因为是刚输入的,所以其输出结果应该是f(10)g(0),而时刻t=9的输入f(9),只经过了1个时间单位的衰减,所以产生的输出应该是 f(9)g(1),如此类推,即图中虚线所描述的关系。
这些对应点相乘然后累加,就是T=10时刻的输出信号值,这个结果也是f和g两个函数在T=10时刻的卷积值。
显然,上面的对应关系看上去比较难看,是拧着的,所以,我们把g函数对折一下,变成了g(-t),这样就好看一些了。
这就是为什么卷积要“卷”,要翻转的原因,这是从它的物理意义中给出的。
然后我们根据定义,把g(-t)向右移动T个单位
我们这算的是10这个时刻的卷积结果,如果要算其他位置的,就是把g(-t)曲线再沿着x轴左右滑动就可以了
1.2 从另一个角度来考虑f和g的离散卷积。
我们可以想成,固定f的位置(f的位置固定在哪里,取决于f和g下标之和的数值),将g翻转,然后对翻转后的g(我们称之为g’)进行滑动。
g‘滑动到不同的位置,会和f包围出不同的区域。对这些区域里面的元素两两乘积,然后累加,就得到了卷积函数的值。
1. 3 二维离散卷积
CNN中的卷积核已经是“扭过”之后的了,所以CNN中直接是对应位置元素相乘再求和。
2 卷积定理
在适当条件下,两个信号的卷积的傅立叶变换是他们的傅立叶变换的点积。
换句话说,一个域(如时域)的卷积等于另一个域(如频域)的点乘:
这里F(f)表示函数f的傅里叶变换
2.1 卷积原理的一个用处
利用卷积定理,我们可以简化卷积的运算量。
对于一个长度为 n 的序列,按照卷积的定义来计算则需要做 2n-1 组对位乘法,即时间复杂度为 O(n^2) .
2n-1我们可以这样去理解:
假设进行卷积的两个序列是f和g,我们固定f的位置,并令f的左端为0,右端为n-1.
卷积的意思是g从左向右滑动,和f包围起来的面积
所以和固定的f有相交区域的g一共有 (n-1)-[-(n-1)]+1=2n-1个
每一个可能的g和f都需要进行O(n)次运算。
所以时间复杂度为O(n^2)
而利用傅立叶变换后,只需要计算一组对位乘法。而
离散傅立叶变换有快速的算法(快速傅立叶变换),所以总的计算复杂度为O(nlogn) 。
参考资料:
【GNN】万字长文带你入门 GCN - 知乎 (zhihu.com)
https://www.zhihu.com/question/22298352/answer/637156871
以上是关于GNN笔记:卷积的主要内容,如果未能解决你的问题,请参考以下文章
李宏毅机器学习|图神经网络Graph Nerual Networks(GNN)|学习笔记-part2
李宏毅机器学习|图神经网络Graph Nerual Networks(GNN)|学习笔记-part2
GNN论文笔记: Graph Neural Networks with convolutional ARMA filters
论文笔记:DropMessage: Unifying Random Dropping for Graph Neural Networks