Distill学习计划-深入理解图上卷积

Understanding Convolutions on Graphs

译自非常好的一篇博客,原文链接

​ 很多系统和交互——社交网络、分子结构、组织机构、文献引用、物理模型和交通都可以表示为图。我们如何在这些系统中推理和做出预测?

​ 一种想法是我们应用在其他领域表现良好的工具,比如神经网络在许多学习任务中展示了巨大的潜力。但是传统神经网络常用于操作固定大小或者常规结构的输入(比方说句子、图片和视频),因此我们不能优雅的用它们处理图结构数据。

​ 图神经网络(Graph neural networks,GNN)是神经网络中可用于处理图结构数据的一员,通过提取和利用基础图中的特征,GNN可以做出比起考虑单个实体的模型更明智的预测。

​ GNN不是可建模图结构数据的唯一工具,图核以及随机游走也是非常流行的方式。然如今GNN以其与生俱来的灵活性对基础图更好的建模方式而取代了其他这些技术。

​ 在这篇文章,我们阐述图上计算的挑战以及GNN的起源和设计,进而探索如今最流行的GNN变体,并且我们也会讨论这些变体是由哪些相似的模块组成的。

图上计算的挑战

缺乏一致结构

图通常是非常灵活的数学模型,而这也意味着它们不同实例间缺乏一致的结构,从以下例子就一目了然:

  • 分子间有不同数量的原子
  • 分子中的原子有不同的类型
  • 每对原子可能有不同的连接方式
  • 这些连接的引力可能不相同

以一种可计算的格式表示这些图的意义非同小可,而最终选择的表示通常很大程度上取决于实际问题。

节点顺序同变性

扩展上面一点:图上的节点在表示时通常没有固定顺序,因此我们想要我们的算法是顺序同变的,即它们不应该依赖节点顺序,如果我们以某种方式排序节点,那么最终的节点表示也应该以这种方式排序节点。

可测量性

图有时会很大,比方说Facebook和Twitter中超过了一亿用户,要操作这么大的数据非常不容易。而幸运的是,大多数自然产生的图都是稀疏的,也就是说点和边倾向于线性相关。我们发现这让我们可以使用聪明的方法去更高效的计算图中节点的表示。而这些方法有比起操作整个图会有更少的参数,这是非常重要的特性。

问题设置和标记

​ 图可以表示许多有用的问题,把覅是节点分类、图分类、节点聚类、链路预测、影响力最大化(重心)

​ 节点的表示学习是解决这些问题的共同前提:学习将这些单独的节点映射到固定大小的实值向量(嵌入/表示)。

​ 不同的GNN变体在计算这些表示的方式上会有所区别。然而通常来讲这个计算是一个迭代的过程。我们用 h v ( k ) h_v^{(k)} hv(k)来表示经过 k t h k^{th} kth次迭代后节点v的表示,每次迭代都可以看作是标准神经网络中的一层。

​ 我们通常以字母 G G G表示图, V V V表示点集, E E E表示边集。节点v以个体特征值作为部分输入,记为 x v , v ∈ V x_v,v\in V xv,vV。比方说彩图中一个像素点的节点特征可能是它的RGB值。

​ 为了便于说明,我们假设 G G G是无向的,并且每个点都是同种类型。这种图通常称为同构的。有时我们需要用矩阵 M M M来表示图的特征,行 M v M_v Mv表示节点v的特征值。

扩展卷积到图领域

​ CNN是在图像上提取特征的强力工具,而图像本身可以被视为非常规律的格状结构,以像素表示节点,,和RGN通道值表示节点特征。

​ 那么一个自然而然的想法就是将卷积推广到任意图。我们首先介绍在节点邻域上构造多项式滤波器的想法,就像 CNN 在邻近像素上计算局部滤波器一样。然后,我们将看到这个想法如何用更新的方法去扩展成更强大的机制。最后,我们将讨论使用“全局”图级信息来计算节点表示的替代方法。

图上多项式滤子

拉普拉斯图

我们先为图 G G G定义邻接矩阵A,度数矩阵 D D D,使每一行 D v = ∑ u A v u D_v=\sum_u{A_{vu}} Dv=uAvu,其中 A v u A_{vu} Avu对应v行u列,拉普拉斯矩阵 L = D − A L=D-A L=DA请添加图片描述

