ELAI S.r.l.

AI 不允许读取任何内容,空掩码为何反而可能让它全读

AI 不允许读取任何内容,空掩码为何反而可能让它全读 通过完整算例解释方法、假设与局限。

AI 不允许读取任何内容,空掩码为何反而可能让它全读

没有任何可读信息的一行

掩码限制模型可读取的上下文,排除填充或窗口外元素。如果一个有效元素都不剩,注意力应返回什么?看似无害的数值替换可能把“什么都不读”变成“全部求平均”。我们用三个值、明确公式与空行策略研究这一边界情况。

权重、值,以及必须存在的分母

设 s_i 为匹配分数,v_i 为待组合的值。Softmax 产生和为一的正权重,输出为加权和。例子 s=(0,1,2)、v=(10,20,90) 均无量纲。我们不运行训练网络,只隔离一个没有 dropout、投影或残差的操作,以区分数学公式与软件策略。

w_i = exp(s_i) / Σ_j exp(s_j); y = Σ_i w_i v_i

令 A 为允许位置集合,分母只对 A 求和,排除位置权重为零。指数前减去允许分数最大值 m 可避免溢出,公共因子 exp(−m) 在分子分母抵消。但推导要求 A 非空,否则所用最大值不存在。

w_i = 1_(i∈A) exp(s_i−m) / Σ_(j∈A) exp(s_j−m), m=max_(j∈A) s_j

只允许第一、第三位置时,权重为 1/(1+e²)、零、e²/(1+e²),输出 (10+90e²)/(1+e²),约 80.464。中间值 20 完全不参与。排除权重精确为零,允许权重和为一,所以掩码限制的是支持集,而非仅减小分数。

全部被排除时,普通 softmax 不给出答案

A 为空时,允许指数和为零,该集合上不存在归一概率分布。全设为负无穷也不能修复定义:稳定减法遇到 −∞−(−∞),直接归一遇到 0/0。这是公式定义域问题,不是一个“应该接近零”的数。软件须表示无有效输出的状态。

把所有排除分数替换成有限 −10^9,会使全排除行成为常数。减最大值得三个零,取指数得三个一,权重均为 1/3,输出 (10+20+90)/3=40,等于读取了全部禁止值。如果给原分数加相同有限惩罚,softmax 反而保留分数差异,仍不是严格掩码。

情况有效输出
1180.463766
2040
300
部分掩码、有限替换与显式空行是不同操作;第三个零还须 valid=False。教学计算。
部分掩码、有限替换与显式空行是不同操作;第三个零还须 valid=False。教学计算。

明确策略,而非虚构概率

本实验在 A 为空时返回全零权重、零输出及 valid=False。权重和为零,不能称作概率分布。先分支再取最大值和相除,避免先生成无效数再掩盖。其他应用可拒绝请求,或显式允许回退元素。契约还须规定梯度行为,本文未执行梯度计算。

标志很重要:零也可能是真实值,单靠零无法区分信息缺失和有效零均值。注意力贡献为零,也不代表整个模块为零,投影、偏置与残差仍可加项。图仅涉及隔离操作,不证明完整模型的其他信息路径或无证据生成行为。

库的契约必须单独核查

PyTorch 2.14 文档展示掩码 softmax,并规定 scaled_dot_product_attention 中 True 表示允许,与另一个填充接口约定相反。我们未执行 PyTorch,也未测其空行内核,所以本代码不是后端保证或基准。须在目标平台测试类型、版本、导出路径及空、部分、全有效掩码。

没有可读元素时,普通 softmax 本身不提供答案;极负有限值不自动等于禁止。明确并测试空行行为,才能避免有限且合理的数字隐藏未授权读取。代码分支虽小,却改变操作含义。

PyTorch 2.14 — Attention and mask semantics.

import math,json,sys
from pathlib import Path
scores=[0.,1.,2.];values=[10.,20.,90.]
def attention(allowed):
 if not any(allowed):return dict(valid=False,weights=[0.]*3,output=0.)
 m=max(s for s,a in zip(scores,allowed) if a);e=[math.exp(s-m) if a else 0. for s,a in zip(scores,allowed)];z=sum(e);w=[x/z for x in e]
 return dict(valid=True,weights=w,output=sum(x*v for x,v in zip(w,values)))
partial=attention([True,False,True]);empty=attention([False]*3)
assert empty['output']==0 and not empty['valid'];assert partial['weights'][1]==0
assert abs(partial['output']-(10+90*math.exp(2))/(1+math.exp(2)))<1e-12
uniform=dict(valid=False,weights=[1/3]*3,output=sum(values)/3)
assert uniform['output']==40
r=dict(python=sys.version.split()[0],seed=None,scope='Explicit educational softmax policies, not execution of a PyTorch backend or trained model',scores=scores,values=values,partial=partial,emptyPolicy=empty,finiteReplacement=uniform,allNegativeInfinity='Stable subtraction attempts -inf-(-inf): undefined, not ordinary probability normalisation')
Path(__file__).with_name('results.json').write_text(json.dumps(r,indent=2),encoding='utf8')

代码、数据与说明 · JSON. 教学计算使用 Python 3.14.0,图使用 Matplotlib 3.11.2。分析由 AI 辅助,不声称经过同行评审或人工审核。原创 ImageGen 封面仅作示意,不记录 EL-AI 人员、场所或实际安装。来源查阅于 2026 年 10 月 25 日。