国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

知識蒸餾在神經(jīng)網(wǎng)絡(luò)中的應(yīng)用

2023-02-18 09:54:42牛小明
科海故事博覽 2023年3期
關(guān)鍵詞:部署損失卷積

李 銳,周 勇,牛小明

(中國兵器裝備集團自動化研究所,四川 綿陽 621000)

近年來,深度神經(jīng)網(wǎng)絡(luò)(Deep Neural Network,DNN)在智能機器人、汽車自動駕駛等領(lǐng)域獲得了廣泛的應(yīng)用并取得了良好的應(yīng)用成果。但性能優(yōu)異的DNN 往往具有網(wǎng)絡(luò)結(jié)構(gòu)復(fù)雜、節(jié)點數(shù)量巨大等特點。早在2012年ImageNet 競賽中獲得冠軍的AlexNet 就已具有超過6 千萬的參數(shù),且模型占據(jù)的內(nèi)存高達241MB。隨后涌現(xiàn)的優(yōu)秀神經(jīng)網(wǎng)絡(luò)如ResNet、VGG、GoogLeNet、DenseNet 等具有更加優(yōu)異的性能,但隨之而來的是更加龐大的網(wǎng)絡(luò)模型、更加復(fù)雜的網(wǎng)絡(luò)結(jié)構(gòu),所以模型運行對內(nèi)存需求和算力需求逐漸增加。目前來看將DNN 模型部署到一些存儲和算力相對較低的硬件設(shè)備上依舊具有一定的難度。所以,如何在保證神經(jīng)網(wǎng)絡(luò)性能的同時盡可能降低網(wǎng)絡(luò)模型的復(fù)雜度,從而使得優(yōu)秀的網(wǎng)絡(luò)模型能夠運行在更廣泛的硬件設(shè)備上是近年來學(xué)界的熱門課題,該項課題技術(shù)的進步也對人工智能的廣泛應(yīng)用有著積極的意義。本文將介紹知識蒸餾的基本方法,并展示一種手寫體識別模型的蒸餾以及硬件設(shè)備的部署。

1 知識蒸餾

知識蒸餾的過程涉及教師模型(Teacher Model)、學(xué)生模型(Student Model)這兩個模型。教師模型選取大型神經(jīng)網(wǎng)絡(luò),具有網(wǎng)絡(luò)復(fù)雜度高、參數(shù)量巨大的特點,識別效果好但是不適合在低算力低內(nèi)存設(shè)備中運行的模型,這類模型依賴大型服務(wù)器訓(xùn)練這種高性能硬件。學(xué)生模型復(fù)雜度低,但需要結(jié)構(gòu)與教師模型相近,是適合在硬件資源有限的平臺部署的一類模型。知識蒸餾的主要思想是以教師模型的高識別準確率經(jīng)驗去指導(dǎo)并訓(xùn)練學(xué)生模型,使得學(xué)生模型的識別準確率較傳統(tǒng)訓(xùn)練方法大幅提升,從而達到精簡模型,降低模型部署門檻的目的。

Hinton 等人[1]在2015 年首次提出知識蒸餾(Knowl edge Distillation,KD)這一網(wǎng)絡(luò)壓縮技術(shù)。在現(xiàn)有的神經(jīng)網(wǎng)絡(luò)訓(xùn)練方法的基礎(chǔ)上,區(qū)別于傳統(tǒng)的硬標簽(hard-taget)只能給出唯一的識別結(jié)果,Hinton 等人提出了軟目標(soft-target),能夠給出分類結(jié)果屬于某一種類別的概率,這一參數(shù)用于計算出總損失函數(shù)用以指導(dǎo)訓(xùn)練學(xué)生模型。軟目標(soft-target)的計算結(jié)果qi可從以下函數(shù)計算得出。

