可微分编程技术在仿真中被广泛应用,并在过去几十年机器学习的快速发展中扮演了重要角色,这些方法虽然强大,但仍然存在局限性,首先讨论可微分编程技术怎样加速机器学习。

基于梯度的神经网络优化

众所周知,人工神经网络能够快速逼近拟合高维非线性函数,对ANN进行优化时需要借助Loss函数对参数的导数来进行基于梯度的优化。
由此诞生了许多可微的仿真环境,以及自动微分求导工具。

符号 $f$ $s$ $\theta$ $l$
神经网络训练 神经网络的某一层变换 神经网络某一层的输入 这一层的权重矩阵和偏差矩阵 交叉熵损失、L2正则化等等损失函数
强化学习 环境的step函数 状态s 策略网络的参数 环境的reward函数
深度学习的优化器(也许是这么翻译) 优化器的应用(也许是这么翻译) 待优化的神经网络参数 可调整的优化器参数,比如学习率 经过一定数量的优化步骤后,相应任务的神经网络表现评分

离散迭代动力学系统

考虑如下离散的动力学系统演化,$s$代表动力学系统的状态,$\theta$是我们的控制变量,$f$为状态转移函数。
$$
s_{t+1} = f(s_t,\theta)
$$

在这个动力学系统上进行算法设计时,在研究这个动力学系统时,通常需要关注一个与我们的控制变量、系统的状态变量有关的函数的演化(这个函数可以是我们的任务的目标函数$J$)

在这里我们统一将我们关注的函数定义为$l_t$,那么这个动力学系统演化了$N$步以后
$$
l(\theta)=\sum^N_{t=0}l_t(s_t,\theta)
$$
根据求导的链式法则,可以列出$l_t$的前几项

$$
\frac{dl_0}{d\theta}=\frac{\partial{l_0}}{\partial s_0}\frac{\partial s_0}{\partial \theta}+\frac{\partial{l_0}}{\partial \theta}
$$
$$
\frac{dl_1}{d\theta}=\frac{\partial{l_1}}{\partial s_1}\frac{\partial s_1}{\partial s_0}\frac{\partial s_0}{\partial \theta} +\frac{\partial{l_1}}{\partial s_1}\frac{\partial s_1}{\partial \theta}+\frac{\partial l_1}{\partial \theta}
$$

$$
\frac{dl_2}{d\theta}=\frac{\partial{l_2}}{\partial s_2}\frac{\partial s_2}{\partial s_1}\frac{\partial s_1}{\partial s_0}\frac{\partial s_0}{\partial \theta} +\frac{\partial{l_2}}{\partial s_2}\frac{\partial s_2}{\partial s_1}\frac{\partial s_1}{\partial \theta}+\frac{\partial{l_2}}{\partial s_2}\frac{\partial s_2}{\partial \theta}+\frac{\partial l_2}{\partial \theta}
$$
根据数学归纳法我们可以总结一下第$t$步的$l_t$

$$
\frac{dl_t}{d\theta}=\frac{\partial{l_t}}{\partial \theta} + \sum^t_{k=1}\frac{\partial{l_t}}{\partial s_t}(\prod^t_{i=k} \frac{\partial s_i}{\partial s_{i-1}})\frac{\partial s_t}{\partial \theta}
$$

N个时间步累加后的总$l$的微分的平均值
$$
\frac{dl}{d\theta}=\frac{1}{N}\sum^N_{t=0}[\frac{\partial{l_t}}{\partial \theta} + \sum^t_{k=1}\frac{\partial{l_t}}{\partial s_t}(\prod^t_{i=k} \frac{\partial s_i}{\partial s_{i-1}})\frac{\partial s_t}{\partial \theta}]
$$
这时我们等式的右边出现了一个连乘求导$\prod^t_{i=k} \frac{\partial s_i}{\partial s_{i-1}}$,这个求导代表着系统的动力学方程的雅各比

也就是说我们在进行基于梯度的优化时,损失函数L的梯度与动力学系统的雅各比矩阵的谱(矩阵的特征值的集合,这部分看不明白建议回看矩阵理论相关内容,谱半径之类的)密切相关

由此,也对我们的任务优化带来了隐患,梯度消失和梯度爆炸就隐藏在这个等式中。

那么我们应该怎么样应用可微分物理来训练神经网络呢

实际上利用可微分物理来训练神经网络,就是在利用可微分物理计算loss函数在神经网络的参数上的反向传播时的一阶导数(至少我是这么理解的)

参考文献:

  1. Gradients are not all you need:https://arxiv.org/abs/2111.05803
  2. NeuralSim: Augmenting Differentiable Simulators with Neural Networks https://ieeexplore.ieee.org/document/9560935
  3. Augmenting Differentiable Simulators with
    Neural Networks to Close the Sim2Real Gap https://arxiv.org/pdf/2007.06045
  4. github: https://github.com/erwincoumans/tiny-differentiable-simulator#