【FHE 同态加密】我们如何实现同态加密推理(九):逐层尺度自适应——同态加密里为什么每层都要单独定标(scale 管理)

简介: 本文详解CKKS同态加密中大模型密文推理的逐层尺度自适应机制:因各层中间值分布差异巨大(如某层达55),固定定标会致溢出或信噪比不足;必须为每层独立选取2的幂尺度因子,在上限防溢出(≤0.35)与下限抗噪声(rms≥0.02)间精密夹逼。

【FHE 同态加密】我们如何实现同态加密推理(九):逐层尺度自适应——同态加密里为什么每层都要单独定标(scale 管理)

关键词:同态加密 | FHE | CKKS | 尺度自适应 | scale | 定标 | 精度管理 | 大模型密文推理 | 逐层量化

导读:在 CKKS 同态加密推理里,密文槽位的可表示范围是固定的,但大模型 28 层的中间值分布千差万别。本篇讲清"为什么每一层都要单独定标"(逐层尺度自适应),以及夹住这件事的两个硬约束——上限防溢出、下限防被噪声吃掉。

项目仓库
Gitee 主仓:https://gitee.com/pei-xiaoguang/kestrel-llm
GitHub 镜像:https://github.com/m13253246268-ship-it/kestrel-llm

相关文档
术语与数据口径 |
性能与基准 |
构建与复现 |
快速上手 |
架构总览

0. 一句话结论

密文槽位的可表示范围是固定的(scale = 2^60,且要求 |z| < 0.5)。但 28 层的中间值分布千差万别——有的层输出在 1 附近,有的层能到 55。

所以每层需要一个自己的尺度因子 F{L},把该层的值压进可表示范围。而这个定标不是随便取的,它被两个硬约束夹住:

约束 值 来源
上限:压完后的 max ≤ ~0.35(目标 TGT_MAX = 0.40) decode / boot 的可表示界
下限:压完后的 rms ≥ ~0.02 信噪比 ≥ 20,对抗约 1e-3 的噪声地板

上限防溢出,下限防"压太小被噪声吃掉"。 两层之间的空间不宽,这就是这项工作的核心难点。


1. 为什么"全链一个尺度"行不通

如果所有层共用一个 F:

  • 按最大的那层选 F → 其他层被压得过小 → rms 掉到噪声地板以下 → 精度被噪声吞掉;
  • 按最小的那层选 F → 大值层直接溢出 → 整个槽位废掉。

这不是理论担忧。实际链上确实存在"爆炸层"——脚本注释里点名列了一个(真链 y2 附近能到 ~55)。一层爆炸,全链定标策略就得改。


2. 链状态的定义

脚本 tools/preproc/_adap_scale.py 的核心变量是"链状态"(原文):

s{L} = y{L} / F{L}
  • y{L}:第 L 层的真实输出(明文侧算出来的)
  • F{L}:该层的尺度因子,取 2 的幂
  • s{L}:真正被送进密文链的量

用 2 的幂有两个好处:与 scale = 2^60 的二进制定标天然对齐(乘以 2 的幂只改指数);而且 F 的选择可以离散化成"取到最近的 2 的幂",避免浮点抖动导致不同机器选出不同的 F。


3. 两个硬约束的来源

3.1 上限 s max ≤ ~0.35(TGT_MAX = 0.40)

理由写在脚本注释里:decode 与 boot 的兼容界。

回顾第 5 篇:scale = 2^60、槽位要求 |z| < 0.5,这样 2^60 · z < 2^59 小于任一 60-bit 素数,中间层解密无需 CRT。所以密文槽位能装的值上限就是 0.5——而 0.40 是留了余量的工程目标值。

又因为 F 取 2 的幂,向上取整后实际的 max 落在 (TGT_MAX/2, TGT_MAX] 区间内,所以目标实质上被实现成 s max ≤ ~0.35。

3.2 下限 s rms ≥ ~0.02(SNR_MIN = 0.02)

这一条是很多人会漏掉的。 把值压小虽然能防溢出,但密文里始终存在噪声——本项目的噪声地板约 1e-3。如果 s 的均方根被压到和噪声同量级,信号就被噪声淹没。

脚本给的判据是 s rms ≥ 0.02,对应信噪比 ≥ 20。

所以定标是一个双侧夹逼问题,不是"压得越小越安全"。

3.3 还有一条硬界:至少压到 ≤ 0.5

