基于卷积神经网络算法(CNN)进行互联网流量图片内容识别技术的研究----网络流量运营技术研究

(整期优先)网络出版时间:2022-04-22
/ 5

基于卷积神经网络算法( CNN)进行互联网流量图片内容识别技术的研究 ----网络 流量运营技术研究

黄健 1 郭志超 1 崔凯 2

中国移动通信集团河南有限公司网络管理中心

摘要:

万物互联的时代,机遇与挑战并存,便利和风险共生。习近平总书记和国家相关单位也反复多次强调:“没有网络安全就没有国家安全,如何治理互联网、用好互联网是各国都关注、研究、投入的大问题。没有人能置身事外”。

而DPI作为工信部两部委要求部署在国家网络上面的互联网流量监控设备,近几年也在IDCISP、日志留存等网络安全细分领域发挥相关的作用。但随着互联网内容的日趋丰富和多样化,对DPI在互联网流量内容和信息方面的识别能力提出了更高的要求。并且内容和信息的识别除了在网络安全信息安全方面发挥作用,也能应用于市场经营、信息化建设等多个领域。

在此背景下,利用大数据样本,通过对卷积神经网络算法的改造和优化,并与DPI已有相关能力相整合,最终构建了一套DPI识别互联网图片信息内容的方法理论以及多次验证形成相应的实施代码,为DPI在我国信息化、网络安全等基础建设中提供了一种新的技术支撑和应用前景。


关键词:DPI、图像、信息、识别、卷积神经网络、大数

第一章 研究背景:

  1. 环境背景:电信网络经过多年的DPI及相关配套的部署和建设,在DPI探针、分流设备、采集服务器、集群等资源方面投入了大量的资金,形成了从国际出口、骨干出口、省网出口、IDC出口全流量采集的局面,甚至个别省份已经着手城域网DPI的部署工作,如何更有效的发挥这些设备更大的价值,是近几年电信运营商集团公司及各省公司主要研究的方向之一。

62620c18f218b_html_da25d7e36731e274.png

(某省省网DPI部署现状)

62620c18f218b_html_517b952f118479e4.png

(某省IDC出口DPI部署)

与此同时,随着网间结算的取消,加上疫情蔓延的国际经济衰退,使得在国际出口和骨干网间出口进行流量控制的必要性逐渐弱化;因此DPI设备的流控功能实施频率和场景不断减少;相反,在网络安全、数字化中国建设以及流量运营增值越来越受到重视和推动的大环境下,运用DPI及相关配套设备,强化其识别能力,对互联网流量里面的协议、成分、业务乃至内容进行监测和深度识别将是未来流量运营和相关技术发展演进的方向。本次研究从技术实现层面,结合现网环境,运用相关识别技术和算法,提出基于DPI或类似技术在某些特定流量成分方面的深入识别的一种可行性,为将来更宽泛复杂的识别场景(HTTPS加密流量识别等)做技术铺垫。

  1. 硬件背景:随着计算机科技的高速发展,在互联网流量采集方面,配备的x服务器配置一般为(机架式服务器CPU:20核2*Intel 6248,内存:12*32G DDR4,硬盘12*8TB-SATA),综合性能不俗;而集团给的现网配置方案为:100G以内的链路采集服务器配置数量不得少于1台,每100G递增1台服务器,以此类推。从现网实际情况来看,采集服务器性能占用普遍留有较多空间,完全具备对其软件升级从而实现更多功能的可能。

  2. 技术背景:得益于计算机算力的迅速增长,低代码和高算力是近几年整个计算机行业发展的方向,尤其是在AI、机器学习方面,以Python为代表的低代码开发语言获得了空前的发展,使得开发者可以更加专注于最终实现;再配合CPU/GPU算力的快速提升,使得很多高复杂度重计算型的场景也能够以轻量快速的方式予以实现。

  3. 需求背景:无论从加快数字化发展、建设数字中国、没有网络安全就没有国家安全的国家战略大方向来看,还是从电信运营商日常经营运营的例行具体工作落地来说,数字化的最核心的不是数据存储、也不是数据处理和分析、不是上层的应用和场景落地,而是最基础的数据识别也就是数据生产,也就是把最基本的诸如0101001这样二进制的码流正确的翻译成大家能够理解的概念,如果连最基础的数据都没有办法识别出来并且保证一定的正确性,在此基础之上的任何工作都没有意义也达不到效果,因此,数据生产远比数据消费重要。而实现和保证数据生产正确准确的技术,才是最最关键和根本的需求。


