【论文泛读|附源码】如何进行动力学重构? 神经网络自动编码器结合SINDy发现数据背后蕴含的方程

news2024/11/29 0:46:48

这一篇文章叫做 数据驱动坐标发现与方程发现算法
想回答的问题很简单,“如何根据数据写方程”。

想想牛顿的处境,如何根据各种不同物体下落的数据,写出万有引力的数学公式的。这篇文章就是来做这件事的。当然,这篇论文并没有从牛顿视角,完全去思考牛顿所想。而是利用现有的深度学习技术动力学重构的方法 。提出了一种框架,基于现有的计算机技术,去发现物质运动背后的物理规律。

这里直接给出这篇方法的核心思路图,我们后面会逐个讲解。

在这里插入图片描述

正文

Data-driven discovery of coordinates and governing equations
作者包括华盛顿大学的 Kathleen Champion 和 Steven L. Brunton。Brunton的SINDy方法,我们在 基于RNN进行动力学重构 的文章中也提到过。

这篇文章的主要创新点在于

  1. 在数据降维这块,提出可以用神经网络的算法来进行数据编码,从而来实现降维。
    这在文中被称为自编码器,学习一个用于表示数据的坐标系,希望经过坐标系的变换,能够提取出更加明显和有效的动力学特征。
  2. 结合了非线性动力学识别(SINDy)的方法,来进行参数的拟合。这在下文中也会介绍。

核心方法

首先,我们考虑一个 n n n 维状态的动力学系统如公式(1)所示,其中 x ( t ) ∈ R n \mathbf{x}(t) \in \mathbb{R}^n x(t)Rn

d d t x ( t ) = f ( x ( t ) ) (1) \frac{d}{d t} \mathbf{x}(t)=\mathbf{f}(\mathbf{x}(t)) \tag{1} dtdx(t)=f(x(t))(1)

我们的目标是

  1. 寻求一组具有相关动态模型的约化坐标。即 z ( t ) = φ ( x ( t ) ) ∈ R d ( d ≪ n ) \mathbf{z}(t)=\varphi(\mathbf{x}(t)) \in \mathbb{R}^d(d \ll n) z(t)=φ(x(t))Rd(dn),这个新坐标下的一个动力学维数远远小于原始系统。
  2. 能够给出在这个简约坐标下对应的动力学方程
    d d t z ( t ) = g ( z ( t ) ) (2) \frac{d}{d t} \mathbf{z}(t)=\mathbf{g}(\mathbf{z}(t)) \tag{2} dtdz(t)=g(z(t))(2)
  3. 这个方法同时还提出对应的编码函数 z = φ ( x ) \mathbf{z}=\varphi(\mathbf{x}) z=φ(x) 和 解码函数 x ≈ ψ ( z ) \mathbf{x} \approx \psi(\mathbf{z}) xψ(z)。实现在简化坐标和还原原始坐标之间的转化。

我们希望在对原数据进行 z = φ ( x ) \mathbf{z}=\varphi(\mathbf{x}) z=φ(x) 的编码之后,能更方便我们使用公式(3)的形式来进行描述。其中,
基函数库 Θ ( z ) = [ θ 1 ( z ) , θ 2 ( z ) , … , θ p ( z ) ] \Theta(\mathbf{z})=\left[\boldsymbol{\theta}_1(\mathbf{z}), \boldsymbol{\theta}_2(\mathbf{z}), \ldots, \boldsymbol{\theta}_p(\mathbf{z})\right] Θ(z)=[θ1(z),θ2(z),,θp(z)] 是由多项式或初等函数所组成。
稀疏系数向量 Ξ = [ ξ 1 , … , ξ d ] \boldsymbol{\Xi}=\left[\boldsymbol{\xi}_1, \ldots, \boldsymbol{\xi}_d\right] Ξ=[ξ1,,ξd] 指的是其中的非零系数尽可能少,大部分 ξ i = 0 \boldsymbol{\xi}_i=0 ξi=0.

d d t z ( t ) = g ( z ( t ) ) = Θ ( z ( t ) ) Ξ (3) \frac{d}{d t} \mathbf{z}(t)=\mathbf{g}(\mathbf{z}(t))=\boldsymbol{\Theta}(\mathbf{z}(t)) \boldsymbol{\Xi} \tag{3} dtdz(t)=g(z(t))=Θ(z(t))Ξ(3)

