动力学建模平台

动力学建模平台介绍

  • 定位与背景
    • 定位
    • 背景
    • 方法论
    • 基于动力学+概率统计学的认知框架
    • 项目进展
    • 总结

定位与背景

定位

由于世界上几乎所有问题都可以理解成动力学问题,本项目为研究动力学问题的通用平台。 提供动力学问题建模分析方案,及相应通用基础组件, 让我们在面对一个动力学问题时有一定的指导方向及参考方案

背景

基于本人自2013年至今所从事过的人工智能各应用领域的研究实践经验,阐述该项目的意义与由来。下文主要举推荐系统和量化交易两个具体的应用场景为例,虽然机器视觉,自然语言处理, 以及一些军事问题我也有所涉及,因为研究的时间不多,所以不做过多阐述,但是下文所诉的的观点是从这些所有领域总结出来的,具有一般性。(注意,本项目关注的问题是:当我们面对一个完全陌生的真实世界的动力学系统系统,且没有太多成熟方案可以参考时,如:量化交易, 我们如何更加高效地一步步去认知,分析,建模系统,并产生把控该系统的一整套方案。所以这是一个立足于方法论层面而诞生的项目,而不是要将各领域最先进的成熟算法方案组织起来的项目。):

  1. 推荐系统领域:

    1、 虽然学术界已出现一些使用深度学习对动态推荐问题建模的论文,但在本人所接触企业工作环境中,目前大部分推荐系统模型仍为静态模型(其中的原因,也许在看完下文后你能有所感受),它们不能刻画系统内部的动态变化过程。
    2、目前我们所使用的最高效的实时算法主要是基于人为理解的动态规则或者将这些规则嵌入到模型中,举几个我工作中涉及实时推荐算法为例,(如实时兴趣,即基于规则用户点了A,应该要推与A相似的item; 如带有实时机制的深度学习召回算法, 即基于规则: 用户当前行为的item所表达的兴趣应该赋予特殊的权重,并与长期行为所表达的兴趣线性融合,由数据来学习线性融合的权重参数), 但是我们需要挖掘系统内部更加深层的状态变化, 如每个用户的兴趣漂移能力,兴趣突变能力, 兴趣收敛能力,周期性等等,只有更好的建模系统内部的状态变化,才能更好地进行分析与预测;
    3、解决上述问题有这个截然不同的方向,(1)依赖人为的认知理解,巧妙地设计并堆积足够大量的规则条件公式来处理每一种动态现象,理论上可以处理任何人类能够认知理解到的系统内部的动态问题,但是数据难以指导这套规则的生成。(2)使用一系列建模动态问题的深度学习模型对数据进行拟合,理论上可以学到系统内部状态变化,但是模型的可解释较差,我们较难在模型内部找到对应可解释性的具有物理意义的状态变量,像上文所述的将人为理解的规则嵌入到模型中的实时深度学习召回,并不能总是能巧妙地找到完美的姿势做到,特别是当人所理解的动态问题足够复杂和隐蔽的时候。最后我们多数走向的道路就是借鉴各种先进的论文将模型结构搞得足够复杂,引入各种结构,这些结构看起来有些道理但又很难将结构中的变量与实际问题中人为理解到的隐变量明确对应起来。我们希望于通过大数据和算力,让结构中的某个变量可以学到我们理解的隐变量,但我们不知道它到底具体在模型的哪里,这导致我们无法基于这些具有物理意义的状态变量进行其他分析,同时我们甚至无法确定最后推荐效果的提升是因为我们学到了我们想要的系统内部具有物理意义的状态变量还是仅仅是因为模型的容量提升或者其它什么原因导致;

  2. 量化交易:
    量化交易是我接触时间最长的领域,我几乎尝试了所有常见和不常见的机器学习算法,但却收益甚微,其难度与我所接触过的所有领域都不是一个级别的。原因:1、量化交易是对社会群体联动现象的研究,不像机器视觉或者推荐系统是对个体视觉系统和个体行为喜好的研究, 对个体系统我们更加熟悉, 比如我们清楚我们的喜好大概是怎样的过程,我们知道我们的视觉观察过程大概是怎么样的,因为我们长期使用它。但对于群体联动的系统,我们很难全方位地感受它; 2、量化交易领域没人会告诉你怎么做,也没有什么主流方案。起初我也会指望利用最牛逼的深度学习模型,将数据导入从而模型能自动为我学到盈利方案,但我很快就发现,这样的想法简直是痴人说梦,我不是否定深度学习在量化交易中的作用,只是说这种由近年来深度学习给初学者带来的看似对所有问题都能一步到位的美好愿望是一个巨大的骗局,如果没有人类长年对机器视觉的一步步研究和认知,又怎会有CNN的结构,CNN最初是建立在人类对图像局部自相似性及层次性的认知的基础上设计出来的,而CNN之所以能迁移到其它个别领域,只是刚好这些领域与视觉系统的内在本质存在一定的共通之处。所以一步步去研究和认知未知问题的过程才是关键,深度学习只是对各种形式数据的更加灵活、友好的处理工具,而要设计网络的输入输出、设计独特的网络结构来解决眼下的问题,关键还是对问题的内在本质的认知,而这是深度学习无法给你的,相反,是你要告诉深度学习的。 那么当你初次接触量化交易时,看到的只有陌生的胡乱跳动的多维数据,在这种两眼一抹黑的情况下,我们要根据什么去一步步观察,认知,假设,验证,建模,解决问题,并重复优化改进这个过程中的每个环节。这是本项目最为关心的问题。

  3. 总结
    因此,我会从方法论层面出发,观察总结人类面对未知问题时的研究方式,从而抽象出人类科学地研究事物的一般流程,并细化其中的每个环节;最后我们基于在方法论层面的思考,对每个环节设计相应的程序模块去辅助我们研究陌生问题,并构建各模块间的关系,即对应着人类研究问题流程中每个环节的关系。

