期货量化软件:赫兹量化中多层感知机与反向传播算法
第一个神经网络是由沃伦·麦卡洛赫(Warren McCulloch)和沃尔特·皮特(Walter Pitts)于1943年提出的。他们写了一篇关于神经元应该如何工作的文章,他们还根据自己的想法建立了一个模型:他们用电路创建了一个简单的神经网络。
人工智能研究进展迅速,1980年,福岛邦彦(Kunihiko Fukushima)开发了第一个真正的多层神经网络。
神经网络的最初目的是创造一个计算机系统,能够以类似人脑的方式解决问题。然而,随着时间的推移,研究人员改变了研究重点,开始使用神经网络来解决各种特定任务。现在,神经网络执行各种各样的任务,包括计算机视觉、语音识别、机器翻译、社交媒体过滤、棋盘游戏或视频游戏、医疗诊断、天气预报、时间序列预测、图像/文本/语音识别等。
应用神经元模型
现在,让我们进入实际应用。
本节分为两部分:
1. 做预测
2. 优化网络权重
这些步骤为感知器算法在其它分类问题中的实现和应用提供了基础。
我们需要定义集合X中的列数。为此,我们需要定义一个常量。
#define nINPUT 3
在MQL5中,多维数组可以是静态的,也可以仅适用于第一个维度的动态数组。因此,由于所有其他维度都是静态的,因此必须在数组声明期间指定大小。
1. 进行预测
第一步是开发一个可以进行预测的函数。
无论是在随机梯度下降过程中评估候选权重时,还是在模型完成后,这都是必要的。应根据试验数据和新数据进行预测。
下面是 predict 函数,它根据一组特定的权重来预测输出值。
第一个权重总是一个偏差,因为它是自主管理的,所以它不适用于特定的输入值。
// Make a prediction with weights template <typename Array> double predict(const Array &X[][nINPUT], const Array &weights[], const int row=0) { double z = weights[0]; for(int i=0; i<ArrayRange(X, 1)-1; i++) { z+=weights[i+1]*X[row][i]; } return activation(z); }
神经元传输:
一旦一个神经元被激活,我们就需要传输激活来查看神经元的实际输出。
//+------------------------------------------------------------------+ //| Transfer neuron activation | //+------------------------------------------------------------------+ double activation(const double activation) //# { return activation>=0.0?1.0:0.0; }
我们将输入集X、权重数组(W)和预测输入集X的行输入到预测函数中。
让我们用一个小数据集来检查预测函数。
我们也可以使用预先准备好的权重来预测这个数据集。
double weights[] = {-0.1, 0.20653640140000007, -0.23418117710000003};