與傳統(tǒng)的softmax 函數(shù)不同,這里引入了蒸餾溫度T 這一參數(shù),公式中的zi是輸入數(shù)據(jù)為第i 類結(jié)果的概率。在訓(xùn)練的過程中需要計算蒸餾損失(Distillation Loss)以及學(xué)生模型損失(Student Loss)。其中蒸餾損失是在選定的蒸餾溫度下分別訓(xùn)練教師模型和學(xué)生模型后,通過交叉熵損失函數(shù)[2]計算出的結(jié)果;學(xué)生模型損失是學(xué)生模型在選定蒸餾溫度T 為1 訓(xùn)練后與已知的硬標簽(hard-taget)對比計算出的結(jié)果。結(jié)合以上兩個損失參數(shù)可計算出一個新的損失函數(shù),用該函數(shù)對學(xué)生模型進行反向傳播。整個蒸餾過程如圖1所示。

圖1 知識蒸餾基本流程

知識蒸餾壓縮效果的評價指標包含以下三種:(1)學(xué)生網(wǎng)絡(luò)中模型參數(shù)較教師模型的降低比率,這一指標直接體現(xiàn)知識訓(xùn)練對網(wǎng)絡(luò)的壓縮率;(2)通過知識蒸餾訓(xùn)練后學(xué)生模型識別效率與教師模型之間的差距;這一指標能夠直觀體現(xiàn)壓縮后網(wǎng)絡(luò)的精度損失量;(3)通過知識蒸餾這一訓(xùn)練的學(xué)生模型與常規(guī)訓(xùn)練后的學(xué)生模型性能之間的差異。這一標準能夠體現(xiàn)在一定壓縮率(本次蒸餾訓(xùn)練)的情況下訓(xùn)練學(xué)習(xí)過程的有效率。

圖2 卷積神經(jīng)網(wǎng)絡(luò)構(gòu)成圖

通過知識蒸餾的過程獲得的學(xué)生模型,與教師模型相比復(fù)雜度明顯降低,模型性能損失可控在一定范圍,對低算力硬件平臺友好。但是由于知識蒸餾對softmax函數(shù)的改造以及軟標簽(soft-target)的特性,目前知識蒸餾在分類任務(wù)中能夠取得較好的效果,但在復(fù)雜的識別類任務(wù)中還有很強的局限性。并且學(xué)生模型的性能提升效果嚴重依賴一個性能良好且適用于該學(xué)生模型的教師模型進行訓(xùn)練,所以知識蒸餾在實際應(yīng)用中還有很多需要發(fā)展的方向。

2 手寫體分類的蒸餾與部署

2.1 手寫體分類算法

字符識別一直是圖像分類領(lǐng)域的一項重要應(yīng)用,在簽字文件、金融票據(jù)、郵件信息等方面的手寫信息錄入有著良好的應(yīng)用前景。特別是在實時應(yīng)用場景中,手寫字母識別可以被認為是一種特殊的人機交互方式,具有很大的價值。本文中構(gòu)建的手寫體卷積神經(jīng)網(wǎng)絡(luò)構(gòu)成如下。

2.1.1 輸入層

輸入層是神經(jīng)網(wǎng)絡(luò)數(shù)據(jù)預(yù)處理層,當(dāng)網(wǎng)絡(luò)的輸入數(shù)據(jù)為圖像數(shù)據(jù)時,圖像信息經(jīng)過輸入層處理后會將轉(zhuǎn)換為一個三維矩陣。該矩陣第一個維度是輸入圖像的高度,第二個維度是圖像的寬度,第三個維度是RGB 數(shù)據(jù)通道。由于不同的圖像可能由不同的色彩分量主導(dǎo),從而使得權(quán)值的主導(dǎo)權(quán)不斷變化導(dǎo)致收斂速度變慢,故需要對RGB 分量做標準化處理。

2.1.2 卷積層

卷積層的主要作用是對輸入層預(yù)處理過的圖像數(shù)據(jù)進行特征提取。具體規(guī)則是使用較小的矩陣對輸入層得到的三位矩陣進行卷積運算,這里使用到的小矩陣又稱做卷積核或濾波器,需要注意卷積核的深度需要與圖像數(shù)據(jù)矩陣的深度一致。選取不同卷積核對應(yīng)提取不同的特征,一般卷積核不宜過大。

