Engram 中的多头哈希理解举例

我们以处理句子“DeepSeek improves memory retrieval with Multi-Head Hashing”为例,完整演示多头哈希(Multi-Head Hashing)的具体执行流程。为简化理解,我们设定关键参数:N-gram阶数=2(即提取连续2个Token组成的语义单元)、哈希头数量K=2(并行使用2个独立哈希函数)、嵌入表大小=101(选择质数以优化哈希分布)。

步骤1:上下文压缩(Tokenizer Compression)

首先通过词表规范化合并语义等价Token。

常见误解澄清:词表规范化压缩的是词表的ID空间大小,而非输入Token序列的长度。输入序列长度在此步骤中保持不变

原始词表中,同一语义的不同形态(大小写、形态变体)被分配了不同的ID,造成嵌入表冗余。规范化的目标是将这些语义等价的Token归并到统一ID

原始词表条目原始ID压缩后ID处理说明
DeepSeek102102保留标准形式
improves345345保留标准形式
memory789789保留标准形式
retrieval210210保留标准形式
with567567保留标准形式
Multi-Head432432保留,作为标准形式
multi-head578432归并至432
MULTI-HEAD623432归并至432
Hashing890890保留,作为标准形式
hashing901890归并至890

压缩结果:

  • 词表大小:从原始N个条目压缩至更小的N'个条目
  • 嵌入表冗余条目减少,语义等价Token共享同一嵌入向量
  • 输入Token ID序列长度不变,仍为7个Token:

步骤2:生成2-gram序列

对压缩后的Token序列提取连续2个Token组成的N-gram(2-gram)。对于长度为7的序列,共生成6个2-gram:

  • 2-gram₁:(102, 345)(对应“DeepSeek improves”)
  • 2-gram₂:(345, 789)(对应“improves memory”)
  • 2-gram₃:(789, 210)(对应“memory retrieval”)
  • 2-gram₄:(210, 567)(对应“retrieval with”)
  • 2-gram₅:(567, 890)(对应“with Multi-Head”)
  • 2-gram₆:(890, 432)(对应“Multi-Head Hashing”)

步骤3:多哈希头并行映射(核心步骤)

为每个2-gram分配2个独立哈希头(Hash Head 1和Hash Head 2),分别计算索引并检索嵌入表。

哈希函数定义

两个哈希头使用不同的hash_key(随机初始化的整数参数),哈希公式为:
index = (N-gram_value * hash_key) XOR hash_key mod 101
其中,N-gram_value是将2-gram的两个Token ID拼接为整数的结果(如(a, b) → a×1000 + b,避免数值溢出)。

具体计算 以2-gram₅ (567, 432) 为例完整计算

① 计算N-gram_value:

Vngram=567×1000+432=567432

② Hash Head 1(hash_key = 12345):

index1=(567432×12345)⊕12345mod 101

=7,003,987,640⊕12345mod 101

=7,003,999,985mod 101

=38

③ Hash Head 2(hash_key = 67890):

index2=(567432×67890)⊕67890mod 101

=38,532,899,480⊕67890mod 101

=38,532,967,370mod 101

=61

检索嵌入向量

两个哈希头分别从嵌入表E₁(Hash Head 1对应)和E₂(Hash Head 2对应)中取出向量:

  • E₁[38] = [0.2, 0.5, -0.1, 0.3](4维嵌入向量)
  • E₂[61] = [0.4, -0.2, 0.6, -0.4]

步骤4:上下文感知门控融合

 为什么需要门控融合?

多头哈希检索出的候选向量,可能因以下原因引入噪声:

噪声来源说明示例
哈希冲突不同N-gram映射到相同索引,检索出无关语义的向量2-gram (789, 210) 与 2-gram (567, 432) 恰好映射到同一index=61
一词多义同一Token在不同语境语义不同,导致检索向量语义偏移"with"在"with tears"与"with Multi-Head"中语义完全不同

门控融合的核心思路:让模型自己判断哪个检索结果是可信的


Hidden State的获取

Transformer在正向传播过程中,对位置5(对应"with Multi-Head")计算得到Hidden State

h₅ = [0.3, 0.4, -0.05, 0.25]

