游乐园新开了一间“深夜鬼屋”,入口竖着金色柱子,柱子上画着一道红线——身高 1.2 米才算达标。老员工阿强带新人的第一课,不是教怎么看身高,而是教“看人”:队伍里 1.6 米的大孩子不用量,0.7 米的小豆丁也不用量,真正让量尺忙个不停的,永远是那群贴在红线上的孩子——1.19 米、1.20 米、1.200 米……每个读数都像在跟尺子讨价还价。AI 模型的世界里也藏着一条看不见的红线:模型给每个输入打分,分数跨过某个阈值就判成类别 A,否则判成类别 B。绝大多数输入离红线很远,模型判断得又快又准;真正让它犹豫、出错、甚至被一丁点“踮脚”式的微小扰动骗翻的,全是红线附近的输入。这类贴着决策边界而来的输入,就是边界输入(Edge Case)。找到它们、量化它们、系统地测试它们,就是边缘用例发现这门手艺。这篇教程,我们就从游乐园的限高线出发,一步步学会给 AI 模型做一次靠谱的“卡线体检”。

岗位关联

对 AI 从业者来说,边界输入测试是评测与安全测试的基本功:它能提前暴露模型在真实高危场景中的“命门”,避免上线后翻车,是算法工程师与安全测试工程师的硬核竞争力。

目录
  1. 可视化演示
  2. 边界输入概念:认识那条隐形“限高线”
  3. 等价类划分:先分堆,再精量卡线者
  4. 对抗性样本:悄悄“踮脚”的调皮孩子
  5. AI基准评测:给模型来一场“卡线专项考”
  6. 安全测试框架:组建“边界巡检小队”
  7. 工程优化策略:提升游乐园的测量效率
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

三步展示AI安全边界输入Edge Case:边界/对抗/编码/语义四类用例分类、生成→分类→评估→回归测试流程、以及智能客服/代码生成/搜索摘要等应用场景。

本节配有交互动效(进入视口后自动加载,约 3KB)。

边缘用例四分类 边界:空/单字符/最长度 对抗:注入/越狱 编码:特殊字符 极端输入暴露脆弱性 落在训练数据稀疏区域。

边界输入概念:认识那条隐形“限高线”

阿强手里的量尺从早到晚几乎没停过,真正让他犯难的,不是 1.6 米的大孩子,也不是 0.7 米的小豆丁,而是那些往红线上一站、读数在 1.19 和 1.21 之间跳的孩子。模型也有同样的“阿强时刻”:它内部有个打分器,给每个输入算出一个分,再跟一条阈值线比较,决定输出哪一类。几乎所有输入都离阈值线远远的,可总有一小撮输入刚好骑在线上——它们就是边界输入(Edge Case)。

边界输入并不神秘。你发的每封邮件都会经过垃圾邮件过滤器,比如规则是“中奖”出现 3 次以上判为垃圾,一封恰好出现 3 处“中奖”的邮件就站在判定线的正中央。图像分类器里,一只被裁掉一半耳朵的橘猫照片,也可能正卡在“猫”与“狗”的边界上。这些输入的共同特征是:打分接近阈值、模型置信度低、轻微扰动就能改写结论。

形式上,二分类模型可以写成下面的分段形式。其中 g(x) 是模型对输入 x 的打分(好比量尺读数),T 是判定阈值(1.2 米红线),f(x) 是最终输出的类别。边界输入就是满足 |g(x) - T| 很小的那些 x:换一个像素、改一个字,分类结果就可能翻转。

所以,边界输入不是一个玄学概念,而是模型打分系统里“骑在红线上的人”。找边界输入,本质上就是找到模型里那些“让阿强纠结的孩子”——它们数量不多,却决定了一个模型在真实世界的可信度。

