小编:我们有一位用户一直喜欢使用机器学习来捣鼓策略,他关于几个模型的描述十分的形象,并使用 PonderLSTM 写了个 demo 策略,今天分享给大家~
ACT 模型通过在每时间步(时间序列节点)进行多次计算来模拟复杂问题的思考过程。这种算法尤其有价值在使用包含外存储器的 RNN 变种(如 DNC、NTM 等)计算架构处理长时间序列的时候。
下面简单形象的介绍一下本文模型(这不是很准确的描述,但是足够形象)。我们假设 VanillaRNN 模型为一个考生,在进行英语听力考试,这个考生被要求“干听”,也就是不能使用纸笔记录,并且所有的听力内容问题和答案全部都是以口头形式进行的。当然在排除天纵奇才的情况下,这个考生的答案是惨不忍睹的。 下面我们来看第二个名叫 LSTM 的考生,这个考生在进行听力考试的时候有一块磁铁画板,可以记录一定量的信息。但是这个考生在超过 30min 的听力考试中只能使用这个画板记录一点点信息,如果想要写入新的信息就必须要清除之前的信息。也就是这个叫做 LSTM 的考生可以记录有限的信息。当然对于长时间的听力考试这点笔记也是杯水车薪。 下面我们来看第三个叫做 DNC 的考生,这个考生使用一个更高级的画板(E 人 E 本),这个画板可以记录更多的信息,甚至可以记录所有的听力信息(当 DNC 的外存储器足够大的时候)。 以上的三个考生都是在加强自己的记忆能力,针对听力考试(长时间序列)进行信息处理。这三个考生都是按照听力播放顺序进行答题,虽然第三个考生(DNC)可以记录几乎所有的听力信息,但是它并没有额外的时间去翻阅所有记录下来的信息,只能够根据大脑(短期记忆)中的印象和自己写字顺序在非常短的时间内翻阅一下记录本。 下面介绍第四个考生,一个叫做 PonderDNC 的带着时间机器作弊器的考生。
PonderDNC 不但带着 E 人 E 本,而且还带着时间静止机器。这也就是说这名考生在进行听力考试的时候,可以在任何自己觉得可以的地方让时间静止,注意不能回溯,然后从容的翻阅自己在 E 人 E 本上面的记录进行答题。 毫无疑问 PonderDNC 是在理论上面最有可能在听力考试总获取高分的考生。
PonderDNC
通过将 DNC 计算单元进行嵌入 ACT 计算架构,PonderDNC 可以实现在每个时间步骤多次进行运算。这意味着在时间步 t,DNC 在获得时刻 t 的外部输入之后不用立刻输出信息,而是可以在时刻 t 反复进行思考计算之后再做出判定输出,然后再进入下一时刻 t+1。如下图 ACT (Adaptive Computation Time for Recurrent Neural Networks ) 计算架构在时间步 t,RNN 模型经过多次计算(思考)之后,形成多个输出 和隐藏状态,RNN 在时刻 t 的输出以及传递到下一时刻 t+1 的隐藏状态通过权重系数累加获得。 这种计算架构通过在时刻 t 进行多次运算取权重系数累加和的方式模拟思考过程。这对于使用 DNC 这种带有外存储器的计算单元来处理超长序列尤其有意义。这意味着对于一个具有超大外存储器记忆(如 1K 行记忆)的 DNC 而言,在时间步 t 计算单元 DNC 基于外部输入信息 Xt 可以多次反复的读取外记忆矩阵信息进行反复权衡思考之后再做出判定。
原始的 DNC 模型一般使用一个 500 行的外记忆矩阵,在每个时间步 t 通过 1~3 写头控制,2~6 读头控制与外记忆矩阵进行信息(记忆)交互。也就是 DNC 模型在时刻 t 一般只与不超过 10 个记忆位置有信息交互。这对于简单的问题,例如记忆复现具有较好的效果,但是对于那些与前面信息交互复杂而且时间跨度很长的判定问题则效果欠佳。通过将 DNC 计算单元嵌入 ACT 计算架构之后形成的 PonderDNC 计算单元,在每个时间步骤可以多次与外记忆矩阵进行信息交互。例如一个具有 2 写头控制,4 读头控制,具有 1000 行外存储记忆的 PonderDNC 在时刻 t 运算 50 次,最多可以与外记忆矩阵的 300 个位置进行交互,在时刻 t 最多可以基于 50 个短期记忆以及 200 个读头记忆做出推断输出。也就是在时刻 t 计算单元 PonderDNC 可以基于前面记忆总量的 20%进行推断判定。
通俗的讲,假设这几个模型被看做是不同操盘手的话,LSTM 操盘手就是基于过去两周的 K 线图对未来行情进行判断,而 PonderDNC 则是基于过去一季度的多种技术分析指标对未来进行判定。
这个 PonderDNC 模型适合处理长序列任务以及回溯复杂的任务,如处理期货的高频数据。模型需要比较大的可训练权重参数才更容易获得更好的效果。在使用的时候注意加大训练数据量以及尽量消除输入因素多重共线性。
注:PonderDNC 每个时间步 t 传递给下一个时间步 t+1 的信息为 累加的控制器状态、累加的读头读取记忆向量、以及在时刻 t 进行 N(t)次运算之后的外存储记忆矩阵(这个不是权重累加和而是最后一次运算之后的记忆矩阵直接传递下去)。
2017-08-18 更新期货日频回测
样本内回测
样本外回测 2017-01-01 ~ 2018-08-01,应该说泛化能力还不错