当前位置: 首页 > java >正文

【每天一个知识点】点乘(Dot Product)

点乘(Dot Product)在很多机器学习和图神经网络(GNN)中都有广泛应用,尤其在图结构重构中,它通常用来衡量节点之间的相似性或者关联性。让我们逐步深入理解点乘,尤其是在图结构重构中的应用。

1. 点乘基本概念:

点乘是向量之间的一种数学运算,也叫做内积。两个向量 a和 b的点乘可以表示为:

a⋅b=a1⋅b1+a2⋅b2+⋯+an⋅bn

点乘的结果是一个标量(单一数值),而且它表示的是两个向量之间的相关性。如果两者方向相近,则点乘值较大;如果方向相反,则点乘值较小。

  • 几何解释:
    点乘的结果可以解释为两个向量的长度和它们之间夹角的余弦值的乘积。点乘越大,两个向量越相似,反之则越不相似。

2. 图结构重构中的点乘:

图神经网络(GNN)中的图结构重构通常指的是给定节点嵌入表示,预测图中的边(即预测节点之间是否相连)。这种方法可以通过节点嵌入的点乘来衡量节点之间的相似性。

2.1. 图重构的基本思想:

假设你有一个图 G=(V,E),其中 V是节点集合,E是边集合。通过图嵌入(比如图神经网络中的节点嵌入),每个节点 v∈V会有一个低维向量表示 zv。图重构的任务通常是根据这些节点的嵌入,来预测图中是否存在边。

2.2. 点乘在图重构中的应用:

假设你希望预测图中的一条边 (i,j)是否存在。每个节点 i和 j 都有自己的嵌入向量 zi 和 zj,点乘 zi⊤zj 就可以作为这两者相似度的度量。

2.2.1. 使用点乘进行边预测:
  • 构造邻接矩阵:
    对于每对节点 i,j,你可以计算它们嵌入向量的点乘:

A^ij=σ(zi⊤zj)

其中,σ 是一个激活函数(如 sigmoid 函数),它将点乘结果映射到 [0, 1] 的概率值。这个值可以理解为节点 i 和 j 之间存在边的概率。

  • 图重构的目标:
    通过最小化实际邻接矩阵 A 和预测矩阵 A^之间的差异(比如通过交叉熵损失函数),模型就能够学习到适合图结构的节点嵌入,从而预测哪些节点应该相连。

2.2.2. 优点:
  • 高效计算:
    点乘作为计算相似度的一种常见方式,具有很高的计算效率。特别是在嵌入空间较高时,点乘可以帮助快速计算节点之间的相关性。

  • 表示学习:
    通过点乘的方式,图重构任务能够帮助学习到节点的低维表示。尤其在无监督学习中,图嵌入的点乘能够捕捉到节点之间的潜在关系。

2.3. 举个例子:

假设我们有一个简单的社交网络图,包括4个节点:A、B、C、D。通过图神经网络(例如 GCN 或 GAT)训练后,每个节点将拥有一个嵌入向量,比如:

zA=[0.1,0.2],zB=[0.2,0.3],zC=[0.5,0.4],zD=[0.7,0.8]

如果你想预测 A 和 B 之间是否有边,你可以计算它们嵌入向量的点乘:

zA⊤zB=(0.1×0.2)+(0.2×0.3)=0.02+0.06=0.08

然后使用 sigmoid 函数映射到 [0, 1],假设输出为 σ(0.08)=0.52,表示 A 和 B 之间有边的概率为 52%。

3. 总结:

在图结构重构中,点乘用于衡量节点嵌入向量之间的相似性。通过计算节点对之间的点乘,可以预测它们是否应该在图中有连接。这种方法通常与图神经网络中的嵌入学习方法相结合,帮助模型在图中自动发现潜在的连接关系。

点乘在图重构中的应用,正是通过度量节点的相似性并预测边的存在。

http://www.xdnf.cn/news/2168.html

相关文章:

  • 【C语言练习】004. 使用各种运算符进行计算
  • 【高频考点精讲】前端职业发展:如何规划前端工程师的成长路径?
  • 【白雪讲堂】构建与优化企业知识图谱的实战指南
  • 关于GoWeb(1)
  • 构建智能风控引擎的全流程设计指南
  • 从基础到实战的量化交易全流程学习:1.2 金融市场基础
  • 主流 LLM 部署框架
  • DIFY 浅尝 - DIFY + Ollama 添加模型
  • 使用 LangGraph 和 Elasticsearch 构建强大的 RAG 工作流
  • nuxt3项目搭建:一、初始化项目流程指南
  • 【微知】/proc中如何查看Linux内核是否允许加载内核模块?(/proc/sys/kernel/modules_disabled)
  • 关于汇编语言与接口技术——算术运算程序的设计
  • 高精度运算(string函数)
  • 【Linux应用】交叉编译环境配置,以及最简单粗暴的环境移植(直接从目标板上复制)
  • 【OSG学习笔记】Day 10: 字体与文字渲染(osgText)
  • ※※惯性时间常数与系统惯量定义、区别、联系
  • 水果成篮--LeetCode
  • Java—— 包装类
  • Arduino+ESP01S烧录
  • AudioVideoMerger 下载与使用
  • 计算机网络 | 应用层(1)--应用层协议原理
  • Git 工具的安装
  • django之优化分页功能(利用参数共存及封装来实现)
  • 一篇入门之-评分卡变量分箱(卡方分箱、决策树分箱、KS分箱等)实操例子
  • 软件开发架构设计原则详解(含案例)
  • 精益数据分析(28/126):解读商业模式拼图与关键指标
  • KTT入门
  • 现代化Android开发:Compose提示信息的最佳封装方案
  • qt事件过滤与传递机制
  • 关于图论的知识