2.1.3 池化層

池化層實現(xiàn)的效果類似于圖片壓縮,可以在保留有效特征值的同時降低參數(shù)復(fù)雜度。最大池化將矩陣劃分為相同大小的區(qū)域,并在每個區(qū)域內(nèi)選取最大的特征值,該過程忽略了提取的特征值的精確位置,而保留了特征值本生及其相對位置。通過該步驟網(wǎng)絡(luò)中的參數(shù)量會迅速下降,不但提升了后級的計算速度,也可防止過擬合,提高網(wǎng)絡(luò)模型的魯棒性[3]。

2.1.4 全連接層

全連接層就是一個分類器,經(jīng)過網(wǎng)絡(luò)中輸入層、卷積層、池化層對數(shù)據(jù)的運算,可以將輸入數(shù)據(jù)映射到特征空間,但是并未與樣本標簽產(chǎn)生關(guān)聯(lián)。通過全連接層后,可直接將特征數(shù)據(jù)映射到樣本標簽,全連接層可直接由卷積操作實現(xiàn)。

2.1.5 Softmax 層

Softmax 層可以將全連接層算出的數(shù)值向量歸一化為得到概率分布向量,各類標簽的概率之和為 1。

2.2 蒸餾過程

1.首先使用MINST[4]數(shù)據(jù)集訓(xùn)練每個隱藏層具有2000 個神經(jīng)元基于Pytorch 搭建的教師模型,設(shè)置的訓(xùn)練20 輪,得到在數(shù)據(jù)集上分類準確率為98.32%的onnx 模型。

2.構(gòu)建一個每個隱藏層僅有50個神經(jīng)元的學(xué)生網(wǎng)絡(luò)。

3.使用蒸餾溫度T=6 訓(xùn)練教師網(wǎng)絡(luò)(此過程切斷反向傳播)得到soft target1,訓(xùn)練學(xué)生網(wǎng)絡(luò)得到soft targ et2,結(jié)合以上兩個參數(shù)使用交叉熵損失函數(shù)得到蒸餾損失(Distillation Loss),即學(xué)生模型與教師模型之間的誤差。

4.在蒸餾溫度T=1 的情況下對訓(xùn)練學(xué)生網(wǎng)絡(luò)得到soft target3,通過學(xué)生網(wǎng)絡(luò)的訓(xùn)練情況與正確的標簽結(jié)果進行對比,得到學(xué)生模型損失(Student Loss),即學(xué)生模型與正確結(jié)果之間的誤差。

5.通過以上步驟獲得的蒸餾損失與學(xué)生模型損失利用以下公式得到學(xué)生模型反向傳播時使用的損失函數(shù)L。通過損失函數(shù)L 對學(xué)生模型進行反向傳播,即可完成對學(xué)生模型的知識蒸餾過程。

由于softmax 函數(shù)中引入了蒸餾溫度T,反向傳播過程中梯度受蒸餾影響變?yōu)樵瓉淼?,為恢?fù)梯度尺度,使其與真實標簽對應(yīng)的交叉熵的尺度一致,需要在計算交叉熵時乘以T2。

2.3 晟騰310 平臺的部署及運行結(jié)果

本文的硬件部署平臺選取華為Atlas 200DK[5],它是基于升騰310 人工智能芯片的一個開發(fā)板產(chǎn)品。該開發(fā)板以Atlas 200AI 加速模塊為核心,可以適配種類眾多的機器學(xué)習(xí)模型對圖片視頻信息進行分類推理,該開發(fā)套件有良好的社區(qū)生態(tài)以及完備的技術(shù)指導(dǎo)資料,可快速搭建環(huán)境并進行開發(fā),且支持的機器學(xué)習(xí)模型也較為廣泛。