f(x)={A,g(x)≥TB,g(x)<Tf(x)=\begin{cases}A, & g(x)\ge T\\[2pt] B, & g(x)<T\end{cases}
模型先给输入“量身高”得到打分 g(x),再和红线 T 比大小,高过红线判 A,低过红线判 B——边界输入就是那些身高读数刚好贴在红线上下的输入。
  1. 打分函数 g(x)模型给输入 x 的计算得分,对应游乐园里孩子站上量尺后的读数。
    g(x)g(x)
  2. 判定阈值 T类别分界的标准线,对应柱子上的 1.2 米红线。
    TT
  3. 分段条件得分达到阈值归为 A 类,未达到归为 B 类。
    g(x)≥T,g(x)<Tg(x)\ge T,\quad g(x)<T
  4. 输出类别 f(x)最终判决结果,只在 A、B 之间二选一。
    f(x)f(x)

等价类划分:先分堆,再精量卡线者

阿强后来学聪明了:他不再逢孩子就量,而是先目测分堆——明显超过 1.2 米的一堆,明显不足的一堆,剩下的“卡线嫌疑犯”才动用尺子。这个“先分堆、再精量”的流程,就是等价类划分加边界值分析的雏形。

等价类划分把输入空间切成若干个“性质相近”的区间,同一区间内的输入在模型眼里几乎等价——就像“明显达标”的 1.3 米和 1.5 米,对鬼屋入口来说没有区别。划分完后,每个区间只需抽代表值;真正要精测的,是区间端点附近的值,也就是边界值。

对离散数值输入,边界值分析有一套经典选点原则:下界 v_min、上界 v_max,以及紧挨着它们的邻值 v_min+1、v_max-1。对应到“限高线案例”,就是要重点量“擦线的最小身高”和“擦线的最大身高”,而不是漫无目的地随机抽人。对 AI 模型而言,这套原则同样适用,只是把“数值区间端点”换成了“决策边界邻域”。

当然,AI 世界的“边界”不止数值端点——更常见的是模型内部的决策边界,但分堆思路完全一致:先把大部队放过,把资源砸向“卡线嫌疑犯”。这就是边界用例发现的效率密码。

Xedge={ vmin⁡,  vmin⁡+1,  vmax⁡−1,  vmax⁡ }X_{\mathrm{edge}}=\{\,v_{\min},\; v_{\min}+1,\; v_{\max}-1,\; v_{\max}\,\}
边界测试集默认只放四类“最高危选手”:下边界、上边界,以及紧邻两侧的值,用最少的人手盯住最容易出事的截面。
  1. 下边界 v_min合法输入区间的左端点,如年龄下限 0 岁。
    vmin⁡v_{\min}
  2. 上边界 v_max合法输入区间的右端点,如年龄上限 120 岁。
    vmax⁡v_{\max}
  3. 邻接值紧贴边界的 v_min+1 与 v_max-1,错误往往从“跨界一步”开始。
    vmin⁡+1,vmax⁡−1v_{\min}+1,\quad v_{\max}-1
  4. 边界测试集 X_edge四个高优先级测试点构成的集合,用最少用例覆盖最大风险。
    XedgeX_{\mathrm{edge}}

对抗性样本:悄悄“踮脚”的调皮孩子

有一天,阿强抓到一个“作弊”的孩子:量身高时脚跟悄悄离地,多出那么 3 毫米,读数从 1.19 变成了 1.20。孩子没换,鞋没换,只是踮了一下脚,结论就从“不行”变成“刚够”。AI 世界里,这种“踮脚”叫做对抗扰动。

对抗样本是边界输入的极端形态:在原始输入上叠加一个人类几乎察觉不到的微小扰动 η,模型打分就会跨过阈值,把判定从 A 翻成 B。研究显示,在图片上叠加相当于“几十分之一像素亮度”的噪声,就能让高精度分类器把熊猫认成长臂猿。这类攻击的存在,说明边界附近不仅“容易错”,而且“可以被主动操纵”。

数学上,攻击者构造新输入 x' = x + η,并要求 η 的“无穷范数”(最大单分量变化)不超过一个很小的 ε,保证人类看不出区别;同时迫使 f(x') ≠ f(x),即跨越决策边界。这也解释了为什么边界附近最危险:离红线越近,需要的“踮脚幅度”越小。

理解对抗样本,就理解了边界输入的“杀伤力上限”。那些踮脚的孩子不是要骗过阿强的眼睛,而是要骗过红线本身;防御者则要想办法让红线“站得更稳”——这就是后面评测与安全测试要解决的问题。

