郭爱华,路鹏飞,李祥,李娜
(1.东华理工大学 信息工程学院,江西 南昌;2.东华理工大学 软件学院,江西 南昌;3.中石油冀东油田勘探开发研究院,河北 唐山)
《机器学习》是我校信息工程学院开设的一门研究生课程。为了让学生更深刻地理解深度学习的过程,理论与实际结合,我们实验室设计出深度学习在断层识别中的实践教学案例。
断层识别在石油行业,不管是油气勘探还是油气开发中都是不可或缺的一个关键环节,断层有效识别对于油气运移、油气封堵、油气成藏等方面的研究至关重要。我们实验室利用深度学习在分类、特征提取等方面的优势将其应用到石油勘探开发领域。将断层识别看成二分类问题。
利用此次实践学习,引导学生选择深度学习框架,利用U-net[1-4]网格结构对训练数据进行深度学习产生训练模型,将验证数据对训练模型参数进行验证,根据残差情况对训练模型进行迭代更新产生符合精度要求的模型,最后利用得到的模型对我国东部某油田的实际数据进行断层识别。这次教学实践,不仅能让学生更熟练掌握Python 编程语言、认识到机器学习的优势与魅力,增强学生对机器学习的兴趣,提高学生动手能力,更是当今油气行业所需的实际应用项目,契合当代社会需求,解决实际问题。
深度学习是机器学习的一个子领域,它使用了多层次的非线性信息处理和抽象,用于有监督或无监督的特征学习、表示、分类和模式识别等[5-11]。各种深度学习算法的构建都是以人工神经网络为基础的。人工神经网络是模拟人脑神经元认识过程的抽象的计算模型。U-Net 网络结构于2015 年由Ronneberger 等在MICCAI 会议上提出,是基于全卷积神经网络(FCN)[12-14]拓展、修改而来,由编码器和解码器两部分组成。本次教学实践主要采用深度学习中的U-net 网络结构进行断层训练。
1.U-net 模型
图1展示了U-net 结构,它是在医学图像分割领域较为成功的一种网络模型。它由下采样的收缩路经和上采样的扩展路径组成。收缩路径是典型的卷积网络架构。它的架构是一种重复结构,每次重复都是两个3X3 卷积层后跟一个激活函数和一个步长为2 的2X2 的最大池化层。卷积层后激活函数使用ReLU。每次下采样操作都将特征图通道数增加2 倍,同时将图像尺寸缩小2 倍。扩展路径中的每一步都首先使用一次反卷积操作,将特征图通道数减半,然后拼接对应收缩路径裁剪得到的特征图,再采用2 个3X3 卷积层进行特征提取。并重复这一结构。在网络的最后一层是一个1X1 的卷积层,通过这一操作可以将64 通道的特征向量转换为所需要的分类结果的数量。
图1 U-net 网络结构
一块实际地震数据是一个三维数据体,包括主测线方向轴、联络线方向轴和时间轴。在用U-net深度学习进行三维地震数据断层识别时需要对U-net网络结构做些调整。2016 年,研究人员将U-Net 网络结构原本的2D 输入输出改为3D 输入输出,且网络各层3X3 卷积核改成3X3X3 卷积核、2X2 池化层改为2X2X2 池化层,2D 上采样改成3D 上采样。这样就可以满足三维数据的深度学习。
2.损失函数
损失函数最小化可使模型达到收敛状态,减少模型预测值的误差。本文采用的损失函数为Xie 等提出的平衡交叉熵损失函数,即
上式中:N为输入三维地震体数据点个数;β为非断层点与样本数的比; 是预测为断层点的概率是标签值(1 为断层点,0 为非断层点)。增加β可以使模型在训练过程中更加侧重于标签少的样本的学习,适合正、负样本不均衡的情况。在数据训练集中,非断层点(标签为0)远大于断层点(标签为1)的数量,因而应用平衡交叉熵损失函数能够增加模型对断层点的学习能力,以便更好地识别断层。
模型训练采用的数据集为Wu 等[15]共享的合成地震记录数据集,Wu 等基于合成地震记录模拟不同倾角、断距的断层和不同频率子波的地震响应,构建卷积神经网络检测存在不同倾角断层的可能性,制作出标签。共有220 个三维合成地震记录以及与之对应的标签,每个数据集大小为128X128X128。其中,200 个作为训练集,剩余的20 个作为测试集。图2 展示了剖面、时间切片以及对应的断层标签。
图2 训练数据
应用数据采用我国东部某油田断层较发育的实际工区。面积100m2,数据量4G。
实验的工作站环境如下:英特尔core i9 十代32G 内存,Nvidia Geofox 显卡显存8G。
目前,全世界比较流行的深度学习框架有Tensorflow、Caffe、Theano、MXNet、Torch 等。此次教学实践采用Tensorflow 作为深度学习框架,Tensorflow 拥有庞大的开发群体,集成好了很多经典的机器学习算法。本次实践深度学习的上采样过程就使用Tensorflow 深度学习框架自带的UpSampling3D 函数实现。后端利用GPU 模型训练进行加速计算。
本实验采用Python3.9 集成开发环境作为底层系统开发平台,Pycharm2021 作为上层开发平台。Python 提供了高效的高级数据结构,还能简单有效地面向对象编程。Python 是一种能够在多种平台上编写脚本和快速开发应用的编程语言,同时在Python、Pycharm 上可以安装第三方库。
在训练之前,首先对样本标签数据体进行预处理。考虑到不同地震数据的振幅值之间可能存在很大差异,因而对所有训练的地震数据进行归一化处理,每个数据用平均值减去标准差。同时,为了增加数据的多样性,提高训练模型的泛化能力,对数据集进行增强处理,将样本标签数据集沿z轴进行90°、180° 和270° 旋转,目的是避免插值引起的伪影。
导入训练数据(包括模型数据和标签数据)。进行深度学习通道数和数据块规模以及模型迭代次数设置,利用U-net 网络结构进行深度学习产生训练模型。
根据验证数据(包括验证模型数据和验证标签数据)对训练模型参数进行验证。根据残差情况对训练模型进行迭代更新。最终产生符合精度要求的模型。此次实验训练过程如图3 所示,损失函数采用平衡交叉熵损失函数。
图3 深度学习识别断层模型训练流程图
最后导入实际地震数据和训练模型,将训练模型应用到断层识别中进行低序级断层刻画。识别结果以SEGY 形式存储。
通过100 次训练,损失函数在训练集和验证集都收敛在0.04 左右,模型正确率在97%左右,训练用时8 小时。
实验数据为我国东部某油田实际区块,断裂十分发育。将此次深度学习断层识别出来的断层平面展布结果与常规相干对比可以看出(图4),一些低序级断层细节特征更丰富,断层展布更清晰。将断层体投在地震数据上断层位置与地震同相轴不连续处基本吻合(图5)。
图4 深度学习识别断层与相干算法识别断层平面展布特征对比(左:相干算法 右:深度学习算法)
图5 断层自动识别结果在地震剖面上显示
实践教学是加深对理论知识理解的有效途径,能够激发学生的动手能力和创新性,能够培养出具有高素质的工程技术人员。通过这次实践教学,让学生理解深度学习的精髓,掌握用基本深度学习算法解决问题的方法和步骤。另外本次实践教学紧密结合油气行业、工程勘探行业等具有实际需求的断层识别领域,让学生亲身体验用所学理论知识满足社会需求,引领学生以后在学习中遇到问题后如何分析问题、解决问题。