拉普拉斯多项式

​ 拉普拉斯图的多项式表示为 p w ( L ) = w 0 I n + w 1 L + w 2 L 2 + . . . + w d L d = ∑ i = 0 d w i L i p_w(L) = w_0I_n+w_1L+w_2L^2+...+w_dL^d = \sum_{i=0}^d w_i L_i pw(L)=w0In+w1L+w2L2+...+wdLd=i=0dwiLi,每条多项式可以转化为系数向量 w = [ w 0 , . . . , w d ] w=[w_0,...,w_d] w=[w0,...,wd],那么对于每个w, p w ( L ) p_w(L) pw(L)也像 L L L一样是一个 n × n n×n n×n的矩阵。

​ 这些多项式可以考虑为CNN中卷积核的等价物,系数 w w w则是卷积核中的参数。为了便于说明,我们考虑节点特征只有1维的情况(在多维情况下是同样适用的),我们把每个节点的特征值 x i ∈ R n x_i\in \mathbb{R}^n xiRn张成向量 x x x,定义通过卷积核 p W p_W pW的卷积为 x ′ = p w ( L ) x x'=p_w(L)x x=pw(L)x

​ 考虑最简单的情况, w 0 = 1 w_0 = 1 w0=1且其他系数为0,那么 x ′ = x x' = x x=x。现在我们增加了度数,比方说 w 1 = 1 w_1 = 1 w1=1,那么 x ′ = L x x' = Lx x=Lx,因此
x v ′ = ( L x ) v = L v x = ∑ u ∈ G L v u x u = ∑ u ∈ G ( D v u − A v u ) x u = D v x v − ∑ u ∈ N ( v ) x u x_v' = (Lx)_v = L_v x = \sum_{u\in G} L_{vu}x_{u}\\ =\sum_{u\in G} (D_{vu}-A_{vu})x_u = D_vx_v-\sum_{u\in \mathcal{N}(v)}x_u xv=(Lx)v=Lvx=uGLvuxu=uG(DvuAvu)xu=DvxvuN(v)xu
我们看到所有节点 v v v都直接跟它的邻居 u ∈ N ( v ) u\in \mathcal{N}(v) uN(v)结合特征。对熟悉图像拉普拉斯滤波器的同学,这是同样的方法和结果。那么多项式中的度数 d d d又是如何影响卷积操作的。首先观察拉普拉斯矩阵上的性质 d i s t G ( u , v ) > i ⇒ L v u i = 0 dist_G(u,v)>i \Rightarrow L_{vu}^i = 0 distG(u,v)>iLvui=0,这意味着我们用度数为 d d d的多项式卷x时
x v ′ = ( p w ( L ) x ) v = ( p w ( L ) ) v x = ∑ i = 0 d w i L v i x = ∑ i = 0 d w i ∑ u ∈ G L v u i x u = ∑ i = 0 d w i ∑ u ∈ G & d i s t G ( u , v ) ≤ i L v u i x u x'_v = (p_w(L)x)_v = (p_w(L))_vx = \sum_{i=0}^d w_iL_v^i x\\ =\sum_{i=0}^d w_i\sum_{u\in G}L_{vu}^i x_u = \sum_{i=0}^dw_i\sum_{u\in G\& dist_G(u,v)\le i} L_{vu}^ix_u xv=(pw(L)x)v=(pw(L))vx=i=0dwiLvix=i=0dwiuGLvuixu=i=0dwiuG&distG(u,v)iLvuixu
实际上,节点v处的卷积只发生在距离不超过d跳的节点u上,因此,这些多项式卷积核是局部的,位置信息由度数来决定。

ChebNet

ChebNet改进了多项式滤子的形式: p w ( L ) = ∑ i = 1 d w i T i ( L ~ ) p_w(L) =\sum_{i=1}^d w_iT_i(\tilde{L}) pw(L)=i=1dwiTi(L~),其中 T i T_i Ti表示度为i的第一类切比雪夫不等式, L ~ \tilde{L} L~表示最大特征值定义的归一化拉普拉斯: T ~ = 2 L λ m a x ( L ) − I n \tilde{T} = \frac{2L}{\lambda_{max}(L)}-I_n T~=λmax(L)2LIn(分析感兴趣可见原文)

多项式滤子是节点顺序等变的