第二章 问题的提出及本课题研究目标:

  1. 现实问题:中国电信运营商经过多年的经营运营,数字运营流量经营已经成为了现实;而在数据化经营的过程中,所谓的数字,全部都以二进制的方式进行存储、计算和在运营商构建的网络中传输,如何读懂最基本的高低电平构成的诸如0101…二进制码流成为了最最基础也是最最关键的前提,否则数字化的经营和运营完全无从谈起,而更高要求的网络安全信息安全则更是纸上谈兵。

为了解决数字化过程中的“认字”问题,中国电信运营商根据国家相关机构的要求很早就开始部署相关专用设备,而一些通信专用设备例如路由器、探针、DPI等各种不同叫法的设备,或多或少,或深或浅的具备“认字”的能力,这其中以DPI的能力最为专业。目前无论是移网DPI还是固网DPI,均以识别信令数据和协议头部字段数据为主。

62620c18f218b_html_505975658fa232bd.png

(现阶段DPI识别以红、橙、黄为主)

然而,随着近几年尤其是移动终端的处理性能和计算能力不断的增强,一方面,HTTPS等加密协议开始大规模在各种终端上普及,另一方面资源服务器尤其云的普及,也使得整个互联网资源的调度过程异常复杂。因此,仅仅依赖与HTTP、TCP等协议的标准明文的头部字段,越来越不能够体现足够完整和真实的数据情况,中国电信运营商的数字化转型和运营面临较大的挑战。

如何在日趋复杂多变的互联网业务形态和技术更新变化下,持续性的迭代更新完善电信运营商的“认字”能力,避免被完全管道化,是目前存在的主要问题,也是本次研究的方向。

  1. 研究方向及思路:利用卷积神经网络、人工智能对未知数据、加密流量进行识别,已有较多的研究者在这方面做了大量的尝试,然而收效甚微,甚至很多只停留在理论层面没有实际验证和落地。综合来看,主要有以下几个原因:

  1. 一开始就求大而全,想通过单一一种方法就能识别绝大部分的未知流量,没有针对不同的协议、业务、内容区别对待,想着一药治百病;而从目前的技术手段来说,还远无法实现;

  2. 高估算法的能力,忽视了样本的重要性,样本的不足和缺失,再好的算法也无济于事,甚至有些方案靠人工判断累计样本,失去了智能化和自动化的意义同时也无法做到全面和及时更新;

为了避免重蹈其他方案的覆辙,本研究的前置条件和范围缩小为以下几点:

  1. 本研究只为单一类型的流量/业务/信息的识别,找到一种方法,对特定类型的互联网流量或内容进行某一方面的识别;从而找到一种针对未知数据进行认识的思路和方法;

  2. 本研究完全排除人工积累样本的方式,采取替代样本或自动化收集样本的方式来开展。

  1. 研究对象和目标:

研究对象的选择:

  1. 对象选取:由于互联网流量里面,协议头部字段和信令字段属于行业标准,此类信息的获取非常成熟,这里不再作为研究对象。而在传统的互联网流量采集和识别里面,基本完全忽略body也就是payload部分,这里面有大量的信息被丢弃,如想进一步提升流量数据的识别量,势必要对payload的具体内容进行分析判断。

  2. payload中的数据类型较多,有文字、图片、代码、视频、音频等等相当多的数据,为了便于通俗性的理解,排除了代码脚本类的数据类型,同时也是为了考虑到流量镜像到设备里面所占用的存储空间,音频视频先暂时排除掉,再结合近几年对于图像识别方面的各种引擎的层出不穷,综合考虑,本次研究对象选定为图片数据。

研究目标:运用图像识别相关算法,结合代码能力,构建一套针对互联网流量里面图片的内容进行识别分析判断的技术,最终实现对图片主要内容进行识别的目的。


