股票量化交易软件:神经网络变得轻松(第三十一部分)进化算法

赫兹量化软件继续研究优化模型的非梯度方法。 这些优化方法的主要优势是能够优化梯度方法无法应对的模型。 这些都是无法判定模型函数的导数,或其计算因某些因素而变得复杂的任务。 在上一篇文章中,我们领略了遗传优化算法。 这种算法的思路是从自然科学中借鉴来的。 每个模型权重由模型基因组中的一个单独基因表示。 优化过程评估随机初始化的特定模型种群。 种群的“寿命”是有限的。 在世代结束时,该算法选择种群的“最佳”代表,它将为下一个世代繁衍“后代”。 为每一个体随机选择一对“亲本”(新种群中的模型)。 “亲本的基因”也是随机遗传的。
1. 基本算法构造原理
如您所见,之前研究的遗传优化算法中存在很多随机性。 赫兹量化软件有目的地从每个种群里选出最佳的代表,而种群的大多数被淘汰。 故此,在每个世代对整个种群进行完全迭代的过程中,我们执行了许多“无用”的工作。 此外,模型群体从一个世代发展到另一个世代,其方向,我们需要在很大程度上取决于机会因素。 没有什么能保证朝着目标的方向前进。
如果我们回到梯度下降方法,那一次我们在每次迭代时都有目的地朝向抗梯度。 以这种方式,我们最大限度地减少了模型误差。 模型正朝着所需的方向发展。 当然,为了应用梯度下降法,我们需要分析判定函数在每次迭代时的导数。
如果我们没有这样的机会怎么办? 赫兹量化软件能否以某种方式将这两种方法结合起来?
我们首先回顾一下函数导数的几何含义。 函数的导数表征函数值在给定点的变化率。 它被定义为当参数的变化趋于 0 时,函数值变化与其参数变化之比的极限。 前提是存在这样的极限。
这意味着除了解析导数之外,赫兹量化软件还可以通过实验找到它的近似值。 为了通过实验判定函数相对于参数 x 的导数,我们需要在其它条件相等的情况下稍微改变 x 参数的值,并计算函数的值。 函数值的变化与参数的变化之比,将为我们提供导数的近似值。
由于我们的模型是非线性的,为了在实验上获得导数的更好定义,建议针对每个参数执行以下 2 个操作。 在第一种情况下,我们将添加一些值;在第二种情况下,我们将减去相同的值。 两个运算的平均值,相对于给定点的所分析参数,生成函数导数值的更准确的近似值。
这种方式常用于评估导数模型输出的正确性。 进化算法也正是利用了这一属性。 进化优化策略的主要思路就是利用实验获得的梯度来判定模型参数优化的方向。
但采用实验梯度的主要问题是需要执行大量操作。 例如,要判定一个参数对模型结果的影响,我们需要针对拥有相同源数据的模型进行 3 次前馈验算。 相应地,所有模型参数都伴随着迭代次数增加 3 倍。
这不太好,故我们需要做点什么。
例如,我们能变化的参数不只一个,而是两个。 但在这种情况下,如何判定它们中每一个的影响如何更改所选参数 — 同步与否? 如果所选参数对结果的影响不同,且应以不同的强度变化,该怎么办?
好吧,我们可以说模型内部发生的过程对我们来说并不重要。 我们需要一个满足我们要求的模型。 它也许不是最优的。 无论如何,最优化的概念是针对所提出的所有需求的最大可能满足。
在这种情况下,我们可将模型及其参数集视为一个整体。 我们可用一些算法,并一次性更改模型的所有参数。 更改参数的算法可以是任意的,例如随机分布。
我们将以唯一可用的方式评估变化的影响 — 通过在训练样本上测试模型。 如果新的参数集提升了之前的结果,那么我们接受它。 如果结果变得更糟,则拒绝它,并返回到前一组参数。 一次又一次地取新参数重复循环。
看起来不像遗传算法? 但上面提到的实验梯度的估算在哪里?
我们来更深入遗传算法。 赫兹量化软件将再次使用整个模型种群,并基于某个有限训练集上测试其有效性。 但在这种情况下,我们所用的参数值都较接近,与遗传算法相比较,其每个模型都是随机创建的一种个体。 实际上,我们将采用一个模型,并在其参数中添加一些随机噪音。 使用随机噪音将产生一个没有单一雷同模型的种群。 少量的噪音将令我们能够以很小的偏差获得同一子空间中所有模型的结果。 这意味着模型的结果将是可比较的。

其中 w' 是种群里的模型参数 w 是源模型参数 ɛ 是一个随机噪音。
为了估算来自种群中每个模型的效率,我们可用损失函数或奖励系统。 选择在很大程度上取决于您要解决的问题。 此外,我们还考虑到优化政策。 我们最小化损失函数,并最大化总奖励。 在本文的实施部分,我们将最大化总奖励,类似于我们在解决强化学习问题时实现的过程。
基于训练样本测试新种群的性能之后,我们需要判定如何优化原始模型的参数。 如果我们应用数学,我们可以尝试以某种方式判定每个参数对结果的影响。 在此,我们将采用一些假设。 但我们早些时候同意将模型视为一个整体来考虑。 这意味着在每个单独的种群模型中加进的整个噪因集,能够依据在训练集上测试模型有效性时获得的总奖励来估算。 因此,我们将在原始模型的参数中加入来自种群所有模型相应参数噪音的加权平均值。 噪音将按总奖励加权。 当然,得到的加权平均值将乘以模型的学习系数。 参数更新公式如下所示。 如您所见,此公式与使用梯度下降更新权重的公式非常相似。

这种进化优化算法是由 OpenAI 团队在 2017 年 3 月的文章“进化策略作为强化学习的可扩展替代方案"中提出的。 在文章中,所提出的算法被认为是先前研究的 Q-学习 和 策略梯度 方法的替代方案。 所提出的算法具有良好的可行性和生产力。 它还表现出对行动频率和延迟奖励的容忍度。 此外,作者提出的算法缩放方法,通过利用额外的计算资源,能够以几乎线性的依赖性提高问题解决速度。 例如,他们使用一千多台并行计算机,在短短 10 分钟内解决了三维人形行走问题。 但在我们的文章中我们不会研究缩放问题。
