摘要:本文將分享一些自己關(guān)于深度學(xué)習(xí)模型調(diào)試技巧的總結(jié)思考以為主。不過(guò)以卷積神經(jīng)網(wǎng)絡(luò)為代表的深層神經(jīng)網(wǎng)絡(luò)一直被詬病,這對(duì)于模型在工業(yè)界的應(yīng)用推廣還是帶來(lái)了一定的阻礙。
作者楊軍,從事大規(guī)模機(jī)器學(xué)習(xí)系統(tǒng)研發(fā)及應(yīng)用相關(guān)工作。
本文將分享一些自己關(guān)于深度學(xué)習(xí)模型調(diào)試技巧的總結(jié)思考(以CNN為主)。
最近因?yàn)橐恍┬枰?,參與了一些CNN建模調(diào)參的工作,出于個(gè)人習(xí)性,我并不習(xí)慣于通過(guò)單純的trial-and-error的方式來(lái)調(diào)試經(jīng)常給人以”black-box”印象的Deep Learning模型。所以在工作推進(jìn)過(guò)程中,花了一些時(shí)間去關(guān)注了深度學(xué)習(xí)模型調(diào)試以及可視化的資料(可視化與模型調(diào)試存在著極強(qiáng)的聯(lián)系,所以在后面我并沒(méi)有對(duì)這兩者加以區(qū)分),這篇文章也算是這些工作的一個(gè)階段性總結(jié)。
這里總結(jié)的內(nèi)容,對(duì)于模型高手來(lái)說(shuō),應(yīng)該說(shuō)都是基本的know-how了。
我本人是計(jì)算機(jī)體系結(jié)構(gòu)專業(yè)出身,中途轉(zhuǎn)行做算法策略,所以實(shí)際上我倒是在大規(guī)模機(jī)器學(xué)習(xí)系統(tǒng)的開(kāi)發(fā)建設(shè)以及訓(xùn)練加速方面有更大的興趣和關(guān)注。不過(guò)機(jī)器學(xué)習(xí)系統(tǒng)這個(gè)領(lǐng)域跟常規(guī)系統(tǒng)基礎(chǔ)設(shè)施(比如Redis/LevelDB以及一些分布式計(jì)算的基礎(chǔ)設(shè)施等)還有所區(qū)別,雖然也可以說(shuō)是一種基礎(chǔ)設(shè)施,但是它跟跑在這個(gè)基礎(chǔ)設(shè)施上的業(yè)務(wù)問(wèn)題有著更強(qiáng)且直接的聯(lián)系,所以我也會(huì)花費(fèi)一定的精力來(lái)關(guān)注數(shù)據(jù)、業(yè)務(wù)建模的技術(shù)進(jìn)展和實(shí)際問(wèn)題場(chǎng)景。
說(shuō)得通俗一些,對(duì)自己服務(wù)的業(yè)務(wù)理解得更清晰,才可能設(shè)計(jì)開(kāi)發(fā)出更好的算法基礎(chǔ)設(shè)施。
另外在進(jìn)入文章主體之前想聲明的是,這篇文章對(duì)于Deep Learning的入門(mén)者參考價(jià)值會(huì)更高,對(duì)于Deep Learning老手,只期望能聊作幫助大家技術(shù)總結(jié)的一個(gè)余閑讀物而已。
文章的主要內(nèi)容源于Stanford CS231n Convolutional Neural Networks for Visual Recognition課程[1]里介紹的一些通過(guò)可視化手段,調(diào)試?yán)斫釩NN網(wǎng)絡(luò)的技巧,在[1]的基礎(chǔ)上我作了一些沿展閱讀,算是把[1]的內(nèi)容進(jìn)一步豐富系統(tǒng)化了一下。限于時(shí)間精力,我也沒(méi)有能夠把里面提到的所有調(diào)試技巧全部進(jìn)行嘗試,不過(guò)在整理這篇文章的時(shí)候,我還是參考了不止一處文獻(xiàn),也結(jié)合之前以及最近跟一些朋友的技術(shù)交流溝通,對(duì)這些方法的有效性我還是有著很強(qiáng)的confidence。
1、Visualize Layer Activations
通過(guò)將神經(jīng)網(wǎng)絡(luò)隱藏層的激活神經(jīng)元以矩陣的形式可視化出來(lái),能夠讓我們看到一些有趣的insights。
在[8]的頭部,嵌入了一個(gè)web-based的CNN網(wǎng)絡(luò)的demo,可以看到每個(gè)layer activation的可視化效果。
在[14]里為幾種不同的數(shù)據(jù)集提供了CNN各個(gè)layer activation的可視化效果示例,在里頭能夠看到CNN模型在Mnist/CIFAR-10這幾組數(shù)據(jù)集上,不同layer activation的圖形化效果。
原則上來(lái)說(shuō),比較理想的layer activation應(yīng)該具備sparse和localized的特點(diǎn)。
如果訓(xùn)練出的模型,用于預(yù)測(cè)某張圖片時(shí),發(fā)現(xiàn)在卷積層里的某個(gè)feature map的activation matrix可視化以后,基本跟原始輸入長(zhǎng)得一樣,基本就表明出現(xiàn)了一些問(wèn)題,因?yàn)檫@意味著這個(gè)feature map沒(méi)有學(xué)到多少有用的東西。
2、Visualize Layer Weights
除了可視化隱藏層的activation以外,可視化隱藏層的模型weight矩陣也能幫助我們獲得一些insights。
這里是AlexNet的第一個(gè)卷積層的weight可視化的示例:
通常,我們期望的良好的卷積層的weight可視化出來(lái)會(huì)具備smooth的特性(在上圖也能夠明顯看到smooth的特點(diǎn)),參見(jiàn)下圖(源于[13]):
這兩張圖都是將一個(gè)神經(jīng)網(wǎng)絡(luò)的第一個(gè)卷積層的filter weight可視化出來(lái)的效果圖,左圖存在很多的噪點(diǎn),右圖則比較平滑。出現(xiàn)左圖這個(gè)情形,往往意味著我們的模型訓(xùn)練過(guò)程出現(xiàn)了問(wèn)題。
3、Retrieving Images That Maximally Activate a Neuron
為了理解3提到的方法,需要先理解CNN里Receptive Field的概念,在[5][6]里關(guān)于Receptive Field給出了直觀的介紹:
如果用文字來(lái)描述的話,就是對(duì)應(yīng)于卷積核所生成的Feature Map里的一個(gè)neuron,在計(jì)算這個(gè)neuron的標(biāo)量數(shù)值時(shí),是使用卷積核在輸入層的圖片上進(jìn)行卷積計(jì)算得來(lái)的,對(duì)于Feature Map的某個(gè)特定neuron,用于計(jì)算該neuron的輸入層數(shù)據(jù)的local patch就是這個(gè)neuron的receptive field。
而對(duì)于一個(gè)特定的卷積層的Feature Map里的某個(gè)神經(jīng)元,我們可以找到使得這個(gè)神經(jīng)元的activation較大的那些圖片,然后再?gòu)倪@個(gè)Feature Map neuron還原到原始圖片上的receptive field,即可以看到是哪張圖片的哪些region maximize了這個(gè)neuron的activation。在[7]里使用這個(gè)技巧,對(duì)于某個(gè)pooling層的輸出進(jìn)行了activation maximization可視化的工作:
不過(guò),在[9]里,關(guān)于3提到的方法進(jìn)行了更為細(xì)致的研究,在[9]里,發(fā)現(xiàn),通過(guò)尋找maximizing activation某個(gè)特定neuron的方法也許并沒(méi)有真正找到本質(zhì)的信息。因?yàn)榧幢闶菍?duì)于某一個(gè)hidden layer的neurons進(jìn)行線性加權(quán),也同樣會(huì)對(duì)一組圖片表現(xiàn)出相近的semantic親和性,并且,這個(gè)發(fā)現(xiàn)在不同的數(shù)據(jù)集上得到了驗(yàn)證。
如下面在MNIST和ImageNet數(shù)據(jù)集上的觀察:
4.Embedding the Hidden Layer Neurons with ?t-SNE
這個(gè)方法描述起來(lái)比較直觀,就是通過(guò)t-SNE[10]對(duì)隱藏層進(jìn)行降維,然后以降維之后的兩維數(shù)據(jù)分別作為x、y坐標(biāo)(也可以使用t-SNE將數(shù)據(jù)降維到三維,將這三維用作x、y、z坐標(biāo),進(jìn)行3d clustering),對(duì)數(shù)據(jù)進(jìn)行clustering,人工review同一類圖片在降維之后的低維空間里是否處于相鄰的區(qū)域。t-SNE降維以后的clustering圖往往需要在較高分辨率下才能比較清楚地看到效果,這里我沒(méi)有給出引用圖,大家可以自行前往這里[15]里看到相關(guān)的demo圖。
使用這個(gè)方法,可以讓我們站在一個(gè)整體視角觀察模型在數(shù)據(jù)集上的表現(xiàn)。
5.Occluding Parts of the Image
這個(gè)方法在[11]里被提出。我個(gè)人非常喜歡這篇文章,因?yàn)檫@篇文章寫(xiě)得非常清晰,并且給出的示例也非常直觀生動(dòng),是那種非常適合推廣到工業(yè)界實(shí)際應(yīng)用場(chǎng)景的論文,能夠獲得ECCV 2014 best paper倒也算在意料之中。
在[11]里,使用了[12]里提出的Deconvolutional Network,對(duì)卷積層形成的feature map進(jìn)行reconstruction,將feature map的activation投影到輸入圖片所在的像素空間,從而提供了更直觀的視角來(lái)觀察每個(gè)卷積層學(xué)習(xí)到了什么東西,一來(lái)可以幫助理解模型;二來(lái)可以指導(dǎo)模型的調(diào)優(yōu)設(shè)計(jì)。
[11]的工作主要是在AlexNet這個(gè)模型上做的,將Deconvolutional Network引入到AlexNet模型以后的大致topology如下:
上圖里,右邊是正常的卷積神經(jīng)網(wǎng)絡(luò),左邊是Deconv Net,Deconv Net的輸入是卷積神經(jīng)網(wǎng)絡(luò)的某個(gè)卷積層/pooling層的輸出,另外,在Deconv Net與右邊的卷積神經(jīng)網(wǎng)絡(luò)之間存在一個(gè)Switches連接通道,用于執(zhí)行Deconv net里的Unpooling操作。注意上圖的一個(gè)細(xì)節(jié),Deconv Net的Unpooling操作,實(shí)際上是pooling操作的一個(gè)近似逆函數(shù),而非較精確逆函數(shù)。
在AlexNet模型上使用Deconv Net對(duì)feature map進(jìn)行input image space投影的效果示例如下:
從上面這個(gè)示例圖里能夠看得出來(lái),不同的feature map,使用Deconv Net進(jìn)行reconstruction,會(huì)投影出不同描述粒度的圖片,比如低層的layer reconstruction出來(lái)的會(huì)是邊緣性質(zhì)的圖像,而高層的layer reconstruction出來(lái)的則可能會(huì)是狗的臉部,計(jì)算器的輪廓等更general性質(zhì)的圖像。
另外,通過(guò)Deconv Net還可以觀察訓(xùn)練過(guò)程中,feature map的演化情況,基本的作法就是將每個(gè)卷積層里,activation較大的feature map使用Deconv Net進(jìn)行reconstruction,以epoch為時(shí)間粒度,觀察這些feature map reconstructed image的變化趨勢(shì),比如下圖:
能夠看到,低層的feature map比較快就會(huì)收斂,而高層的feature map則需要較長(zhǎng)epoch的訓(xùn)練時(shí)長(zhǎng)才會(huì)收斂。
接下來(lái)回到[11]里提出的"Occluding Parts of the Image”的方法,這個(gè)方法描述起來(lái)并不復(fù)雜:對(duì)于一張輸入圖片,使用一個(gè)小尺寸的灰度方塊圖作為掩模,對(duì)該原始圖片進(jìn)行遍歷掩模,每作一次掩模,計(jì)算一下CNN模型對(duì)這張掩模后圖片的分類預(yù)測(cè)輸出,同時(shí),找到一個(gè)在訓(xùn)練集上activation較大的feature map,每作一次掩模,記錄下來(lái)以掩模圖片作為輸入數(shù)據(jù)之后的feature map矩陣,將所有掩模所產(chǎn)生的這些feature map矩陣進(jìn)行elementwise相加,就可以觀察到掩模圖片的不同區(qū)域?qū)Ψ诸愵A(yù)測(cè)結(jié)果以及feature map的activation value的影響。示例圖如下:
上圖的第一列是原始圖片。
第二列是在訓(xùn)練集上選出了layer 5上的activation行為最顯著的一個(gè)feature map之后,對(duì)第一列的原始圖片使用一個(gè)灰度小色塊進(jìn)行occluding之后,所生成的該feature map的activation value進(jìn)行sum up之后的可視圖。
第三列是這個(gè)feature map(這個(gè)是在沒(méi)有occluding的image上應(yīng)用CNN模型生成的feature map)使用Deconv Net投影到input image space上的圖像。能夠看得出來(lái),第三列所reconstruct出的image與第二列中受occluding操作影響較大的區(qū)域明顯是相重合的。
最后說(shuō)一下我的感受,卷積神經(jīng)網(wǎng)絡(luò)自從2012年以AlexNet模型的形態(tài)在ImageNet大賽里大放異彩之后,就成為了圖像識(shí)別領(lǐng)域的標(biāo)配,甚至現(xiàn)在文本和語(yǔ)音領(lǐng)域也開(kāi)始在使用卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行建模了。不過(guò)以卷積神經(jīng)網(wǎng)絡(luò)為代表的深層神經(jīng)網(wǎng)絡(luò)一直被詬病“black-box”,這對(duì)于DL模型在工業(yè)界的應(yīng)用推廣還是帶來(lái)了一定的阻礙。
對(duì)于”black-box”這個(gè)說(shuō)法,一方面,我覺(jué)得確實(shí)得承認(rèn)DL這種model跟LR、GBDT這些shallow model相比,理解、調(diào)試的復(fù)雜性高了不少。想像一下,理解一個(gè)LR或是GBDT模型的工作機(jī)理,一個(gè)沒(méi)有受到過(guò)系統(tǒng)機(jī)器學(xué)習(xí)訓(xùn)練的工程師,只要對(duì)LR或GBDT的基本概念有一定認(rèn)識(shí),也大致可以通過(guò)ad-hoc的方法來(lái)進(jìn)行g(shù)ood case/bad case的分析了。而CNN這樣的模型,理解和調(diào)試其的技巧,則往往需要資深的專業(yè)背景人士來(lái)提出,并且這些技巧也都還存在一定的局限性。
對(duì)于LR模型來(lái)說(shuō),我們可以清晰地描述一維特征跟目標(biāo)label的關(guān)系(即便存在特征共線性或是交叉特征,也不難理解LR模型的行為表現(xiàn)),而DL模型,即便這幾年在模型的可解釋性、調(diào)試技巧方面有不少研究人員帶來(lái)了新的進(jìn)展,在我來(lái)看也還是停留在一個(gè)相對(duì)”rough”的控制粒度,對(duì)技巧的應(yīng)用也還是存在一定的門(mén)檻。
另一方面,我們應(yīng)該也對(duì)學(xué)術(shù)界、工業(yè)界在DL模型調(diào)試方面的進(jìn)展保持一定的關(guān)注。我自己的體會(huì),DL模型與shallow model的應(yīng)用曲線相比,目前還是存在一定的差異的。從網(wǎng)上拉下來(lái)一個(gè)pre-trained好的模型,應(yīng)用在一個(gè)跟pre-trained模型相同的應(yīng)用場(chǎng)景,能夠快速地拿到7,80分的收益,但是,如果應(yīng)用場(chǎng)景存在差異,或者對(duì)模型質(zhì)量要求更高,后續(xù)的模型優(yōu)化往往會(huì)存在較高的門(mén)檻(這也是模型調(diào)試、可視化技巧發(fā)揮用武之地的地方),而模型離線tune好以后,布署到線上系統(tǒng)的overhead也往往更高一些,不論是在線serving的latency要求(這也催生了一些新的商業(yè)機(jī)會(huì),比如Nervana和寒武紀(jì)這樣的基于軟硬件協(xié)同設(shè)計(jì)技術(shù)的神經(jīng)網(wǎng)絡(luò)計(jì)算加速公司),還是對(duì)memory consumption的需求。
以前有人說(shuō)過(guò)一句話“現(xiàn)在是個(gè)人就會(huì)在自己的簡(jiǎn)歷上寫(xiě)自己懂Deep Learning,但其實(shí)只有1%的人知道怎樣真正design一個(gè)DL model,剩下的只是找來(lái)一個(gè)現(xiàn)成的DL model跑一跑了事”。這話聽(tīng)來(lái)刺耳,但其實(shí)有幾分道理。
回到我想表達(dá)的觀點(diǎn),一方面我們能夠看到DL model應(yīng)用的門(mén)檻相較于shallow ?model要高,另一方面能夠看到這個(gè)領(lǐng)域的快速進(jìn)展。所以對(duì)這個(gè)領(lǐng)域的技術(shù)進(jìn)展保持及時(shí)的跟進(jìn),對(duì)于模型的設(shè)計(jì)調(diào)優(yōu)以及在業(yè)務(wù)中的真正應(yīng)用會(huì)有著重要的幫助。
像LR、GBDT這種經(jīng)典的shallow model那樣,搞明白基本建模原理就可以捋起袖子在業(yè)務(wù)中開(kāi)搞,不需要再分配太多精力關(guān)注模型技術(shù)的進(jìn)展的工作方式,在當(dāng)下的DL建模場(chǎng)景,我個(gè)人認(rèn)為這種技術(shù)工作的模式并不適合。也許未來(lái)隨著技術(shù)、工具平臺(tái)的進(jìn)步,可以把DL也做得更為易用,到那時(shí),使用DL建模的人也能跟現(xiàn)在使用shallow model一樣,可以從模型技術(shù)方面解放出更多精力,用于業(yè)務(wù)問(wèn)題本身了。
References:
[1]. Visualizing what ConvNets Learn. CS231n Convolutional Neural Networks for Visual Recognition
CS231n Convolutional Neural Networks for Visual Recognition
[2]. Matthew Zeiler. Visualizing and Understanding Convolutional Networks. Visualizing and Understanding Convolutional Networks.
[3]. Daniel Bruckner. deepViz: Visualizing Convolutional Neural Networks for Image Classification.?
[4]. ConvNetJS MNIST Demo. ConvNetJS MNIST demo
[5]. Receptive Field. CS231n Convolutional Neural Networks for Visual Recognition
[6]. Receptive Field of Neurons in LeNet. deep learning
[7]. Ross Girshick. Rich feature hierarchies for accurate object detection and semantic segmentation
Tech report. Arxiv, 2011.
[8]. CS231n: Convolutional Neural Networks for Visual Recognition. Stanford University CS231n: Convolutional Neural Networks for Visual Recognition
[9]. Christian Szegedy. Intriguing properties of neural networks. Arxiv, 2013.
[10]. t-SNE. t-SNE – Laurens van der Maaten
[11]. Matthew D.Zeiler. Visualizing and Understanding Convolutional Networks. Arxiv, 2011.
[12]. Matthew D.Zeiler. Adaptive Deconvolutional Networks for Mid and High Level Feature Learning, ICCV 2011.?
[13]. Neural Networks Part 3: Learning and Evaluation. CS231n Convolutional Neural Networks for Visual Recognition
[14]. ConvNetJS---Deep Learning in Your Browser.ConvNetJS: Deep Learning in your browser
[15]. Colah. Visualizing MNIST: An Exploration of Dimensionality Reduction.?
歡迎加入本站公開(kāi)興趣群商業(yè)智能與數(shù)據(jù)分析群
興趣范圍包括各種讓數(shù)據(jù)產(chǎn)生價(jià)值的辦法,實(shí)際應(yīng)用案例分享與討論,分析工具,ETL工具,數(shù)據(jù)倉(cāng)庫(kù),數(shù)據(jù)挖掘工具,報(bào)表系統(tǒng)等全方位知識(shí)
QQ群:81035754
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/4485.html
摘要:特征匹配改變了生成器的損失函數(shù),以最小化真實(shí)圖像的特征與生成的圖像之間的統(tǒng)計(jì)差異。我們建議讀者檢查上使用的損失函數(shù)和相應(yīng)的性能,并通過(guò)實(shí)驗(yàn)驗(yàn)證來(lái)設(shè)置。相反,我們可能會(huì)將注意力轉(zhuǎn)向?qū)ふ以谏善餍阅懿患褧r(shí)不具有接近零梯度的損失函數(shù)。 前 ?言GAN模型相比較于其他網(wǎng)絡(luò)一直受困于三個(gè)問(wèn)題的掣肘:?1. 不收斂;模型訓(xùn)練不穩(wěn)定,收斂的慢,甚至不收斂;?2. mode collapse; 生成器產(chǎn)生的...
摘要:可以參見(jiàn)以下相關(guān)閱讀創(chuàng)造更多數(shù)據(jù)上一小節(jié)說(shuō)到了有了更多數(shù)據(jù),深度學(xué)習(xí)算法通常會(huì)變的更好。 導(dǎo)語(yǔ)我經(jīng)常被問(wèn)到諸如如何從深度學(xué)習(xí)模型中得到更好的效果的問(wèn)題,類似的問(wèn)題還有:我如何提升準(zhǔn)確度如果我的神經(jīng)網(wǎng)絡(luò)模型性能不佳,我能夠做什么?對(duì)于這些問(wèn)題,我經(jīng)常這樣回答,我并不知道確切的答案,但是我有很多思路,接著我會(huì)列出了我所能想到的所有或許能夠給性能帶來(lái)提升的思路。為避免一次次羅列出這樣一個(gè)簡(jiǎn)單的列表...
摘要:二階動(dòng)量的出現(xiàn),才意味著自適應(yīng)學(xué)習(xí)率優(yōu)化算法時(shí)代的到來(lái)。自適應(yīng)學(xué)習(xí)率類優(yōu)化算法為每個(gè)參數(shù)設(shè)定了不同的學(xué)習(xí)率,在不同維度上設(shè)定不同步長(zhǎng),因此其下降方向是縮放過(guò)的一階動(dòng)量方向。 說(shuō)到優(yōu)化算法,入門(mén)級(jí)必從SGD學(xué)起,老司機(jī)則會(huì)告訴你更好的還有AdaGrad / AdaDelta,或者直接無(wú)腦用Adam??墒强纯磳W(xué)術(shù)界的paper,卻發(fā)現(xiàn)一眾大神還在用著入門(mén)級(jí)的SGD,最多加個(gè)Moment或者Nes...
摘要:深度學(xué)習(xí)在過(guò)去的幾年里取得了許多驚人的成果,均與息息相關(guān)。機(jī)器學(xué)習(xí)進(jìn)階筆記之一安裝與入門(mén)是基于進(jìn)行研發(fā)的第二代人工智能學(xué)習(xí)系統(tǒng),被廣泛用于語(yǔ)音識(shí)別或圖像識(shí)別等多項(xiàng)機(jī)器深度學(xué)習(xí)領(lǐng)域。零基礎(chǔ)入門(mén)深度學(xué)習(xí)長(zhǎng)短時(shí)記憶網(wǎng)絡(luò)。 多圖|入門(mén)必看:萬(wàn)字長(zhǎng)文帶你輕松了解LSTM全貌 作者 | Edwin Chen編譯 | AI100第一次接觸長(zhǎng)短期記憶神經(jīng)網(wǎng)絡(luò)(LSTM)時(shí),我驚呆了。原來(lái),LSTM是神...
閱讀 2277·2023-04-25 14:56
閱讀 2778·2021-11-16 11:44
閱讀 2806·2021-09-22 15:00
閱讀 1967·2019-08-29 16:55
閱讀 2248·2019-08-29 14:04
閱讀 2399·2019-08-29 11:23
閱讀 3747·2019-08-26 10:46
閱讀 1982·2019-08-22 18:43