这是模型对当前位置综合上下文语义后的内部表示,包含了整个句子的语境信息。

⚠️ 关键点:门控打分的依据是 Hidden State h(连续向量),而非原始Token ID(离散整数)。模型无法直接计算Token ID与嵌入向量的相似度,只能在向量空间中进行比较。

注意力打分:h与候选Embedding做点积

用 h₅ 分别与两个候选Embedding做点积打分,衡量语义吻合程度:

对 E₁38 打分:

score1=h5⋅E1[38]

=0.3×0.2+0.4×0.5+(−0.05)×(−0.1)+0.25×0.3

=0.06+0.20+0.005+0.075=0.34  ✓

对 E₂61 打分:

score2=h5⋅E2[61]

=0.3×0.4+0.4×(−0.2)+(−0.05)×0.6+0.25×(−0.4)

=0.12−0.08−0.03−0.10=−0.09  ×

冲突判定与噪声抑制

score₁ = 0.34 → E₁[38] 与当前语义吻合 ✅ 保留

score₂ = -0.09 → E₂[61] 与当前语义不符 ❌ 判定为噪声,抑制

E₂61 噪声来源推断:

可能性A(哈希冲突):   某个无关2-gram(如"memory retrieval")   经Hash Head 2计算后,恰好也映射到 index=61   → E₂[61] 实际存储的是"memory retrieval"的语义   → 与当前"with Multi-Head"语义不符,点积为负 可能性B(一词多义):   "with"在训练语料中大量出现于情感语境("with tears")   → E₂[61] 捕获了"with"的情感语义分量   → 与技术文档语境下的"with Multi-Head"不匹配

Softmax加权融合

对打分结果做Softmax,计算各头的融合权重:

w1=e0.34e0.34+e−0.09=1.4051.405+0.914≈0.6

w2=e−0.09e0.34+e−0.09=0.9141.405+0.914≈0.39

💡 工程实践:在实际实现中,score极低(如低于阈值θ)的哈希头可直接mask掉(权重置0),而非参与Softmax,以更彻底地消除噪声干扰。

最终融合向量:

et=w1×E1[38]+w2×E2[61]

=0.61×[0.2, 0.5, −0.1, 0.3]+0.39×[0.4, −0.2, 0.6, −0.4]

=[0.122, 0.305, −0.061, 0.183]+[0.156, −0.078, 0.234, −0.156]

=[0.278, 0.227, 0.173, 0.027]

这个融合向量 etet​ 即为2-gram₅ "with Multi-Head" 的最终记忆表示,将被送入后续的模型层参与计算。

多头哈希通过多路并行检索 + 语义感知筛选,在保持O(1)检索效率的同时,将哈希冲突和一词多义带来的噪声降到最低,是大模型高效记忆检索的重要基础组件。

设计要素解决的问题实现方式
多个独立哈希头单一哈希冲突率高K个不同hash_key并行检索
质数嵌入表大小哈希分布不均匀选取质数101作为模数
词表规范化语义等价Token占用冗余空间归并形态变体到统一ID
Hidden State打分无法直接判断检索质量用连续向量做点积相似度计算
动态门控融合冲突/歧义向量污染结果低分向量mask或降权

Read more

【2025 最新】 Python 安装教程 以及 Pycharm 安装教程(超详细图文指南,附常见问题解决)

【2025 最新】 Python 安装教程 以及 Pycharm 安装教程(超详细图文指南,附常见问题解决)

前言         Python 作为目前最热门的编程语言之一,在数据分析、人工智能、Web 开发等领域应用广泛。而 PyCharm 作为 JetBrains 推出的 Python 集成开发环境(IDE),以其强大的功能和友好的界面成为开发者的首选工具。         本文针对 2025 年最新版 Python(3.13.x)和 PyCharm(202x.x.x),提供Windows 10或11和macOS Sonoma双系统安装教程,从官网下载到环境配置一步到位,同时整理了安装过程中最常见的 10 类问题及解决方案,确保新手也能顺利完成环境搭建。 一、Python 安装教程(2025 最新版) 1. 下载 Python 安装包 步骤 1:访问 Python 官网