这个在多项式 p w p_w pw的度为1的时候显而易见:所有点特征都由邻居特征的加和汇聚,显然这个加和与顺序是没有关系的。

嵌入的计算

我们现在描述如何将 ChebNet (或其他多项式滤波器)层层叠加非线性来构建图神经网络,这跟标准的CNN差不多。特别的,如果我们由K层不同的滤波器,记 k t h k^{th} kth层可学习权重为 w ( k ) w^{(k)} w(k),我们计算过程如下:

  • 初始状态: h ( 0 ) = x h^{(0)} = x h(0)=x
  • 迭代K轮,第 k = 1 , 2 , . . . , K k = 1,2,...,K k=1,2,...,K轮时:
    • 从参数 L L L中估算的权重 w w w计算多项式: p ( k ) = p w ( k ) ( L ) p^{(k)} = p_{w^{(k)}}(L) p(k)=pw(k)(L)
    • p和h矩乘: g ( k ) = p ( k ) × h ( k − 1 ) g^{(k)} = p^{(k)}×h^{(k-1)} g(k)=p(k)×h(k1)
    • 引入非线性项: h ( k ) = σ ( g ( k ) ) h^{(k)} = \sigma(g^{(k)}) h(k)=σ(g(k))

注意,这些网络在不同的节点上重用相同的滤波器权值,正好模仿了卷积神经网络(CNN)中的权值共享,这种神经网络在网格上重用卷积滤波器的权值。

现代GNN网络

ChebNet在学习局部滤子上取得了突破,也激励了很多从不同角度对图上卷积的思考。我们回到多项式卷积核 p w ( L ) = L p_w(L)=L pw(L)=L x x x的结果,注意到特别对节点v,有
( L x ) v = L v x = ∑ u ∈ G L v u x u = ∑ u ∈ G ( D v u − A v u ) x u = D v x v − ∑ u ∈ N ( v ) x u (Lx)_v = L_v x= \sum_{u\in G} L_{vu}x_u \\= \sum_{u\in G}(D_{vu}-A_{vu})x_u \\= D_v x_v - \sum_{u\in \mathcal{N}(v)}x_u (Lx)v=Lvx=uGLvuxu=uG(DvuAvu)xu=DvxvuN(v)xu
这是一跳的局部卷积,但重要的是我们可以把这种卷积视为由两个步骤产生:

  • aggregation: 聚合直接近邻的特征 x u x_u xu
  • combination: 结合节点自身的特征 x v x_v xv

如果我们考虑不同类型的“聚合”和“组合”步骤,超越了使用多项式过滤器的可能性,会怎样?

通过保证聚合是节点顺序可变的,整个卷积过程都是节点顺序可变的;这些卷积会被视为相邻节点之间的信息传递,每一步每个节点会从邻点收到信息,通过迭代k次一跳的卷积,卷积的接收域包括了所有节点k跳能到达的范围。

嵌入计算

