Interactive crypto demo

FindCriticalPoints.

论文 Polynomial-Time Cryptanalytic Extraction of Neural Network Models (IACR 2023/1526, §C) 中 Algorithm 1 的逐步动态演示:一个 ReLU 网络的输出在一维线段上是分段线性函数,算法用黑盒查询找出每一个"拐点"(临界点)。拖动参数,单步或自动播放,观察区间如何被检测、验证与分裂。

函数与算法执行
f(x)(分段线性) 已发现临界点 候选 x* 端点切线 已判定线性区间 真实临界点
参数
播放
小键盘 → / ← 也可以单步进退。
显示
算法在做什么

背景

ReLU 神经网络的单个输出,限制在输入空间的一条线段 [xα, xβ] 上,是一个分段线性函数。每个斜率变化的"拐点"恰对应一个神经元的临界点 —— 找到全部拐点,是提取网络参数的关键一步。FindCriticalPoints 只用黑盒查询 f(x) 完成这件事,且查询次数为多项式级。

第 1–8 行:线性检测

先看中点函数值是否落在弦的中点上(第 3 行)。只看这一个条件不够:对称的双拐点也会通过。于是比较两端点处的数值斜率 mα、mβ(第 4–5 行):斜率不同 ⇒ 区间内有多个临界点;斜率相同则可能是"同一条直线"(无临界点),也可能是"两条平行线"(论文图 7a,多个临界点)——再用中点 x₀ 左右两侧的斜率区分(第 6–8 行)。

第 11–14 行:候选与三重验证

用过 (xα, yα) 斜率 mα 的直线与过 (xβ, yβ) 斜率 mβ 的直线的交点作为候选 x*。当且仅当三者同时成立才确认为临界点:(i) f(x*) = f̂(x*)(函数值与交点预测吻合);(ii) 左右导数不等(真的是拐点而非光滑点);(iii) x* 落在区间内。条件 (ii)(iii) 用于排除图 7c / 7d 的误报情形。

第 15 行:分裂递归

验证失败 ⇒ 区间内不止一个临界点(或没有),从中点一分为二递归。ε 是数值微商步长,论文要求"ε 充分小,使得没有其它神经元在 ε 范围内翻转":若某临界点恰落在某次分裂点的 ε 范围内,端点斜率估计会被污染,算法将分裂至深度上限而漏检 —— 这是算法完备性对该假设的真实依赖。演示中命中这种退化情形会自动换一组随机函数(右上角"退化跳过"如实计数),ε 越大越容易触发,可以拖动验证这一点。