一种基于“中国视云”平台的CNN核函数可视化方法
2021-06-24李成范胡子荣丁雪海童维勤
李成范, 胡子荣, 刘 岚, 丁雪海, 童维勤
(1.上海大学计算机工程与科学学院,上海 200444;2.上海工程技术大学电子电气工程学院,上海 201620)
0 引 言
近年来,人工智能领域发展迅速,尤其在深度学习这一重要领域尤为明显。图形处理器(Graphics Processing Unit,GPU)计算和并行计算的发展,推动着神经网络领域的研究快速步入了一个飞速发展的阶段。
神经网络在人工智能领域发展中起着重要作用,但依旧是可解释性有限的黑盒函数近似器,尤其现在涌现的好多模型都是封装过的,以至于难以理解内部的具体结构。比如卷积神经网络(Convolutional Neural Network,CNN)[1]和循环神经网络(Recurrent Neural Network,RNN)等深度学习模型,尽管在许多方面表现突出,但网络结构复杂,模型参数较多,以至从数学角度解释最终的输出与模型参数之间的关联面临着很大的困难[2-4]。对模型层次间参数关联和输出之间的影响也并不清楚。
随着我国综合国力的持续增长和政府对科研投入力度的不断加大,当前大型科研仪器保有量呈现井喷式增长趋势[5-7]。这为科技创新与发展提供了坚实的硬件基础。高校作为社会的一个重要组成部分,大型仪器的保有量和使用现状在一定程度上体现了其科技创新和服务社会的水平。高校大型科学仪器不仅设备数量众多,而且类型复杂多样,使用状况也不尽相同[8]。“中国视云”科研平台于2018年搭建而成。本文依托“中国视云”这一大型科学仪器平台,针对深度学习可视化中存在的问题和现有开发工具的不足,通过对CNN可视化进行研究[9-13],实现对神经网络结构、核函数、资源调度、学习特征可视化;通过可视化方法解释神经网络,还原和展示神经网络的训练过程[14-15]。
国内外对可视化方面的研究也颇多,2009年Erhan等提出了对传统的浅层网络进行解释的激活函数最大化算法[16],后期衍生出的许多特征可视化方法都是基于这种方法;Mahendran等提出了网络反演算法重建基于多个神经元激活的输入图像,以此来实现每个卷积层中学习到的综合特征图可视化,揭示了CNN在隐藏层层面的内部特征[17];Zeiler等[18]提出了基于反CNN的可视化方法,通过直接映射解释CNN中突出显示激活的特定神经元,从而直接链接神经元和输入数据;周博磊等在2018年提出了基于网络剖分的可视化[19],通过引用异构图像数据集有效地将输入图像分割为多个具有各种语义定义的部分,显著提高了神经元的可解释性。
深度学习可视化发展主要体现在对深度学习可视化内容的研究不断深入和可视化的工具越来越多[20-21],功能也越来越强大。深度学习可视化逐渐向涉及整个模型训练过程和特征量化的方向发展。这些工具目前仍局限于网络结构、特征图、训练参数等可视化[22-23]。随着深度学习可视化研究的深入,可视化工具势必会越来越多、功能也愈加丰富[24]。
本文提出的一种基于“中国视云”平台的CNN可视化方法,通过利用最大激活函数方法和模块化封装技术有效解决了可视化工具兼容性低、可视化种类单一、网络层次和训练过程细节模糊问题,具有较好的应用前景。
1 可视化工具模块设计
本可视化库封装采用Python文件,用户可以通过import工具直接引入。该可视化库的功能主要分为以下两个方面:
(1)创建数据存放目录。该功能通过将一次运行中的数据都存放至同一个目录,方便后端对数据文件的读取;
(2)可视化功能模块。该模块文件中封装了多个可视化功能,用户可以通过引入该模块来调用相应方法。
1.1 网络结构
网络结构可视化技术主要采用jCanvas.js图形库。jCanvas.js图形库是一个基于jQuery框架和canvas标签的纯JavaScript库,它提供多种基础图形和文本功能,并且通过jQuery封装一系列交互功能,例如点击、鼠标悬停等。
特征图可视化、核函数可视化都是基于网络结构可视化来实现的,通过选定网络某一层将相应层次的特征图、核函数内容可视化出来,本文采用的是Resnet
残差神经网络进行实验,网络结构如图1所示。由图1可见,Resnet是由6层网络构成的,分别为1个卷积层、4个残差层和1个池化层全连接层。
图1 Resnet50网络结构图
1.2 核函数
在神经网络中,核函数可视化是通过Activation Maximization(AM)算法实现的。AM算法是用来可视化各个卷积层输入偏好的一种算法,其中每个神经元都负责提取特定特征。对于给定具有该特征的输入,则可在该神经元处得到最大的激活值。AM算法是通过输入特征x来最大化神经元的激活函数:
式中:x为神经网络的输入;ɑi,j(θ,x)为输入特征x第i层中的第j个卷积的激活;θ为权重或偏置值。
算法的执行流程大致分为4步:
(1)输入图像,获得某一层的特定卷积的激活ɑi,j。
(2)在CNN参数固定情况下,计算激活ɑi,j(θ,x)与输入图像的梯度∂ɑi,j(θ,x)/∂x。
(3)通过迭代来更改输入图像的像素,使得激活最大化,采用梯度上升算法:
式中,η为步长。
(4)通过引用正则项获得与真实值相近的解。把网络的直接输入特征x认为是零均值的输入,则优化问题可定义为
式中,Rθ(x)为样本均值。在实际计算中,通过正则化操作,Rθ(x)将特征x映射为更合适的形式,因此x的迭代公式又可表示为
式中,Rθ的常用表达方式包括L2decay公式、高斯模糊、将范数值较小的像素设置为0、将贡献度小的像素设置为0 4种。
通过AM算法获得输入层的输入偏好,得知神经网络卷积核获得的是什么特征,最终达到了解神经网络学习内容的目的。
1.3 资源占用
关于资源占用情况的可视化,通过计算每个变量的大小来显示所占用的显存大小,进而确定所需要的显存和容量。
网络训练过程中占用资源的可视化能够为网络设计者和用户显示每层网络运算时间、运算占用资源等情况,从而能够更好指导相关人员分配内存,有针对性的优化网络结构。此外,通过资源占用可视化方法能够查看每一层隐藏层所消耗的时间和占用资源,进而重新设计和优化网络。可视化展示是通过将每个网络层的资源占用比例与运行时间比例以图形显示实现的。
1.4 高维数据降维
针对高维数据降维可视化,主要使用最常用的主成分分析法(principal components analysis,PCA)来实现对高维数据降维之后的可视化展示。
PCA是通过计算数据矩阵的协方差矩阵获得矩阵中的若干个特征值最大的特征向量。针对高维数据降维,采用奇异值分解方法(singular value decomposition,SVD)来分解协方差矩阵实现PCA算法,具体步骤如下:
步骤1输入数据集X={ x1,x2,…,xn}进行降维处理;
步骤2去平均值,即每一特征减去各自的平均值;
步骤3计算每一个特征的协方差矩阵;
步骤4利用SVD计算协方差矩阵的特征值与特征向量;
步骤5排序并选择若干个最大的特征值,将特征向量分别作为列向量组成特征向量矩阵;
步骤6将数据转换到新构建的特征向量空间,进行降维结果可视化展示。
2 实 验
2.1 实验环境及数据集
本实验依托“中国视云”平台,实验环境基于Linux服务器,所需的软件为:Python3.6+Pytorch1.2+torchvision0.4+TensorBoard2.0。
为便于对比和验证效果,本实验选择图像识别领域中公开的cifar10数据集进行测试与验证。该数据集共有60 000张彩色图像,图像尺寸均为32×32像素;每6 000张图像为一个类别,一共10类。在数据集中,设定训练集为前50 000张图像,测试集为后10 000张图像;每一类数据集中又随机抽取1 000张图像作为测试集,余下图像随机排列组成训练集。
实验利用ResNet50网络对设定好规则的cifar10数据集进行训练,并使用本文所开发的可视化工具进行核函数和资源占用等展示。
2.2 实验过程
实验步骤包括以下步骤:
(1)预处理数据集,包括载入cifar10数据集和相应的标注;
(2)搭建ResNet50网络,调用可视化模块中的特征图可视化、核函数可视化函数等功能,将需要可视化的内容写入到数据文件;
(3)将数据文件存放至指定目录,通过浏览器访问的方式展示可视化内容。
2.3 实验结果
本实验通过“中国视云”平台分别展示网络结构可视化、核函数可视化、资源占有数据可视化和高维数据降维可视化等结果。
(1)图2为CNN网络结构可视化页面。在卷积层中,分别展示卷积过程、批标准化(Batch Normalization,BN)、线性整流函数(Rectified Linear unit,ReLU)和最大池化层(max pool layer)。具体结果如图3所示。
由图3可见,CNN网络每层之间捕捉的特征效果明显不同,通过激活函数和最大池化层后特征效果更加明显。
在ResidualBlock层的输出特征显示中,以第4层为例,具体展示结果如图4所示。
由图4可见,ResidualBlock层中的特征图输出展示结果中已经突出显示了部分数据亮点。
图3 ConvLayer中各层输出特征图
图4 ResidualBlock第4层的结构和输出特征
图5 ResidualBlock网络结构可视化
(2)图5展示了ResNet50网络中第4个残差层的可视化结果。由图5可见,在ResNet50网络结构中,不仅显示出第4层结构包含一个卷积层和2个残差层,通过将存在卷积过程的计算层放在辅助层中,可以通过点击相应的层来查看输入偏好。
图6为残差层中卷积计算得到的输入偏好结果展示。在卷积层和残差层中,通过输入偏好的可视化,使得ResNet50模型学习过程和得到的特征结果清晰可见。
图6 ResidualBlock4中各层输入偏好
从图6中看出,神经网络在深层中更加关注纹理特征。由于输入偏好为随机图像,所以神经网络在浅层更加关注颜色特征(图7)。
图7 ResidualBlock1中ConvBlock层输入偏好
由图6、7可见,根据可视化结果可以清晰地了解特征学习程度和特征提取效果,根据可视化结果对模型参数或其他细节进行调整,以便达到更好的特征学习效果。
(3)在资源占用的可视化中,分别生成资源占用情况的环形柱状图,结果如图8、9所示。由图8可见,ResNet50网络的每一层中分别包含若干个展示各层占用内存情况的子计算层,图9分别显示ResNet50网络中每层和每层中子计算层的计算耗时情况。
图8 资源占用情况
图9 计算耗时情况
(4)在三维数据可视化中,主要显示测试集在测试过程中高维数据降维的结果,如图10所示。从图10中清晰地看出测试用例的分布情况,这表明模型已经具备了分类特征,不同类别数据在经过PCA降维后,分类情况非常明显。
图10 高维数据降维结果展示
3 结 语
本文提出的一种基于“中国视云”平台的CNN核函数可视化方法,并从网络结构、残差层、资源占用、高维数据降维等方面进行讨论和分析。
(1)通过最大激活函数实现CNN核函数可视化。与已有的核函数可视化方法比较,本文提出的方法能够清晰地可视化出每层的输出特征和神经网络学习特征。
(2)实现资源占用可视化,能够清晰显示神经网络每层资源使用和计算耗时情况,有助于调整网络结构和参数优化。
(3)实现可视化功能模块化,加强可视化模块泛用性。后续用户可通过直接调用封装好的模块实现所需的可视化功能。
通过对神经网络核函数细节的可视化展示,不仅可以让研究人员近距离、直观地了解每层之间的变化和联系,而且能够通过可视化展示改进模型结构和参数,优化模型性能。