第三章 研究方法与过程:

  1. 代码环境:考虑到目前电信运营商部分省大数据集群基本都是以Hadoop开源架构开展,在结合通信专用设备嵌入式的开发基本是以C语言为主,而Python本身就是用C语言编写的,包括其中很多包也是C语言编写,Python和C具有天然的兼容性,并且目前主流的DPI厂家自研的采集服务软件,均能很好的适配Python,便于后期Python程序直接加载在采集服务器上对现网流量图像数据进行识别。另外前面也提到,在图像识别、神经网络和人工智能方面,Python也会非常明显的优势。综合考虑,本次研究的代码实现以Python为主。


章 卷积神经网络结构介绍:

4.1 为什么要使用卷积神经网络

在图像识别领域,用传统的神经网络并不合适,当使用全连接神经网络处理大尺寸图像具有三个明显的缺点:

(1)首先将图像展开为向量会丢失空间信息;

(2)其次参数过多效率低下,训练困难;

(3)同时大量的参数也很快会导致网络过拟合。

4.2 我们要让计算机做什么

以图像识别为例,当我们的计算机看到一幅图片的时候,它实际上看到的是一组像素值。根据图像的分辨率和大小,假定它看到的是32*32*3的数组,这里的3代表这是一幅RGB的彩色图像。其中每一个数字的值都是0到255不等,代表了像素值的强弱。这些数字对于我们进行图像分类时毫无意义,但这是计算机唯一可用的输入。当你给计算机这个数组作为输入时,它最终会输出数字,描述了图像是一个类的概率(0.85为猫,0.1为狗,0.05为鸟等)。

4.3卷积层和卷积过程

卷积神经网络主要由这几类层构成:输入层、卷积层、激活层、池化层和全连接层。通过将这些层叠加起来,就可以构建一个完整的卷积神经网络。在实际应用中往往将卷积层与激活层共同称之为卷积层,所以卷积层经过卷积操作后也是要经过激活函数的。具体说来,卷积层和全连接层对输入执行变换操作的时候,不仅会用到激活函数,还会用到很多参数,即神经元的权值w和偏差b;而激活层和池化层则是进行一个固定不变的函数操作。卷积层和全连接层中的参数会随着梯度下降被训练,这样卷积神经网络计算出的分类评分就能和训练集中的每个图像的标签吻合了。

4.3.1 卷积层

卷积层就是从图像的像素数值组中提取最基本的特征。如何提取呢?假定输入的图像是一个32*32*3的数组,我们用一个5*5*3的模板沿着图像的左上角一次移动一个格子从左上角一直移动到右下角。输入的图像数组我们称为接受域,我们使用的模板叫做滤波器(也叫卷积核)。卷积核也是由数组组成,其中每个数字称为权重。输入的数组经过这一轮卷积后输出的数组大小为28*28(32-5+1),深度由卷积核的数量决定。这个过程如下图所示:

62620c18f218b_html_a27002c6b44d8b8a.gif

(卷积操作过程)

4.3.2 详解卷积计算过程

在图像识别中我们提到的卷积是二维卷积,即离散二维滤波器(也称作卷积核)与二维图像做卷积操作,简单的讲是二维滤波器滑动到二维图像上所有位置,并在每个位置上与该像素点及其领域像素点做内积。

62620c18f218b_html_97af8402432f3d0d.gif

62620c18f218b_html_9948d100cba4bbad.png

(卷积计算过程)

上图给出一个卷积计算过程的示例图,输入图像大小为H=5,W=5,D=3,即5×5大小的3通道(RGB,也称作深度)彩色图像。这个示例图中包含两(用K表示)组卷积核,即图中滤波器W0和W1。在卷积计算中,通常对不同的输入通道采用不同的卷积核,如图示例中每组卷积核包含(D=3)个3×3(用F×F表示)大小的卷积核。另外,这个示例中卷积核在图像的水平方向(W方向)和垂直方向(H方向)的滑动步长为2(用S表示);对输入图像周围各填充1(用P表示)个0,即图中输入层原始数据为蓝色部分,灰色部分是进行了大小为1的扩展,用0进行扩展。经过卷积操作得到输出为3×3×2(用Ho×Wo×K表示)大小的特征图,即3×3大小的2通道特征图,其中Ho计算公式为:Ho=(H−F+2P)/S+1,Wo=(W−F+2P)/S+1。而输出特征图中的每个像素,是每组滤波器与输入图像每个特征图的内积再求和,再加上偏置b,偏置通常对于每个输出特征图是共享的。输出特征图o[:,:,0]中的最后一个结果为1的计算过程如下所示:

