文章 "神经网络变得简单(第 88 部分):时间序列密集编码器(TiDE)"

 

新文章 神经网络变得简单(第 88 部分):时间序列密集编码器(TiDE)已发布:

为尝试获得最准确的预测,研究人员经常把预测模型复杂化。而反过来又会导致模型训练和维护成本增加。这样的增长总是公正的吗?本文阐述了一种算法,即利用线性模型的简单性和速度,并演示其结果与拥有更复杂架构的最佳模型相当。

与之前的许多文章一样,环境状态编码器模型与账户状态和持仓无关。因此,我们甚至可以依据训练样本来训练模型,只需与环境进行一次交互,直到获得预测未来状态所需的准确性。自然而然,“所需的预测准确性”不能超过模型的能力。您不能从自己的头顶跳过。

预测环境状态的模型训练完毕之后,我们转到第二阶段 — 训练扮演者行为政策。在该步骤中,我们将迭代训练扮演者和评论者模型,并在特定时段更新经验回放缓冲区。

更新经验回放缓冲区是指环境交互经验的额外集合,同时考虑到扮演者的当前行为政策。因为我们研究的金融市场环境是相当多方面的。故此,我们无法在经验回放缓冲区中完整收集它的所有表现形式。我们只是捕获扮演者当前政策动作的一个小环境。通过分析这些数据,我们朝着优化扮演者的行为政策迈出了一小步。当接近此区段的边界时,我们需要通过将可见区域略微扩展到已更新扮演者政策之外来收集额外数据。

作为这些迭代的结果,我训练了一个能够在训练和测试数据集上均产生盈利的扮演者政策。

Model testing results Model testing results

在上面图表中,我们看到一开始是亏损交易,然后转变为明显的盈利趋势。盈利交易的份额低于 40%。每 2 笔盈利交易几乎有 1 笔亏损交易。然而,我们观察到无盈利交易明显小于有盈利交易。平均盈利交易几乎是平均亏损交易的 2 倍。所有这些都令模型能够在测试期间获利。根据测试结果,盈利因子为 1.23。

作者:Dmitriy Gizlyk

 

你好,德米特里、

使用 MLP 而不是其他更复杂的网络是非常有趣的,尤其是因为其结果更好。

不幸的是,我在测试这种算法时遇到了几个错误。以下是几行关键日志:

2024.11.15 00:15:51.269 Core 01 Iterations=100000

2024.11.15 00:15:51.269 核心 01 2024.01.01 00:00:00 TiDEEnc.nnw

2024.11.15 00:15:51.269 核心 01 2024.01.01 00:00:00 创建新模型

2024.11.15 00:15:51.269 核心 01 2024.01.01 00:00:00 OpenCL: 已选择 GPU 设备 'GeForce GTX 1060'.

2024.11.15 00:15:51.269 核心 01 2024.01.01 00:00:00 执行内核 bool CNeuronBaseOCL::SumAndNormilize(CBufferFloat*,CBufferFloat*,CBufferFloat*,int,bool,int,int,int,float) MatrixSum:未知 OpenCL 错误 65536

2024.11.15 00:15:51.269 Core 01 2024.01.01 00:00:00 Train -> 164

2024.11.15 00:15:51.269 核心 01 2024.01.01 00:00:00 火车 -> 179 -> 编码器 1543.0718994

2024.11.15 00:15:51.269 核心 01 2024.01.01 00:00:00 ExpertRemove() 函数被调用

你知道是什么原因吗?

之前 OpenCL 运行得很好。

克里斯

Dmitriy Gizlyk
Dmitriy Gizlyk
  • 2024.11.13
  • www.mql5.com
Trader's profile
 
Chris 内核 bool CNeuronBaseOCL::SumAndNormilize(CBufferFloat*,CBufferFloat*,CBufferFloat*,int,bool,int,int,int,float) MatrixSum:未知 OpenCL 错误 65536

2024.11.15 00:15:51.269 Core 01 2024.01.01 00:00:00 Train -> 164

2024.11.15 00:15:51.269 核心 01 2024.01.01 00:00:00 火车 -> 179 -> 编码器 1543.0718994

2024.11.15 00:15:51.269 核心 01 2024.01.01 00:00:00 ExpertRemove() 函数被调用

你知道原因是什么吗?

之前 OpenCL 运行得很好。

克里斯

你好,克里斯。

你是对模型架构做了一些改动,还是使用了文章中的默认模型?

 
Dmitriy Gizlyk #:

Hy, Chris.

你是对模型结构做了一些改动,还是使用了文章中的默认模型?

嗨,没有做任何改动。我只是完整复制了 "Experts "文件夹,然后按编译后的顺序运行脚本:"研究"、"研究编码器"、"研究 "和 "测试"。错误出现在 "测试 "阶段。唯一不同的是交易工具,即从 EURUSD 变为 EURJPY。

克里斯

 

德米特里,我有一个重要的解决方案。错误出现在启动 StudyEncoder 之后。下面是另一个示例:

2024.11.18 03:23:51.770 Core 01 Iterations=100000

2024.11.18 03:23:51.770 核心 01 2023.11.01 00:00:00 TiDEEnc.nnw

2024.11.18 03:23:51.770 核心 01 2023.11.01 00:00:00 创建新模型

2024.11.18 03:23:51.770 核心 01 opencl.dll 成功加载

2024.11.18 03:23:51.770 Core 01 device #0: GPU 'GeForce GTX 1060' with OpenCL 1.2 (10 units, 1771 MHz, 6144 Mb, version 457.20, rating 4444)

2024.11.18 03:23:51.770 核心 01 2023.11.01 00:00:00 OpenCL:已选择 GPU 设备 "GeForce GTX 1060

2024.11.18 03:23:51.770 核心 01 2023.11.01 00:00:00 执行内核 bool CNeuronBaseOCL::SumAndNormilize(CBufferFloat*,CBufferFloat*,CBufferFloat*,int,bool,int,int,int,float) MatrixSum:未知 OpenCL 错误 65536

2024.11.18 03:23:51.770 Core 01 2023.11.01 00:00:00 Train -> 164

2024.11.18 03:23:51.770 核心 01 2023.11.01 00:00:00 火车 -> 179 -> 编码器 1815.1101074

2024.11.18 03:23:51.770 核心 01 2023.11.01 00:00:00 ExpertRemove() 函数被调用


克里斯