首先,準備好一張容量大于32GB 的內(nèi)存卡,一臺有Ubuntu18 系統(tǒng)并配置好交叉編譯環(huán)境的PC 機;使用讀卡器連接內(nèi)存卡與該PC 機,使用weget 獲取制卡腳本make_sdcard.py 和make_sd_card.sh,并使用腳本制卡;制卡成功后使用ssh 連接到開發(fā)板,并用pip 安裝attrs、numpy、decorator、sympy 等相關(guān)依賴;之后安裝Ascend-cann-toolkit。至此開發(fā)板相關(guān)環(huán)境搭建完畢。

下面進行模型部署,模型部署的關(guān)鍵在模型轉(zhuǎn)換,有Mind Studio[6]開發(fā)工具平臺、ATC 命令這兩種方法,由于本文中已配置好CANN 環(huán)境和ATC 工具,可直接將上文中訓(xùn)練好的上傳至開發(fā)套件,并使用ATC 命令將onnx 模型轉(zhuǎn)化為晟騰310 支持的om 離線模型。

蒸餾結(jié)果及結(jié)論:對于未蒸餾的學(xué)生模型,其在用MINST 數(shù)據(jù)集訓(xùn)上的準確率為89.68%。而蒸餾后的學(xué)生模型在相同數(shù)據(jù)集上的準確率提升至91.63%。由此可以較為明顯地看出蒸餾對準確率的提升。

3 總結(jié)與展望

隨著人工智能的發(fā)展,神經(jīng)網(wǎng)絡(luò)會被更多地部署到各種硬件平臺中,其中就包括大量資源有限的硬件,所以未來一定會對降低神經(jīng)網(wǎng)絡(luò)復(fù)雜度及降低對硬件資源的需求設(shè)計產(chǎn)生巨大的需求,知識蒸餾技術(shù)作為一種高效的網(wǎng)絡(luò)壓縮技術(shù),在未來一定會獲得更多的應(yīng)用并獲得長足的發(fā)展。知識蒸餾的效果很大程度上取決于學(xué)生模型能夠從教師模型那里學(xué)到多少知識,即提取知識的效率。目前提取效率還有很大的提升空間。未來,如何讓學(xué)生模型更高效率地從教師模型中提取知識必然成為知識蒸餾的發(fā)展方向。隨著神經(jīng)網(wǎng)絡(luò)規(guī)模的不斷增大,未來知識蒸餾將越來越多地和其他網(wǎng)絡(luò)壓縮方法結(jié)合交叉使用,例如剪枝、量化等方法。隨著具有AI 算力的硬件設(shè)備不斷發(fā)展,未來人工智能算法高效的硬件部署也將成為重要課題。

猜你喜歡
部署損失卷積
少問一句,損失千金
一種基于Kubernetes的Web應(yīng)用部署與配置系統(tǒng)
基于3D-Winograd的快速卷積算法設(shè)計及FPGA實現(xiàn)
晉城:安排部署 統(tǒng)防統(tǒng)治
胖胖損失了多少元
部署
從濾波器理解卷積
電子制作(2019年11期)2019-07-04 00:34:38
玉米抽穗前倒伏怎么辦?怎么減少損失?
基于傅里葉域卷積表示的目標跟蹤算法
部署“薩德”意欲何為?
太空探索(2016年9期)2016-07-12 10:00:02
文水县| 扶绥县| 平安县| 吉安市| 肇州县| 苏尼特左旗| 宜黄县| 皋兰县| 呼和浩特市| 新津县| 沙河市| 盈江县| 循化| 珲春市| 河北省| 全椒县| 津市市| 屯昌县| 兰溪市| 曲阳县| 太原市| 军事| 离岛区| 商南县| 麻城市| 资溪县| 呼和浩特市| 武山县| 西平县| 巨鹿县| 五大连池市| 元朗区| 滨海县| 广汉市| 台湾省| 辉县市| 乐至县| 碌曲县| 金平| 威信县| 灌阳县|