62620c18f218b_html_7a4625cd6fbfe709.gif

符号说明:

  • H:图片高度;

  • W:图片宽度;

  • D:原始图片通道数,也是卷积核个数;

  • F:卷积核高宽大小;

  • P:图像边扩充大小;

  • S:滑动步长。

  • K:深度,输出单元的深度

在卷积操作中卷积核是可学习的参数,经过上面的示例介绍,每层卷积的参数大小为D×F×F×K。卷积层的参数较少,这也是由卷积层的主要特性即局部连接和共享权重所决定的。

4.3.3 Stride

步幅(stride)指的是滤波矩阵在输入矩阵上滑动跨越的单元个数。设步幅大小为S,当S为1时,滤波器每次移动一个像素的位置。当S为2时,每次移动滤波器会跳过2个像素。S越大,卷积得到特征图就越小。以一维数据为例,当卷积核为[1,0,-1],输入矩阵为[0, 1, 2, -1, 1, -3, 0]时,下图显示了步幅分别为1和2卷积层的神经元分布情况。

62620c18f218b_html_6b15b396f8a077b0.png

(不同步幅的区别)

4.3.4 Zero-padding

补零操作通常用于边界处理。在有些场景下,卷积核的大小并不一定刚好就被输入数据矩阵的维度大小整除。因此,就会出现卷积核不能完全覆盖边界元素的情况。这时,我们就需要在输入矩阵的边缘使用零值进行填充,使得在输入矩阵的边界处的大小刚好和卷积核大小匹配。这样做的结果,相当于对输入图像矩阵的边缘进行了一次滤波。零填充的好处在于,它可以让我们控制特征图的大小。使用零填充的卷积叫做泛卷积(wide convolution),不适用零填充的叫做严格卷积(narrow convolution)。

4.3.5 空间排列

哪些因素决定着输出数据体中神经元的数量,以及它们的排列方式呢?3个超参数控制着输出数据体的尺寸:深度(depth),步长(stride)和零填充(zero-padding)。

(1) 输出数据体的深度:它是一个超参数,和使用的滤波器的数量一致,而每个滤波器在输入数据中寻找一些不同的东西,即图像的某些特征。如下图所示,将沿着深度方向排列、感受野相同的神经元集合称为深度列(depth column)。

62620c18f218b_html_465fc599ca0c6cc0.png

(神经元排列方式)


(2) 在滑动滤波器的时候,必须指定步长。当步长为1,滤波器每次移动1个像素;当步长为2,滤波器滑动时每次移动2个像素,当然步长也可以是不常用的3,或者更大的数字,但这些在实际中很少使用),这个操作会让输出数据体在空间上变小。

(3) 有时候将输入数据体用0在边缘处进行填充是很方便的。这个零填充(zero-padding)的尺寸是一个超参数。零填充有一个良好性质,即可以控制输出数据体的空间尺寸(最常用的是用来保持输入数据体在空间上的尺寸,使得输入和输出的宽高都相等)。

4.4激活层

首先,激活函数不是真的要去激活什么。在神经网络中,激活函数的作用是能够给神经网络加入一些非线性因素,使得神经网络可以更好地解决较为复杂的问题。

比如在下面的这个问题中:

62620c18f218b_html_986de8157ea6789a.png

如上图,在最简单的情况下,数据是线性可分的,只需要一条直线就已经能够对样本进行很好地分类。

62620c18f218b_html_e7f1cd0d569a0def.png

但如果情况变得复杂了一点呢?在上图中,数据就变成了线性不可分的情况。在这种情况下,简单的一条直线就已经不能够对样本进行很好地分类了。

