文章 "神经网络变得轻松(第二十七部分):深度 Q-学习(DQN)"

 

新文章 神经网络变得轻松(第二十七部分):深度 Q-学习(DQN)已发布:

我们继续研究强化学习。 在本文中,我们将与深度 Q-学习方法打交道。 DeepMind 团队曾运用这种方法创建了一个模型,在玩 Atari 电脑游戏时其表现优于人类。 我认为评估该技术来解决交易问题的可能性将会很有益处。

您可能已经猜到了深度 Q-学习涉及运用神经网络来近似 Q 函数。 这种方式有什么优势? 请记住上一篇文章中交叉熵表格方法的实现。 我强调,表格方法的实现假定可能的状态和动作数量是有限的。 故此,我们通过初始数据聚类来限制可能的状态数量。 但它有那么好吗? 聚类总能产生更好的结果吗? 运用神经网络不会限制可能的状态数量。 我认为在解决交易相关问题时,这是一个极棒的优势。

最明显的第一个方法是用神经网络替换上一篇文章中的表格。 但是,不幸的是,这并不容易。 在实践中,这种方式并不像看起来那么美好。 为了实现该方法,我们需要添加一些启发式方法。

首先,我们来看看代理者训练目标。 一般来说,它的目标是总体奖励最大化。 请看下图。 代理者必须从 Start 单元格移动到 Finish 单元格。 代理者在到达 Finish 单元格时才会收到一次性奖励。 在所有其它状态,奖励均为零。

折扣因子

该示意图展示了两条路径。 对我们来说,很明显,橙色路径更短、更可取。 但就奖励最大化而言,它们是等价的。

作者:Dmitriy Gizlyk

 

Для тестирования была создана сверточная модель следующей архитектуры:

  1. 源数据层,240 个元素(20 个蜡烛,每个蜡烛描述 12 个神经元)。
  2. 聚合层,源数据窗口 24(2 根蜡烛),步骤 12(1 根蜡烛),输出 6 个滤波器。
  3. 收敛层,源数据窗口 2,步骤 1,2 个滤波器。
  4. 收敛层,源数据窗口 3,步骤 1,2 个滤波器。
  5. 收敛层,源数据窗口 3,步骤 1,2 个滤波器。
  6. 1000 个元素的全连接神经层。
  7. 1000 个元素的全连接神经层。
  8. 包含 3 个元素的全连接层(3 个动作的结果层)。



我有 Transfer Lerning,它可以工作,可以编译,但如何在上面创建这样一个模型?

我在尝试以前文章中的模型,但都不合适
 
Ivan Butko #:



我有 Transfer Lerning,它可以工作,可以编译,但如何在上面创建这样一个模型呢?

我试过以前文章中的模型,但都不合适

1.启动 TransferLearning。
2.不要打开任何模型。
3.只需放入一个新模型,比如添加新的神经层。
4.点击保存模型,并指定从程序中加载的文件名。

 
Dmitriy Gizlyk #:

1.启动 TransferLearning。
2.不要打开任何模型。
3.只需放入一个新模型,如添加新的神经层。
4.点击保存模型,并指定从程序中加载的文件名。

选择何种层?您有几种类型和几个参数




任选其一,保存在 "EURUSD_PERIOD_H1_Q-learning.nnw "下,运行 Q-learning.mq5,它会在日志中写入。


2022.10.14 15:09:51.743 专家 初始化 Q-learning (EURUSD,H1)失败,代码为 32767(参数不正确)

并在专家选项卡中:

2022.10.14 15:09:51.626 Q-learning (EURUSD,H1) OpenCL: GPU device 'NVIDIA GeForce RTX 3080' selected
2022.10.14 15:09:51.638 Q-learning (EURUSD,H1) EURUSD_PERIOD_H1_Q-learning.nnw

 

吉兹里克先生,您好!首先,我要感谢您有理有据的系列文章。不过,作为一个后来者,我在理解您目前这篇文章时遇到了一些问题。在我从您以前的文章中重建了 VAE.mqh 文件和 CBufferDouble 类之后,我可以编译您这篇文章中的示例应用程序了。为了测试,我尝试用您的程序 NetCreater 创建一个网络。尝试多次后,我放弃了。本文中的应用程序不接受保存的网络。您就不能提供您创建的网络供下载吗?再次感谢您的工作!

 
sfonti #:

吉兹里克先生,您好!首先,我要感谢您有理有据的系列文章。不过,作为一个后来者,我在理解您目前这篇文章时遇到了一些问题。在我从您以前的文章中重建了 VAE.mqh 文件和 CBufferDouble 类之后,我可以编译您这篇文章中的示例应用程序了。为了测试,我尝试用您的程序 NetCreater 创建一个网络。尝试多次后,我放弃了。本文中的应用程序不接受保存的网络。您就不能提供您创建的网络供下载吗?再次感谢您的工作!

加载的文件总是损坏,您找到解决办法了吗?
 
您好。能告诉我如何组织源数据层吗?它是由 240 个神经元组成的全连接层吗?
 
star-ik #:
您好。能告诉我如何组织源数据层吗?是由 240 个神经元组成的全连接层吗?

源数据层使用的是普通的全连接层。

 

下午好!

训练后未保存,训练的模型:、

2024.06.01 01:12:26.731 Q-learning (XAUUSD_t,H1) XAUUSD_t_PERIOD_H1_Q-learning.nnw

2024.06.01 01:12:26.833 Q-learning (XAUUSD_t,H1) 迭代 980 次,损失 0.75659

2024.06.01 01:12:26.833 Q-learning (XAUUSD_t,H1) 调用 ExpertRemove() 函数

尝试运行测试器时出错:

2024.06.01 01:16:31.860 Core 1 2024.01.01 00:00:00 XAUUSD_t_PERIOD_H1_Q-learning-test.nnw

2024.06.01.01 01:16:31.860 核心 1 测试仪停止,因为 OnInit 返回非零代码 1

2024.06.01.01 01:16:31.861 核心 1 断开连接

2024.06.01.01 01:16:31.861 核心 1 连接已关闭

请问谁遇到过这种情况,是如何解决的?