x′=x+η,∥η∥∞≤ϵ,f(x′)≠f(x)x'=x+\eta,\qquad \|\eta\|_\infty\le\epsilon,\qquad f(x')\ne f(x)
对抗攻击就是“踮脚式”入侵:扰动量 ε 小到人眼无感,却足以让模型的打分跨过那条 1.2 米红线,把 A 类判成 B 类。
  1. 扰动后输入 x'原始输入加上扰动后得到的新输入,人类看不出差异。
    x′=x+ηx'=x+\eta
  2. 扰动上界 εη 的无穷范数不超过 ε,限制“踮脚”幅度。
    ∥η∥∞≤ϵ\|\eta\|_\infty\le\epsilon
  3. 决策翻转新输入的模型输出与原来不同,攻击成功。
    f(x′)≠f(x)f(x')\ne f(x)

AI基准评测:给模型来一场“卡线专项考”

管理层问阿强:鬼屋安不安全?阿强答:总客流 10 万,无人投诉。可管理层真正该问的是:10 万游客里有多少是“卡线孩子”?他们有多少被顺利放行、多少被劝退?AI 评测也一样:全体样本的平均准确率会掩盖边界上的千疮百孔。

于是评测团队把“卡线样本”单独拉出来,构造一个边界测试集:打分落在阈值附近一定带宽内的输入。对这个集合单独计算准确率,得到边界鲁棒性 R_edge。它与全体准确率的落差,就是模型“偏科”的直接证据——整体 99% 的模型,边界上可能只有 60%。结果解读时不要只看单一数值,要把落差、带宽、样本量放在一起讲。

边界测试集的设计有三个要点:一是带宽要合理(太宽混入普通样本,太窄样本太少);二是边界样本要有代表性,覆盖多个可能的“卡线场景”;三是要与训练集彻底隔离,防止数据泄漏导致的虚高。有了边界测试集,R_edge 才是一个可比较、可追踪的指标。

所以,评测不是“考全班平均分”,而是专门给“卡线孩子”出卷子。一个连边界考都没通过的模型,没资格说自己是安全的——这正是基准测试存在的意义。

Redge=1N∑i=1N1[f(xi)=yi]R_{\mathrm{edge}}=\frac{1}{N}\sum_{i=1}^{N}\mathbb{1}\big[f(x_i)=y_i\big]
边界鲁棒性就是“卡线专场”的通过率:把 N 个卡线样本单独拎出来考试,每答对一题记 1 分,最后算平均——越接近 1,说明模型在 1.2 米线附近越稳。
  1. 指示函数第 i 个边界样本预测与真实标签一致时记 1,否则记 0。
    1[f(xi)=yi]\mathbb{1}\big[f(x_i)=y_i\big]
  2. 求和与平均把 N 个边界样本的正确个数加总并除以 N。
    1N∑i=1N\frac{1}{N}\sum_{i=1}^{N}
  3. 边界鲁棒性 R_edgeR_edge 越接近 1,说明模型在红线附近越稳。
    RedgeR_{\mathrm{edge}}

安全测试框架:组建“边界巡检小队”

光靠阿强一双眼睛盯不过来。游乐园后来组建了巡检小队:有人蹲守在红线旁随机拦人复测,有人故意在雨天制造“尺子打滑、孩子踮脚”的场景,还有人把过去闹过纠纷的“疑难孩子”记录在案,每月复查一遍。这套打法对应到 AI 安全测试里,就是模糊测试、边界自动探测与回归监控。

模糊测试(Fuzzing)的思路简单粗暴:不断生成“半正常半离谱”的输入去轰炸模型,观察它何时崩溃、何时翻车。与随机测试不同,Fuzzing 会用边界分析指导变异方向——把普通样本往决策边界方向推,逼近那条 1.2 米线。边界自动探测则是更精细的雷达:用梯度下降找到离当前样本最近的“跨界点”,批量采集这些点构造失败用例。

失败用例不能测完就扔。它们像游乐园的“纠纷档案”一样,要沉淀成回归测试集:每次模型更新,先跑一遍这些历史卡线样本,确保旧问题不复发。为了衡量“测够没有”,引入边界覆盖率 C:把预定义的目标边界场景枚举出来,算出本轮真正跑到的比例。

巡检小队不是在抓贼,而是在“摸底”。安全测试框架的价值不在抓到多少翻车样本,而在把“未知的边界风险”变成“已知的、可跟踪的、不断收敛的风险清单”。

C=∣Bcovered∣∣Btarget∣C=\frac{\left|B_{\mathrm{covered}}\right|}{\left|B_{\mathrm{target}}\right|}
覆盖率相当于“巡检清单划勾率”:目标边界集是“该查的孩子名单”,已覆盖集是“查完的孩子名单”,两者一除就知道测试是否还要继续。
  1. 目标边界集 B_target预先枚举的高风险边界场景集合,对应“该查的孩子名单”。
    BtargetB_{\mathrm{target}}
  2. 已覆盖集 B_covered本轮测试真正执行到的边界场景集合。
    BcoveredB_{\mathrm{covered}}
  3. 覆盖率 C两者之比,指导测试资源是否该继续投入。
    C=∣Bcovered∣∣Btarget∣C=\frac{\left|B_{\mathrm{covered}}\right|}{\left|B_{\mathrm{target}}\right|}

工程优化策略:提升游乐园的测量效率

巡检小队运转半年后,管理层发现新问题:成本太高。为了逮住几个卡线孩子,全队一个月加了 200 小时班。于是他们开始优化——校准量尺减少误读、按卡线概率分配抽检人力、每周复盘红线刻度是否还合理。AI 工程的边界测试优化,做的也是这三件事:数据管道、采样策略、持续迭代。

数据管道优化:原始数据清洗、归一化、去重都要小心,避免边界特征被预处理“抹平”。比如把图片压缩成 JPEG 再送入模型,等于给量尺加了误差,真正的卡线样本可能从 1.20 变成 1.19,导致噪声淹没边界。特征工程上,要保留那些“差一点就跨线”的判别线索,而不是用平滑操作把边界磨掉。

采样策略上,不能均匀抽检,而要给靠近决策边界的样本更高权重。加权公式 w_i = 1 + α·1[|g(x_i)-T|<δ] 的含义是:离红线 δ 以内的样本,权重额外放大 α 倍;既保证大部分资源花在刀刃上,又不会完全忽略远离边界的样本。最终,边界的覆盖度曲线要持续跟踪,模型每次更新后都要重新划定边界带宽、更新目标边界集,把边界测试从“一次体检”变成“长期健康管理”。游乐园的量尺会磨损,模型的红线也一样。

wi=1+α⋅1[∣g(xi)−T∣<δ]w_i=1+\alpha\cdot\mathbb{1}\big[\lvert g(x_i)-T\rvert<\delta\big]
给卡线样本“加权记档”:普通样本权重为 1,离红线 δ 以内的样本额外放大 α 倍,让测试资源自动流向最需要盯防的“1.2 米线附近”。
  1. 基础权重 1普通样本默认权重为 1,代表一视同仁。
    11
  2. 边界标志样本打分 g(x_i) 与阈值 T 的距离小于 δ 时,括号内判真得 1,否则为 0。
    1[∣g(xi)−T∣<δ]\mathbb{1}\big[\lvert g(x_i)-T\rvert<\delta\big]
  3. 放大系数 α控制边界样本被加权的强度,α 越大“卡线孩子”越受重视。
    α\alpha

AI 应用场景

自动驾驶感知模型的“暗夜行人”边界测试

阶段:AI安全测试与评测阶段

解决的问题:传统上,自动驾驶团队用固定数据集跑一遍 mAP 就算评测通过;但真实事故常发生在感知边界——例如夜间 60 米外穿深色衣服的行人,恰好落在摄像头可识别度的阈值线附近。边界输入测试用边界值分析与模糊测试主动生成这类“卡线场景”,提前暴露感知模型在决策边界上的不稳定。

具体案例:某无人配送小车在雨天把积水反光误判为可通行路面。测试团队在仿真环境构造“水面反射强度恰好在通过/绕行分界线附近”的输入,把车辆在边界上的决策翻转率从 7% 压到 1% 以下,并将失败用例纳入回归集长期跟踪。

银行信贷模型的“临界客户”审计

阶段:模型上线前的公平性与稳定性评测

解决的问题:信贷审批模型对申请者打分,分数卡在审批阈值(如 60 分)附近的客户,争议率和投诉率最高。人工信审看不过来,AI 用边界测试集自动筛选出这些“1.20 米孩子”,检查“资料微小变动导致分数大幅反转”是否频繁,及时发现模型漂移或特征权重失衡。

具体案例:某银行模型把月收入 8000 元的申请者判为通过、7999 元判为拒绝,边界审计发现该用户画像恰好卡在收入特征权重最高的斜率处。团队对特征做平滑处理后,临界区翻转率明显下降,监管审计一次通过。

内容审核模型的“擦边球”对抗

阶段:线上推理监控与安全加固

解决的问题:内容审核模型面对大量“差一点就违规”的内容:敏感词以谐音、拆字、插表情等形式出现时,特征得分刚好卡在判罚阈值附近。边界输入测试用 Fuzzing 自动生成这类擦边文本与图片,验证审核模型的“红线”是否被轻易“踮脚”突破。

具体案例:某社区平台对“导流广告”的判定边界做模糊测试,发现把“加V信”写成“加 V 信”就能让得分从 0.52 掉到 0.48,成功绕过审核。团队随即把边界样本加入训练集并收紧阈值,绕过率下降 90%。

Python 演示

python67 行
import numpy as np  class BoundaryTester:    """边界输入测试器: 定位决策边界附近样本并度量鲁棒性"""     def __init__(self, model, X_test, y_test, margin=0.1):        self.model = model        self.X_test = X_test        self.y_test = y_test        self.margin = margin     def find_boundary(self):        probs = self.model.predict_proba(self.X_test)[:, 1]        mask = np.abs(probs - 0.5) <= self.margin        return self.X_test[mask]     def robustness(self, eps=0.05, trials=10):        base_pred = self.model.predict(self.X_test)        base_acc = float(np.mean(base_pred == self.y_test))        flip = 0        total = 0        rng = np.random.RandomState(42)        for _ in range(trials):            noise = rng.normal(0, eps, size=self.X_test.shape)            new_pred = self.model.predict(self.X_test + noise)            flip += int(np.sum(new_pred != base_pred))            total += self.X_test.shape[0]        return base_acc, flip / total  class LogisticModel:    """演示用线性打分模型: g(x) = x @ w + b, 判别阈值 T = 0"""     def __init__(self, w, b):        self.w = np.asarray(w, dtype=float)        self.b = float(b)     def fit(self, X, y):        pass  # 教程演示: 模型参数已给定, 跳过训练     def predict_proba(self, X):        z = X @ self.w + self.b        p = 1.0 / (1.0 + np.exp(-z))        return np.column_stack((1.0 - p, p))     def predict(self, X):        return self.predict_proba(X)[:, 1] > 0.5     def score(self, X, y):        return float(np.mean(self.predict(X) == y))  if __name__ == "__main__":    rng = np.random.RandomState(7)    model = LogisticModel(w=[1.5, -2.0], b=0.3)    X = rng.uniform(-2, 2, size=(500, 2))    y = X @ model.w + model.b > 0     tester = BoundaryTester(model, X, y, margin=0.15)    boundary = tester.find_boundary()    base_acc, flip_rate = tester.robustness(eps=0.08, trials=10)     print("整体准确率:", round(base_acc, 4))    print("卡线样本数量:", len(boundary))    print("边界样本占比:", round(len(boundary) / len(X), 4))    print("边界扰动翻转率:", round(flip_rate, 4))
目的:用线性打分模型模拟游乐园限高线,自动定位“概率≈0.5”的卡线样本,并统计在微小高斯扰动下模型预测的翻转率,直观展示边界输入的脆弱性。
  1. probs = self.model.predict_proba(self.X_test)[:, 1]取每个样本属于“正类”的概率,概率越接近 0.5 就越像卡线孩子。
  2. mask = np.abs(probs - 0.5) <= self.margin用布尔掩码找出离红线(0.5)足够近的边界样本。
  3. return self.X_test[mask]返回卡线样本集合,即边界测试集。
  4. noise = rng.normal(0, eps, size=self.X_test.shape)生成均值 0、标准差 eps 的高斯扰动,模拟“踮脚”。
  5. new_pred = self.model.predict(self.X_test + noise)用加了扰动的输入重新预测,看是否翻车。
  6. flip += int(np.sum(new_pred != base_pred))统计预测结果被改写的个数。
  7. z = X @ self.w + self.b线性打分:加权求和等于给孩子量身高读数。
  8. p = 1.0 / (1.0 + np.exp(-z))Sigmoid 把打分压到 0~1 之间,0.5 就是限高线。
  9. model = LogisticModel(w=[1.5, -2.0], b=0.3)构造一个打分规则已定的演示模型。
  10. boundary = tester.find_boundary()在 500 个测试样本里自动找出卡线样本。

常见误区

误区“边界输入不就是合法输入区间的两个端点吗?模型输入范围是 0~255,我重点测 0 和 255 就够了。”

正解数值区间的端点只是“名义边界”,相当于标签上的身高范围;而模型真正的风险点在决策边界——打分 g(x) 刚好等于阈值 T 的输入,二者往往不重合。游乐园的红线是 1.2 米,不是所有孩子身高的最大值。正确做法是同时测数值端点(防越界)与决策边界邻域(防骑墙误判)。

为何常见:传统软件测试的边界值分析法深入人心,容易把“输入定义域的边界”直接套用到模型上。

误区“边界最容易出错,我把所有卡线样本都灌进训练集,模型不就不怕边界了吗?”

正解无节制堆边界样本会扭曲训练分布,让模型在边界附近过拟合这批样本的噪声,真实分布一变就崩。游乐园不会因为卡线孩子容易闹纠纷,就把整个园区都改成卡线孩子。正确姿势是加权采样或按比例增补,让边界样本“被重视”而不是“被淹没”。

为何常见:把“发现问题”与“解决问题”混为一谈,忽视训练分布对泛化的影响。

误区“只要边界样本被分错,就肯定是模型设计缺陷,赶紧改网络结构。”

正解决策边界附近的标签本身常是模糊的——两个标注员可能对同一张“半猫半狗”图片给出不同标签;特征测量本身也有误差。先检查数据标注一致性和特征可靠性,再给模型定罪。线两侧 1.199 米与 1.201 米的差别,可能只存在于尺子的精度里。

为何常见:对模型“全知全能”的预期过强,忽略了数据固有噪声与标注主观性。

误区“边界覆盖率已经 100%,说明我们把所有边界用例都测完了,模型可以放心上线。”

正解覆盖率只是清单完成度,只能证明“预定义的场景跑过了”,不能证明“没有未知风险”。数据漂移、新型扰动、未枚举的边界维度都可能让覆盖率一夜之间失去意义。孩子量完身高≠不怕鬼屋里的黑暗。覆盖率应该和边界翻转率、鲁棒性指标、线上监控一起使用。

为何常见:把工程度量指标当成安全保证,混淆了“测试完成”与“风险为零”。

误区“对抗样本是论文里的极端玩具,真实业务里谁会故意给图片加像素噪声?”

正解真实世界充满“自然扰动”:光线变化、摄像头抖动、JPEG 压缩、雨点反光,本质上都是输入上的微小扰动 η。自动驾驶中一张精心贴纸就能让模型把停车牌认成限速牌。边界测试要防的不是“实验室黑客”,而是真实环境里无处不在的踮脚。

为何常见:教程里常用像素级极端例子,让人忽略了现实中噪声与攻击的等价物。

面试题

Q1. 边界输入最容易出现在模型决策的哪个位置?

单选题 · easy

  • A.明显正确样本区域
  • B.明显错误样本区域
  • C.决策边界附近区域← 正确答案
  • D.训练集中心地带

答案:C。边界输入对应游乐园里“卡在 1.2 米红线附近”的孩子。明显正确/明显错误样本离决策边界远,模型信心十足;真正骑墙的是决策边界附近的输入,轻微扰动就会翻盘。

Q2. 等价类划分加边界值分析的直接目的是什么?

单选题 · easy

  • A.减少模型的参数量
  • B.用少量用例覆盖风险← 正确答案
  • C.提升模型的精确度
  • D.扩充训练数据集量

答案:B。先分堆再精量的核心是用最少用例覆盖最高风险,如同阿强只精测卡线嫌疑犯;它不改变模型参数、不直接提升精度,也不是为了凑数据量。

Q3. 某输入合法区间为 1 到 100,边界值分析应优先测试哪些值?

单选题 · easy

  • A.只测中位数一个
  • B.只测两端最大最小
  • C.测试边界及其相邻值← 正确答案
  • D.测试全部整数一百个

答案:C。经典选点是 {1, 2, 99, 100}——上下边界加邻接值。错误大多发生在“跨线一步”时,只测端点漏掉了跨界邻值,测全部则浪费资源。

Q4. 对抗样本公式 x' = x + η 中,η 表示什么?

单选题 · mid

  • A.微小扰动向量← 正确答案
  • B.训练标签噪声
  • C.学习速率系数
  • D.正则化惩罚项

答案:A。η 是在输入上叠加的微小扰动,像孩子量身高时偷偷踮脚;标签噪声描述的是数据问题,学习率与正则项是训练超参数,与对抗扰动无关。

Q5. 模型对某样本输出概率恰好为 0.5,说明什么?

单选题 · mid

  • A.模型对它确定性最高
  • B.模型对它完全无法区分← 正确答案
  • C.模型输出出现了 bug
  • D.模型训练尚未收敛

答案:B。概率 0.5 意味着打分正好压在阈值红线上,置信度为零、两类概率相等,是典型卡线样本。这既不是 bug 也不代表未收敛,而是边界输入的标志。

Q6. 关于决策边界漂移,下列说法正确的是?

单选题 · hard

  • A.训练集自动扩大
  • B.边界周围类别重排← 正确答案
  • C.损失函数变为零
  • D.推理速度大幅变快

答案:B。边界漂移指模型更新后决策边界位置移动,原来在边界一侧的样本可能被重新分派到另一侧,如同游乐园把红线从 1.2 米改到 1.3 米后,1.25 米的孩子从“能进”变“不能进”。

Q7. 模糊测试发现边界用例通常依靠什么手段?

单选题 · mid

  • A.随机变异输入观测行为← 正确答案
  • B.只使用官方数据集验证
  • C.仅依赖人工密集标注
  • D.减少运行测试的次数

答案:A。Fuzzing 的核心是不断生成半正常半离谱的变异输入去轰击模型,观测崩溃与翻车;官方数据集、人工标注、减少测试次数都不属于模糊测试的主动探测思路。

Q8. 关于边界覆盖率 C 的说法,正确的有?

多选题 · mid

  • A.证明模型完全没有风险
  • B.指导测试是否还需补充← 正确答案
  • C.覆盖率需与其他指标结合← 正确答案
  • D.能替代全部鲁棒性指标

答案:BC。覆盖率只说明“这些预定义边界场景测过了”,相当于巡检清单打了勾;它既不能证明绝对安全,也不能替代鲁棒性、翻转率等指标,但能指导测试资源投入。

Q9. 关于对抗样本的防御思路,合理的有?

多选题 · hard

  • A.用对抗样本做对抗训练← 正确答案
  • B.对输入做预处理去噪← 正确答案
  • C.无限加深网络的结构
  • D.平滑并约束决策边界← 正确答案

答案:ABD。对抗训练、输入去噪、边界平滑都是被验证的防御思路;无限加深网络既不直接解决微小扰动问题,还容易引入训练不稳定,不是合理防御手段。

Q10. 边界覆盖率达到 100% 时应如何理解?

单选题 · hard

  • A.模型边界风险可以完全忽略
  • B.只是说明已覆盖预定义场景← 正确答案
  • C.说明对抗扰动已全部消除
  • D.说明模型已经收敛到最优

答案:B。覆盖率是“测试清单”的完成度,不是安全性的保证书。100% 只代表枚举过的目标边界场景都跑到了;未知边界维度、新扰动类型、数据漂移仍可能带来风险,要与其他指标组合解读。