用增广 Neural ODE 训练 XOR 分类器¶
背景¶
XOR 数据集由正方形的四个顶点组成。坐标符号不同时属于 \(+1\) 类,符号相同时属于 \(-1\) 类。任何仿射分类器都无法让这四个点同时获得正分类间隔。增广 Neural ODE 可以把样本提升到额外的状态维度,再通过固定的符号读出完成分类。
本例把训练写成最优控制问题:连续深度权重是控制量,四个样本的 logit 是状态量,硬端点约束负责保证分类结果。网络结构经过有意限制,使最小能量解还可以独立解析推导。
数据与网络结构¶
四个固定训练样本及其标签为
对样本 \(i\),增广状态为 \((x_{1,i},x_{2,i},h_i)\)。输入坐标保持不变:
定义三个固定特征
四个样本共享可训练的输出权重向量
在连续深度 \(0\le t\le T=1\) 上,带泄漏项的 logit 动力学为
分类结果由固定读出 \(\operatorname{sign}(h_i(T))\) 给出。
最优控制问题¶
训练目标是最小化权重平方的深度积分:
终端有符号间隔约束和密集路径边界为
每个输入状态都从对应训练样本的坐标出发,零动力学使该坐标在整个网络深度内保持不变;\(\pm1.05\) 边界是围绕精确值 \(\pm1\) 设置的数值保护范围。
实现中,每个终端 logit 都表示为系统静态变量,并与相位端点连接,因此有符号终端不等式可以直接写成系统约束。
变量与单位¶
| 符号 | 含义 | 单位或数值 |
|---|---|---|
| \(t\) | 连续网络深度 | 无量纲,\([0,1]\) |
| \(x_{1,i},x_{2,i}\) | 固定输入坐标 | 无量纲 |
| \(h_i\) | 样本 \(i\) 的增广 logit | 无量纲 |
| \(\boldsymbol\phi_i\) | 固定非线性特征向量 | 无量纲 |
| \(c_0,c_L,c_R\) | 共享的可训练输出权重 | 无量纲 |
| \(k\) | 特征斜率 | \(2.0\) |
| \(\lambda\) | 潜状态泄漏系数 | \(0.4\) |
| \(J\) | 权重平方积分目标 | 无量纲 |
解析最优解¶
令 \(F\in\mathbb R^{4\times3}\) 的第 \(i\) 行是 \(\boldsymbol\phi_i^{\mathsf T}\),\(\boldsymbol y\) 为标签向量。对于给定的终端 logit 向量 \(\boldsymbol h(T)\),定义
其中 \(F^+\) 是 Moore-Penrose 伪逆。终端泄漏核的平方范数为
实现这些终端 logit 的最小能量权重历程为
由对称性和能量目标可知,下侧间隔约束取等号,即 \(\boldsymbol h(T)=\boldsymbol y\)。因此解析目标值为
该参考解独立于配点结果计算,同时也用于构造尺度合适的初始猜测。
建模选择¶
新增的标量 \(h_i\) 提供了分离 XOR 所需的额外维度,原始输入坐标则保持不变,以便清楚展示提升过程。实际只训练三个共享输出权重;tanh 特征位置、特征斜率、泄漏系数、四个输入点和最终符号读出均为固定量。
脚本采用 \(32\times4\) Lobatto 网格表示平滑权重历程。优化后,在 4,001 个深度位置重构所有状态与控制,并用高精度 ODE 求解器独立积分学到的向量场。
独立验证¶
密集重构会检查输入坐标漂移、四个静态终端 logit 与相位端点的连接、有符号间隔、logit 边界和权重边界。随后,独立的 DOP853 求解从零开始,使用优化得到的共享权重传播四个 logit,并把该前向轨迹与配点状态比较。
第二项独立参考是在同样的 4,001 个深度位置计算上文闭式权重和 logit,并将两条解析轨迹以及解析目标值分别与数值最优解比较。
验证结果¶
| 指标 | 验证值 |
|---|---|
| 数值训练目标 | \(4.8117130115\) |
| 解析目标 | \(4.8117131077\) |
| 四个 XOR 训练点上的准确率 | \(100\%\) |
| 最小有符号终端间隔 | \(0.9999999900\) |
| 最大权重绝对值 | \(1.5356236514\) |
| 最大独立前向积分误差 | \(5.471\times10^{-11}\) |
| 最大解析 logit 误差 | \(9.997\times10^{-9}\) |
数值目标与解析值仅相差约 \(9.62\times10^{-8}\),学到的权重也明显未触及边界。

适用边界¶
这是训练与离散验证基准,不是通用 Neural ODE 架构。固定特征已经显式编码这四个 XOR 点的对称性,训练的只有共享输出权重。本例没有留出数据、噪声、参数不确定性、鲁棒性测试或泛化结论。实际分类器需要学习更丰富的向量场,并在独立验证集和测试集上评估。
运行示例¶
无界面运行并保存图片:
system, phase = build_problem()
guess = initial_guess(phase)
solution = solve_problem(system, guess)
plot_solution(solution)
源代码¶
完整可运行示例见:
examples/neural_ode_xor.py。