name: 对称性验证套件 description: 当您需要实证测试数据或模型中假设的对称性是否实际成立时使用。在用户提到测试不变性、验证等变性、检查对称性假设是否正确、调试与对称性相关的模型失败,或在承诺使用等变架构前需要数据驱动的验证时调用。提供测试协议和指标。
对称性验证套件
这是什么?
此技能提供实证测试来验证对称性假设。在承诺使用等变架构前,您应该验证声称的对称性是否确实成立。此技能提供具体的测试协议和指标。
为什么要验证? 错误的对称性假设会损害模型性能。过多对称性会过度约束;缺失对称性会浪费容量。
工作流程
复制此检查清单并跟踪进度:
对称性验证进度:
- [ ] 步骤1:列出要测试的对称性假设
- [ ] 步骤2:设计变换测试集
- [ ] 步骤3:运行不变性/等变性测试
- [ ] 步骤4:验证群结构
- [ ] 步骤5:分析变换下的数据分布
- [ ] 步骤6:记录验证结果
步骤1:列出要测试的对称性假设
从先前的发现工作中收集候选对称性。对于每个,记录:变换类型、期望不变性还是等变性、置信度。优先测试低置信度假设。如果无假设存在,与用户通过领域分析共同识别候选对称性。
步骤2:设计变换测试集
对于每个对称性,创建测试协议:从数据分布中采样代表性输入。定义变换采样策略(随机旋转、全排列等)。确定统计显著性的适当样本大小。考虑边缘情况和边界条件。参见变换采样获取指导。详细方法请参阅方法细节。
步骤3:运行不变性/等变性测试
不变性测试:对输入x应用变换T,计算输出f(x)和f(T(x)),测量误差||f(T(x)) - f(x)||。等变性测试:计算f(T(x))和T’(f(x)),其中T’是输出变换,测量误差||f(T(x)) - T’(f(x))||。使用测试协议获取实现细节。跨样本聚合并计算统计量。完整代码示例参见测试实现示例。
步骤4:验证群结构
检查声称的变换是否形成有效群:测试闭包(两个变换的组合是一个变换)。测试结合性。验证恒等元存在。验证逆元存在。对于李群,检查生成元在交换子下闭合。参见群结构测试。
步骤5:分析变换下的数据分布
检查变换后数据是否保持在分布内:对训练数据应用变换。比较原始与变换后数据的统计量。检查可能破坏假设的分布偏移。识别保持有效性的变换范围。这捕获“近似对称性”情况,其中对称性仅在边界内成立。
步骤6:记录验证结果
使用输出模板创建验证报告。对于每个对称性:陈述假设、测试方法、量化结果、通过/失败决策。推荐是否使用硬等变约束、软约束(正则化)、数据增强或根本不使用对称性。输出质量标准定义在质量评估。
测试协议
不变性测试协议
def test_invariance(model, data_samples, transform_fn, n_transforms=100):
"""
测试模型输出是否对变换不变。
返回:
mean_error: 平均||f(T(x)) - f(x)||
max_error: 最大观察误差
pass_rate: 误差 < 阈值的比例
"""
errors = []
for x in data_samples:
y_orig = model(x)
for _ in range(n_transforms):
x_transformed = transform_fn(x)
y_transformed = model(x_transformed)
error = norm(y_transformed - y_orig)
errors.append(error)
return {
'mean_error': mean(errors),
'max_error': max(errors),
'std_error': std(errors),
'pass_rate': sum(e < threshold for e in errors) / len(errors)
}
等变性测试协议
def test_equivariance(model, data_samples, input_transform, output_transform):
"""
测试f(T(x)) = T'(f(x))对于等变性。
返回:
mean_error: 平均||f(T(x)) - T'(f(x))||
relative_error: 误差归一化到输出幅度
"""
errors = []
for x in data_samples:
# 方法1:变换后建模
x_T = input_transform(x)
y1 = model(x_T)
# 方法2:建模后变换
y = model(x)
y2 = output_transform(y)
error = norm(y1 - y2)
relative = error / (norm(y2) + eps)
errors.append({'absolute': error, 'relative': relative})
return aggregate_stats(errors)
统计显著性
可靠结果:
- 使用至少100个数据样本
- 每个样本测试至少50个随机变换
- 报告均值、标准差和百分位数(95th、99th)
- 基于数值精度期望设置阈值
- 如果比较方法,使用假设检验
变换采样
连续群
| 群 | 采样策略 |
|---|---|
| SO(2) | 均匀随机角度 θ ∈ [0, 2π) |
| SO(3) | 均匀随机四元数或轴角 |
| SE(3) | 结合SO(3)旋转 + 均匀平移 |
| 平移 | 在预期数据范围内均匀 |
离散群
| 群 | 采样策略 |
|---|---|
| Cₙ | 所有n个旋转 |
| Dₙ | 所有2n个元素(旋转 + 反射) |
| Sₙ | 随机排列(如果n ≤ 6,则全枚举) |
群结构测试
闭包测试
对于随机 g₁, g₂ ∈ G:
计算 g₃ = g₁ · g₂
验证 g₃ ∈ G(在数值容差内)
结合性测试
对于随机 g₁, g₂, g₃ ∈ G:
计算 (g₁ · g₂) · g₃
计算 g₁ · (g₂ · g₃)
验证相等性(在容差内)
恒等元和逆元测试
对于随机 g ∈ G:
验证 g · e = e · g = g
找到 g⁻¹ 并验证 g · g⁻¹ = e
解释指南
误差阈值
| 误差级别 | 解释 |
|---|---|
| < 1e-6 | 精确对称性(数值精度) |
| 1e-6 到 1e-3 | 强近似对称性 |
| 1e-3 到 0.01 | 弱近似对称性 |
| > 0.01 | 对称性可能不成立 |
决策矩阵
| 验证结果 | 推荐 |
|---|---|
| 确认精确对称性 | 使用硬等变约束 |
| 强近似 | 使用等变架构 |
| 弱近似 | 考虑软约束或增强 |
| 对称性破坏 | 不强制执行此对称性 |
| 部分对称性 | 使用条件/局部等变性 |
输出模板
对称性验证报告
==========================
测试的对称性:
1. [变换]: [不变性/等变性]
- 样本大小: [N 样本 × M 变换]
- 平均误差: [值]
- 最大误差: [值]
- 通过率: [%] 在阈值 [值]
- 结果: [通过/失败/部分]
- 推荐: [硬约束/软/增强/无]
2. [变换]: [不变性/等变性]
...
群结构:
- 闭包: [通过/失败]
- 结合性: [通过/失败]
- 恒等元/逆元: [通过/失败]
分布分析:
- 对称性成立的变换范围: [边界]
- 检测到的破坏因素: [列表]
总结:
- 确认的对称性: [列表]
- 拒绝的对称性: [列表]
- 继续进行架构设计: [群规范]