跳转至

用增广 Neural ODE 训练 XOR 分类器

背景

XOR 数据集由正方形的四个顶点组成。坐标符号不同时属于 \(+1\) 类,符号相同时属于 \(-1\) 类。任何仿射分类器都无法让这四个点同时获得正分类间隔。增广 Neural ODE 可以把样本提升到额外的状态维度,再通过固定的符号读出完成分类。

本例把训练写成最优控制问题:连续深度权重是控制量,四个样本的 logit 是状态量,硬端点约束负责保证分类结果。网络结构经过有意限制,使最小能量解还可以独立解析推导。

数据与网络结构

四个固定训练样本及其标签为

\[ \begin{array}{c|c} (x_1,x_2)&y\\ \hline (-1,-1)&-1\\ (-1,+1)&+1\\ (+1,-1)&+1\\ (+1,+1)&-1 \end{array}. \]

对样本 \(i\),增广状态为 \((x_{1,i},x_{2,i},h_i)\)。输入坐标保持不变:

\[ \dot x_{1,i}=0, \qquad \dot x_{2,i}=0. \]

定义三个固定特征

\[ \boldsymbol\phi_i= \begin{bmatrix} 1\\ \tanh\!\left(k(x_{1,i}+x_{2,i}+1)\right)\\ \tanh\!\left(k(x_{1,i}+x_{2,i}-1)\right) \end{bmatrix}, \qquad k=2. \]

四个样本共享可训练的输出权重向量

\[ \boldsymbol c(t)=\begin{bmatrix}c_0(t)&c_L(t)&c_R(t)\end{bmatrix}^{\mathsf T}. \]

在连续深度 \(0\le t\le T=1\) 上,带泄漏项的 logit 动力学为

\[ \dot h_i=\boldsymbol\phi_i^{\mathsf T}\boldsymbol c(t)-\lambda h_i, \qquad h_i(0)=0, \qquad \lambda=0.4. \]

分类结果由固定读出 \(\operatorname{sign}(h_i(T))\) 给出。

最优控制问题

训练目标是最小化权重平方的深度积分:

\[ \min_{\boldsymbol c}\;J= \int_0^T\lVert\boldsymbol c(t)\rVert_2^2\,\mathrm dt. \]

终端有符号间隔约束和密集路径边界为

\[ 1\le y_i h_i(T)\le2, \qquad i=1,\ldots,4, \]
\[ -1.05\le x_{1,i}(t),x_{2,i}(t)\le1.05, \qquad |h_i(t)|\le2, \qquad |c_0(t)|,|c_L(t)|,|c_R(t)|\le3. \]

每个输入状态都从对应训练样本的坐标出发,零动力学使该坐标在整个网络深度内保持不变;\(\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)\),定义

\[ \boldsymbol a=F^+\boldsymbol h(T), \]

其中 \(F^+\) 是 Moore-Penrose 伪逆。终端泄漏核的平方范数为

\[ K_\lambda=\int_0^T e^{-2\lambda(T-t)}\,\mathrm dt =\frac{1-e^{-2\lambda T}}{2\lambda}. \]

实现这些终端 logit 的最小能量权重历程为

\[ \boldsymbol c^*(t)= \frac{\boldsymbol a}{K_\lambda}e^{-\lambda(T-t)}. \]

由对称性和能量目标可知,下侧间隔约束取等号,即 \(\boldsymbol h(T)=\boldsymbol y\)。因此解析目标值为

\[ J^*=\frac{\lVert F^+\boldsymbol y\rVert_2^2}{K_\lambda} =4.8117131077. \]

该参考解独立于配点结果计算,同时也用于构造尺度合适的初始猜测。

建模选择

新增的标量 \(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}\),学到的权重也明显未触及边界。

XOR 样本、连续深度 logit、共享权重与增广状态提升

适用边界

这是训练与离散验证基准,不是通用 Neural ODE 架构。固定特征已经显式编码这四个 XOR 点的对称性,训练的只有共享输出权重。本例没有留出数据、噪声、参数不确定性、鲁棒性测试或泛化结论。实际分类器需要学习更丰富的向量场,并在独立验证集和测试集上评估。

运行示例

python -m examples.neural_ode_xor

无界面运行并保存图片:

python -m examples.neural_ode_xor --save neural-ode-xor.png --no-show
system, phase = build_problem()
guess = initial_guess(phase)
solution = solve_problem(system, guess)
plot_solution(solution)

源代码

完整可运行示例见: examples/neural_ode_xor.py