交易中的神经网络:受控分段(基础篇)
◍ 用受控分段把行情切成可学习片段
做价格行为分析时,直接把整段历史丢进神经网络往往学不到东西——噪声太多、样本边界模糊。一个更稳的做法是“受控分段”:按明确规则把行情切成长度可控的小段,每段单独作为训练或推理单元。 Dmitriy Gizlyk 在 2025 年 8 月 4 日发布的 MT5 交易系统示例中,用分段方式处理数据,原文标注样本规模约 500 条。这个数字说明:分段后每个小片段的样本量并不大,验证时要在 MT5 里跑多次以免偶然性误导。 分段长度本身是核心参数。段太短丢上下文,段太长回到噪声池。建议先在 EURUSD 的 M15 上用 60~120 根 K 线做一段,观察网络对局部反转的识别率再调。 外汇与贵金属杠杆高、滑点跳空频繁,分段模型在小周期上更易过拟合,任何“识别率提升”都只是概率倾向,不是确定性信号。
「用语言描述去抠点云里的目标区域」
引导分段任务的本质,是拿一段自然语言描述当筛子,从整团点云里把对应目标单独隔离出来。RefMask3D 这套框架的思路是:不让词和散点直接硬配对,而是先编码早期多模态特征,再让描述文本和局部点组做跨模态注意力。 它搞了个几何增强组词注意力模块,在特征编码每一阶段都跑一遍“子云—描述”的 cross-attention。点云又稀疏又不规则,直接点-字对齐噪声很大,这个模块借几何关系和结构细节把噪声压下去,顺带提升模型吃语言和几何两种数据的能力。 另外塞了一个可学习的“背景”词元,专门拦住无关语言特征去纠缠局部组特征。点级表征只被相关语义语言信息丰富,各组内部的语言上下文连续性和一致性得以保住。 解码器里还有个语言原语构造策略(LPC):初始化一组原语,分别管形状、颜色、大小、位置关系等属性,跟语言信息交互后各自带上对应语义。对象聚类模块(OCM)再分析这些原语间关系,辨出共同与差异特征,据此初始化语言查询,聚出目标对象的最终嵌入。这一层让模型对语言-视觉的综合理解明显更深。
RefMask3D 怎么用点云加文本抠出目标
RefMask3D 吃两样东西:一组 N 个点的初始场景(每个点带 3D 坐标 P 和辅助特征向量 F,F 里塞了颜色、形状等属性),以及一句描述目标长什么样的文本。文本先过编码器变成嵌入 Ft,点云过点编码器抽逐点特征,后者主干类似 3D U-Net,中间靠「几何强化组-词注意力」把几何形状和文本做深度对齐。 点编码器出来的多尺度特征 {F1′,F2′,F3′,F4′} 连同语言原语 O′ 和 Ft,一起进四层变换器跨模态解码器。O′ 不是写死的,是从不同高斯分布采样初始化的一组可学习原语,每个分布对应一个语义属性(形状、颜色、大小、材料、关系、位置),专门让模型能按语义信号定位目标。 普通跨模态注意力有个坑:点云里很多点根本没对应描述词,硬算就卡顿还引入噪声。RefMask3D 塞了一个可学习的背景词元,没文本匹配的点就盯这个共享嵌入,失真被压到最低;这些点再并进背景对象聚类,细化时以局部质心为中心,不相关的词影响不到。背景嵌入是可训练参数,只用在注意力计算阶段,捕的是数据集整体分布。 现有方法大多直接从点云采质心,忽略语言上下文,稀疏场景里最远点采样常漂离真值、漏检。RefMask3D 用语言原语构造把语义内容带进来,让模型学各种属性而不是挂单一描述词。解码后原语和对象查询 Oc 进 OCM(对象聚类模块),自注意力抽共享特征,Oc 当查询、丰富化原语当键值,把目标查询归到 Oc′ 里。 OCM 仍可能有推理歧义导致误报,作者补了对比学习:最大化目标词元与正确文本相似度,最小化与非目标配对相似度。整体看,这套机制把跨模态融合做进点编码器早期,几何相邻点成群处理,比直接点-词相关更抗噪。外汇贵金属交易者借这类多模态思路做特征工程时,注意模型误报率随场景稀疏度上升而走高,属高不确定性的技术验证,实盘前务必 MT5 回测。
◍ 把 RefMask3D 的模块拆进 MT5 神经层
RefMask3D 作者把算法切成功能模块,MQL5 实现就照模块建类。点编码器里的「几何强化组-词注意力」写成 CNeuronGEGWA,父类选 CNeuronUShapeAttention,大多数 U-Net 变量直接从父类继承,只补了跨模态注意力的静态组件。 类里所有对象声明为静态,构造/析构留空,初始化全塞进 Init 方法。Init 先调终极祖先 CNeuronBaseOCL 的同名方法——注意是基类不是直接父类,因为「颈部」用递归建对象,要借不同类的组件。颈部类型看尺寸:通常建一个同型对象,内部尺寸减「1」,最后一层换交叉注意力模块。 feedForward 被重写接收双数据源。先送主注意力子层,内部已做指针校验,只查逻辑结果;缩放后连颈部,再走第二注意力、逆缩放、残差连接和交叉模态依赖。反向传播有个坑:解码器要把梯度先算完再回传点编码器,经典模型会丢梯度,所以 calcInputGradients 里加了 bAddNeckGradient 标志和 AddNeckGradient 设定器,保留先前累积梯度走特殊分支。 语言原语构造放 CNeuronLPC 类,父类用 CNeuronMLCrossAttentionMLKV。它只需一个外部数据源,可训练原语由内部两个静态全连接层生成,不用位置编码层。feedForward 显式校验外部指针,因为输入对象要当上下文被嵌套成员访问;特征张量训练时生成、部署阶段静态不重算。 对象聚类模块 CNeuronOCM 结合原语自注意力、语义自注意力和交叉注意力,算法较复杂,作者留到后续文章结合真实数据测试结果再展开。外汇与贵金属市场高风险,这类自定义神经网络模块仅用于 MT5 端离线研究,实盘接入前须在历史数据上验证梯度逻辑。
<span class="keyword">class</span> CNeuronGEGWA : <span class="keyword">class="kw">public</span> CNeuronUShapeAttention { <span class="keyword">class="kw">protected</span>: CNeuronBaseOCL cResidual; CNeuronMLCrossAttentionMLKV cCrossAttention; CBufferFloat cTemp; <span class="keyword">class="type">bool</span> bAddNeckGradient; <span class="comment">class=class="str">"cmt">//---</span> <span class="keyword">class="kw">virtual</span> <span class="keyword">class="type">bool</span> feedForward(CNeuronBaseOCL *NeuronOCL) <span class="keyword">class="kw">override</span> { <span class="keyword">class="kw">return</span> <span class="macro">class="kw">false</span>; } <span class="keyword">class="kw">virtual</span> <span class="keyword">class="type">bool</span> feedForward(CNeuronBaseOCL *NeuronOCL, CBufferFloat *SecondInput) <span class="keyword">class="kw">override</span>; <span class="keyword">class="kw">virtual</span> <span class="keyword">class="type">bool</span> calcInputGradients(CNeuronBaseOCL *prevLayer) <span class="keyword">class="kw">override</span> { <span class="keyword">class="kw">return</span> <span class="macro">class="kw">false</span>; } <span class="keyword">class="kw">virtual</span> <span class="keyword">class="type">bool</span> calcInputGradients(CNeuronBaseOCL *prevLayer, CBufferFloat *SecondInput, CBufferFloat *SecondGradient, ENUM_ACTIVATION SecondActivation = None) <span class="keyword">class="kw">override</span>;