By Ne0inhk
# 新手进阶Python:办公自动化之**全工具整合桌面应用(一键EXE分发)**

# 新手进阶Python:办公自动化之**全工具整合桌面应用(一键EXE分发)**

大家好!我是ZEEKLOG的Python新手博主~ 前面我们已经完成了办公看板、AI智能助手、邮件自动机器人、数据清洗报表生成四大核心办公自动化工具,彻底解决了日常办公的重复劳动。 但很多新手同学反馈了一个核心痛点: * 脚本都是命令行运行,新手改参数不方便 * 发给同事用,对方电脑没装Python,根本跑不起来 * 功能分散在不同脚本里,切换起来麻烦 * 没有可视化界面,操作不直观,容易出错 今天就用极简代码,把我们前面所有的办公自动化工具,整合成一个带图形界面的桌面应用,最后打包成EXE文件,无需安装Python,双击就能用,发给同事也能直接跑! 一、本次你能学到什么 1. 用 ttkbootstrap 快速开发美观的Python桌面界面(新手友好,比PyQt5门槛低) 2. 把之前的邮件机器人、数据处理工具完整整合到界面中 3. 实现配置保存、日志实时展示、文件选择等实用功能 4. 用 pyinstaller 一键打包成EXE文件,无Python环境也能运行 5. 学会模块化开发,后续可以无限扩展新功能 二、前期准备(

By Ne0inhk
从割裂到融合:MATLAB与Python混合编程实战指南

从割裂到融合:MATLAB与Python混合编程实战指南

从割裂到融合:MATLAB与Python混合编程实战指南 摘要:在科学计算领域,MATLAB和Python就像两把各有所长的“神兵利器”——MATLAB凭借矩阵运算的“独门绝技”称霸工程仿真,Python则依靠开源生态的“人海战术”横扫AI与数据科学。但在实际研发中,单一语言往往难以覆盖全流程需求:用MATLAB做完工程仿真,想对接Python的机器学习模型;用Python训练好AI模型,又需要MATLAB做工程验证。 这种场景下,MATLAB与Python的混合编程不再是“锦上添花”,而是提升研发效率的“刚需”。本文将手把手教你打通两大语言的壁垒,从技术原理到代码实战,全方位解析跨语言协作的最优路径。 一、核心技术路径对比 在动手编码前,先理清MATLAB与Python互调的核心方案,不同场景适配不同技术: 技术方案适用场景性能部署复杂度核心优势MATLAB Engine APIPython调用MATLAB函数(开发阶段)高低(需装MATLAB)调用最直接,支持全量MATLAB功能MATLAB Compiler SDKMATLAB代码打包部署(生产环境)中中(需运行时

By Ne0inhk
基于python的电影推荐系统的设计与实现-附源码201341

基于python的电影推荐系统的设计与实现-附源码201341

摘 要 随着社会的快速发展和人们生活水平的不断提高,电影已逐渐成为人们生活的重要组成部分,用户能够获取 电影信息的渠道也随信息技术的广泛应用而增加。大量未经过滤的信息在展示给用户的同时,也淹没了用户真正感兴趣的信息。为了方便用户快速定位自己感兴趣的信息,个性化电影推荐系统应运而生。 本系统的前端界面涉及的技术主要有Django, HTML,jQuery等等,通过这些技术可以实现前端页面的美观和动态效果使之符合广大群众的审美观,后台主要使用的技术主要有Python编程语言,MySQL数据库,Ajax异步交互,根据Ajax异步模式的 电影推荐系统解决了传统 电影推荐方式中数据分析所带来的人力、物力和时间上的虚耗和交流深度的限定,这让交流的过程更快捷、准确、便利,同时完成 电影推荐系统的基本功能:用户管理、电影交流、电影信息、电影分类、电影评分等。本次报告,首先分析了研究的背景、作用、意义,为研究工作的合理性打下了基础。针对电影推荐系统的各项需求以及技术问题进行分析,证明了系统的必要性和技术可行性,然后对设计系统需要使用的技术软件以及设计思想做了基本的介绍,最后来实现电影推荐系统和部

By Ne0inhk