李成范, 胡子榮, 劉 嵐, 丁雪海, 童維勤
(1.上海大學計算機工程與科學學院,上海 200444;2.上海工程技術(shù)大學電子電氣工程學院,上海 201620)
近年來,人工智能領(lǐng)域發(fā)展迅速,尤其在深度學習這一重要領(lǐng)域尤為明顯。圖形處理器(Graphics Processing Unit,GPU)計算和并行計算的發(fā)展,推動著神經(jīng)網(wǎng)絡(luò)領(lǐng)域的研究快速步入了一個飛速發(fā)展的階段。
神經(jīng)網(wǎng)絡(luò)在人工智能領(lǐng)域發(fā)展中起著重要作用,但依舊是可解釋性有限的黑盒函數(shù)近似器,尤其現(xiàn)在涌現(xiàn)的好多模型都是封裝過的,以至于難以理解內(nèi)部的具體結(jié)構(gòu)。比如卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)[1]和循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network,RNN)等深度學習模型,盡管在許多方面表現(xiàn)突出,但網(wǎng)絡(luò)結(jié)構(gòu)復雜,模型參數(shù)較多,以至從數(shù)學角度解釋最終的輸出與模型參數(shù)之間的關(guān)聯(lián)面臨著很大的困難[2-4]。對模型層次間參數(shù)關(guān)聯(lián)和輸出之間的影響也并不清楚。
隨著我國綜合國力的持續(xù)增長和政府對科研投入力度的不斷加大,當前大型科研儀器保有量呈現(xiàn)井噴式增長趨勢[5-7]。這為科技創(chuàng)新與發(fā)展提供了堅實的硬件基礎(chǔ)。高校作為社會的一個重要組成部分,大型儀器的保有量和使用現(xiàn)狀在一定程度上體現(xiàn)了其科技創(chuàng)新和服務(wù)社會的水平。高校大型科學儀器不僅設(shè)備數(shù)量眾多,而且類型復雜多樣,使用狀況也不盡相同[8]?!爸袊曉啤笨蒲衅脚_于2018年搭建而成。本文依托“中國視云”這一大型科學儀器平臺,針對深度學習可視化中存在的問題和現(xiàn)有開發(fā)工具的不足,通過對CNN可視化進行研究[9-13],實現(xiàn)對神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)、核函數(shù)、資源調(diào)度、學習特征可視化;通過可視化方法解釋神經(jīng)網(wǎng)絡(luò),還原和展示神經(jīng)網(wǎng)絡(luò)的訓練過程[14-15]。
國內(nèi)外對可視化方面的研究也頗多,2009年Erhan等提出了對傳統(tǒng)的淺層網(wǎng)絡(luò)進行解釋的激活函數(shù)最大化算法[16],后期衍生出的許多特征可視化方法都是基于這種方法;Mahendran等提出了網(wǎng)絡(luò)反演算法重建基于多個神經(jīng)元激活的輸入圖像,以此來實現(xiàn)每個卷積層中學習到的綜合特征圖可視化,揭示了CNN在隱藏層層面的內(nèi)部特征[17];Zeiler等[18]提出了基于反CNN的可視化方法,通過直接映射解釋CNN中突出顯示激活的特定神經(jīng)元,從而直接鏈接神經(jīng)元和輸入數(shù)據(jù);周博磊等在2018年提出了基于網(wǎng)絡(luò)剖分的可視化[19],通過引用異構(gòu)圖像數(shù)據(jù)集有效地將輸入圖像分割為多個具有各種語義定義的部分,顯著提高了神經(jīng)元的可解釋性。
深度學習可視化發(fā)展主要體現(xiàn)在對深度學習可視化內(nèi)容的研究不斷深入和可視化的工具越來越多[20-21],功能也越來越強大。深度學習可視化逐漸向涉及整個模型訓練過程和特征量化的方向發(fā)展。這些工具目前仍局限于網(wǎng)絡(luò)結(jié)構(gòu)、特征圖、訓練參數(shù)等可視化[22-23]。隨著深度學習可視化研究的深入,可視化工具勢必會越來越多、功能也愈加豐富[24]。
本文提出的一種基于“中國視云”平臺的CNN可視化方法,通過利用最大激活函數(shù)方法和模塊化封裝技術(shù)有效解決了可視化工具兼容性低、可視化種類單一、網(wǎng)絡(luò)層次和訓練過程細節(jié)模糊問題,具有較好的應用前景。
本可視化庫封裝采用Python文件,用戶可以通過import工具直接引入。該可視化庫的功能主要分為以下兩個方面:
(1)創(chuàng)建數(shù)據(jù)存放目錄。該功能通過將一次運行中的數(shù)據(jù)都存放至同一個目錄,方便后端對數(shù)據(jù)文件的讀取;
(2)可視化功能模塊。該模塊文件中封裝了多個可視化功能,用戶可以通過引入該模塊來調(diào)用相應方法。
網(wǎng)絡(luò)結(jié)構(gòu)可視化技術(shù)主要采用jCanvas.js圖形庫。jCanvas.js圖形庫是一個基于jQuery框架和canvas標簽的純JavaScript庫,它提供多種基礎(chǔ)圖形和文本功能,并且通過jQuery封裝一系列交互功能,例如點擊、鼠標懸停等。
特征圖可視化、核函數(shù)可視化都是基于網(wǎng)絡(luò)結(jié)構(gòu)可視化來實現(xiàn)的,通過選定網(wǎng)絡(luò)某一層將相應層次的特征圖、核函數(shù)內(nèi)容可視化出來,本文采用的是Resnet
殘差神經(jīng)網(wǎng)絡(luò)進行實驗,網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示。由圖1可見,Resnet是由6層網(wǎng)絡(luò)構(gòu)成的,分別為1個卷積層、4個殘差層和1個池化層全連接層。
圖1 Resnet50網(wǎng)絡(luò)結(jié)構(gòu)圖
在神經(jīng)網(wǎng)絡(luò)中,核函數(shù)可視化是通過Activation Maximization(AM)算法實現(xiàn)的。AM算法是用來可視化各個卷積層輸入偏好的一種算法,其中每個神經(jīng)元都負責提取特定特征。對于給定具有該特征的輸入,則可在該神經(jīng)元處得到最大的激活值。AM算法是通過輸入特征x來最大化神經(jīng)元的激活函數(shù):
式中:x為神經(jīng)網(wǎng)絡(luò)的輸入;ɑi,j(θ,x)為輸入特征x第i層中的第j個卷積的激活;θ為權(quán)重或偏置值。
算法的執(zhí)行流程大致分為4步:
(1)輸入圖像,獲得某一層的特定卷積的激活ɑi,j。
(2)在CNN參數(shù)固定情況下,計算激活ɑi,j(θ,x)與輸入圖像的梯度?ɑi,j(θ,x)/?x。
(3)通過迭代來更改輸入圖像的像素,使得激活最大化,采用梯度上升算法:
式中,η為步長。
(4)通過引用正則項獲得與真實值相近的解。把網(wǎng)絡(luò)的直接輸入特征x認為是零均值的輸入,則優(yōu)化問題可定義為
式中,Rθ(x)為樣本均值。在實際計算中,通過正則化操作,Rθ(x)將特征x映射為更合適的形式,因此x的迭代公式又可表示為
式中,Rθ的常用表達方式包括L2decay公式、高斯模糊、將范數(shù)值較小的像素設(shè)置為0、將貢獻度小的像素設(shè)置為0 4種。
通過AM算法獲得輸入層的輸入偏好,得知神經(jīng)網(wǎng)絡(luò)卷積核獲得的是什么特征,最終達到了解神經(jīng)網(wǎng)絡(luò)學習內(nèi)容的目的。
關(guān)于資源占用情況的可視化,通過計算每個變量的大小來顯示所占用的顯存大小,進而確定所需要的顯存和容量。
網(wǎng)絡(luò)訓練過程中占用資源的可視化能夠為網(wǎng)絡(luò)設(shè)計者和用戶顯示每層網(wǎng)絡(luò)運算時間、運算占用資源等情況,從而能夠更好指導相關(guān)人員分配內(nèi)存,有針對性的優(yōu)化網(wǎng)絡(luò)結(jié)構(gòu)。此外,通過資源占用可視化方法能夠查看每一層隱藏層所消耗的時間和占用資源,進而重新設(shè)計和優(yōu)化網(wǎng)絡(luò)。可視化展示是通過將每個網(wǎng)絡(luò)層的資源占用比例與運行時間比例以圖形顯示實現(xiàn)的。
針對高維數(shù)據(jù)降維可視化,主要使用最常用的主成分分析法(principal components analysis,PCA)來實現(xiàn)對高維數(shù)據(jù)降維之后的可視化展示。
PCA是通過計算數(shù)據(jù)矩陣的協(xié)方差矩陣獲得矩陣中的若干個特征值最大的特征向量。針對高維數(shù)據(jù)降維,采用奇異值分解方法(singular value decomposition,SVD)來分解協(xié)方差矩陣實現(xiàn)PCA算法,具體步驟如下:
步驟1輸入數(shù)據(jù)集X={ x1,x2,…,xn}進行降維處理;
步驟2去平均值,即每一特征減去各自的平均值;
步驟3計算每一個特征的協(xié)方差矩陣;
步驟4利用SVD計算協(xié)方差矩陣的特征值與特征向量;
步驟5排序并選擇若干個最大的特征值,將特征向量分別作為列向量組成特征向量矩陣;
步驟6將數(shù)據(jù)轉(zhuǎn)換到新構(gòu)建的特征向量空間,進行降維結(jié)果可視化展示。
本實驗依托“中國視云”平臺,實驗環(huán)境基于Linux服務(wù)器,所需的軟件為:Python3.6+Pytorch1.2+torchvision0.4+TensorBoard2.0。
為便于對比和驗證效果,本實驗選擇圖像識別領(lǐng)域中公開的cifar10數(shù)據(jù)集進行測試與驗證。該數(shù)據(jù)集共有60 000張彩色圖像,圖像尺寸均為32×32像素;每6 000張圖像為一個類別,一共10類。在數(shù)據(jù)集中,設(shè)定訓練集為前50 000張圖像,測試集為后10 000張圖像;每一類數(shù)據(jù)集中又隨機抽取1 000張圖像作為測試集,余下圖像隨機排列組成訓練集。
實驗利用ResNet50網(wǎng)絡(luò)對設(shè)定好規(guī)則的cifar10數(shù)據(jù)集進行訓練,并使用本文所開發(fā)的可視化工具進行核函數(shù)和資源占用等展示。
實驗步驟包括以下步驟:
(1)預處理數(shù)據(jù)集,包括載入cifar10數(shù)據(jù)集和相應的標注;
(2)搭建ResNet50網(wǎng)絡(luò),調(diào)用可視化模塊中的特征圖可視化、核函數(shù)可視化函數(shù)等功能,將需要可視化的內(nèi)容寫入到數(shù)據(jù)文件;
(3)將數(shù)據(jù)文件存放至指定目錄,通過瀏覽器訪問的方式展示可視化內(nèi)容。
本實驗通過“中國視云”平臺分別展示網(wǎng)絡(luò)結(jié)構(gòu)可視化、核函數(shù)可視化、資源占有數(shù)據(jù)可視化和高維數(shù)據(jù)降維可視化等結(jié)果。
(1)圖2為CNN網(wǎng)絡(luò)結(jié)構(gòu)可視化頁面。在卷積層中,分別展示卷積過程、批標準化(Batch Normalization,BN)、線性整流函數(shù)(Rectified Linear unit,ReLU)和最大池化層(max pool layer)。具體結(jié)果如圖3所示。
由圖3可見,CNN網(wǎng)絡(luò)每層之間捕捉的特征效果明顯不同,通過激活函數(shù)和最大池化層后特征效果更加明顯。
在ResidualBlock層的輸出特征顯示中,以第4層為例,具體展示結(jié)果如圖4所示。
由圖4可見,ResidualBlock層中的特征圖輸出展示結(jié)果中已經(jīng)突出顯示了部分數(shù)據(jù)亮點。
圖3 ConvLayer中各層輸出特征圖
圖4 ResidualBlock第4層的結(jié)構(gòu)和輸出特征
圖5 ResidualBlock網(wǎng)絡(luò)結(jié)構(gòu)可視化
(2)圖5展示了ResNet50網(wǎng)絡(luò)中第4個殘差層的可視化結(jié)果。由圖5可見,在ResNet50網(wǎng)絡(luò)結(jié)構(gòu)中,不僅顯示出第4層結(jié)構(gòu)包含一個卷積層和2個殘差層,通過將存在卷積過程的計算層放在輔助層中,可以通過點擊相應的層來查看輸入偏好。
圖6為殘差層中卷積計算得到的輸入偏好結(jié)果展示。在卷積層和殘差層中,通過輸入偏好的可視化,使得ResNet50模型學習過程和得到的特征結(jié)果清晰可見。
圖6 ResidualBlock4中各層輸入偏好
從圖6中看出,神經(jīng)網(wǎng)絡(luò)在深層中更加關(guān)注紋理特征。由于輸入偏好為隨機圖像,所以神經(jīng)網(wǎng)絡(luò)在淺層更加關(guān)注顏色特征(圖7)。
圖7 ResidualBlock1中ConvBlock層輸入偏好
由圖6、7可見,根據(jù)可視化結(jié)果可以清晰地了解特征學習程度和特征提取效果,根據(jù)可視化結(jié)果對模型參數(shù)或其他細節(jié)進行調(diào)整,以便達到更好的特征學習效果。
(3)在資源占用的可視化中,分別生成資源占用情況的環(huán)形柱狀圖,結(jié)果如圖8、9所示。由圖8可見,ResNet50網(wǎng)絡(luò)的每一層中分別包含若干個展示各層占用內(nèi)存情況的子計算層,圖9分別顯示ResNet50網(wǎng)絡(luò)中每層和每層中子計算層的計算耗時情況。
圖8 資源占用情況
圖9 計算耗時情況
(4)在三維數(shù)據(jù)可視化中,主要顯示測試集在測試過程中高維數(shù)據(jù)降維的結(jié)果,如圖10所示。從圖10中清晰地看出測試用例的分布情況,這表明模型已經(jīng)具備了分類特征,不同類別數(shù)據(jù)在經(jīng)過PCA降維后,分類情況非常明顯。
圖10 高維數(shù)據(jù)降維結(jié)果展示
本文提出的一種基于“中國視云”平臺的CNN核函數(shù)可視化方法,并從網(wǎng)絡(luò)結(jié)構(gòu)、殘差層、資源占用、高維數(shù)據(jù)降維等方面進行討論和分析。
(1)通過最大激活函數(shù)實現(xiàn)CNN核函數(shù)可視化。與已有的核函數(shù)可視化方法比較,本文提出的方法能夠清晰地可視化出每層的輸出特征和神經(jīng)網(wǎng)絡(luò)學習特征。
(2)實現(xiàn)資源占用可視化,能夠清晰顯示神經(jīng)網(wǎng)絡(luò)每層資源使用和計算耗時情況,有助于調(diào)整網(wǎng)絡(luò)結(jié)構(gòu)和參數(shù)優(yōu)化。
(3)實現(xiàn)可視化功能模塊化,加強可視化模塊泛用性。后續(xù)用戶可通過直接調(diào)用封裝好的模塊實現(xiàn)所需的可視化功能。
通過對神經(jīng)網(wǎng)絡(luò)核函數(shù)細節(jié)的可視化展示,不僅可以讓研究人員近距離、直觀地了解每層之間的變化和聯(lián)系,而且能夠通過可視化展示改進模型結(jié)構(gòu)和參數(shù),優(yōu)化模型性能。