拓冰建站拓冰建站
首页 / 资讯中心 / 正文

BP神经网络如何破解大地电磁非线性反演难题

简介这份PDF论文聚焦大地电磁人工神经网络反演方法面向地球物理勘探、电磁法数据处理相关研究者与学生旨在解决传统大地电磁非线性反演计算效率和精度不足的问题。内容基于BP算法设计神经网络以已知地电模型的视电阻率数组为输入、地电模型参数为输出通过信息正向传播与误差反向传播迭代获取最优权值并对2层和3层模型分别构建网络测试验证该方法可实时逼近真实模型。压缩包中共1个pdf文件整体大小712KB为中南大学学报2015年发表的完整论文含摘要、引言、方法原理及实验结论等模块。目前已有138人学习浏览适合需要掌握神经网络在电磁反演中应用思路、学习BP算法建模流程的读者参考与借鉴。1. 大地电磁反演卡在非线性上神经网络为什么能绕过去做过大地电磁测深的人都有体会一维反演最怕的不是正演算不快而是目标函数非凸、初始模型给不好OCCAM 和 Occam 简化类方法容易陷进局部极小非线性共轭梯度虽然稳但每次迭代都要算灵敏度矩阵对三维模型尤其吃力。2015 年中南大学学报这篇《大地电磁人工神经网络反演》换了个思路先别管雅克比矩阵让神经网络自己学映射。输入是已知模型的视电阻率数组输出是地电参数训练好之后对未知数据做一次前向传播就得到反演结果整个过程不迭代、不偏导实测数据反演一个测点几乎实时完成。这个思路对两类人特别有用一类是正在做 MT 数据处理、想用机器学习替代传统反演的地球物理工程师另一类是想把 BP 网络用到地球物理反演场景、但不知道怎么设计输入输出和训练样本的研究生。下文把网络结构、样本生成、训练参数、实测反演和踩坑点逐一拆开。2. 从正演到样本库BP 网络的输入输出设计与数据归一化2.1 为什么选前向 BP 网络而不是其他结构大地电磁反演本质上是求解映射视电阻率序列到层状模型参数电阻率、厚度的非线性映射。前向型网络正好实现一个输入空间到输出空间的非线性算子不需要显式构造灵敏度矩阵也不需要假设目标函数凸性。论文采用 BP 算法训练多层前向网络核心思想是信息正向传播计算输出误差反向传播修正权值权值沿误差函数的负梯度方向调整。一个标准的 3 层 BP 网络输入层有 n 个节点对应频点数输出层有 m 个节点对应模型参数个数隐层节点数则需要试验确定。每层第 j 个神经元的输入总和为I_j Σ w_ji * O_i输出为O_j f(I_j)激活函数采用 S 型函数f(x) 1 / (1 exp(-x))其导数为f(x) f(x) * (1 - f(x))这个导数形式在误差反向传播时特别好用可以直接用当前输出值算出梯度。对于 MT 反演问题输入输出都是正数且范围可能跨越几个数量级S 型函数天然要求数据在 [0,1] 区间所以归一化不是可选项而是网络能否收敛的前提。2.2 正演样本生成1 000 组模型怎么来论文针对 2 层水平层状模型选用 20 个频点因此网络输入层节点数为 20。模型参数为第 1 层电阻率 ρ1、第 2 层电阻率 ρ2、第 1 层厚度 h1输出层节点数为 3。每个参数在 1001 000 之间等间隔取 10 个值100, 200, …, 1000排列组合得到 10 × 10 × 10 1000 组模型。对所有模型做一维正演得到对应的视电阻率数组。这里有个关键点样本集的覆盖范围决定了反演的适用范围。如果只取 1001 000 Ω·m那么训练好的网络对外推区间外的数据会给出完全无意义的结果。论文把 2 层介质的 G 型ρ1 ρ2和 D 型ρ1 ρ2都包含了进来这是一个合理的做法。实际建模时我一般会先根据测区已知地电资料确定电阻率和厚度的上下限然后在对数空间等间隔取值因为电阻率在中高阻段的变化对 MT 响应影响较小对数采样能更好地覆盖低阻薄层的情况。样本划分上论文用 4/5800 组训练1/5200 组测试测试数据不参与训练用来验证泛化能力。这个划分比例在样本量不大时是常用的也可以采用交叉验证来更稳定地评估网络性能。2.3 归一化与 MATLAB 实现骨架由于 MATLAB 神经网络工具箱自带 mapminmax 函数可以方便地把数据映射到 [-1,1] 或 [0,1] 区间。论文使用 S 型函数输出范围在 01所以归一化到 [0,1] 即可。下面是一个完整的 2 层模型样本生成与网络训练骨架使用 MATLAB 风格的伪代码% 生成 2 层模型参数组合 rho1 linspace(100, 1000, 10); rho2 linspace(100, 1000, 10); h1 linspace(100, 1000, 10); k 0; for i 1:10 for j 1:10 for l 1:10 k k 1; model(k,:) [rho1(i), rho2(j), h1(l)]; % 调用一维正演函数得到 20 个频点的视电阻率 rho_s rho_s(k,:) MT1D_forward(model(k,:), freq); end end end % 归一化 [P_train, ps_input] mapminmax(rho_s_train, 0, 1); [T_train, ps_output] mapminmax(model_train, 0, 1); % 创建 BP 网络隐层 30 个节点训练函数用 trainlm (Levenberg-Marquardt) net feedforwardnet(30, trainlm); net.trainParam.epochs 1000; net.trainParam.goal 5e-5; net train(net, P_train, T_train); % 对测试集进行反演 Y_test net(P_test); % 反归一化得到真实电阻率和厚度 model_pred mapminmax(reverse, Y_test, ps_output);逻辑说明正演函数MT1D_forward接收模型参数向量和频点数组返回对应视电阻率这里频点数和采样范围要与实际观测系统一致。mapminmax将训练输入输出归一化到 [0,1]之后用trainlm训练。net(P_test)是前向计算得到的是归一化的预测值必须用ps_output反归一化还原为物性参数。注意feedforwardnet默认的隐层激活函数就是 tansig输出层是 purelin如果输出层也用 logsig那么输出必须限制在 01 之间反归一化时容易出现边界饱和问题。3. 两层与三层模型试验隐层节点、训练算法与收敛行为3.1 两层模型收敛成功率 76% 意味着什么论文对 2 层模型进行了多次训练试验。神经网络连接权初始值是随机的BP 算法本质上是一个带随机起点的梯度下降法因此每次训练结果可能不同。50 次试验中有 38 次满足误差精度要求目标误差 5e-5成功收敛成功率 76%。这个数字直接说明了BP 网路单独训练是不稳定的需要在不同随机种子下多次试验选误差最小的那一次作为最终网络。隐层节点数方面论文比较了 8 个和 30 个节点的情况。从图 3 的误差收敛曲线看两种配置都经过约 15 次迭代达到目标误差最终收敛效果差别不大。这说明对于简单的 2 层模型隐层节点数在一定范围内并不敏感。但如果隐层节点太少比如 3 个网络容量不够拟合能力不足太多比如 100 个则可能过拟合对未参与训练的测试数据反而表现更差。一般经验是隐层节点数取输入层与输出层节点数之和的 0.51.5 倍再结合试验调整。训练算法对比上Levenberg-Marquardt 法在 800 组样本、20 输入 3 输出的小规模网络下只需约 2 s而 Quasi-Newton 法需要约 7 s差距明显。LM 法基于高斯-牛顿法并引入阻尼因子收敛速度快但需要存储和计算近似 Hessian 矩阵内存开销大。当样本量增加到 3 层模型的 8 000 组时LM 法由于存储量过大导致训练失败而 Quasi-Newton 法仍然可以收敛耗时约 320 s。3.2 三层模型10 万组样本的存储挑战三层水平层状模型参数为 5 个ρ1, ρ2, ρ3, h1, h2每个参数同样取 10 个值排列组合得到 10^5 100 000 组模型。论文用 4/5 即 80 000 组训练1/5 即 20 000 组测试。数据量放大两个数量级后LM 法直接因内存不足失败这是一个非常典型的工程约束算法先进不如存储友好。Quasi-Newton 法BFGS只需要存储近似的逆 Hessian 矩阵内存占用比 LM 小得多因此成为这个规模的可行选择。从误差收敛曲线看1 层隐层50 节点和 2 层隐层3040 节点都在约 50 次迭代后达到目标误差。两种结构的最终训练误差差别很小这提示我们增加隐层层数并不一定能提升精度反而可能增加训练难度和过拟合风险。对于 3 层 MT 模型10 万组样本 1 层隐层 50 节点已经足够。3.3 训练代数与收敛曲线的解读训练均方误差定义为E (1/N) * Σ (target_i - output_i)^2其中 N 为样本数。论文图 5 和图 6 分别展示了 50 组训练样本和 10 组测试样本的理论值与计算值之间的均方误差。注意这里的 50 组和 10 组是从样本集中随机抽取的而不是全部。训练集误差低不能说明泛化好关键是测试集的误差量级。表 1 列出了 10 组测试反演数据对比理论值ρ1, ρ2, h1与神经网络反演值之间的相对误差通常在几个百分点以内厚度 h1 的误差略大于电阻率这符合 MT 对厚度敏感度相对较低的特性。下面整理论文中两层模型试验的关键配置配置项参数值频点数20模型层数2网络输入节点20网络输出节点3ρ1, ρ2, h1参数取值1001 000等间隔 10 个值样本总数1 000训练/测试800 / 200隐层节点8 或 30目标误差5e-5收敛成功率76%50 次试验LM 训练耗时约 2 sQuasi-Newton 耗时约 7 s这个表可以直接复用于实验设计但要注意参数区间要根据实际工区调整。4. 实测数据反演从网络输出到地质解释的完整链路4.1 反演流程与数据接口论文采用 3 层模型训练好的网络结构和连接权值对云南个旧驼峰山矿区 2 号测线第 80 号至 200 号点共 13 个测点的实测视电阻率进行反演。这里的实际流程是对每个测点的实测视电阻率-频率数据做同样的频点选取。训练网络时用 20 个频点实测数据必须经过插值或抽稀保证频点数量和位置一致。对实测视电阻率做归一化。归一化参数最大值、最小值必须使用训练样本的归一化参数而不是重新计算实测数据的 min/max。输入网络得到归一化的模型参数预测值。反归一化得到电阻率和厚度。将多个测点的结果按测线位置排列结合地质资料插值平滑绘制拟断面图。第 2 步最容易出错。如果重新对实测数据做归一化等于改变了输入分布网络输出完全没有意义。正确做法是在 MATLAB 中保存ps_input和ps_output两个归一化结构体在预测时原样使用。反演结果中第 80 号测点的视电阻率曲线对比显示实测与神经网络反演后的视电阻率曲线整体形态一致个别频点有偏差。这说明网络学习到了视电阻率到层状模型的映射关系而不是机械记忆训练样本。4.2 13 个测点如何变成拟断面图论文表 3 给出了 13 个测点的三层反演结果每个测点输出 5 个参数ρ1, ρ2, ρ3, h1, h2。把这些参数按测点顺序排列用地质资料约束做插值平滑得到图 12 的拟断面图。异常划分逻辑是第 1 层低阻100200 Ω·m推断为中三叠统个旧组马拉格段第 2 层的灰质白云岩厚度约 200 m。第 2 层次高阻300400 Ω·m推断为同一组段第 1 层白云岩厚度约 400 m。第 3 层高阻6001 000 Ω·m推断为个旧组卡房段第 6 层灰岩夹灰质白云岩其中赋存锡铜矿体。这个结果与地质情况基本吻合。从工程角度神经网络反演的价值不是替代地质解释而是快速给出初始模型后续再结合地质先验做精细调整。传统一维反演需要逐个测点迭代每个测点耗时可能几秒到几十秒神经网络反演 13 个测点只需要一次前向计算几乎瞬时完成。4.3 与传统反演结果对比的注意事项在对比神经网络反演与传统反演时有一个容易忽略的问题传统反演通常会对模型施加平滑约束或正则化产出的是平滑变化的模型而神经网络直接输出的是离散层状模型参数二者在电阻率断面形态上会有差异。论文的实测结果直接显示为分层的三段结构这是网络输出就如此不是解释者人为分层的。如果要把神经网络反演与传统平滑反演做对比需要先将层状模型转换成等价的连续电阻率分布或者对比视电阻率拟合误差而不是直接对比电阻率断面的细节形态。5. 提高收敛成功率与泛化能力的几个关键操作BP 网络反演最大的实际问题是收敛成功率不高和局部最优。论文中 2 层模型 50 次试验只有 38 次成功3 层模型成功率约 80%剩下的 20% 即使迭代 1 000 次也达不到目标误差。这通常是随机初始权值导致网络陷入了一个很差的局部极小。一个可行做法是多初始点训练用不同的随机种子初始化网络 1020 次每次固定最大迭代次数比如 200记录最终误差取误差最小的网络。这个操作在 MATLAB 里可以循环执行代价只是训练时间乘以试验次数但可靠性提升非常明显。另一个容易被忽略的是样本生成策略。论文按参数等间隔取 10 个值组合后的样本在高阻、高厚度区域分布稀疏在低值区域密集。如果参数范围横跨几个数量级比如 0.11 000 Ω·m等间隔采样会让大多数样本集中在高值段导致网络对低阻薄层不敏感。我一般会在对数空间生成参数例如用logspace(log10(100), log10(1000), 10)这样每个数量级都有均匀的样本覆盖。对于 MT 反演电阻率的变化跨度大对数采样更符合物理直觉。归一化方式也需要微调。默认的mapminmax归一化到 [0,1] 或 [-1,1] 时如果数据有极端值普通样本会被压缩到很窄的小数区间训练时梯度变化缓慢。可以先将视电阻率取对数再归一化即rho_log log10(rho_s); rho_norm (rho_log - min(rho_log)) / (max(rho_log) - min(rho_log));反演完成后用指数变换还原。实测数据往往含有噪声尤其是高频段的视电阻率曲线抖动大如果直接把原始视电阻率输入网络噪声会被网络当作有效信号学习导致反演出的模型参数出现假异常。在输入网络前做平滑滤波或对视电阻率曲线做中值滤波可以有效提升稳定性。论文实测数据是经过预处理的但我们在自己的数据上不要跳过这一步。最后训练样本的频点数量和分布要与实测数据的频率范围对齐。论文使用 20 个频点实际 MT 数据的频点可能从几千赫兹到几千秒不等如果训练数据的频点间距不均匀网络对不同频段的敏感性也会不一致。我在生成样本时会让正演频点与实测频点完全一致而不是自己重新选择等间隔频点。如果不一致实测输入到网络里的向量模式与训练模式不同反演结果会出现系统性偏差。检查方式是随机抽取 10 个测试样本分别计算网络反演结果与正演输入模型参数的相对误差确保误差在可接受范围内后再用于实测。这一步相当于在正式反演前对网络做一次端到端验证数据处理流程不可省略。本文还有配套的精品资源点击获取
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门