股票量化软件:赫兹量化神经网络学习率实验

本文探讨了在神经网络训练中选择合适学习率的重要性,指出过大或过小的学习率可能导致问题,如过度训练或训练效率低下。通过实验比较不同学习率下的误差表现,发现低学习率有助于减小误差。
摘要由CSDN通过智能技术生成

在早前的文章中,我们曾研究过操作原理,以及完全连接感知器、卷积和递归网络的方法实现。 我们利用梯度下降来训练所有网络。 根据这种方法,我们判断每个步骤的网络预测误差,并调整权重来减少误差。 然而,我们并没有完全消除每一步的误差,而只是调整权重来减少误差。 如此,我们正在尝试找到这样的权重,并沿其整体长度紧密地重复训练集。 学习率负责在每步中将误差最小化。

1. 问题

选择学习率有什么问题? 我们来概括与学习率选择有关的基本问题。

1. 为什么我们不能使用等于 “1”(或接近值)的比率来立即补偿误差? 在这种情况下,我们将针对最后一种情形对神经网络进行过度训练。 结果则为,忽略历史记录,仅基于最新数据做出进一步的决策。

2. 已知的较小速率允许对整个样本进行平均计算,这样会带来什么问题? 该方法的第一个问题是神经网络的训练周期。 如果步幅太小,则需要大量的步骤。 而这需要时间和资源。

该方法的第二个问题是,通往目标的道路并不总是一帆风顺的。 也许会有山谷和丘陵。 如果我们以太小的步幅移动,我们可能会被其中一个值卡住,从而错误地将其确定为全局最小值。 在这种情况下,我们将永远无法实现目标。 这可通过在权重更新公式中使用动量来部分解决此问题,但问题仍然存在。

出于便捷起见,我们将 CNeuronBaseOCL 类中的 eta 变量设为全局变量。

 
 

double eta=0.01; #include "NeuroNet.mqh"

 
 

class CNeuronBaseOCL : public CObject { protected: ........ ........ //--- //const double eta;

现在,以不同学习率参数(0,1; 0,01; 0,001)创建智能交易系统的三个副本。 另外,创建第四个 EA,将初始学习率设置为 0.01,并每经过 10 个周期将其降低 10 倍。 为此,将以下代码添加到 “Train” 函数的训练循环中。

 
 

if(discount>0) discount--; else { eta*=0.1; discount=10; }

所有四个 EA 在一个终端中同时启动。 在此实验中,我采用早前 EA 测试中的参数:品种 EURUSD,时间帧 H1,连续 20 根烛条的数据输入到网络中,并用最近两年的历史记录进行训练。 训练样本约为 1.24 万根柱线。

所有 EA 均以 -1 到 1 的随机权重进行初始化(不包括零值)。

不幸的是,学习率等于 0.1 的 EA 误差接近 1,因此未在图表中显示。 以下图表显示了其他 EA 的学习动态。

5 个迭代之后,所有 EA 的误差均达到 0.42 的水平,而在其余时间内,该误差会继续波动。 学习率等于 0.001 的 EA 误差略低。 差异出现在小数点后第三位(其他两个 EA 的 0.420 对比 0.422)。

实验 2

在第一个实验中,神经网络权重矩阵以随机方式初始化。 并因此,所有 EA 都有不同的初始状态。 为了消除随机性对实验结果的影响,采用之前实验中学习速率等于 0.01 的 EA 的权重矩阵,将其加载到所有三个 EA 中,并继续训练额外的 30 个迭代。

新的训练过程证实了早前获得的结果。 我们看到所有三个 EA 的平均误差约为 0.42。 最低学习率(0.001)的 EA 再次得到较小的误差(相同差值 0.0018)。 学习率逐渐降低的影响实践当中等于 0。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值