1. 引言
1.1. DNN模型的来由
从数据中识别非线性动态学意味着什么?
假设我们有时间序列数据,这些数据来自一个(非线性)动态学系统。
- 识别一个系统意味着基于数据推断该系统的控制方程。换句话说,就是找到动态系统方程 x ˙ = f ( x ) \mathbf{\dot x} = f(\mathbf{x}) x˙=f(x)中的 f f f(其中 x \mathbf{x} x 可能是向量值)。
例如,对于Lorenz系统,我们希望从时间序列数据中学习到方程右边的部分。
1.2. 研究稀疏性的意义
为什么我们需要稀疏性?
在这里,稀疏性意味着控制方程中的项数很少。稀疏性是有益的,因为它更具:
- 可解释性。在需要理解变量及其相互作用的应用中至关重要,例如在需要安全关键保证的应用中。
- 泛化能力。如果正确,方程将准确描述训练数据所填充的状态空间区域之外的动态。
通常,人们可以将SINDy识别的模型视为与物理方程相对的模型,而不是大型、不透明的深度神经网络。
2. SINDy算法
SINDy试图找到适合数据 X ˙ = f ( X ) \mathrm{\dot X} = f(\mathrm{X}) X˙=f(X)的动态系统 f f f。这个函数逼近问题被表述为线性回归 X ˙ = Θ ( X ) Ξ \mathrm{\dot X} = \Theta(\mathrm{X}) \Xi X˙=Θ(X)Ξ,其中系数为 Ξ \Xi Ξ 和回归项库 Θ ( X ) \Theta(X) Θ(X)。算法分为三个步骤:
- 从动态系统生成数据 X X X 并计算导数 X ˙ \dot X X˙。
- 建立候选项库 Θ ( X ) \Theta(X) Θ(X) 作为 X X X上的函数。
- 稀疏回归系数 Ξ \Xi Ξ,以最好地描述数据。
- SINDy假设是测量了 n n n 维数据点的时间序列 x = ( x 1 , … x n ) \mathbf{x}=(x_1, \ldots x_n) x=(x1,…xn) 在 m m m 个时间步 t 1 , … , t m t_1, \ldots, t_m t1,…,tm,我们定义数据矩阵 X X X 和导数矩阵 X ˙ \dot X X˙ 为:
X = [ x 1 ( t 1 ) x 2 ( t 1 ) ⋯ x n ( t 1 ) x 1 ( t 2 ) x 2 ( t 2 ) ⋯ x n ( t 2 ) x 1 ( t 3 ) x 2 ( t 3 ) ⋯ x n ( t 3 ) ⋮ ⋮ ⋱ ⋮ x 1 ( t m ) x 2 ( t m ) ⋯ x n ( t m ) ] X=\begin{bmatrix} x_1(t_1)&x_2(t_1)&\cdots&x_n(t_1)\\ x_1(t_2)&x_2(t_2)&\cdots&x_n(t_2)\\ x_1(t_3)&x_2(t_3)&\cdots&x_n(t_3)\\ \vdots&\vdots&\ddots&\vdots\\ x_1(t_m)&x_2(t_m)&\cdots&x_n(t_m)\\ \end{bmatrix} X= x1(t1)x1(t2)x1(t3)⋮x1(tm)x2(t1)x2(t2)x2(t3)⋮x2(tm)⋯⋯⋯⋱⋯xn(t1)xn(t2)xn(t3)⋮xn(tm)
X ˙ = [ x ˙ 1 ( t 1 )