(误差函数与编码器) 上式基函数库 Θ \Theta Θ 是在训练之前由人类专家指定好的,而稀疏系数向量是在训练的过程中随之确定的。由于我们要求公式(3)是尽量成立的,再令 z ˙ ( t ) = ∇ x φ ( x ( t ) ) x ˙ ( t ) \dot{\mathbf{z}}(t)=\nabla_{\mathbf{x}} \varphi(\mathbf{x}(t)) \dot{\mathbf{x}}(t) z˙(t)=xφ(x(t))x˙(t) ,可以得出我们误差函数 其实只是把公式(3)移项,让等式左右相减,尽量为0
L d z / d t = ∥ ∇ x φ ( x ) x ˙ − Θ ( φ ( x ) T ) Ξ ∥ 2 2 (4) \mathcal{L}_{d \mathbf{z} / d t}=\left\|\nabla_{\mathbf{x}} \varphi(\mathbf{x}) \dot{\mathbf{x}}-\boldsymbol{\Theta}\left(\varphi(\mathbf{x})^T\right) \boldsymbol{\Xi}\right\|_2^2 \tag{4} Ldz/dt= xφ(x)x˙Θ(φ(x)T)Ξ 22(4)

(误差函数与解码器) 但公式(4)只与编码器 φ \varphi φ 有关,我们还希望得到正确解码器 ψ \psi ψ,要求解码后能够还原 x ˙ \mathbf{\dot{x}} x˙ x \mathbf{x} x 的时间序列。于是可以写出下面两个误差函数
L d x / d t = ∥ x ˙ − ( ∇ z ψ ( φ ( x ) ) ) ( Θ ( φ ( x ) T ) Ξ ) ∥ 2 2 . L recon  = ∥ x − ψ ( φ ( x ) ) ∥ 2 2 , (5,6) \begin{aligned} \mathcal{L}_{d \mathbf{x} / d t}&=\left\|\dot{\mathbf{x}}-\left(\nabla_{\mathbf{z}} \psi(\varphi(\mathbf{x}))\right)\left(\boldsymbol{\Theta}\left(\varphi(\mathbf{x})^T\right) \boldsymbol{\Xi}\right)\right\|_2^2 . \\ \mathcal{L}_{\text {recon }}&=\|\mathbf{x}-\psi(\varphi(\mathbf{x}))\|_2^2, \end{aligned} \tag{5,6} Ldx/dtLrecon = x˙(zψ(φ(x)))(Θ(φ(x)T)Ξ) 22.=xψ(φ(x))22,(5,6)

(误差函数与稀疏系数) 此外,我们还希望用于描述编码后系统,所使用的函数越少越好。于是我们对使用L1范数来进行约束。即 L reg = ∣ ∣ Ξ ∣ ∣ 1 \mathcal{L}_{\text {reg}}= ||\boldsymbol{\Xi}||_1 Lreg=∣∣Ξ1

备注: ∥ x ∥ 0 \|x\|_0 x0 表示非零元素的个数,是NP难题,一般用L1范数代替。
L1范数, ∥ x ∥ 1 = ∑ i = 1 n ∣ x i ∣ \|x\|_1=\sum_{i=1}^n\left|x_i\right| x1=i=1nxi,一般用来进行稀疏优化。

在这里插入图片描述
(最终的误差函数) 现在,我们把上面误差函数汇总,得到了本文最终所使用的误差函数-公式(7),其中 λ 1 , λ 2 , λ 3 \lambda_1, \lambda_2, \lambda_3 λ1,λ2,λ3 是超参数。

L recon  + λ 1 L d x / d t + λ 2 L d z / d t + λ 3 L r e g (7) \mathcal{L}_{\text {recon }}+\lambda_1 \mathcal{L}_{d \mathbf{x} / d t}+\lambda_2 \mathcal{L}_{d \mathbf{z} / d t}+\lambda_3 \mathcal{L}_{\mathrm{reg}} \tag{7} Lrecon +λ1Ldx/dt+λ2Ldz/dt+λ3Lreg(7)

除了使用 L 1 L_1 L1 正则化之外,作者还提出可以使用SINDy的顺序阈值方法来纳入训练过程。就是在训练的期间,固定的时间间隔内,低于某个阈值的系数会被强行固定为0,然后使用模型中剩余的项继续训练。


结果 Result

以Lorenz系统为例,原始系统为
z ˙ 1 = σ ( z 2 − z 1 ) z ˙ 2 = z 1 ( ρ − z 3 ) − z 2 z ˙ 3 = z 1 z 2 − β z 3 \begin{aligned} & \dot{z}_1=\sigma\left(z_2-z_1\right) \\ & \dot{z}_2=z_1\left(\rho-z_3\right)-z_2 \\ & \dot{z}_3=z_1 z_2-\beta z_3 \end{aligned} z˙1=σ(z2z1)z˙2=z1(ρz3)z2z˙3=z1z2βz3