信息传递建立了目前很多GNN框架的骨干网络,最流行的有以下几种:

  • Graph Convolutional Networks(GCN)
    • h v ( k ) = f ( k ) ( W ( k ) ∑ u ∈ N ( v ) h u ( h − 1 ) ∣ N ( v ) ∣ + B ( k ) h v ( k − 1 ) ) h_v^{(k)} = f^{(k)} (W^{(k)}\frac{\sum_{u\in \mathcal N(v)}h_u^{(h-1)}}{|\mathcal{N}(v)|} + B^{(k)}h_v^{(k-1)}) hv(k)=f(k)(W(k)N(v)uN(v)hu(h1)+B(k)hv(k1))
  • Graph Attention Networks(GAT)
    • h v ( k ) = f ( k ) ( W ( k ) [ ∑ u ∈ N ( v ) α v u ( k − 1 ) h u k − 1 + α v v ( k − 1 ) h v ( k − 1 ) ] ) h_v^{(k)} = f^{(k)} (W^{(k)}[\sum_{u\in \mathcal N(v)}\alpha_{vu}^{(k-1)}h_u^{k-1} + \alpha_{vv}^{(k-1)}h_v^{(k-1)}]) hv(k)=f(k)(W(k)[uN(v)αvu(k1)huk1+αvv(k1)hv(k1)])
    • α v u ( k ) = A ( k ) ( h v k , h u ( k ) ) ∑ w ∈ N ( v ) A ( k ) ( h v ( k ) , h w ( k ) ) \alpha_{vu}^{(k)} = \frac{A^{(k)}(h_v^{k},h_u^{(k)})}{\sum_{w\in \mathcal N(v)} A^{(k)}(h_v^{(k)},h_w^{(k)})} αvu(k)=wN(v)A(k)(hv(k),hw(k))A(k)(hvk,hu(k))
  • Graph Sample and Aggregate(GraphSAGE)
    • h v ( k ) = f ( k ) ( W ( k ) [ A G G u ∈ N ( v ) ( { h u ( k − 1 ) } ) , h v ( k − 1 ) ] ) h_v^{(k)} = f^{(k)} (W^{(k)}[AGG_{u\in \mathcal{N}(v)}(\{h_u^{(k-1)}\}),h_v^{(k-1)}]) hv(k)=f(k)(W(k)[AGGuN(v)({hu(k1)}),hv(k1)])
    • 聚合函数AGG包括: 平均池化 / 逐维最大值 / LSTM
  • Graph Isomorphism Network(GIN)
    • h v ( k ) = f ( k ) ( ∑ u ∈ N ( v ) h u ( k − 1 ) + ( 1 + ϵ ( k ) ) h v ( k − 1 ) ) h_v^{(k)} = f^{(k)}(\sum_{u\in \mathcal N(v)}h_u^{(k-1)}+(1+\epsilon^{(k)})h_v^{(k-1)}) hv(k)=f(k)(uN(v)hu(k1)+(1+ϵ(k))hv(k1))

从局部到全局卷积

上面的方法阐述了如何用局部卷积更新每个点的特征值,如果我们走了相当多步数那么就能保证所有图上节点的信息都被传递了,那么我们能不能用一种更直接简单的方法来传递全局信息?答案是可以的,我们现在描述一种在神经网络背景下首次提出的方法,远早于GNN模型。

谱卷积

跟之前一样,我们讨论节点特征只有一维的情况。在选择任意节点次序后,我们可以把所有节点特征叠加一起,得到一个特征向量。

给定一个特征向量 x x x和拉普拉斯矩阵 L L L,能让我们在图 G G G上量化 x x x的平滑程度。

x x x归一化后,计算瑞利商 R L ( x ) = x T L x x T x = ∑ ( i , j ) ∈ E ( x i − x j ) 2 ∑ i x i 2 = ∑ ( i , j ) ∈ E ( x i − x j ) 2 R_L(x) = \frac{x^T L x}{x^T x} = \frac{\sum_{(i,j)\in E }(x_i - x_j)^2}{\sum_i x_i^2} = \sum_{(i,j)\in E} (x_i - x_j)^2 RL(x)=xTxxTLx=ixi2(i,j)E(xixj)2=(i,j)E(xixj)2

我们可以看出赋予邻点值相似的特征向量 x x x会有更小的瑞利商。

L是实值对称矩阵,意味着它总有特征值 λ 1 ≤ . . . ≤ λ n \lambda_1\le...\le \lambda_n λ1...λn。根据特征值的最小最大理论:

a r g m i n x , x ⊥ { u 1 , . . . , u o − 1 } R L ( x ) = u i , m i n x , x ⊥ { u 1 , . . . , u o − 1 } R L ( x ) = λ i argmin_{x,x\perp\{u_1,...,u_{o-1}\}}R_L(x) =u_i,min_{x,x\perp\{u_1,...,u_{o-1}\}}R_L(x) =\lambda_i argminx,x{u1,...,uo1}RL(x)=ui,minx,x{u1,...,uo1}RL(x)=λi

L L L的特征值集合称为谱,我们定义 L L L的光谱分解: L = U Λ U T L=UΛU^T L=UΛUT Λ Λ Λ是特征值排序后的特征矩阵, U U U是特征向量的矩阵(按照增加的特征值排序) 。
A = [ λ 1 ⋱ λ n ] , U = [ u 1 ⋯ u n ] A=\begin{bmatrix}\lambda_1\\ & \ddots\\ & & \lambda_n\end{bmatrix} , U=\begin{bmatrix}u_1 \cdots u_n\end{bmatrix} A= λ1λn ,U=[u1un]
特征向量之间的正交性提供了 U T U = I U^T U = I UTU=I,由于这n个特征向量都来自 R n \mathbb{R}^n Rn,任意特征向量 x x x可表示为这些特征向量的线性组合 x = ∑ i = 1 n x i ^ u i = U x ^ x=\sum_{i=1}^n\hat{x_i}u_i = U \hat{x} x=i=1nxi^ui=Ux^

