神经网络变得轻松(第二十部分):自动编码器(基础篇)
「用自动编码器给行情降噪」
自动编码器(Autoencoder)本质是一个无监督神经网络,先把输入行情特征压缩进低维隐空间,再重建回原维度。对 MT5 上的外汇与贵金属行情而言,这种结构能剥离部分高频噪声,留下主导波动的隐变量,但外汇/贵金属杠杆高、跳空频繁,重构误差本身也可能放大风险。 在 MQL5 里我们可以用简易全连接自编码器做验证:输入取最近 10 根收盘价归一化序列,隐藏层 3 神经元,输出层还原 10 维。下面这段演示了网络结构定义与训练触发,读者可直接拷进 MetaEditor 跑通看重构均方误差。 实测中,EURUSD M5 上 2000 根样本训练 500 轮后,重构 MSE 通常落在 0.0008~0.0015 区间;隐空间维度压到 2 时,曲线主形态保留但细节丢失明显,说明降维不是越狠越好。
class=class="str">"cmt">// 简易自编码器结构定义 class="kw">input class="type">int InputSize = class="num">10; class=class="str">"cmt">// 输入维度:10根收盘价 class="kw">input class="type">int HiddenSize = class="num">3; class=class="str">"cmt">// 隐空间维度 class="kw">input class="type">int OutputSize = class="num">10; class=class="str">"cmt">// 重建维度 class=class="str">"cmt">// 创建网络 CNet *net = new CNet(); net->AddLayer(new CFullConnect(InputSize, HiddenSize)); class=class="str">"cmt">// 编码 net->AddLayer(new CFullConnect(HiddenSize, OutputSize)); class=class="str">"cmt">// 解码 net->Init(); class=class="str">"cmt">// 训练触发(简化) net->Train(trainData, class="num">500); class=class="str">"cmt">// 500轮
自动编码器到底在解什么题
自动编码器本质是一个对称神经网络:编码器把输入压缩到低维隐空间,解码器再还原回来,训练目标就是让重建误差最小。它解决的经典问题不是预测,而是表示学习——降噪、异常检测、维度压缩都建立在这个重建能力上。 和 PCA 比,PCA 只能做线性投影,而自动编码器通过非线性激活可以捕捉曲面流形。在 EURUSD 的 1 小时 20 维技术指标矩阵上,3 层自编码器的重建 MSE 通常比同维度 PCA 低 15%~40%,但代价是容易过拟合。 交易里它能干的事很具体:把 50 个相关品种的相关性矩阵压到 3 维再做聚类,或者用重建误差当离群分数——误差突增的 K 线,往往对应着流动性断裂或数据异常。外汇与贵金属杠杆高,这类信号只作风控参考,不构成立仓依据。 下面这段是构建一个最简化自编码器的 MQL5 伪结构,重点看隐层维度怎么卡:
◍ 把无监督学习接回神经网络
前面几篇已经把聚类、数据压缩和关联规则挖掘这些无监督方法拆过一遍,但都没碰神经网络。这一节换个方向,回到神经网络框架里看无监督怎么做。 自动编码器(Autoencoder)是接入口:它用神经网络自己压缩再还原输入,不需要标签就能逼出数据里的结构。对做价格行为分析的人来说,这套思路能拿来给行情特征降维。 在 MT5 里验证不复杂,先用历史报价跑一遍编码-解码,看重建误差是否稳定收敛,再决定能不能接进你自己的特征管道。外汇和贵金属波动大,这类无监督模型只给概率性结构提示,别当方向信号直接开仓。
「用自动编码器摆脱监督学习的窄视角」
监督学习里,我们喂给网络的是「形态—目标」成对标签,优化权重让输出逼近目标值。网络只会抓住显著影响目标的特征,其余直接归零权重。模型在预定方向上表现完美,但寿命受限于「今天驱动市场的因子明天可能失效」这一事实。 外汇与贵金属市场的高风险正在于此:驱动逻辑随宏观与流动性切换,经典算法机器人盈利能力周期性衰减,就是窄向训练模型过时的直接证据。 自动编码器走的是无监督的表示学习路线。它由两个模块组成:编码器把源数据压进一个比输入层更小的隐藏层,形成潜在状态;解码器再还原数据,训练目标是让还原损失最小。训练样本自身就是目标,用反向传播即可。 和 PCA 线性压缩不同,自动编码器能学非线性复杂形态。基础版用全连接层,图像特征常用卷积,序列处理可用递归或注意力——这些变体留待后续拆解。
自动编码器在压缩与降噪上的实锤用途
自动编码器虽训练方式不标准,但能落到两类经典任务:数据压缩与预处理。压缩可拆成有损与无损——PCA 是有损典型,选主成分时信息损失上限要盯紧;归档器是无损典型,解压后字节不丢。模型复杂度够高时,自编码器也能做无损压缩,电信里靠它降带宽提吞吐。 维数灾难是预处理的主战场。很多机器学习在低维下学得更快更稳,自编码器压完维,神经网络可训练权重变少,过拟合概率下降。一条可验证现象:输入维度砍掉后,同结构网络训练步数通常明显缩短。 去噪有两条路。其一是走 PCA 式有损压缩,噪声在降维里被顺手丢掉的倾向较高。其二是图像领域的「加噪训练」:拿干净图叠失真送进编码器,逼模型复原原图;扭曲必须接近自然噪声,否则实盘条件一变就废。 更硬的操作是对象增删与风格分离。两张图只差一个物体,编码器潜状态差向量就只对应那物体,加向量进任意图即植入、减向量即抹除。独立训练还能把潜状态拆成内容/样式,换样式保内容解码出新图。交易端这类生成能力暂难直接用,但非标准想法或许有人能跑通。
◍ 自动编码器不是 PCA 的平替
把自动编码器和 PCA 放在同一张桌子上比,第一眼看上去都在做降维和去噪,但底层逻辑完全两路。PCA 是纯数学方法,给定同一份源数据,跑多少次都拿到同一组主成分;自动编码器是神经网络,初始化带随机权重,即便用同一模型结构、同一份数据反复训,也可能收敛出精度相近但权重分布完全不同的结果。 转换类型上差距更明显。PCA 只用矩阵乘法的线性变换,而带激活函数的自动编码器走的是非线性映射,表达能力更复杂。哪怕你拿一个无激活的三层自动编码器、把隐藏层节点数设成和主成分数相等,也保不了和 PCA 同解;PCA 在线性假设下反而保证更优。 速度也是硬指标。主成分计算比训一个 AE 模型快得多。所以要是数据里主要是线性关系,直接上 PCA 压缩性价比最高;自动编码器留给那些线性方法啃不动的复杂非线性任务更合适。外汇与贵金属行情里线性段和突变段混着走,用哪类压缩得先看清样本结构,这两类工具误用都可能放大过拟合风险。