股票量化软件:数据科学与机器学习6--梯度下降

文章介绍了成本函数在评估模型预测性能中的作用,特别是如何通过梯度下降法来最小化成本,寻找最佳模型。文中详细阐述了如何计算导数,确定学习曲率以调整迭代步长,并通过实例展示了迭代过程。此外,还提到梯度下降在构建回归模型和人工神经网络中的重要性,强调了自定义成本函数以优化模型参数的意义。
摘要由CSDN通过智能技术生成

成本函数

有些人称之为亏损函数,它衡量赫兹股票量化软件的模型预测 x 和 y 值之间关系的计算好坏与否。

有很多衡量标准可判定模型的预如何测,但与所有那些不同的是,成本函数查找整个数据集的平均亏损,成本函数越大,赫兹股票量化软件的模型在数据集中查找关系就越差。

梯度下降旨在令成本函数最小化,因为具有最低成本函数的模型才是最佳模型。 为了您能理解我刚刚解释的内容,赫兹股票量化软件看看下面的例子。赫兹股票量化软件

假设赫兹股票量化软件的成本函数是方程式

编辑

添加图片注释,不超过 140 字(可选)

如果赫兹股票量化软件用 python 绘制这个函数的图形,它将是这样的:

编辑

添加图片注释,不超过 140 字(可选)

赫兹股票量化软件需要针对成本函数执行的第一步是用链式法则来区分成本函数:

方程式 y= (x+5)^2 是一个复合函数(一个函数含于另一个函数内部)。 外部函数是 (x+5)^2 内部函数是 (x+5)。 为了区分这一点,赫兹股票量化软件应用链式法则,请参见下图:

编辑

添加图片注释,不超过 140 字(可选)

如果你觉得这很难理解,在文末有一个我手工进行数学演算的视频链接。 是的,现在赫兹股票量化软件刚刚得到的这个函数是梯度。 找到方程梯度的过程是最重要的一步,我希望我的数学老师某天告诉我,微分函数的目的是为了得到函数的梯度。

这是第一步也是最重要的一步,下面是第二步。

步骤 02:

赫兹股票量化软件朝着梯度的负方向移动,在此提出了一个问题,我们应该移动多少? 这就是学习曲率发挥作用的地方。

学习曲率

根据定义,这是向最小损失函数移动时,每次迭代的步长,以一个人下山坡为例,他们的步数是学习曲率,步数越小,到达山脚所需的时间就越长,反之亦然。

算法应将学习曲率保持在较小值,但也不要像 0.0001 那样太小了,这样做会增加程序执行时间,因为算法可能需要更长的时间才能达到最小值。 与其对比,取较大数字作为学习曲率将导致算法跳过最小值,最终也许会导致您错过最小值目标。

默认学习曲率为 0.01。

赫兹股票量化软件来执行迭代,以便查看算法的工作原理。

第一次迭代:赫兹股票量化软件选择任何随机点作为我们算法的起点,我现在选择 0 作为 x 的第一个值,这是更新 x 值的公式

编辑

添加图片注释,不超过 140 字(可选)

经历每次迭代,赫兹股票量化软件将朝下降低到函数的最小值,故此名曰梯度下降。 现在有意义吗?

编辑

添加图片注释,不超过 140 字(可选)

赫兹股票量化软件详细查看它是如何工作的。 6现在,我们在 2 次迭代中手动计算值,从而令您对正在发生的事情有一个坚实的理解:

第一次迭代: 公式: x1 = x0 - 学习曲率 * ( 2*(x+5) ) x1 = 0 - 0.01 * 0.01 * 2*(0+5) x1 = -0.01 * 10 x1 = -0.1 (最终)

现在,最终赫兹股票量化软件通过将新值赋予旧值来更新该数值,并重复该过程,执行尽可能多的迭代,直至函数的最小值:

x0 = x1 第二次迭代: x1 = -0.1 - 0.01 * 2*(-0.1+5) x1 = -0.198 然后: x0 = x1

如果赫兹股票量化软件重复若干次此过程,则做开始的 10 次迭代的输出将是:

 
 

RS 0 17:15:16.793 gradient-descent test (EURUSD,M1) Gradient Descent CostFunction CUSTOM QQ 0 17:15:16.793 gradient-descent test (EURUSD,M1) 1 x0 = 0.0000000000 x1 = -0.1000000000 CostFunction = 10.0000000000 ES 0 17:15:16.793 gradient-descent test (EURUSD,M1) 2 x0 = -0.1000000000 x1 = -0.1980000000 CostFunction = 9.8000000000 PR 0 17:15:16.793 gradient-descent test (EURUSD,M1) 3 x0 = -0.1980000000 x1 = -0.2940400000 CostFunction = 9.6040000000 LE 0 17:15:16.793 gradient-descent test (EURUSD,M1) 4 x0 = -0.2940400000 x1 = -0.3881592000 CostFunction = 9.4119200000 JD 0 17:15:16.793 gradient-descent test (EURUSD,M1) 5 x0 = -0.3881592000 x1 = -0.4803960160 CostFunction = 9.2236816000 IG 0 17:15:16.793 gradient-descent test (EURUSD,M1) 6 x0 = -0.4803960160 x1 = -0.5707880957 CostFunction = 9.0392079680 IG 0 17:15:16.793 gradient-descent test (EURUSD,M1) 7 x0 = -0.5707880957 x1 = -0.6593723338 CostFunction = 8.8584238086 JF 0 17:15:16.793 gradient-descent test (EURUSD,M1) 8 x0 = -0.6593723338 x1 = -0.7461848871 CostFunction = 8.6812553325 NI 0 17:15:16.793 gradient-descent test (EURUSD,M1) 9 x0 = -0.7461848871 x1 = -0.8312611893 CostFunction = 8.5076302258 CK 0 17:15:16.793 gradient-descent test (EURUSD,M1) 10 x0 = -0.8312611893 x1 = -0.9146359656 CostFunction = 8.3374776213