62620c18f218b_html_3d70dcb4368c695b.png

于是我们尝试引入非线性的因素,对样本进行分类。

在神经网络中也类似,我们需要引入一些非线性的因素,来更好地解决复杂的问题。而激活函数恰好能够帮助我们引入非线性因素,它使得我们的神经网络能够更好地解决较为复杂的问题。

简单的说激活函数的意义在于判定每个神经元的输出62620c18f218b_html_3bb5c6046a19a59b.gif 有没有达到阈值。

62620c18f218b_html_67141792037a7e0b.jpg

放在图像识别卷积神经网络中来思考,卷积层的激活函数的意义在于这一块区域的特征强度如果没有达到一定的标准,就输出0,表明这种特征提取方式(卷积核w)不能在该块区域提取到特征,或者说这块区域的这种特征很弱。由于输出0时,激活函数梯度几乎都为0,所以在特征很弱的区域,梯度几乎不下降,也就是说,和该特征无关的区域不会影响到该特征提取方式的训练。

早期研究神经网络主要采用sigmoid函数或者tanh函数,输出有界,很容易充当下一层的输入。近些年Relu函数及其改进型(如Leaky-ReLU、ELU等)在多层神经网络中应用比较多。下面我们来总结下这些激活函数。

4.4.1 Sigmoid函数

Sigmoid是常用的非线性的激活函数,它的数学形式如下:

62620c18f218b_html_d2a44c361e973d6d.gif

Sigmoid函数的图像如下:

62620c18f218b_html_f94a17620055fb31.png

(Sigmoid函数)

  • 特点

它能够把输入的连续实值变换为0和1之间的输出,特别的,如果是非常大的负数,那么输出就是0;如果是非常大的正数,输出就是1。

  • 缺点

sigmoid函数曾经被使用的很多,不过近年来,用它的人越来越少了。主要是因为它固有的一些缺点。

缺点1:在深度神经网络中梯度反向传递时导致梯度爆炸和梯度消失,其中梯度爆炸发生的概率非常小,而梯度消失发生的概率比较大。首先来看Sigmoid函数的导数,如下图所示:

62620c18f218b_html_cd500a241462b60e.png

(Sigmoid函数导数)

如果我们初始化神经网络的权值为[0, 1]之间的随机值,由反向传播算法的数学推导可知,梯度从后向前传播时,每传递一层梯度值都会减小为原来的0.25倍,如果神经网络隐层特别多,那么梯度在穿过多层后将变得非常小接近于0,即出现梯度消失现象;当网络权值初始化为(1, +∞)区间内的值,则会出现梯度爆炸情况。

缺点2:Sigmoid的output不是0均值(即zero-centered)。这是不可取的,因为这会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入。产生的一个结果就是:62620c18f218b_html_805d65928e5a9506.gif ,那么对w求局部梯度则都为正,这样在反向传播的过程中w要么都往正方向更新,要么都往负方向更新,导致有一种捆绑的效果,使得收敛缓慢。当然了,如果按batch去训练,那么batch可能得到不同的信号,所以这个问题还是可以缓解一下的。因此,非0均值这个问题虽然会产生一些不好的影响,不过跟上面提到的梯度消失问题相比还是要好很多的。

缺点3:其解析式中含有幂运算,计算机求解时相对来讲比较耗时。对于规模比较大的深度网络,这会较大地增加训练时间。

4.4.2 tanh函数

tanh函数解析式:

62620c18f218b_html_fcca355edf8d8afa.gif

tanh函数及其导数的几何图像如下图:

62620c18f218b_html_6ff56474de9cfecf.png

(tanh函数)

tanh解决了Sigmoid函数的不是zero-centered输出问题,然而,梯度消失(gradient vanishing)的问题和幂运算的问题仍然存在。

4.4.3 ReLu函数

Relu函数的解析式:

62620c18f218b_html_a06662ec17bdea9b.gif

Relu函数及其导数的图像如下图所示:

62620c18f218b_html_9ea2b4d153253c55.png

(ReLu函数)

