遗传编程(GP)是最近用于帮助识别复杂市场模式和行为的机器学习技术之一。在遗传编程中,重复生成许多程序,然后在大型数据集上进行评估,旨在确定性能最佳的程序。可以使用适应度评估函数为下一次迭代选择性能最佳的程序。由于需要评估这些程序的潜在复杂程序和大型数据集,适应性评估是遗传程序中计算成本最高的组成部分之一。

遗传编程是进化算法的一个分支,与使用一串数字作为解决方案的遗传算法相比,它创建计算机程序作为解决方案。GP是一种模仿自然选择过程的搜索方法。我们的方法采用代际遗传编程,其工作原理如下:
生成计算机程序(个体)的随机组合的初始群体(在我们的例子中,计算机程序将代表一个交易规则,该规则被构建为二元表达式树)。
根据解决问题的程度为总体中的每个个体分配一个适应度值,创建一个新的个体群体,通过突变一个选定程序的随机选择部分来创建新个体(突变),通过重新组合从两个选定程序中随机选择的部分(交叉)来创建新个体。出现在任何一代人中的最佳计算机程序,在所有世代的末尾,都被指定为遗传编程的结果。
GP 是一种机器学习技术,已成功用于检测复杂模式,但是,该技术不会导致低延迟解决方案。计算每个人的适应度值是GP应用的中心计算任务,通常消耗大部分整体计算时间(有时大于95%)。因此,加速此类应用的主要工作集中在适应性评估上。我们使用硬件加速技术,如FPGA技术,以显著减少适应度评估执行时间,并为遗传编程应用程序获得更好的整体执行时间。
Sidhu等人展示了一种在FPGA上实现整个GP的新方法,其中适应性评估针对一个特定问题:让树由某些树模板表示。因此,用户需要为不同的问题构建不同的树模板,而我们的设计用户可以自由地使用一系列给定的终端和运算符构建任何完整的二叉树。
尽管此实现仅限于 100 个人,但与我们支持多大 992 人的方法相比,该研究在执行算术密集型操作时比其 CPU 等效实现提高了 19 倍。
Yamaguchi等人提出了一种有趣的FPGA方法,实现了用于进化计算的协处理器,以解决迭代囚徒困境(IPD),并且报告了与其CPU等效实现相比的200倍加速。我们解决了这种方法的局限性:GP个体的数量有限,并降低了其规范的复杂性,因为我们的研究支持灵活的完整二叉树,而比较的结果使用位字符串。
Martin展示了一种使用并行适应度函数评估在 FPGA 上实现整个 GP 解决方案的不同方法。这种设计仅支持极少数个体,例如 8 或 16 个个体,每个单独的树的最大深度为 2,而我们的方法最多支持 992 个个体,最大深度为 4。
Kok等人提出了一种新的解决方案,该解决方案对用于无人驾驶高架车辆调整的设备执行开发计算。虽然该研究被证明在达到典型自动驾驶系统的10 Hz更新频率时非常有效,但一次评估的人数仅限于32人。
我们将 GP 表达式构造为完整的二叉树,其内部节点必须是二叉运算符。因此,我们获得了静态拓扑,可以在FPGA上高效实现。
我们将内部算术节点集(称为 GP 函数集)限制为以下运算:+、、-、/、最小、最大,根节点必须是布尔运算符,因为计算的输出必须始终为 true 或 false。支持的运算符是≤和≥。
终端节点可以是常量(与表达式一起从 CPU 流式传输)或市场变量。市场变量的值在每个时间步长中都可能发生变化,并且它们的数量是任意的,但由于市场数据在每个时钟周期都从板载存储器中读取,因此限制它们的数量可能是有用的,常量和市场值都是 DRAM 输入上的单精度浮点数。
在这项工作中,我们分析了单精度浮点和定点实现。因此,我们将计算流程分为全精度浮点部分和定点部分。我们将市场数据存储在DRAM中,以单精度,并将其转换为片上定点格式,作为流水线的一部分。这些定点数形成定点 APE 的输入,提供布尔输出以在买入或卖出选项之间进行选择。
由于浮点运算比DSP单元需要更多的LUT,因此以固定精度实现APE对于设计可扩展性非常重要。我们提供 APE 的单精度实现进行比较。市场输入属于区间 (1,2),只有 4 位有效数字。对于除法操作,动态范围限制为 10−4,...,104,因此被 32 位定点表示所覆盖。
未来的工作机会包括扩展GP字母表,增加表达式树的最大支持深度,以及允许评估支持完整和不完整二叉树的任意拓扑。这些改进可能会带来更有利可图的交易策略,我们还计划将我们的框架应用于针对表达树的遗传编程和评估的其他应用程序,并确定其性能。