【Pytorch】计算矩阵中向量之间的两两相似性

本文介绍如何使用PyTorch计算四个节点间的两两相似性。通过构造一个形状为(4,10)的特征矩阵,并利用cosine_similarity函数计算得到一个4*4的相似性矩阵。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

简介

Hello!
非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~
 
ଘ(੭ˊᵕˋ)੭
昵称:海轰
标签:程序猿|C++选手|学生
简介:因C语言结识编程,随后转入计算机专业,获得过国家奖学金,有幸在竞赛中拿过一些国奖、省奖…已保研
学习经验:扎实基础 + 多做笔记 + 多敲代码 + 多思考 + 学好英语!
 
唯有努力💪
 
本文仅记录自己感兴趣的内容

场景描述

有4个节点,每个节点含有其特征,使用一个10维向量表示

则这四个节点的特征矩阵shape为(4, 10)

需求就是:求四个节点之间的两两相似性

解决方法

sim = torch.cosine_similarity(features.detach().unsqueeze(1), features.detach().unsqueeze(0), dim=-1)

假设特征矩阵为features

features = torch.randn((4, 10))
print(features)

在这里插入图片描述

相似矩阵计算:

features = torch.randn((4, 10))

sim = torch.cosine_similarity(features.detach().unsqueeze(1), features.detach().unsqueeze(0), dim=-1)
print(sim)

在这里插入图片描述
结果为4*4,对应四个节点之间的相似性矩阵


cosine_similarity:计算余弦相似度,范围【-1,1】

在这里插入图片描述

来源:百度百科

结语

文章仅作为个人学习笔记记录,记录从0到1的一个过程

希望对您有一点点帮助,如有错误欢迎小伙伴指正

在这里插入图片描述

### 梯度相似性筛选机制的概念与实现 梯度相似性筛选机制是一种用于优化训练过程的技术,主要应用于机器学习深度学习领域。该技术通过分析不同样本之间的梯度相似性来决定哪些样本当被优先处理或剔除,从而提高模型的收敛速度并减少过拟合的风险。 #### 1. 概念定义 梯度相似性筛选机制的核心在于评估数据集中各个样本对整体损失函数的影响程度。具体而言,它计算每个样本对应的梯度方向与其他样本梯度方向的一致性。如果某个样本的梯度方向与其他大多数样本不一致,则可能表明这是一个噪声点或者异常值[^3]。这类样本通常会对模型训练产生负面影响,因此可以考虑将其排除在外。 #### 2. 数学基础 假设当前模型参数为 \( \theta \),对于第 i 个样本 \( (x_i, y_i) \),其损失函数记作 \( L(\theta; x_i, y_i) \) 。那么该样本产生的梯度可表示为: ```python grad_i = dL/dθ | θ=θ_current ``` 为了衡量两个样本 j k 的梯度相似性,可以通过余弦距离公式进行量化: \[ S(j,k)=\frac{\nabla_{j}^{T}\cdot\nabla_{k}}{||\nabla_{j}||||\nabla_{k}||} \] 其中 \( \nabla_j,\nabla_k \) 分别代表样本 j k 对应的梯度向量;\( ||...|| \) 表示欧几里得范数运算操作符。 当多个样本之间存在较高水平的正相关关系时(即它们具有较高的梯度相似分数),说明这些样本共同指向同一个目标区域,在后续迭代过程中能够更有效地推动全局最优解靠近真实位置。 #### 3. 实现方法 以下是基于 PyTorch 的一种简单实现方式: ```python import torch from torch.autograd import grad def compute_gradient_similarity(model, data_loader, criterion): gradients = [] # 计算每一批次数据上的梯度 for inputs, labels in data_loader: model.zero_grad() outputs = model(inputs) loss = criterion(outputs, labels) batch_gradients = grad(loss, model.parameters(), create_graph=True) flattened_grads = torch.cat([g.flatten() for g in batch_gradients]) gradients.append(flattened_grads.detach()) gradient_matrix = torch.stack(gradients) # 使用余弦相似度矩阵作为度量标准 similarity_matrix = torch.nn.functional.cosine_similarity( gradient_matrix.unsqueeze(1), gradient_matrix.unsqueeze(0), dim=-1 ) return similarity_matrix # 假设我们已经有了model、data_loader以及criterion similarity_scores = compute_gradient_similarity(model, data_loader, criterion) print(similarity_scores) ``` 此代码片段展示了如何批量获取输入数据集中的每一个实例相对于现有权重集合所产生的局部敏感变化情况,并进一步构建起两两对比后的关联强度表征形式——即所谓的“梯度相似性”。 #### 4. 应用场景 - **去噪**: 在大规模标注错误的数据集中识别潜在问题条目。 - **增强泛化能力**: 防止某些极端分布特征主导整个学习流程。 - **加速收敛**: 聚焦于那些最能促进性能提升的方向调整权值更新策略。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海轰Pro

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值