x = U x ^    ⟺    U T x = x ^ x=U\hat{x}\iff U^Tx=\hat{x} x=Ux^UTx=x^,这允许我们对任意向量 x ∈ R n x\in \mathbb{R}^n xRn在自然数表示和谱表示中切换。

自然图像的谱图表示

前面我们说过图像可表示成一种格状图(像素表示点,对相邻像素连边,根据其位置可以有3,5,8个邻居,每个点特征值可能是一维或三维向量,如果算上alpha通道会是四维)。这个构造能让我们计算图拉普拉斯 L L L和特征向量矩阵 U U U。为了揭示谱表示实际上编码,我们在图像的每个通道上独立地进行以下操作:

  • 所有像素值转为一个特征向量矩阵 x x x
  • 获得谱表示 x ^ = U T x \hat{x} = U^T x x^=UTx
  • 定义谱成分数 m m m为使用前 m m m个特征向量组成的矩阵,后面的值转化为0。即 x ^ m = T r u n c a t e m ( x ^ ) \hat{x}_m = Truncate_m(\hat{x}) x^m=Truncatem(x^)
  • 然后我们再传回自然表示 x m = U x ^ x_m = U\hat{x} xm=Ux^

我们将其还原成一个图像就能得到如下结果:
请添加图片描述

随着谱成分数m减少,图片会变得越加模糊,当降为1时仅有一种颜色。而通过减少m我们可以发现降低成分后仍能够保存很多信息,这可以跟图像上的傅里叶分解联系起来: 我们使用的特征向量越多,我们在网格上表示的频率就越高。下面是一个可视化的8*8图像,通过改变谱系数来查看图像变化。(可在原文进行互动)
请添加图片描述

可直观看到第一个特征向量确实是光滑的,并且当我们考虑后面的特征向量时,光滑度相应地减小即可。对于任意图像 x x x,为了捕捉全局性的图像趋势我们可以采用初始整体(高频成分)的谱表示,包括捕捉一些局部细节(低频成分)。

嵌入计算

我们现在已经有了理解谱卷积的背景,以及如何使用它们来计算节点的嵌入(特征)表示。

跟之前一样,我们将模型分为 k k k层,每一层都有可学习参数 w ^ ( k ) \hat{w}^{(k)} w^(k),称为过滤器权重。这些权重将与节点特征的谱表示相卷积。结果是每层权重所需参数的数量等于用于计算谱表示的特征向量数 m m m。我们前面已提到可以去 m < < n m<<n m<<n使得输入的重要信息不会丢失太多。因此,在谱域上的卷积比在自然域的直接卷积能够使用更少的参数。再者,由于图上拉普拉斯特征向量平滑的良好属性,使用谱表示自然而然就能对邻近节点施加感应偏差以获得相似的表示。

假设现在是一维的节点特征,每一层的输出是一个节点表示的向量 h ( k ) h^{(k)} h(k),其中每个点的表示对应向量中的一行。
h ( k ) = [ h 1 ( k ) ⋮ h n ( k ) ] , k = 0 , 1 , 2... , K h^{(k)} = \begin{bmatrix}h_1^{(k)}\\ \vdots \\h_n^{(k)}\end{bmatrix} , k=0,1,2...,K h(k)= h1(k)hn(k) ,k=0,1,2...,K
我们固定图 G G G上节点的顺序以得到邻接矩阵 A A A和拉普拉斯矩阵 L L L,使得我们能够计算 U m U_m Um。最后,我们可以按一下方式计算每层的结果:

  • 初始特征值: h ( 0 ) = x h^{(0)}=x h(0)=x
  • 迭代过程如下: k = 1 , 2 , . . . , K k=1,2,...,K k=1,2,...,K
    • 将前一层特征转化为谱表示: h ^ ( k − 1 ) = U m T h ( k − 1 ) \hat{h}^{(k-1)} = U_m^T h^{(k-1)} h^(k1)=UmTh(k1)
    • 在谱域上进行卷积操作(w为可学习参数): g ^ ( k ) = w ^ ( k ) ⊙ h ^ ( k − 1 ) \hat{g}^{(k)} = \hat{w}^{(k)} \odot \hat{h}^{(k-1)} g^(k)=w^(k)h^(k1)
    • 将结果转回自然域表示: g ( k ) = U m g ^ ( k ) g^{(k)} = U_m\hat{g}^{(k)} g(k)=Umg^(k)
    • 引入非线性项: h ( k − 1 ) = σ ( g ( k ) ) h^{(k-1)} = \sigma(g^{(k)}) h(k1)=σ(g(k))

