矩阵归一化

矩阵归一化是将向量单位化的数学操作,确保向量的模长变为1。在拉普拉斯正则化中,通过D^(-1/2)(D-W)D^(-1/2)的公式进行归一化,其中D是度矩阵,W是权重矩阵,这种处理常用于网络分析和图论中。

矩阵归一化:
实际上就是向量的单位化,就是把向量的模变换为1,用公式表示即u∣∣u∣∣\frac{u}{||u||}uu

x=matrix(c(3,7,2,4,8,9,5,3,7),3,3)
numerator=sqrt(apply(x^2,1,sum))
xx=x/numerator
judge=apply(xx^2,1,sum)

Lalacian的归一化:
L=D−1/2LD−1/2=D−1/2(D−W)D−1/2=I−D−1/2WD−1/2L=D^{-1/2}LD^{-1/2}=D^{-1/2}(D-W)D^{-1/2}=I-D^{-1/2}WD^{-1/2}L=D1/2LD1/2=D1/2(DW)D1/2=ID1/2WD1/2,其中,DDD是度矩阵,WWW是权重矩阵。

邻接矩阵归一化是图结构归一化的一种重要方式,在图神经网络(GNN)等领域有重要应用,以下是常见的方法和应用介绍: ### 邻接矩阵归一化的方法 - **随机游走归一化**:在GCN中常对邻接矩阵进行随机游走归一化。网上文章提到,度大的节点在其特征表征中将具有较大的值,度小的节点将具有较小的值,这可能会导致梯度消失或梯度爆炸,也会影响随机梯度下降算法,而随机游走归一化可一定程度缓解这些问题[^2]。 - **对称归一化**:公式为$D^{-\frac{1}{2}}AD^{-\frac{1}{2}}$ 。代码实现如下: ```python import numpy as np def normalize_adj(adj): """Symmetrically normalize adjacency matrix.""" rowsum = np.array(adj.sum(1)) with np.errstate(divide='ignore'): d_inv_sqrt = np.power(rowsum, -0.5).flatten() d_inv_sqrt[np.isinf(d_inv_sqrt)] = 0. d_mat_inv_sqrt = np.diag(d_inv_sqrt) return adj.dot(d_mat_inv_sqrt).transpose().dot(d_mat_inv_sqrt) ``` 该方法先计算每行的和,再计算度矩阵的逆平方根,最后通过矩阵乘法实现对称归一化,保证归一化后的矩阵是对称的,这在图数据处理中很常见,因为邻接矩阵通常是对称的 [^4][^5]。 - **$D^{-1}A$归一化**:代码实现如下: ```python import torch def normalize_adj(mx): """ Row-normalize matrix D^{-1}A """ mx = mx.float() rowsum = mx.sum(2) r_inv = torch.pow(rowsum, -1) r_inv[torch.isinf(r_inv)] = 0. r_mat_inv = torch.diag_embed(r_inv, 0) mx = r_mat_inv.matmul(mx) return mx ``` 此方法将矩阵按行进行归一化处理 [^5]。 - **标准化**:标准化是将数据规范到均值为0,方差为1的分布规律中。图的邻接矩阵$A$是$(n,n)$形状,其标准化是通过$A$与其度矩阵的点乘得到。代码实现如下: ```python import numpy as np def normalize_digraph(A): Dl = np.sum(A, 0) # 计算邻接矩阵的度 num_node = A.shape[0] Dn = np.zeros((num_node, num_node)) for i in range(num_node): if Dl[i] > 0: Dn[i, i] = Dl[i]**(-1) # 由每个点的度组成的对角矩阵 AD = np.dot(A, Dn) return AD ``` 标准化是面向每一行(每一个起始节点)进行的 [^3]。 ### 邻接矩阵归一化的应用 - **提升图分析模型性能**:通过对邻接矩阵进行归一化处理,可以有效增强模型对图形结构的认识和利用能力,改善图数据的信息流动和传递效率,进而显著提升模型处理图数据的整体性能,为提升图分析模型的准确性、稳定性和泛化能力提供支持 [^1]。 - **解决梯度问题**:在GCN中,邻接矩阵归一化可以避免度大的节点和度小的节点在特征表征上差异过大导致的梯度消失或梯度爆炸问题,同时也能减少对随机梯度下降算法的影响,因为随机梯度下降算法通常对每个输入特征的规模都很敏感 [^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值