除了 0.40 的目标界,脚本里还单独算了一个 need50:至少把 max 压到 0.5 以下(否则 decode/boot 根本不能用)。当目标界与硬界冲突时,硬界优先。


4. F 的调度规则

脚本里的规则可以完整复述出来(这也是本文最实用的部分):

规则 内容
取幂 F{L} = 2^ceil(log2(ymax / TGT_MAX)),即按该层 max 取到 2 的幂
单调不减 只允许"下缩",不允许回缩(F 单调不减)
相邻比 ≤ 4 相邻两层的 F 比值上限 RATIO = 4,避免尺度突变引入额外误差
L0 例外 lay0 的输入是明文(没有被前层稀释过),所以只按 max 定 F,不做单调 clamp
爆炸层例外 如果某层真的爆了(如 y2 ~ 55),允许跳升到 need50,此时可以超过 4× 比值

最后一条是"规则为现实让路"的典型:4× 比值是一条经验约束,不是不变式。当某层确实越界时,宁可破例,也不让整层溢出。


5. 一个有价值的工程性质:幂等重建

定标脚本会覆盖一部分已有文件(残差路径的参考值 l{L}_u1 / l{L}_u2_ref / l{L}_mid16,以及 ln / m2c 的拟合系数),所以"可重复运行"是一个必须保证的性质。

脚本用的办法很朴素但很有效:

  1. 先把原始文件备份到 _g1024_bak/;
  2. 每次运行时,先把备份恢复回去;
  3. 然后从 embed4 + o + mlp 重新前向积分出真值 y{L}。

为什么这能保证幂等?因为重建用的 o(attention 输出)与 mlp_out 永远不会被这个脚本覆盖。所以"真值的来源"不受上一次运行影响——输入不变,输出必然不变。

而"以为自己在重建、其实用的上次结果"是这类脚本最常见的隐性 bug。这条设计是刻意的。

顺带一个已被验证的前提(脚本注释原文):明文恒等式

y{L} = y{L-1} + o{L} + mlp_out{L}        已验 1.5e-5

也就是说"残差链路的加法关系"在明文侧是对得上的(误差 1.5e-5)——先证明明文恒等式成立,再去调整密文定标,顺序不能反。


6. 一个不愿加 eps 的细节

ln 分支(求 1/√u)的拟合里有一行注释值得单独抄出来(原文):

y = 1.0 / np.sqrt(u) / 128.0   # 无 eps: m2c~1e-6 时 +1e-6 会污染 ~20% (u>=0.5*m2c 永不触 0)

含义:通常写数值代码时,1/sqrt(u) 会加一个 eps 防止 u = 0 除零。但这里故意不加,因为:

  • 拟合区间已经限定为 u ∈ [0.5·m2c, 1.5·m2c]——从不触及 0;
  • 而 m2c 的量级约 1e-6,此时加 1e-6 的 eps 相当于把分母改变了一倍以上,会污染约 20% 的取值。

这是一个"防御性编程反而造成系统性偏差"的实例。 加了 eps 更"安全",但更错。拟合区间 z = (u − c0)/(8·s0) 的标准化、以及 deg-8 多项式,都是为了在已知的确定区间上把误差压住,而不是靠 eps 兜底。


7. 安全边界(务请读完)

本文所述参数为机制验证级,远低于 HE 参数标准的 128-bit 水平,不得用于保护真实数据。
本文主张的是:定标约束与调度规则。
本文不主张:安全强度、性能优越性。

8. 这一篇的未解问题

  1. TGT_MAX = 0.40 / SNR_MIN = 0.02 是经验值。它们分别来自"可表示界留余量"与"信噪比 ≥20",但留多少余量、信噪比为什么是 20 而不是 15 或 30,没有推导。这两个数是整条链精度的总闸门,却是拍的。
  2. RATIO = 4 同样是拍的。它约束的是"相邻层尺度不要突变",但突变到多少会真的伤精度,没有测。
  3. 定标是逐层独立做的,没有全局优化。严格说,每层可用误差预算应该由"下游还剩多少层"反推,我们目前是逐层局部决策 + 事后整链验收。
  4. 换模型不能自动适配。这套规则依赖对明文参考的统计,统计要重跑,中间还有人工判断(比如爆炸层要不要破例)。

下一篇我们看 attention:密文里没有 max,那 softmax 的数值稳定技巧怎么办?答案是"用一个巨大的定标常数把它换掉"。

