//+------------------------------------------------------------------+ //| Defines.mqh | //| Copyright 2021, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2021, MetaQuotes Ltd." #property link "https://www.mql5.com" //+------------------------------------------------------------------+ //| Ресурсы | //+------------------------------------------------------------------+ #resource "opencl_program.cl" as string cl_program //+------------------------------------------------------------------+ //| Константы | //+------------------------------------------------------------------+ #define defNeuronNet 0x8000 #define defArrayLayers 0x8001 #define defBufferDouble 0x8002 #define defActivation 0x8003 #define defNeuronBase 0x8010 #define defNeuronConv 0x8011 #define defNeuronProof 0x8012 #define defNeuronLSTM 0x8013 #define defNeuronAttention 0x8014 #define defNeuronMHAttention 0x8015 #define defNeuronGPT 0x8016 #define defNeuronDropout 0x8017 #define defNeuronBatchNorm 0x8018 //--- #define defFileName StringFormat("%s_%s_%s.nns",MQLInfoString(MQL_PROGRAM_NAME),_Symbol,StringSubstr(EnumToString(_Period),7)) //+------------------------------------------------------------------+ //| OpenCL кернелы | //+------------------------------------------------------------------+ #define def_k_PerceptronFeedForward 0 #define def_k_Normalize 1 #define def_k_CalcOutputGradient 2 #define def_k_DeActivateGradient 3 #define def_k_CalcHiddenGradient 4 #define def_k_CalcDeltaWeights 5 #define def_k_SGDUpdate 6 #define def_k_MomentumUpdate 7 #define def_k_AdaGradUpdate 8 #define def_k_RMSPropUpdate 9 #define def_k_AdaDeltaUpdate 10 #define def_k_AdamUpdate 11 #define def_k_ProofFeedForward 12 #define def_k_ProofHiddenGradients 13 #define def_k_ConvolutionFeedForward 14 #define def_k_ConvolutionHiddenGradients 15 #define def_k_ConvolutionDeltaWeights 16 #define def_k_LSTMFeedForward 17 #define def_k_LSTMHiddenGradients 18 #define def_k_AttentionFeedForward 19 #define def_k_AttentionScoreGradients 20 #define def_k_AttentionHiddenGradients 21 #define def_k_GPTFeedForward 22 #define def_k_GPTScoreGradients 23 #define def_k_GPTHiddenGradients 24 #define def_k_BatchNormFeedForward 25 #define def_k_BatchNormCalcHiddenGradient 26 #define def_k_BatchNormCalcDeltaWeights 27 #define def_k_MaskMult 28 //+------------------------------------------------------------------+ //| OpenCL параметры | //+------------------------------------------------------------------+ //--- Прямой проход перцептрона #define def_pff_inputs 0 #define def_pff_weights 1 #define def_pff_sums 2 #define def_pff_outputs 3 #define def_pff_inputs_total 4 #define def_pff_activation 5 #define def_pff_act_param_a 6 #define def_pff_act_param_b 7 //--- Нормализация #define def_norm_inputs 0 #define def_norm_outputs 1 #define def_norm_inputs_total 2 #define def_norm_const_value 3 //--- Определение градиента ошибки слоя результатов #define def_outgr_target 0 #define def_outgr_outputs 1 #define def_outgr_gradients 2 #define def_outgr_outputs_total 3 //--- Корректировка гралиента на производную функции активации #define def_deactgr_sums 0 #define def_deactgr_outputs 1 #define def_deactgr_gradients 2 #define def_deactgr_outputs_total 3 #define def_deactgr_activation 4 #define def_deactgr_act_param_a 5 #define def_deactgr_act_param_b 6 //--- Определение градиента ошибки скрытого слоя #define def_hidgr_gradient_inputs 0 #define def_hidgr_weights 1 #define def_hidgr_gradients 2 #define def_hidgr_outputs_total 3 //--- Определение градиента ошибки на уровне матрицы весов #define def_delt_inputs 0 #define def_delt_delta_weights 1 #define def_delt_gradients 2 #define def_delt_inputs_total 3 //--- Оптимизация параметров стохастическим гралиентным спуском #define def_sgd_delta_weights 0 #define def_sgd_weights 1 #define def_sgd_total 2 #define def_sgd_batch_size 3 #define def_sgd_learningRate 4 #define def_sgd_Lambda1 5 #define def_sgd_Lambda2 6 //--- Оптимизация параметров методом моментов #define def_moment_delta_weights 0 #define def_moment_weights 1 #define def_moment_momentum 2 #define def_moment_total 3 #define def_moment_batch_size 4 #define def_moment_learningRate 5 #define def_moment_beta 6 #define def_moment_Lambda1 7 #define def_moment_Lambda2 8 //--- Оптимизация параметров методом AdaGrad #define def_adagrad_delta_weights 0 #define def_adagrad_weights 1 #define def_adagrad_momentum 2 #define def_adagrad_total 3 #define def_adagrad_batch_size 4 #define def_adagrad_learningRate 5 #define def_adagrad_Lambda1 6 #define def_adagrad_Lambda2 7 //--- Оптимизация параметров методом RMSProp #define def_rms_delta_weights 0 #define def_rms_weights 1 #define def_rms_momentum 2 #define def_rms_total 3 #define def_rms_batch_size 4 #define def_rms_learningRate 5 #define def_rms_beta 6 #define def_rms_Lambda1 7 #define def_rms_Lambda2 8 //--- Оптимизация параметров методом AdaDelta #define def_adadelt_delta_weights 0 #define def_adadelt_weights 1 #define def_adadelt_momentumW 2 #define def_adadelt_momentumG 3 #define def_adadelt_total 4 #define def_adadelt_batch_size 5 #define def_adadelt_beta1 6 #define def_adadelt_beta2 7 #define def_adadelt_Lambda1 8 #define def_adadelt_Lambda2 9 //--- Оптимизация параметров методом Adam #define def_adam_delta_weights 0 #define def_adam_weights 1 #define def_adam_momentumM 2 #define def_adam_momentumV 3 #define def_adam_total 4 #define def_adam_batch_size 5 #define def_adam_learningRate 6 #define def_adam_beta1 7 #define def_adam_beta2 8 #define def_adam_Lambda1 9 #define def_adam_Lambda2 10 //--- Прямой проход подвыборочного слоя #define def_prff_inputs 0 #define def_prff_outputs 1 #define def_prff_inputs_total 2 #define def_prff_input_neurons 3 #define def_prff_window 4 #define def_prff_step 5 #define def_prff_window_out 6 #define def_prff_activation 7 //--- Распределение градиента через подвыборочный слой #define def_prhgr_inputs 0 #define def_prhgr_gradient_inputs 1 #define def_prhgr_outputs 2 #define def_prhgr_gradients 3 #define def_prhgr_inputs_total 4 #define def_prhgr_outputs_total 5 #define def_prhgr_window 6 #define def_prhgr_step 7 #define def_prhgr_window_out 8 #define def_prhgr_neurons 9 #define def_prhgr_activation 10 //--- Прямой проход свёрточного слоя #define def_cff_inputs 0 #define def_cff_weights 1 #define def_cff_sums 2 #define def_cff_outputs 3 #define def_cff_inputs_total 4 #define def_cff_window 5 #define def_cff_step 6 #define def_cff_window_out 7 #define def_cff_activation 8 #define def_cff_act_param_a 9 #define def_cff_act_param_b 10 #define def_cff_transposed_out 11 //--- Распределение градиента через свёрточный слой #define def_convhgr_gradient_inputs 0 #define def_convhgr_weights 1 #define def_convhgr_gradients 2 #define def_convhgr_outputs_total 3 #define def_convhgr_window 4 #define def_convhgr_step 5 #define def_convhgr_window_out 6 #define def_convhgr_neurons 7 #define def_convhgr_transposed_out 8 //--- Распределение градиента на матрицу весов свёрточного слоя #define def_convdelt_inputs 0 #define def_convdelt_delta_weights 1 #define def_convdelt_gradients 2 #define def_convdelt_inputs_total 3 #define def_convdelt_step 4 #define def_convdelt_neurons 5 #define def_convdelt_transposed_out 6 //--- Прямой проход LSTM блока #define def_lstmff_forgetgate 0 #define def_lstmff_inputgate 1 #define def_lstmff_outputgate 2 #define def_lstmff_newcontent 3 #define def_lstmff_memory 4 #define def_lstmff_hiddenstate 5 #define def_lstmff_outputs_total 6 //--- Распределение гралиента через LSTM блок #define def_lstmhgr_outputs 0 #define def_lstmhgr_gradients 1 #define def_lstmhgr_inputgate 2 #define def_lstmhgr_outputgate 3 #define def_lstmhgr_newcontent 4 #define def_lstmhgr_memory 5 #define def_lstmhgr_fg_gradients 6 #define def_lstmhgr_ig_gradients 7 #define def_lstmhgr_og_gradients 8 #define def_lstmhgr_nc_gradients 9 #define def_lstmhgr_outputs_total 10 //--- Прямой проход блока внимания #define def_attff_querys 0 #define def_attff_keys 1 #define def_attff_scores 2 #define def_attff_values 3 #define def_attff_outputs 4 #define def_attff_window 5 #define def_attff_key_size 6 #define def_attff_mask 7 //--- Определение градиента на матрице коэффициентов зависимости блока внимания #define def_attscr_scores 0 #define def_attscr_scores_grad 1 #define def_attscr_values 2 #define def_attscr_values_grad 3 #define def_attscr_outputs_grad 4 #define def_attscr_scores_temp 5 #define def_attscr_window 6 //--- Распределение градиента через блок внимания #define def_atthgr_querys 0 #define def_atthgr_querys_grad 1 #define def_atthgr_keys 2 #define def_atthgr_keys_grad 3 #define def_atthgr_scores_grad 4 #define def_atthgr_key_size 5 //--- Прямой проход GPT #define def_gptff_querys 0 #define def_gptff_keys 1 #define def_gptff_scores 2 #define def_gptff_values 3 #define def_gptff_outputs 4 #define def_gptff_key_size 5 #define def_gptff_units 6 //--- Определение градиента на матрице коэффициентов зависимости GPT #define def_gptscr_scores 0 #define def_gptscr_scores_grad 1 #define def_gptscr_values 2 #define def_gptscr_values_grad 3 #define def_gptscr_outputs_grad 4 #define def_gptscr_scores_temp 5 #define def_gptscr_window 6 #define def_gptscr_units 7 #define def_gptscr_current 8 //--- Распределение градиента через GPT #define def_gpthgr_querys 0 #define def_gpthgr_querys_grad 1 #define def_gpthgr_keys 2 #define def_gpthgr_scores_grad 3 #define def_gpthgr_key_size 4 #define def_gpthgr_units 5 #define def_gpthgr_current 6 //--- Прямой проход пакетной нормалитзации #define def_bnff_inputs 0 #define def_bnff_options 1 #define def_bnff_weights 2 #define def_bnff_outputs 3 #define def_bnff_batch 4 #define def_bnff_total 5 //--- Распределение градиента через слой пакетной нормализации #define def_bnhgr_options 0 #define def_bnhgr_gradient 1 #define def_bnhgr_inputs 2 #define def_bnhgr_gradient_inputs 3 #define def_bnhgr_weights 4 #define def_bnhgr_batch 5 #define def_bnhgr_total 6 //--- Распределение градиента до оптимизируемых параметров пакетной нормализации #define def_bndelt_options 0 #define def_bndelt_delta_weights 1 #define def_bndelt_gradient 2 //--- Маскирование данных #define def_mask_inputs 0 #define def_mask_mask 1 #define def_mask_outputs 2 #define def_mask_total 3 //+------------------------------------------------------------------+ //| Перечисления | //+------------------------------------------------------------------+ // Функции активации enum ENUM_ACTIVATION { ACT_None = -1, ACT_LINE, ACT_SIGMOID, ACT_TANH, ACT_LReLU, ACT_SOFTMAX, ACT_SWISH, ACT_AVERAGE_POOLING, ACT_MAX_POOLING }; //--- Функции потерь enum ENUM_LOSS_FUNCTION { ENUM_LOSS_MAD, ENUM_LOSS_MSE, ENUM_LOSS_LogLoss }; //--- Методы оптимизации enum ENUM_OPTIMIZATION { None = -1, SGD, MOMENTUM, AdaGrad, RMSProp, AdaDelta, Adam }; //+------------------------------------------------------------------+