方法论

  1. 认知世界的过程
    首先我们思考一个科学研究工作者认知世界的过程,我建它总结为以下流程图:

动力学建模平台_第1张图片
可以看出,在这个认知过程中,形成一个抽象统一的认知框架至关重要。试想一下,一个刚刚诞生的人类,起初他的脑中没有任何对世界的认知,当面对一个陌生问题时,他能做的就是观察,猜想,验证,最后抽象出一个与具体问题无关的对现象和相应内在本质建模的一般表述。这样的表述就成为了抽象认知框架中的一部分认知,当他遇到新的问题时,会优先从已有的认知框架里寻找是否有可以适应于运用新问题的(即“知识迁移”),若没有,则会重复之前的过程,得到一个新的抽象认知从而加入到认知框架下。抽象统一的认知框架与问题间的关系如下图:
动力学建模平台_第2张图片
而一个人对世界的认知效率,取决于这个抽象的认知框架是什么样的,最简单的认知框架可以是填鸭式地将各种认知堆砌在一起,但这样简单的架构的认知框架效率并不高,所以会有一些人看过很多书,学习了很多技能,也有一定的思考,并形成抽象的认知,但这一大堆来自不同领域的认知却只能局限在它所诞生的领域或一些的周边领域进行迁移,当遇到一些陌生问题且没有可学习的现有理论的情况下,他们往往束手无策。原因就在于他们没有专注于去打造一个好的认知框架。
一个好的认知框架会告诉你,来着不同领域的认识如何组织在一起,如何抽象,要抽象成什么样才允许进入到认知框架中,如何高效地迁移已有的认知,如何挖掘新的认知。

  1. 基于动力学系统的认知框架

    这里需要说明的是,每个都可以有自己的认知框架,而我选择立足于动力学理论建立认知框架,原因有以下几点:(1)世界上绝大部分问题的本质都可以归结为动力学系统(除了量子力学领域),静态问题只是动力学系统的一种特殊情况 (2)动力学系统理论的研究历史悠久,理论框架成熟,有很多研究成果可以使用 (3)可以很好地与概率统计学相结合,很适合表达世界的确定性与不确定性。
    基于动力学系统的认知框架需要做以下几件事:(1)使用动力学系统理论的语言来描述刻画认知,并组织它们之间的关系;(2)从动力学和概率统计学的角度出发,提供挖掘具体问题的内在动力学规律的一般方法。

基于动力学+概率统计学的认知框架

针对(1)使用动力学系统理论的语言来描述刻画认知,并组织它们之间的关系, 这是根植在我们脑中并反映在整个实践研究过程中,但需要使用者学习了解一定的动力学系统理论。
针对(2)从动力学和概率统计学的角度出发,提供挖掘具体问题的内在动力学规律的一般方法。我们可以建立组织一个项目平台,用于辅助人类挖掘内在动力学规律,称为动力学建模平台,平台所涵盖的内容大致如下(注意,理解这几个模块间的关系是重点):

动力学建模平台_第3张图片
动力学建模平台大概包含上图内容,主要包含5个部分:

1、 统计量设计模块:
在观察并猜想到某种动态规律时,我们最常做的第一件事就是设计统计量去大致表达我们所想表达的隐变量。然后统计挖掘这些表达隐变量的统计量与关心的目标之间的关系。这是我们初步验证猜想是否存在的方式。这种反向设计统计量的方式,注定统计量的函数形式不能太复杂,且是一种对我们所猜想的动力学生成机制的一种简化后的反向设计。举个抛硬币的例子,每次抛硬币都按照某个概率,我们要挖掘背后的这个概率,一般会用(正面的次数/总次数)这个统计量来表示,这是一个被证明过的无偏统计量。如果这个概率受到另一个周期性变化的隐变量控制且不知道周期是多少时,我们要设计统计量来表达着两个隐变量就变得复杂许多,如果我们进一步在生成机制上增加假设,那么要设计统计量来完全表达整个生成机制中的隐变量会变得越来越难。所以统计量是一种对我们所猜想的动力学生成机制的一种简化后的反向设计。
另一个问题是当我们设计统计量时,很多情况下会遇到一种情况“我能感受到某种现象,甚至能用自然语言大致描述出来,但是我却无法用数学形式表达,导致计算机难以处理”。导致这种现象的原因是我们没有一种指导动力学特征生成的方案。因此在统计量设计模块中我们重点设计三个部分来作为动力学特征生成方案:(1)常见通用统计量库:这部分只是堆积一些常见统计量,能用就用;(2)计算动词特征库:这部分是对自然语言中的动词进行动力学建模的动词库,因为人类自然语言是一个可以表达几乎人类所有认知的语言,当你表述 “当A正在加速,B正在趋近于A,则C会快速远离B” 这样一系列由动词表达的语言,我们可以使用计算动词库直接建这些语言表述的认知数量化建模。当然这只是计算动词理论冰山一角的应用(计算动词理论详细内容请参考前厦门大学杨涛教授的《计算动词理论与应用》及相关研究论文);(3)动力学特征库:这里是指长期以来人类研究动力学系统的一些特征量,比如李雅普诺夫指数等
2、 相关性分析工具+经典判别模型库:
在设计出能够表达隐变量的统计量后,我们可以使用各种统计分析工具和一些经典判别模型去分析挖掘这些统计量和目标之间的关系。
3、 动力学机制生成模型库:
如前所述,基于统计量设计的模型,其一般是对猜想的动力学生成机制简化。随着研究的深入,我们势必会基于随机过程和动力学方程,去直接设计所假设的动力学生成机制的概率模型,通过数据的导入来确定模型内部的待定参数,如最常见的隐马尔可夫模型。因为这些一个正向设计的过程,只要你对随机过程和动力学方程有一定的理解,设计所猜想的动力学机制对应的数据生成模型会比反向设计统计量容易且直观一些。这里有三个部分:(1)针对不同动力学问题的生成模型 ; (2)生成模型的概率推理通用组件,当我们需要设计针对新的动力学问题的生成模型时,如果在概率推理过程中有一些通用组件,将会加快模型的开发; (3)模型内部变量的可视化,因为在生成模型中,每个变量都具有明确的物理意义,因此可视化分析十分重要。
4、 动力学机制深度学习库:
在动力学机制生成模型库里,我们已经猜想了动力学系统内部的数据生成机制,并对这种机制建模。相当于动力学生成机制内部的变量关系是人为指定的,数据只是确定这些关系中的参数。但如果我们对其生成机制无法感知或者我们希望找到我们未能发现的动力学机制的一些细节。这时我们希望将动力学生成机制的确定过程逐步由人脑驱动转向数据驱动,这时深度学习是一个好的选择,但注意这是应该一个“逐步”的过程,而不要指望一口气搭建一个足够复杂足够深的网络能解决问题,应该是逐步将人为理解的机制交于神经网络,比如我们相信股票运行过程中包含波动率这个隐变量,并且这个隐变量影响行情走势,那我们应该想办法在神经网络里设置相应的结构去表达波动率,以及波动率和走势的关系,而神经网络在波动率表达的过程中提过了更加广阔的函数搜索空间,通过数据去学到最佳的函数形式,因为在动力学生成模型里,波动率的函数形式是人为指定的。所以这是一个逐步过渡的过程。
5、偏微分方程库:
人脑的计算机制,或者说大自然的计算机制,毫无疑问都是偏微分方程,人工智能最终的方向一定是用偏微分方程建模,只是如今受限于算力和理论发展,时代还未到来,这里只是先占个坑。

项目进展

1、统计量设计模块: (1)通用实时特征计算平台(QLab)初步开发完成,用于通过配置化开发复杂逻辑特征计算流程,并管理各种特征库。(2)计算动词库:开发中 (3)通用特征库:累计丰富中,目前组要涵盖量化交易中一些常见特征

其它三部分为模型相关部分:整理好后再补充

针对应用场景外挂的平台:
量化交易:Vnpy量化交易引擎,github上的开源项目
推荐系统: 实时推荐框架

总结

这是一个辅助认知科学探索的项目,当然它需要有应用场景来支持他存在的意义。我们的项目核心观念是“构建人类认知流程,探索各种人类认知模式,其中涉及的模型算法只是作为这套认识体系对外的一种表述”

你可能感兴趣的:(动力学建模平台)