我们也看看算法非常接近函数最小值时的其它十个数值:

 
 

GK 0 17:15:16.800 gradient-descent test (EURUSD,M1) 1052 x0 = -4.9999999970 x1 = -4.9999999971 CostFunction = 0.0000000060 IH 0 17:15:16.800 gradient-descent test (EURUSD,M1) 1053 x0 = -4.9999999971 x1 = -4.9999999971 CostFunction = 0.0000000059 NH 0 17:15:16.800 gradient-descent test (EURUSD,M1) 1054 x0 = -4.9999999971 x1 = -4.9999999972 CostFunction = 0.0000000058 QI 0 17:15:16.800 gradient-descent test (EURUSD,M1) 1055 x0 = -4.9999999972 x1 = -4.9999999972 CostFunction = 0.0000000057 II 0 17:15:16.800 gradient-descent test (EURUSD,M1) 1056 x0 = -4.9999999972 x1 = -4.9999999973 CostFunction = 0.0000000055 RN 0 17:15:16.800 gradient-descent test (EURUSD,M1) 1057 x0 = -4.9999999973 x1 = -4.9999999973 CostFunction = 0.0000000054 KN 0 17:15:16.800 gradient-descent test (EURUSD,M1) 1058 x0 = -4.9999999973 x1 = -4.9999999974 CostFunction = 0.0000000053 JO 0 17:15:16.800 gradient-descent test (EURUSD,M1) 1059 x0 = -4.9999999974 x1 = -4.9999999974 CostFunction = 0.0000000052 JO 0 17:15:16.800 gradient-descent test (EURUSD,M1) 1060 x0 = -4.9999999974 x1 = -4.9999999975 CostFunction = 0.0000000051 QL 0 17:15:16.800 gradient-descent test (EURUSD,M1) 1061 x0 = -4.9999999975 x1 = -4.9999999975 CostFunction = 0.0000000050 QL 0 17:15:16.800 gradient-descent test (EURUSD,M1) 1062 x0 = -4.9999999975 x1 = -4.9999999976 CostFunction = 0.0000000049 HP 0 17:15:16.800 gradient-descent test (EURUSD,M1) Local miminum found =-4.999999997546217

经过 1062(一千零六十二)次迭代,算法就能够达到此函数的局部最小值。

针对该算法需要注意的事情

查看成本函数的数值,您会注意到开始时数值的巨大变化,但到了成本函数的最后一个数值则变化难以察觉。 当梯度下降远未接近函数的最小值时,它会取较大的步长,但是,当接近函数的最小值时,它会取婴幼儿般的步长;这与您接近山脚时采取的行动相仿,所以现在您知道梯度下降非常聪明!

结束时本地最小值是

 
 

HP 0 17:15:16.800 gradient-descent test (EURUSD,M1) Local miminum found =-4.999999997546217

这是准确的值,因为此函数的最小值为 -5.0!

真实的问题

梯度如何知道何时停止? 看看若赫兹股票量化软件让算法保持迭代,直到无穷大,或者至少是计算机计算能力的尽头。

当成本函数为零,此刻我们知道梯度下降已经完成了它的工作。

现在赫兹股票量化软件用 MQL5 编写整个操作代码:

 
 

while (true) { iterations++; x1 = x0 - m_learning_rate * CustomCostFunction(x0); printf("%d x0 = %.10f x1 = %.10f CostFunction = %.10f",iterations,x0,x1,CustomCostFunction(x0)); if (NormalizeDouble(CustomCostFunction(x0),8) == 0) { Print("Local minimum found =",x0); break; } x0 = x1; }

以上的代码模块能够为我们带来我们想要的结果,但它在 CGradientDescent 类中并不孤单。 函数 CustomCostFunction 是保持和计算我们的微分方程的地方,它是

 
 

double CGradientDescent::CustomCostFunction(double x) { return(2 * ( x + 5 )); }

目的是什么?

有人也许会自问,当您本可利用赫兹股票量化软件之前在本系列文章中讨论的以函数库,来创建默认线性模型时,所有这些计算的目的是什么。 采用默认值创建的模型不一定是最佳模型,因此您需要让计算机学习误差最少模型的最佳参数。

赫兹股票量化软件这数篇文章距离构建人工神经网络更近了,为了让每个人都能够理解神经网络如何在反向传播和其它技术过程中学习(自学形态),而梯度下降是最流行的算法,能让这一切成为可能。 如果对它没有坚实的理解,您可能永远无法理解这个过程,因为事情即将变得极其复杂。

回归模型的梯度下降

使用工资数据集,我们来构建利用梯度下降得到的最佳模型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值