Renascence架构
Renascence架构是 A-GP-B 式的桥梁架构,它要求下层库不直接对外提供接口,而是往GP库注册函数,上层库用GP公式间接调用下层库的代码。
GP库位于应用与lib库之间,作为应用调用lib库的桥梁而存在,它本身不依赖任何基础库。
上层调用
通过引入训练这一过程,应用跨平台的问题有了最好的解决方案,即在安装过程中,应用提供一个模板供平台训练,得到适合的实际运行的程序,然后应用在运行时用该程序就可以。
应用本身无须考虑平台问题,在任一平台下功能自动兼容、性能自动达到最优,而这是HTML5技术所做不到的。
训练
在应用安装/升级时,执行这一步骤
使用
在应用运行时,执行这一步骤,生成的ADF需要通过GP去执行(后续可能做相应优化,将ADF变成代码,生成一个新库)
训练过程的作用
1、允许自动化参数调节
写程序,尤其是算法类程序时,调参数是不可避免的事情,比如梯度下降中的学习速率,遗传算法中的变异比率、交叉比率,图像模糊算法中模糊半径。做代码优化时也会配置不少参数,如多线程优化中开启的线程数,开启多线程优化的阈值,使用OpenCL时device端缓存的大小,一次运算的globalsize, localsize,等等。
Renascence可提供一个框架,以公式链接起来的所有函数参数,会通过一个通一的方案调优。既然要调优,自然,优化的目标是什么,需要应用指定的:对优化而言,是时间的快慢;对预测而言,是准确率;对图像去噪而言,是与原图的信噪比。但如果是对于图像美化这种主观因素比较强的情形,没有什么比较好的评价函数,这时Renascence可提供一个枚举的机制,得出一系列参数——结果表,由人眼再去鉴别。
2、允许部分程序逻辑根据实际应用场景动态生成与调节
(1)类型自动匹配
如机器学习库中,对一批数据做K-Means聚类,模型输入的是矩阵(MATRIX),但数据可能源于是数据库(DATABASE),也可能是csv文件(CS >)
输入如下公式:KMeans(ADF(x0)),并在运行时指定x0的类型是DATABASE/CSV,Renascence便会去找能把DATABASE/CSV转化为矩阵MATRIX的函数,然后再与 KMeans 这个函数接起来。
(2)算法遍历寻优
如数据预测回归有 CART、线性回归等方法。写如下公式,可完成建模与预测:
Predict(ADF(x0), x1)
x0 为训练集,x1为测试集,这个公式中 ADF(x0)会对应翻译为某一种回归方法,在 OptInfo 中加入评价函数后,会去训练一个最优算法。
下层适配
下层lib库需要按GP的标准提供库函数,并且提供相应的库描述文件。
代码结构
对外接口
include/user 目录下为上下层的接口。
上层调用使用 GPAPI 中提供的函数,另外,一般而言需要使用GP公式。
下层适配使用IFunctionTable、GPContents等数据结构。
仿编译器架构
前端
公式——GPFunctionTree
GP的前端比较特别,它不仅是语法解析,还包括了遗传规划算法的自动逻辑生成。
中端
主要作子树去重优化。
后端
GPFunctionTree——ADF
将 GPFunctionTree转化为 ADF,目前主要是树形(无优化)、图形(带优化)和流式(允许间断输入)。
寻优算法
optimizor 下为相对独立的参数寻优算法,目前主要包括优选法(黄金618法)、网格法、粒子群算法(PSO)。其中优选法最快,但效果一般,网格法可以保证无遗漏,但极慢,粒子群算法为启发式算法,结果有一定随机性。
evolution下为遗传规划算法,用于优化函数结构。