假设我们采集的数据是由这三个状态变量的非线性组合形成的时间序列数据
x ( t ) = u 1 z 1 ( t ) + u 2 z 2 ( t ) + u 3 z 3 ( t ) + u 4 z 1 ( t ) 3 + u 5 z 2 ( t ) 3 + u 6 z 3 ( t ) 3 . \mathbf{x}(t)=\mathbf{u}_1 z_1(t)+\mathbf{u}_2 z_2(t)+\mathbf{u}_3 z_3(t)+\mathbf{u}_4 z_1(t)^3+\mathbf{u}_5 z_2(t)^3+\mathbf{u}_6 z_3(t)^3 . x(t)=u1z1(t)+u2z2(t)+u3z3(t)+u4z1(t)3+u5z2(t)3+u6z3(t)3.

我们看着这个组合的数据,去重构动力学方程。得到结果如下
z ˙ 1 = − 10.0 z 1 + 10.0 z 2 z ˙ 2 = 27.7 z 1 − 0.9 z 2 − 5.5 z 1 z 3 z ˙ 3 = − 2.7 z 3 + 5.5 z 1 z 2 \begin{aligned} & \dot{z}_1=-10.0 z_1+10.0 z_2 \\ & \dot{z}_2=27.7 z_1-0.9 z_2-5.5 z_1 z_3 \\ & \dot{z}_3=-2.7 z_3+5.5 z_1 z_2 \end{aligned} z˙1=10.0z1+10.0z2z˙2=27.7z10.9z25.5z1z3z˙3=2.7z3+5.5z1z2
可以验证还原出的系统与真实系统是基本等价的。

在这里插入图片描述

总结

回顾这篇文章开头的流程图,是否有加深理解呢?

在这里插入图片描述

相关链接

  • SINDy源码
  • 本文的论文原文
  • Matlab - 非线性动力学/混沌系统/复杂性科学/系统科学常用工具
  • Matlab - RK4的Lorenz仿真
  • 论文泛读 - 基于RNN建模: Reconstructing computational system dynamics from neural data with recurrent neural

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1659045.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

远程连接阿里云ECS

说明:ECS(阿里云服务器)可选择的系统镜像如下: 本文介绍基于Windows系统,对CentOS、Ubuntu、Windows这三个操作系统的连接方式,以及连接工具Windterm的使用。 CentOS & Windterm CentOS是我使用时间最…

df 中的 NoneType、空和 None

哈喽,大家好,我是木头左! 目录 简介什么是 NoneType?什么是空(Empty)?什么是 None?Python 中如何判断 NoneType?Pandas DataFrame 中的 NoneType、空和 None实操&#x…

《红警OL》更换新东家,中国儒意收购有爱互娱全部股权

易采游戏网5月10日消息,近日港股上市公司中国儒意发布公告,宣布将以2.59亿人民币全资收购北京有爱互娱科技有限公司。此次收购的卖方为持股94.1047%的北京朝夕光年信息技术有限公司和持股5.8953%的北京游逸科技有限公司。这一消息在游戏行业引起了广泛关…

Github 2024-05-10 Java开源项目日报Top10

