让 AI 算 sparsemax:没有手动删候选,概率为什么也会精确变成零
分析注意力权重时,常会看到很多极小却非零的数。若希望模型直接给出稀疏权重,可以研究sparsemax:它把分数投影到概率单纯形,使部分位置恰好为零。这里的零来自一个明确的优化问题,不能只靠打印时保留几位小数判断。
AI生成的概念示意图:分数投向受约束区域后,部分权重可以落到边界;图形不是精确坐标或运行截图。
先写清要离哪个向量最近
给出三个教学分数z=(0.8,0.5,-0.1)。寻找p,使三项都不小于零、总和为1,并让p与z的欧氏距离平方最小。输入z本来不是概率,既不要求非负,也不要求总和为1。sparsemax求的是上述最近点,不是先取指数。
解可以写成每项pᵢ=max(zᵢ-τ,0),其中共同阈值τ必须使结果恰好加到1。注意所有保留项都减去同一个数;它们并不是各自按原分数的比例缩小。
猜支持集,再验证猜得是否一致
先假定前三项都保留,τ=(0.8+0.5-0.1-1)/3=1/15。第三项减完仍为负,违反非负要求,因此这个支持集不成立。改为只保留前两项,τ=(0.8+0.5-1)/2=0.15,得到p=(0.65,0.35,0)。
两项正值的总和为1;被排除的第三项分数-0.1确实不高于0.15,所以不会漏掉应该保留的位置。这两项检查缺一不可。若输入未排序,先按分数从大到小寻找支持集,最后把概率放回原候选顺序。
另一个常见做法是把负数截为零,再除以正数总和1.3,得到(8/13,5/13,0)。它也合法,却不是本问题的最近点。sparsemax结果的距离平方为0.055,截负归一结果约为0.057396,后者更远。合法概率与指定目标的最优解是两种检查。
局部改分数时,看阈值怎样一起移动
把第一项由0.8改成0.82,另外两项不动,支持集仍是前两项。新τ=0.16,新输出为(0.66,0.34,0)。第一项增加0.02,自己的概率只增加0.01,另一项减少0.01;这来自总和必须保持1。
若把所有分数统一加100,τ也增加100,输出完全不变。这是可做的平移检查。若统一乘一个常数,间距也跟着变化,支持集则可能改变,不能把乘法也当成同一种不变性。
让AI留下可审核的投影过程
可以提示:“对给定分数求sparsemax,列排序、候选支持集、共同阈值、原顺序输出;检查非负与总和,并比较截负归一的距离。不要把小数显示为零当成精确零。”本次另用有约束数值优化验证最近点,并复算上述扰动结果。
这种练习适合检查稀疏注意力或多标签模型中的映射实现。零权重不代表该输入在所有上下文都无关,也不直接证明模型解释正确。支持集切换处存在不可光滑边界;训练还需要与该映射匹配的损失和梯度处理,不能只替换显示层就宣称模型变好了。
在注意力模块里再检查一层语义
假定三项权重对应三段候选证据,向量值分别是(1,0)、(0,2)、(9,9)。用本例权重加权,输出为(0.65,0.70),第三段虽然数值很大,却因权重为零而不参与这个加权步骤。请AI分别交权重与加权结果,才能发现它是否把被排除项又加回来了。
这也提醒我们不要把“稀疏输出”误写成“已经节省全部计算”。如果三段值向量事先都已算出,产生零权重并不会让此前的编码工作自动消失;能否跳过后续运算要看系统实现。真正验收时,可额外输入完全相同的三个分数,检查输出是否均为三分之一,再输入明显占优的一项,观察支持集是否正确缩小。
资料核对日期:2026年10月2日。数据为原创教学设定,已用独立本地程序复核,未进行真实模型训练或生产效果测试。