相关文章
|
5天前
|
云安全 人工智能 运维
当攻击全面Agent化,你的安全防御能否跟上AI Speed?
多起客户侧AK泄露事件应急的真实观察
1241 4
|
28天前
|
人工智能 JSON API
全网刷屏的 Jev 模型正式开放!一手实战测评 + 保姆级教程
全网爆火的 Jev 模型是什么?有什么用?怎么使用?怎么接入 AI 编程工具?效果真的好么?傻子可懂的 Jev 保姆级实战教程 + 项目实战测评来啦
9785 32
|
8天前
|
存储 人工智能 安全
千问办公官网入口网页版登录:qwenwork.cn 注册送2000积分、登录送100积分
阿里云千问办公(QwenWork)是AI智能工作平台,支持一句话生成PPT、表格、网页、视频及数据分析。个人免费版送2000积分+每日登录赠100分,含1GB存储、5个发布页;企业版198元/席/月起。阿里千问办公QwenWork官网:https://t.aliyun.com/U/0VCTGt 阿里AI工作平台,一句话完成数据分析、PPT 生成、视频剪辑、网页搭建等复杂任务
|
3天前
|
人工智能 API 开发工具
DeepSeek Harness 神插件:白嫖 13 家大厂模型
`dsh-our-free-model` 是 DeepSeek Harness 神级插件:零配置、零API Key、零账号,聚合13家大厂免费模型(含DeepSeek V4.1 Flash、Kimi K3等),支持本地网关、用量看板与自动降级,真正实现“白嫖即用”。
|
14天前
|
存储 人工智能 并行计算
大模型本地部署终端选型方法论:以 Qwen3.8-27B 为例的四档分层完整流程
本文提出一套大模型本地部署终端选型方法论:定约束、定档位、定框架、定参数四步决策法,配合入门、主力、质量、无损四档分层模型。以 Qwen3.8-27B 实测数据为例,逐环节解读显存、带宽、存储、散热、系统、预算等要素,给出面向不同预算的优选方案、决策自查清单与市场观察框架。文末前瞻 AI 笔记本的 CPU+GPU 与统一内存两条路线,论证四步决策法在新品类上的延续性。
|
5天前
|
Web App开发 人工智能 JavaScript
太猛了,一个月干到15W+,给大家推荐一个最近爆火的开源逆向工具:REA
REA(Reverse Engineer Anything)是近期爆火的开源AI逆向工具,4月发布,1个月内斩获15万+ Star。它让AI Agent无需源码即可分析二进制、APK、JS/Electron、HAR包等17类目标,自动反编译、生成可运行代码,并强制返回带证据与局限的结论。全本地执行,MIT协议,支持Hopper/Ghidra/IDA等引擎,一行命令即可上手。
625 1
太猛了,一个月干到15W+,给大家推荐一个最近爆火的开源逆向工具:REA
|
13天前
|
人工智能 JSON 自然语言处理
2026 年 Jev 决策模型深度拆解:原理解读、实战测评与保姆级落地教程
有一款特殊AI模型在开发者圈子刷屏,它摒弃传统大模型擅长的对话聊天能力,专注做高速结构化决策,它就是TypeSafe AI推出的Jev模型。该模型由ChatGPT共同发明人Diogo Almeida主导研发,定位为**System One Model(系统一模型)**,对标人类大脑快速直觉判断的思维模式,在响应延迟、调用成本、结构化输出稳定性上相比传统生成式大模型有着巨大差异。本文会完整拆解Jev底层原理、三大核心原语能力、适用业务场景,同时提供可直接运行的curl、Python代码示例,并且结合多组实测数据,客观分析模型优势与能力边界,帮助普通开发者和AI应用从业者快速上手落地。
928 1
|
9天前
|
人工智能 JSON 自然语言处理
2026 年 Jev 决策模型全解析:核心原理拆解,性能实战测评与落地部署教程
有一款特殊AI模型在开发者圈子刷屏,它摒弃传统大模型擅长的对话聊天能力,专注做高速结构化决策,它就是TypeSafe AI推出的Jev模型。该模型由ChatGPT共同发明人Diogo Almeida主导研发,定位为System One Model(系统一模型),对标人类大脑快速直觉判断的思维模式,在响应延迟、调用成本、结构化输出稳定性上相比传统生成式大模型有着巨大差异。本文会完整拆解Jev底层原理、三大核心原语能力、适用业务场景,同时提供可直接运行的curl、Python代码示例,并且结合多组实测数据,客观分析模型优势与能力边界,帮助普通开发者和AI应用从业者快速上手落地。
592 0

热门文章

最新文章