我们可以将图的谱域卷积看作是图的频域卷积的推广。(然后这跟快速傅里叶变换一样加快了计算过程)

谱卷积是节点顺序等效的

(证明跳过了)

谱卷积的理论在数学上是严谨的;然而我们仍需要讨论一些缺陷:

  • 我们需要从 L L L计算特征向量矩阵 U m U_m Um,对于大型图来说不可行
  • 即便计算了 U m U_m Um,全局卷积也是不高效的,因为 U m U_m Um U m T U_m^T UmT的重复计算
  • 所学习的滤波器是输入图特定的,因为他们是基于输入图拉普拉斯的表示,这意味着在很不一样的新图结构上很难做迁移学习

由于上述原因谱卷积已经在很大程度上被“局部”卷积所取代,但是理解它们背后的思想仍然有很多优点。事实上,最近提出的一种叫方向图网络的 GNN 模型使用拉普拉斯特征向量和他们的数学性质。

基于图嵌入的全局传播

一种简单的结合图级别信息的方式就是在我们迭代结构的过程中,通过池化节点(或边)嵌入来计算整个图的嵌入,并使用图嵌入去更新节点嵌入。一般图神经网络使用的是这种方法,然而这样似乎忽略了谱卷积能捕捉到的图底层拓扑结构。

学习GNN参数

我们在这里描述的所有嵌入计算你,不管是谱域还是空间上都是完全可微的,这允许 在损失函数 L \mathcal{L} L合适的前提下GNN 以端到端的方式进行训练,就像标准的神经网络一样。

  • 节点分类任务:通过通过最小化分类任务的任何标准损失,例如当存在多个类时的分类交叉熵。
    • 预测节点v在类c的概率: L ( y v , y v ^ ) = − ∑ c y v c ( l o g y v c ) ^ \mathcal{L}(y_v,\hat{y_v}) = -\sum_c y_{vc}(log \hat{y_{vc})} L(yv,yv^)=cyvc(logyvc)^
    • 定义整个图的损失 L G = ∑ v ∈ L a b ( G ) L ( y v , y v ^ ) ∣ L a b ( G ) ∣ \mathcal{L_G} = \frac{\sum_{v\in Lab(G)}\mathcal{L}(y_v,\hat{y_v})}{|Lab(G)|} LG=Lab(G)vLab(G)L(yv,yv^)
  • 图像分类:👆
  • 链路预测:通过抽样相邻和非相邻节点对,并使用这些向量对作为输入来预测边的存在/不存在。举一个具体的例子,通过最小化以下类似“ Logit模型”的损失
    • L ( y v , y u , e v u ) = − e v u l o g ( p v u ) − ( 1 − e v u ) l o g ( 1 − p v u ) , p v u = σ ( y v T y u ) \mathcal{L}(y_v,y_u,e_{vu}) = -e_{vu}log(p_{vu}) - (1-e_{vu})log(1-p_{vu}),p_{vu} = \sigma(y_v^T y_u) L(yv,yu,evu)=evulog(pvu)(1evu)log(1pvu),pvu=σ(yvTyu)
  • 点聚类:训练GNN预测局部或全局图属性/ 自监督技术使相邻节点获取类似的嵌入 / 模仿随机游走
    • L G = ∑ v ∑ u ∈ N R ( v ) l o g e x p z v T z u ∑ u ′ e x p z u ′ T z u L_G = \sum_v\sum_{u\in N_R(v)} log\frac{exp z_v^T z_u}{\sum_{u'}exp z_{u'}^Tz_u} LG=vuNR(v)loguexpzuTzuexpzvTzu, N R ( v ) N_R(v) NR(v)表示从v开始随机游走的多重点集。对于计算代价昂贵的大型图来说,像噪声对比估计这样的技术回很有用。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值