ReLU函数其实就是一个取最大值函数,注意这并不是全区间可导的,但是我们可以取sub-gradient,如上图所示。ReLU虽然简单,但却是近几年的重要成果,有以下几大优点:

1)解决了梯度消失问题(在正区间);

2)计算速度非常快,只需要判断输入是否大于0;

3)收敛速度远快于sigmoid和tanh。

ReLU也有几个需要特别注意的问题:

1)ReLU的输出不是zero-centered的;

2)Dead ReLU Problem,指的是某些神经元可能永远不会被激活,导致相应的参数永远不能被更新。有两个主要原因可能导致这种情况产生:(1)非常不幸的参数初始化,这种情况比较少见;(2) learning rate太高导致在训练过程中参数更新太大,不幸使网络进入这种状态。解决方法是可以采用Xavier初始化方法,以及避免将learning rate设置太大或使用adagrad等自动调节learning rate的算法。

4.4.4 Leaky ReLu函数(PReLU

函数表达式:

62620c18f218b_html_beac32ffc26d3464.gif

Leaky Relu函数及其导数的图像如下图所示:

62620c18f218b_html_ee38f2859923d87c.png

(Leaky ReLu函数)

人们为了解决Dead ReLU Problem,提出了将ReLU的前半段设为62620c18f218b_html_222a7c87aff20476.gif 而非0,通常62620c18f218b_html_f0842c807947b2a8.gif 。另外一种直观的想法是基于参数的方法,即62620c18f218b_html_bb805204aecc19ee.gif ,其中62620c18f218b_html_2c1bf694642209cc.gif 可由方向传播算法学出来。理论上来讲,Leaky ReLU有ReLU的所有优点,外加不会有Dead ReLU问题,但是在实际操作当中,并没有完全证明Leaky ReLU总是好于ReLU。

4.4.5 ELU(Exponential Linear Units)函数

函数表达式:

62620c18f218b_html_6046141839d49ddf.gif

函数及其导数的图像如下图所示:

62620c18f218b_html_b7b652304b09f678.png

(ELU函数)

ELU也是为解决ReLU存在的问题而提出,显然,ELU有ReLU的基本所有优点,以及:

1)、不会有Dead ReLU问题;

2)、输出的均值接近0,zero-centered。

它的一个小问题在于计算量稍大。类似于Leaky ReLU,理论上虽然好于ReLU,但在实际使用中目前并没有好的证据ELU总是优于ReLU。

4.4.6 函数的选择

这个问题目前没有确定的方法,主要凭人为经验。

1)深度学习往往需要大量时间来处理大量数据,模型的收敛速度是尤为重要的。所以,总体上来讲,训练深度学习网络尽量使用zero-centered数据(可以经过数据预处理实现)和zero-centered输出。

2)如果使用ReLU,那么一定要小心设置learning rate,而且要注意不要让网络出现很多“dead”神经元,如果这个问题不好解决,那么可以试试 Leaky ReLU、ELU。

3)最好不要用sigmoid,可以尝试使用tanh,不过它的预期效果会比不上ReLU。


章 测试效果

基于现网流量数据测试效果展示

测试一:

62620c18f218b_html_754b24ae6f11affd.png


测试二:

62620c18f218b_html_c60a66babada7bc0.png


测试三:

62620c18f218b_html_bb8b9af11e7e6ebc.png


测试四:

62620c18f218b_html_40461c7c0eb0ae03.png


章 后续及展望

单纯CNN的研究和实现暂时告一段落,后续的研究将基于CRNN算法开展,研究方向包括互联网流量的增强识别、图像识别反样本训练以及HTTPS加密协议的业务甚至内容识别。








作者信息:

黄健,1980年11月,男,汉族,籍贯:广东省普宁市,大学本科,职称:助理工程师、高级技师,互联网流量运营技术研究。

郭志超,1979年7月,男,汉族,籍贯:陕西省兴平市,大学本科,职称:助理工程师、电信机务员三级(高级),云网技术研究。

崔凯,1977年3月,男,汉族,籍贯:河北省安平县,大学本科,职称:通信工程师(互联网技术),云网技术研究。