根据Github Trendings的统计,今日(2024-05-10统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Java项目10C++项目2JavaGuide - Java 程序员学习和面试指南 创建周期:2118 天开发语言:Java协议类型:Apache License 2.0Star数量:140773 个…

Vue自定义封装音频播放组件(带拖拽进度条)

Vue自定义封装音频播放组件(带拖拽进度条) 描述 该款自定义组件可作为音频、视频播放的进度条,用于控制音频、视频的播放进度、暂停开始、拖拽进度条拓展性极高。 实现效果 具体效果可以根据自定义内容进行位置调整 项目需求 有播放暂停…

element ui的确认提示框文字样式修改

修改确认提示框的默认按钮样式,使用message属性修改: 例: js代码: this.$msgbox({title: 确定要删除吗?,message: this.$createElement(p, null, [this.$createElement(span, { style: color: red }, 该素材一旦删除&#xff0…

Ubuntu20.04右键打不开终端

今天用virtualbox安装了ubuntu20.04 问题:右键打开终端,怎么也打开不了! 点了也没反应,或者鼠标转小圈圈,然后也没有反应… 解决方法: 1、Ctrl Alt F6 先切换到终端访问界面 mac电脑 Ctrl Alt F6 …

制鞋5G智能工厂数字孪生可视化平台,推进行业数字化转型

制鞋5G智能工厂数字孪生可视化平台,推进行业数字化转型。随着科技的飞速发展,5G技术与智能制造的结合正成为推动制鞋行业数字化转型的重要力量。制鞋5G智能工厂数字孪生可视化平台,不仅提高了生产效率,还优化了资源配置&#xff0…

大数据分析案例-基于随机森林算法构建银行贷款审批预测模型

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

123. SQL优化技巧汇总

文章目录 1 避免使用select *2 用union all代替union3 小表驱动大表4 批量操作5 多用limit6 in中值太多7 增量查询8 高效的分页9 用连接查询代替子查询10 join的表不宜过多11 join时要注意12 控制索引的数量13 选择合理的字段类型14 提升group by的效率15 索引优化 sql优化是一…

绝地求生:杜卡迪联动下架,兰博基尼联动预计在下半年上线!

杜卡迪联名活动即将在5月8日上午八点下架,届时商城内购买-升阶活动将不可用。 杜卡迪下架 本次杜卡迪联名是蓝洞首次以非通行证方式进行的载具联名活动,玩家认为有利有弊。 多数玩家表示非通行证-仅抽奖获取的方式成本太高,部分脸黑玩家本次…

科林算法_3 图

一、图论基础 多对多的关系 定义&#xff1a;G(V,E) Vertex顶点 Edge边 顶点的集合V{v1,v2} 边的结合E{(v1,v2)} 无向图(1,2) 有向图<1,2> 依附&#xff1a;边(v1,v2)依附于顶点v1,v2 路径&#xff1a;&#xff08;v1,v2)(v2,v3) 无权路径最短&#xff1a;边最少…

CMake创建跨平台OPenGL工程(学习笔记)

一、跨平台环境基本配置 1、环境搭建 1&#xff09;linux OpenGL环境搭建参考&#xff1a;ubuntu18.04 OpenGL开发&#xff08;显示YUV&#xff09;_ubuntu opengl-CSDN博客 https://blog.51cto.com/cerana/6433535 2&#xff09;windows下环境搭建 OpenGLVisual Studio20…

前端css中线性渐变(linear-gradient)的使用

前端css中线性渐变 一、前言二、关键词句三、主要内容说明&#xff08;一&#xff09;、线性渐变方向1.角度调整方向2.负值角度&#xff0c;源码13.源码1运行效果4.关键字调整方向5.to right向右线性渐变&#xff0c;源码26.源码2运行效果 &#xff08;二&#xff09;、线性渐变…

hyper-v启动centos7虚拟机不能联网

虚拟网卡要和之前虚拟机里面设置的GATEWAY一致。 安装CentOS遇到Error setting up base repository换url 或者换镜像包iso(这个有用&#xff09; 没掌握摸Yu的精髓 好累啊

Linux 中 POSIX 互斥信号量(互斥锁)的使用

目录 一、互斥锁的介绍二、使用方法三、测试代码 一、互斥锁的介绍 在Linux系统中&#xff0c;特别是在ARM架构的嵌入式系统中&#xff0c;互斥量&#xff08;Mutex&#xff09;用于保护共享资源不被多个线程或任务同时访问&#xff0c;从而防止数据竞争和不一致性。 POSIX 互斥…

Springboot集成Mybatispuls操作mysql数据库-04

MyBatis-Plus&#xff08;简称MP&#xff09;是一个MyBatis的增强工具&#xff0c;在MyBatis的基础上只做增强而不做改变。它支持所有MyBatis原生的特性&#xff0c;因此引入MyBatis-Plus不会对现有的MyBatis构架产生任何影响。MyBatis-Plus旨在简化开发、提高效率&#xff0c;…

JavaEE企业级开发中常用的Stream流

介绍 在Java编程中&#xff0c;Stream流是Java 8引入的一个重要概念&#xff0c;它提供了一种新的处理集合的方式&#xff0c;可以更加简洁、高效地进行数据操作。Stream流支持各种常见的操作&#xff0c;比如过滤、映射、排序、聚合等&#xff0c;同时也支持并行处理&#xf…

Go的安装与配置

安装 https://go.dev/dl/ 以Windows上安装为例&#xff1a; 下一步下一步&#xff0c;记住安装位置 安装完成后 win rcmd 键入go version检查是否安装成功 配置 Go 工作区 Go 在组织项目文件方面与其他编程语言不同。 Go 是在工作区的概念下工作的。但是从版本 1.11 开始&…

Dreamweaver 2021 for Mac 激活版:网页设计工具

在追求卓越的网页设计道路上&#xff0c;Dreamweaver 2021 for Mac无疑是您的梦幻之选。这款专为Mac用户打造的网页设计工具&#xff0c;集强大的功能与出色的用户体验于一身。 Dreamweaver 2021支持多种网页标准和技术&#xff0c;让您能够轻松创建符合现代网页设计的作品。其…