
简介基于量子神经网络的超深层储层评价技术资料面向油气勘探开发领域的地质工程师、数据分析人员及人工智能研究者。该PDF针对深层与超深层储层识别中传统测井解释依赖经验、效率偏低的问题系统阐述了量子BP网络的建模思路通过模拟量子受控非门构造量子神经元并与经典反向传播算法结合构建可并行计算、快速收敛的网络模型实验对比显示其在复杂地质环境下的收敛速度和识别精度均优于普通BP网络为储层定量定性评价提供了新方案。资源含单个PDF文件压缩包大小1.4MB内容包含量子比特基础、量子神经元设计、算法流程及实验分析适合对量子计算与机器学习交叉方向有兴趣的读者深入了解其原理与实现路径。目前已有105人学习下载兼具理论参考与工程启发价值。1. 量子神经网络在储层评价的落地识别率从65%到81%的差距是怎么拉开的量子神经网络在油气领域的落地最典型的场景就是把测井曲线变成储层类别本质是个多分类的机器学习问题。难在深层、超深层储层的测井响应弱、噪声大传统BP网络在这种数据上收敛慢还容易陷在局部最优里。这篇论文提出的量子BP网络QBP走了一条不太一样的路把普通神经元的加权求和替换成量子相移门的相位旋转把激活函数换成正弦函数用受控非门做翻转。在徐深气田5口取芯井、14183条测井记录上QBP测试集识别率做到81.31%比普通BP高出16.08个百分点。对做地质数据建模、油气田数字化或量子衍生优化的人来说这份资源的完整度足够当一份专业指导来用量子神经元怎么构造、QBP梯度怎么反传、储层评价指标怎么选全都有数值可对。2. 从量子比特到量子神经元三个公式看懂QBP的底层设计2.1 量子比特与叠加态为什么是cos和sin传统神经网络的输入是实数、权重是实数、激活函数是Sigmoid或ReLUQBP的第一步改变发生在输入表示上把实数x̄换成二维向量[cosφ, sinφ]ᵀ。这个向量对应量子比特的叠加态。经典比特只有0和1两个取值量子比特可以处在|0⟩和|1⟩的任意线性组合上写成|φ⟩ cosφ|0⟩ sinφ|1⟩φ叫相位。归一化条件cos²φ sin²φ 1天然成立不需要像普通网络那样做额外约束。这个表示的意义不在于看起来像量子而在于给了网络一组全新的可调参数。普通BP调整的是权重和偏置QBP调整的是相位。相位自带周期性cos和sin的导数互为镜像反向传播时不容易像Sigmoid进入饱和区那样把梯度压到接近0。论文式(1)(2)给出这套表示后面所有公式都建立在相位这个词上。做实现时不用真的去碰量子硬件所有运算都在实数域上完成这是量子衍生算法和真正量子计算的本质区别也是这份资源能直接复现的前提。2.2 相移门与受控非门量子神经元五段式结构的核心量子神经元的构造论文分五段输入、移相、聚合、翻转、输出。输入是量子比特输出是量子比特处于|1⟩状态的概率幅。移相由相移门R(θ)完成翻转由受控非门U(γ)完成。相移门R(θ)就是二维旋转矩阵[[cosθ, −sinθ], [sinθ, cosθ]]把一个[cosφ, sinφ]ᵀ向量乘上去相位从φ变成φθ。这一步等价于把输入旋转一个可学习角度。受控非门稍微绕一点。论文先定义了C(k) [[cos(kπ/2 − 2θ₀), −sin(kπ/2 − 2θ₀)], [sin(kπ/2 − 2θ₀), cos(kπ/2 − 2θ₀)]]其中θ₀是初始相位然后令U(γ) C(f(γ))f是Sigmoid函数。为什么要包一层Sigmoid因为γ是自由参数范围不受限如果直接拿γ去算旋转角度梯度一大会导致角度乱跳Sigmoid把γ压到(0,1)区间旋转角度π/2·f(γ)就被限制在(0, π/2)内训练过程平稳很多。常见做法是把这一层理解成带压缩的旋转门γ本身可正可负但实际翻转角度永远有界。下面这段代码演示相移门和量子比特表示的最小实现import numpy as np def qubit_from_phase(phi): # 量子比特的三角函数表示|φ cosφ|0 sinφ|1 # 返回概率幅 [cosφ, sinφ]^T return np.array([np.cos(phi), np.sin(phi)]) def phase_shift(qubit, theta): # 相移门 R(theta)将量子比特相位从 phi 旋转到 phitheta # 对应论文式(3)R [[cosθ, -sinθ], [sinθ, cosθ]] c, s qubit[0], qubit[1] return np.array([ c * np.cos(theta) - s * np.sin(theta), c * np.sin(theta) s * np.cos(theta) ])代码逻辑很直白qubit_from_phase 根据相位生成概率幅向量phase_shift 用二维旋转矩阵的展开式完成移相。参数theta就是网络里要学习的旋转角θᵢⱼ。实际训练时不需要显式保存旋转矩阵直接存theta标量前向传播时按上面公式展开反向传播时对theta求导即可。2.3 量子神经元的输入输出一条正弦函数串起聚合与翻转单靠移相还不够量子神经元的关键在聚合翻转这一步。输入xᵢ [cos tᵢ, sin tᵢ]ᵀ先各自经过R(θᵢ)移相再做向量求和得到聚合向量[cos θ, sin θ]ᵀ其中θ arctan(Σsin(tᵢθᵢ) / Σcos(tᵢθᵢ))。这个θ不是网络的直接参数而是所有输入移相后叠加结果的相位角含义是当前输入在单位圆上形成的合力方向。聚合结果再经受控非门U(γ)翻转最终输出取量子位处于|1⟩态的概率幅y sin(f(γ)·π/2 − θ)这个公式是全篇最核心的一行。f(γ)是Sigmoid输出乘π/2后落在(0, π/2)也就是说翻转角度最大90度。θ是聚合相位可以由输入在(−π/2, π/2)附近摆动。输出对θ和γ都是光滑函数梯度链是完整的。相比普通BP的y g(Σwᵢxᵢ b)QBP的y多了一个相位差结构θ是输入的耦合结果γ是独立的可调翻转参数两者在sin里做差相当于网络可以学习到输入之间的相位干涉关系这种表达能力正是论文后面实验里QBP识别率领先的理论解释。论文里神经元的输出并不是概率而是概率幅。概率幅是复数系数的模概率是概率幅模的平方。这里直接拿sin值当输出好处是保留了符号信息sin可以是负的网络输出层再用Sigmoid映射负值经过多层传播后仍有区分度如果取平方概率负信息会丢失。这也是量子衍生网络和传统输出0到1设计的一个隐蔽差异初看论文时容易忽略。到这里单个量子神经元的前向通路就清楚了下一章把这个神经元放进三层网络里看它怎么和BP算法配合。3. 量子BP网络结构与参数更新三层前馈里藏着三组可调参数3.1 三层前馈拓扑量子神经元进隐层、传统神经元出结果论文给出的QBP是一个三层前馈网络输入层n个量子神经元隐层p个量子神经元输出层m个传统神经元各层全连接。输入层到隐层的传递函数是移相聚合翻转隐层到输出层则退化为普通加权求和加Sigmoid。隐层输出为hⱼ sin(π/2·f(αⱼ) − βⱼ)其中βⱼ arctan(Σᵢsin(tᵢθᵢⱼ) / Σᵢcos(tᵢθᵢⱼ))输出层yₖ g(Σⱼwⱼₖhⱼ)g是Sigmoid。这里的设计意图值得拆开看。输入层和隐层都用量子神经元因为原始测井特征是实值转换成量子比特后相位叠加能表达特征之间的交叉输出层用传统神经元因为输出是6级储层类别需要标准的Sigmoid做概率映射不需要相位机制。混合拓扑在论文里表述为QBP网络是按照BP网络的拓扑结构和连接规则由量子神经元和传统神经元组成实际实现时就是前向传播分两段前两层的张量运算在[cos, sin]向量空间里做最后一层在实数空间里做。训练时把隐层量子神经元看作一个整体模块它的输入是n个量子比特参数是n个旋转角θᵢⱼ和一个翻转角αⱼ输出是一个标量hⱼ。这样组织之后QBP和普通BP的差异只体现在隐层激活函数上反向传播骨架还是BP那一套链式法则。3.2 实值样本转量子态Sigmoid编码的意图与边界测井参数是实值比如GR自然伽马几十到一百多DT声波时差五六十直接塞进量子神经元不行。论文用式(11)做样本转换xᵢ cos(2π/(1e^(−x̄ᵢ)))·|0⟩ sin(2π/(1e^(−x̄ᵢ)))·|1⟩就是把每个实值x̄ᵢ先过Sigmoid得到(0,1)区间的小数再乘2π得到(0,2π)的幅角最后取cos和sin作为量子比特概率幅。Sigmoid的单调性保证幅角随输入增大而增大可导性保证梯度能回传。这个编码是论文里最容易照抄错的地方——2π这个系数不能少少了幅角范围不对网络会收敛到错误的相位区间。我一般会把编码函数单独提出来测一遍取x̄从−10到10按步长0.5过一遍编码确认幅角单调递进且不会因为Sigmoid饱和把所有大数压到同一个相位上。实测中x̄超过6之后Sigmoid输出非常接近1幅角接近2πcos≈1、sin≈0信息区分度下降这也是第5章要展开的一个坑。编码代码def encode_real_record(record): # record: 6维实值测井参数 # 式(11)先Sigmoid映射再乘2π取cos/sin作为量子态概率幅 out np.zeros((len(record), 2)) for i, x_bar in enumerate(record): phase 2.0 * np.pi / (1.0 np.exp(-x_bar)) out[i, 0] np.cos(phase) out[i, 1] np.sin(phase) return out # shape (n, 2)每行是一个量子比特参数说明record是单条测井记录的6维向量返回(n, 2)概率幅矩阵。注意这里对每条测井记录是逐维独立编码的不跨维度归一化如果某个参数原始分布偏移很大建议先做z-score标准化再进编码函数否则Sigmoid输出会长期落在饱和区。3.3 三组参数的梯度更新θ、α、w各自干什么QBP需要学习的参数分三组θᵢⱼ是隐层第j个量子神经元的第i个输入对应的旋转角αⱼ是第j个量子神经元的翻转参数wⱼₖ是隐层第j个神经元到输出层第k个神经元的连接权重。论文的误差函数是E ½(Ỹ − Y)²Ỹ是归一化后的期望输出。梯度公式(14)(15)(16)给出三组参数的偏导∂E/∂θᵢⱼ沿着误差→输出层→hⱼ→sin内部→聚合相位βⱼ→旋转角θᵢⱼ这条链回传中间需要计算cos(π/2·f(αⱼ) − βⱼ)以及聚合层的雅可比Tⱼ/(1Sⱼ²)。∂E/∂αⱼ则多乘一项f(αⱼ)因为翻转参数经Sigmoid进入sin。∂E/∂wⱼₖ相对简单和普通BP输出层梯度一致只是把hⱼ替换成量子神经元的输出。参数更新统一是梯度下降形式θ(t1) θ(t) η·∂θ(t)α和w同理η是学习率。论文实验里η取0.8迭代上限3000步。学习率0.8对普通BP偏高但对QBP是可行的因为sin函数的梯度范围天然在[−1,1]乘上学习率后不会像Sigmoid大学习率那样发生梯度爆炸不过这个值不是万能换了数据集从0.3起调更稳。下面给一段QBP前向传播的最小骨架反向梯度建议按论文式(14)-(16)逐行实现def qbp_forward(X, theta, alpha, W): # X: (n, 2) 量子态编码后的输入 # theta: (p, n) 旋转角theta[j][i]对应第j个隐层神经元的第i个输入旋转角 # alpha: (p,) 翻转参数 # W: (m, p) 输出层权重 n, p, m X.shape[0], len(alpha), W.shape[0] h np.zeros(p) for j in range(p): sum_cos 0.0 sum_sin 0.0 for i in range(n): phi_i np.arctan2(X[i][1], X[i][0]) # 输入相位 sum_cos np.cos(phi_i theta[j][i]) # 移相后求和 sum_sin np.sin(phi_i theta[j][i]) beta_j np.arctan2(sum_sin, sum_cos) # 聚合相位 h[j] np.sin(0.5 * np.pi * sigmoid(alpha[j]) - beta_j) y np.zeros(m) for k in range(m): y[k] sigmoid(np.dot(W[k], h)) # 输出层传统神经元 return y, h代码里sum_cos和sum_sin就是式(6)的向量求和展开beta_j是聚合相位θ最后一行输出层用Sigmoid。实现时注意np.arctan2的返回区间是(−π, π]聚合相位有跳变风险梯度公式里Tⱼ项专门处理了这个跳变直接手动实现梯度时可以先用数值梯度验证正确性。这是复现这类论文最省时间的路径。提示np.arctan2返回区间是(−π, π]聚合相位βⱼ在跨越π边界时会发生跳变这是量子BP梯度实现里最容易出错的数值细节。建议第一次跑通之前先在随机初始化的小网络上用数值差分和解析梯度各算一遍做对比误差在1e-6量级再继续。4. 徐深气田储层识别实战6维指标与14183条测井数据的完整配方4.1 测井数据与指标集构造为什么这6个参数而不是9个实验数据来自松辽盆地徐深气田5口取芯井徐深1、1-1、1-2、1-3、1-4测井位点间隔0.125m有效记录14183条。原始记录维度有9个DEP深度、LLD深侧向电阻率、GR自然伽马、CAL井径、LLS浅侧向电阻率、RHOB补偿密度、CNL补偿中子、DT声波时差、POR孔隙度。论文最后选用的评价指标集是6个LLD、GR、LLS、RHOB、CNL、DT。被剔掉的三个参数值得解释。DEP是深度在超深层储层评价里深度本身与储层类别有相关性但同一口井的数据里深度更像是位置标签直接入模会把井间差异带进去泛化变差。CAL井径是工程参数受钻井工艺影响大与储层流体性质相关性弱。POR孔隙度虽然和储层质量强相关但它本身是从其他测井参数计算出来的衍生量拿衍生量当输入会让模型依赖计算中间值失去从原始测井响应直接判别的能力。论文保留的6个参数都是原始测量值覆盖电阻率LLD/LLS、放射性GR、密度RHOB、中子CNL和声波DT五类物理响应维度上足够刻画储层的孔隙、流体和岩性。数据预处理上有个工程细节5口井的测井技术相同、数据格式一致这保证了合并训练时不需要做跨井的格式对齐。实际项目中不同批次的测井数据经常存在量纲或刻度差异训练前最好按井做一次分布检查确认LLD和LLS在不同井之间没有系统性偏移否则模型会把井间偏移当成储层差异来学。预处理代码def build_feature_matrix(records, wells): # records: 14183条原始记录含井号列 # 按论文方案取6维LLD, GR, LLS, RHOB, CNL, DT features records[[LLD, GR, LLS, RHOB, CNL, DT]].values # 先z-score标准化再量子态编码 mu features.mean(axis0) std features.std(axis0) features_std (features - mu) / (std 1e-8) return np.array([encode_real_record(x) for x in features_std])参数说明encode_real_record是第3章3.2节给出的编码函数加1e-8防止某些井段标准差为0导致除零。这一步做完每条记录从6维实值变成(6,2)幅角矩阵QBP的输入层节点数就是6每个节点吃一组[cos, sin]。4.2 网络结构与训练参数6-10-1结构、学习率0.8、迭代3000步网络结构按输入指标数、输出类别数确定输入层6个量子神经元输出层1个传统神经元隐层经过多轮实验取10个量子神经元。输出层只有1个节点是因为储层类别是6级定序分类论文把输出分成6档每档宽度1/6落在0, 1/6, …, 5/6, 1这些刻度上网络输出精度按1/12控制。这套编码的好处是类别间的顺序关系被保留差气层2介于干层1和气层3之间误差大小能反映分类偏移程度。其余超参数论文写得很明确隐层旋转角θ随机初始化翻转参数α在(−1,1)取随机值输出层权值w在(−1,1)取随机值学习率0.8迭代上限3000步。PNN和普通BP的权重同样在(−1,1)取随机值学习率和迭代步数一致这样对比才公平。网络参数汇总参数取值说明输入层节点6对应LLD、GR、LLS、RHOB、CNL、DT隐层节点10量子神经元多轮实验确定输出层节点16级储层类别每级宽度1/6学习率η0.8三种网络一致迭代上限3000步达到上限或收敛即停θ初始化随机旋转角无区间限制α、w初始化(−1,1)翻转参数与输出权重这套参数直接照抄是可以复现出趋势的。唯一建议调整的是学习率如果换一个储层区块的数据0.8可能偏激进从0.5起调、按0.1衰减更稳。论文里是在15万次参数更新量级下的经验值不是普适最优。4.3 训练测试划分与30次重复实验可靠性怎么保证数据划分按井进行每口井取90%做训练、10%做测试不跨井混切避免同一井段的数据同时出现在训练集和测试集里造成泄露。徐深1井3488条训练、387条测试1-1井2448条训练、272条测试1-2井3049条训练、339条测试1-3井2098条训练、233条测试1-4井1682条训练、187条测试。合计训练样本12765条、测试样本1418条。切分方式是顺序切取每口井前90%训练、后10%测试因为测井数据本身是沿深度排序的这样切能保证测试集覆盖更深层段比随机切分更接近实际勘探场景。三种模型各训练测试30次取平均结果作为评价指标这一步很关键。单次运行的随机初始化差异很大30次平均能滤掉初始化带来的波动。结果对比模型收敛次数训练识别率测试识别率QBP29/3096.61%12332/1276581.31%1153/1418PNN24/3089.82%11466/1276569.46%985/1418普通BP20/3083.05%10601/1276565.23%925/1418QBP在训练集上比PNN高6.79个百分点、比普通BP高13.56个百分点测试集上比PNN高11.85个百分点、比普通BP高16.08个百分点。这个差距在机器学习模型里算显著而且注意QBP的收敛次数也最高——29次收敛只有1次超过3000步上限。收敛速度快、识别率高、稳定性好三个指标同时占优基本排除了运气成分。不过训练集和测试集的差距有15个百分点说明QBP对训练数据拟合得很充分泛化仍有余量。论文把原因归结为量子神经元提升了非线性映射能力和网络负载量理解成表达能力更强、参数容量更大更直白。实际工程里如果只想追求测试集分数可以在这个基础上加dropout或早停但要小心破坏论文里30次平均、3000步上限的对比口径。5. 复现避坑量子BP网络五个容易翻车的细节检查5.1 训练不收敛随机初始化范围选错相位旋转直接飞掉现象训练loss前几百步纹丝不动或者震荡幅度越来越大最终冲到NaN。原因旋转角θ初始化和学习率不匹配。θ如果初始化范围过大移相后的聚合相位βⱼ在(−π,π]之间乱跳sin(π/2·f(αⱼ) − βⱼ)的梯度方向频繁反转学习率0.8在这种乱相初始化下会放大震荡。解决把θ初始化范围压到(−π/4, π/4)先让聚合相位处在单位圆的同一象限等loss稳定下降后再放开范围。论文没有明确给θ的初始化区间只说随机地选择之间数值赋给隐层旋转角度这里的之间按上下文推算范围不会太大我推荐从温和区间的版本跑通后再对齐论文口径。5.2 训练集识别率漂亮、测试集掉队15个百分点的差距从哪来现象训练集96%、测试集81%差15个百分点如果加大迭代步数训练集能到99%测试集反而往下掉。原因量子神经元的sin激活函数表达能力太强几千条训练样本不够约束参数空间网络把训练集的井间噪声也学进去了。同一区块5口井数据合并训练井与井之间的测井刻度微小差异会被误当成储层信号。解决按论文口径做z-score标准化后再编码能抹掉大部分井间刻度差异如果还过拟合给输出层权重wⱼₖ加L2正则系数从1e-4起调。正则和dropout会改变最终分数做对比实验时保持所有模型配置一致再谈优劣。5.3 量子态编码边界实值特别大或特别小时幅角跑去哪了现象某些参数比如LLD深侧向电阻率在致密层段可以飙到几百Sigmoid输出无限接近1幅角无限接近2π而低值段又接近0。结果编码后的cos和sin几乎退化成常量神经元对这些维度失去区分力。原因式(11)的Sigmoid映射对极端值饱和。这是这个编码方案的固有边界不是实现错误。解决先做分位数裁剪把每个测井参数的极端值压缩到5%~95%分位内再z-score标准化最后过Sigmoid编码。这样幅角能均匀铺开。论文的14183条样本来自同一区块分布相对干净跨区块复用时这个预处理不能省。5.4 隐层节点数拍脑袋为什么是10个不是8个也不是15个现象隐层节点从6试到15发现10个左右测试集分数最高8个时表达能力不足训练集只能到90%出头15个时测试集掉到76%。原因量子神经元的参数量等于2p每个隐层节点有θᵢⱼ和αⱼ加输入维度乘隐层数节点数的增长不是线性的过大的p会让sin激活组合过度复杂过小的p又表达不出相位干涉。解决把多次实验的调参过程记录下来按论文说的为提升训练效率同时保证网络优化能力定节点数。网格搜索时固定学习率0.8和迭代步数只动pp10附近多测几次确认平台区。隐层节点数这件事在论文里写得很简短很多复现者当玄学处理实际上就是标准的容量-泛化权衡跑一轮p从6到15的曲线就清楚了。5.5 收敛次数判定模糊3000步上限下到底看loss还是看准确率现象同样3000步上限有的实现看loss阈值判定收敛有的看测试集准确率不再变化就停两种口径统计出的收敛次数差很多论文给出的29次就无从对齐。原因论文里收敛次数的定义是达到3000步内完成训练的次数但没明确定义收敛阈值。loss降到0.001和降到0.0001步数差一倍。解决按论文的口径用在3000步内loss下降到预设精度精确度1/12作为收敛标准同时记录训练准确率复现时把这两组数都和论文的29/30、96.61%对一下对得上就说明梯度实现正确对不上优先检查式(8)有没有写错。6. 从头复现的最小路径与结果核对四步跑通QBP储层评价6.1 最小复现路径第一步用第3章的encode_real_record把14183条测井记录编码成量子态输入矩阵第二步搭第3章3.3节的qbp_forward骨架隐层10节点、输出1节点第三步按论文式(14)-(16)实现三组参数的梯度更新学习率0.8、迭代3000步第四步按第4章4.3节的表格做5口井的90/10划分30次重复实验记录收敛次数和识别率。路径不复杂难点全在梯度公式的符号和聚合相位βⱼ的求导上建议先用数值差分验证一遍梯度再跑全量数据。6.2 结果核对复现完成后用四组数字校准归一化后的训练/测试划分是否12765/1418QBP测试集识别率是否落在80%±2%收敛次数是否接近29/30学习率0.8时前500步loss是否单调下降。只要这四项有一项对不上大概率是θ、α、w三组参数的更新式子写串了把式(8)的sin内部符号重新推一遍重点检查f(γ)π/2前的正负号。6.3 工程扩展方向从论文往外走有三个值得试的方向把隐层的sin替换成cos构造相位偏移更丰富的组合把αⱼ和θᵢⱼ合并成一个张量用PyTorch或TensorFlow的自动微分训练省去手写梯度把6级定序分类改成软标签回归让输出层直接预测储层级别的连续值以适应类别边界模糊的实际情况。从那以后我每次复现这类带量子机制的论文都强制先跑通一个最小网络把论文的关键数值表格贴到代码注释里当校准基准数值对不上就不扩大实验。这个过程很笨但确实少走很多弯路。完整PDF里公式推导和原始数据都在适合和这篇笔记对着看希望帮到你。本文还有配套的精品资源点击获取