溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

SpringBoot整合MybatisPlus中模型壓縮與加速的示例分析

發(fā)布時(shí)間:2022-01-19 10:23:32 來(lái)源:億速云 閱讀:175 作者:小新 欄目:大數(shù)據(jù)

這篇文章將為大家詳細(xì)講解有關(guān)SpringBoot整合MybatisPlus中模型壓縮與加速的示例分析,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

一、模型的壓縮和加速

我們先來(lái)看一下深度學(xué)習(xí)模型的壓縮和加速的定義:

深度學(xué)習(xí)模型的壓縮和加速是指利用神經(jīng)網(wǎng)絡(luò)參數(shù)的冗余性和網(wǎng)絡(luò)結(jié)構(gòu)的冗余性精簡(jiǎn)模型,在不影響任務(wù)完成度的情況下,得到參數(shù)量更少、結(jié)構(gòu)更精簡(jiǎn)的模型.被壓縮后的模型計(jì)算資源需求和內(nèi)存需求更小,相比原始模型能夠滿足更加廣泛的應(yīng)用需求。

深度學(xué)習(xí)模型的壓縮和加速基于什么背景提出的呢?

深度學(xué)習(xí)模型性能提高的同時(shí),計(jì)算也越來(lái)越復(fù)雜,計(jì)算開(kāi)銷和內(nèi)存需求逐漸增加。如下圖所示,8 層的 AlexNet需要0.61 億個(gè)網(wǎng)絡(luò)參數(shù)和 7.29 億次浮點(diǎn)型計(jì)算,花費(fèi)約 233MB 內(nèi)存.隨后的 VGG-16的網(wǎng)絡(luò)參數(shù)達(dá)到 1.38 億,浮點(diǎn)型計(jì)算次數(shù)為 1.56 億,需要約 553MB 內(nèi)存.為了克服深層網(wǎng)絡(luò)的梯度消失問(wèn)題,何愷明提出了 ResNet網(wǎng)絡(luò),首次在ILSVRC 比賽中實(shí)現(xiàn)了低于 5%的 top-5 分類錯(cuò)誤,偏淺的 ResNet-50 網(wǎng)絡(luò)參數(shù)就達(dá)到 0.25 億,浮點(diǎn)型計(jì)算次數(shù)高達(dá) 3.9 億,內(nèi)存花費(fèi)約102MB.
SpringBoot整合MybatisPlus中模型壓縮與加速的示例分析
龐大的網(wǎng)絡(luò)參數(shù)意味著更大的內(nèi)存存儲(chǔ),而增長(zhǎng)的浮點(diǎn)型計(jì)算次數(shù)意味著訓(xùn)練成本和計(jì)算時(shí)間的增長(zhǎng),這極大地限制了在資源受限設(shè)備,例如智能手機(jī)、智能手環(huán)等上的部署。

二、壓縮與加速方法概述

從壓縮參數(shù)和壓縮結(jié)構(gòu)兩個(gè)角度可以將壓縮方法分成以下 7 類,如下表所示:
SpringBoot整合MybatisPlus中模型壓縮與加速的示例分析

2.1 參數(shù)剪枝

參數(shù)剪枝是指在預(yù)訓(xùn)練好的大型模型的基礎(chǔ)上,設(shè)計(jì)對(duì)網(wǎng)絡(luò)參數(shù)的評(píng)價(jià)準(zhǔn)則,以此為根據(jù)刪除“冗余”參數(shù).根據(jù)剪枝粒度粗細(xì),參數(shù)剪枝可分為非結(jié)構(gòu)化剪枝和結(jié)構(gòu)化剪枝。

  • 非結(jié)構(gòu)化剪枝的粒度比較細(xì),可以無(wú)限制地去掉網(wǎng)絡(luò)中期望比例的任何“冗余”參數(shù),但這樣會(huì)帶來(lái)裁剪后網(wǎng)絡(luò)結(jié)構(gòu)不規(guī)整、難以有效加速的問(wèn)題.

  • 結(jié)構(gòu)化剪枝的粒度比較粗,剪枝的最小單位是 filter 內(nèi)參數(shù)的組合,通過(guò)對(duì) filter 或者 feature map 設(shè)置評(píng)價(jià)因子,甚至可以刪除整個(gè) filter 或者某幾個(gè) channel,使網(wǎng)絡(luò)“變窄”,從而可以直接在現(xiàn)有軟/硬件上獲得有效加速,但可能會(huì)帶來(lái)預(yù)測(cè)精度(accuracy)的下降,需要通過(guò)對(duì)模型微調(diào)(fine-tuning)以恢復(fù)性能.

(1) 非結(jié)構(gòu)化剪枝

如下圖所示,卷積層和全連接層的輸入與輸出之間都存在稠密的連接,對(duì)神經(jīng)元之間的連接重要性設(shè)計(jì)評(píng)價(jià)準(zhǔn)則,刪除冗余連接,可達(dá)到模型壓縮的目的.
SpringBoot整合MybatisPlus中模型壓縮與加速的示例分析
根據(jù)神經(jīng)元之間的連接重要性的設(shè)計(jì)評(píng)價(jià)準(zhǔn)則的不同,有以下幾種常見(jiàn)的形式:

  • 根據(jù)神經(jīng)元連接權(quán)值的范數(shù)值大小,刪除范數(shù)值小于指定閾值的連接,可重新訓(xùn)練恢復(fù)性能

  • 突觸強(qiáng)度來(lái)表示神經(jīng)元之間連接的重要性。利用生物學(xué)上的神經(jīng)突觸概念,定義突觸強(qiáng)度為 Batch Normalization(BN)層放縮因子  γ \gamma γ 和 filter 的 Frobinus 范數(shù)的乘積

  • 在模型初始化階段,通過(guò)對(duì)訓(xùn)練集多次采樣判斷連接的重要性,生成剪枝模板再進(jìn)行訓(xùn)練,無(wú)需迭代進(jìn)行剪枝-微調(diào)的過(guò)程

(2) 結(jié)構(gòu)化剪枝

group 級(jí)別剪枝是指對(duì)每一層的 filter 設(shè)置相同的稀疏模式(即圖中每個(gè)立方體都刪去相同位置的小方塊),變成結(jié)構(gòu)相同的稀疏矩陣。如下圖所示:
SpringBoot整合MybatisPlus中模型壓縮與加速的示例分析
filter 級(jí)別剪枝也可以看作 channel 級(jí)別剪枝.如上圖所示,刪去該層的某些 filter(即圖中刪去整個(gè)立方體),相當(dāng)于刪去其產(chǎn)生的部分 feature map 和原本需要與這部分 feature map 進(jìn)行卷積運(yùn)算的下一層部分 filter。

對(duì) filter 的評(píng)價(jià)準(zhǔn)則可分為以下4種:(1)基于 filter 范數(shù)大小 (2)自定義 filter 評(píng)分因子 (3)最小化重建誤差 (4)其他方法

2.2 參數(shù)量化

參數(shù)量化是指用較低位寬表示典型的 32 位浮點(diǎn)網(wǎng)絡(luò)參數(shù),網(wǎng)絡(luò)參數(shù)包括權(quán)重、激活值、梯度和誤差等等,可以使用統(tǒng)一的位寬(如 16-bit、8-bit、2-bit 和 1-bit 等),也可以根據(jù)經(jīng)驗(yàn)或一定策略自由組合不同的位寬。

參數(shù)量化的優(yōu)點(diǎn)是:

  • 能夠顯著減少參數(shù)存儲(chǔ)空間與內(nèi)存占用空間,將參數(shù)從 32 位浮點(diǎn)型量化到 8 位整型,從而縮小 75% 的存儲(chǔ)空間,這對(duì)于計(jì)算資源有限的邊緣設(shè)備進(jìn)行深度學(xué)習(xí)模型的部署和使用都有很大的幫助。

  • 能夠加快運(yùn)算速度,降低設(shè)備能耗,讀取 32 位浮點(diǎn)數(shù)所需的帶寬可以同時(shí)讀入 4 個(gè) 8 位整數(shù),并且整型運(yùn)算相比浮點(diǎn)型運(yùn)算更快,自然能夠降低設(shè)備功耗。

也存在一定的局限性

網(wǎng)絡(luò)參數(shù)的位寬減少損失了一部分信息量,會(huì)造成推理精度的下降,雖然能夠通過(guò)微調(diào)恢復(fù)部分精確度,但也帶來(lái)時(shí)間成本的增加;量化到特殊位寬時(shí),很多現(xiàn)有的訓(xùn)練方法和硬件平臺(tái)不再適用,需要設(shè)計(jì)專用的系統(tǒng)架構(gòu),靈活性不高.

2.3 低秩分解

低秩分解是指通過(guò)合并維數(shù)和施加低秩約束的方式稀疏化卷積核矩陣,由于權(quán)值向量大多分布在低秩子空間,所以可以用少數(shù)的基向量來(lái)重構(gòu)卷積核矩陣,達(dá)到縮小存儲(chǔ)空間的目的.

神經(jīng)網(wǎng)絡(luò)的 filter 可以看作是四維張量:寬度 w、高度 h、通道數(shù) c、卷積核數(shù) n,由于 c 和 n 對(duì)網(wǎng)絡(luò)結(jié)構(gòu)的整體影響較大,所以基于卷積核(w、h)矩陣信息冗余的特點(diǎn)及其低秩特性,可以利用低秩分解方法進(jìn)行網(wǎng)絡(luò)壓縮.。

低秩分解方法在大卷積核中小型網(wǎng)絡(luò)上有不錯(cuò)的壓縮和加速效果,過(guò)去的研究已經(jīng)比較成熟,但近兩年已不再流行.原因在于:除了矩陣分解操作成本高、逐層分解不利于全局參數(shù)壓縮,需要大量的重新訓(xùn)練才能達(dá)到收斂等問(wèn)題之外,近兩年提出的新網(wǎng)絡(luò)越來(lái)越多地采用 1x1 卷積,這種小卷積核不利于低秩分解方法的使用,很難實(shí)現(xiàn)網(wǎng)絡(luò)壓縮與加速。

2.4 參數(shù)共享

參數(shù)共享是指利用結(jié)構(gòu)化矩陣或聚類等方法映射網(wǎng)絡(luò)參數(shù),減少參數(shù)數(shù)量.參數(shù)共享方法的原理與參數(shù)剪枝類似,都是利用參數(shù)存在大量冗余的特點(diǎn),目的都是為了減少參數(shù)數(shù)量.但與參數(shù)剪枝直接裁剪不重要的參數(shù)不同,參數(shù)共享設(shè)計(jì)一種映射形式,將全部參數(shù)映射到少量數(shù)據(jù)上,減少對(duì)存儲(chǔ)空間的需求.

由于全連接層參數(shù)數(shù)量較多,參數(shù)存儲(chǔ)占據(jù)整個(gè)網(wǎng)絡(luò)模型的大部分,所以參數(shù)共享對(duì)于去除全連接層冗余性能夠發(fā)揮較好的效果;也由于其操作簡(jiǎn)便,適合與其他方法組合使用.但其缺點(diǎn)在于不易泛化,如何應(yīng)用于去除卷積層的冗余性仍是一個(gè)挑戰(zhàn).同時(shí),對(duì)于結(jié)構(gòu)化矩陣這一常用映射形式,很難為權(quán)值矩陣找到合適的結(jié)構(gòu)化矩陣,并且其理論依據(jù)不夠充足.

2.5 緊湊網(wǎng)絡(luò)

以上 4 種利用參數(shù)冗余性減少參數(shù)數(shù)量或者降低參數(shù)精度的方法雖然能夠精簡(jiǎn)網(wǎng)絡(luò)結(jié)構(gòu),但往往需要龐大的預(yù)訓(xùn)練模型,在此基礎(chǔ)上進(jìn)行參數(shù)壓縮,并且這些方法大都存在精確度下降的問(wèn)題,需要微調(diào)來(lái)提升網(wǎng)絡(luò)性能。

設(shè)計(jì)更緊湊的新型網(wǎng)絡(luò)結(jié)構(gòu),是一種新興的網(wǎng)絡(luò)壓縮與加速理念,構(gòu)造特殊結(jié)構(gòu)的 filter、網(wǎng)絡(luò)層甚至網(wǎng)絡(luò),從頭訓(xùn)練,獲得適宜部署到移動(dòng)平臺(tái)等資源有限設(shè)備的網(wǎng)絡(luò)性能,不再需要像參數(shù)壓縮類方法那樣專門(mén)存儲(chǔ)預(yù)訓(xùn)練模型,也不需要通過(guò)微調(diào)來(lái)提升性能,降低了時(shí)間成本,具有存儲(chǔ)量小、計(jì)算量低和網(wǎng)絡(luò)性能好的特點(diǎn).

但其缺點(diǎn)在于:由于其特殊結(jié)構(gòu)很難與其他的壓縮與加速方法組合使用,并且泛化性較差,不適合作為預(yù)訓(xùn)練模型幫助其他模型訓(xùn)練.

(1) 卷積核級(jí)別

下面以一些典型的網(wǎng)絡(luò)為例:

  • Squeezenet,使用 1x1 卷積代替 3x3 卷積,為了減少 feature map 的數(shù)量,將卷積層轉(zhuǎn)
    變成兩層:squeeze 層和 expand 層,減少了池化層。

  • MobileNet,將普通卷積拆分成depth-wise 卷積和 point-wise 卷積,減少了乘法次數(shù)

  • MobileNetV2, 相比 MobileNet在 depth-wise 卷積之前多加了一個(gè) 1x1 expand 層以提升通道數(shù),獲得了更多的特征

  • ShuffleNet,為克服 point-wise 卷積的昂貴成本和通道約束,采用了逐點(diǎn)組卷積(point-wise group convolution)和通道混洗(channel shuffle)的方式

  • ShuffleNetV2 相比 ShuffleNet,為了減少內(nèi)存訪問(wèn)成本,提出了通道分割(channel split)這一概念

  • Wan 等人[提出了完全可學(xué)習(xí)的組卷積模塊(FLGC),可以嵌入任何深度神經(jīng)網(wǎng)絡(luò)進(jìn)行加速

(2) 層級(jí)別

Huang 等人提出了隨機(jī)深度用于類似 ResNet 含殘差連接的網(wǎng)絡(luò)的訓(xùn)練,對(duì)于每個(gè) mini-batch,隨機(jī)刪除block 子集,并用恒等函數(shù)繞過(guò)它們.Dong 等人為每個(gè)卷積層配備一個(gè)低成本協(xié)同層(LCCL),預(yù)測(cè)哪些位置的點(diǎn)經(jīng)過(guò) ReLU 后會(huì)變成 0,測(cè)試時(shí)忽略這些位置的計(jì)算.Li等人將網(wǎng)絡(luò)層分為權(quán)重層(如卷積層和全連接層)和非權(quán)重層(如池化層、ReLU 層等),提出了將非權(quán)重層與權(quán)重層進(jìn)行合并的方法,去除獨(dú)立的非權(quán)重層后,運(yùn)行時(shí)間顯著減少.

(3) 網(wǎng)絡(luò)結(jié)構(gòu)級(jí)別

Kim 等人提出了 SplitNet,自動(dòng)學(xué)會(huì)將網(wǎng)絡(luò)層分成多組,獲得一個(gè)樹(shù)形結(jié)構(gòu)的網(wǎng)絡(luò),每個(gè)子網(wǎng)共享底層權(quán)重.Gordon 等人[提出了 Morphnet,通過(guò)收縮和擴(kuò)展階段循環(huán)優(yōu)化網(wǎng)絡(luò):在收縮階段,通過(guò)稀疏正則化項(xiàng)識(shí)別效率低的神經(jīng)元從網(wǎng)絡(luò)中去除;在擴(kuò)展階段,使用寬度乘數(shù)來(lái)統(tǒng)一擴(kuò)展所有層的大小,所以含重要神經(jīng)元更多的層擁有更多計(jì)算資源.Kim 等人提出了嵌套稀疏網(wǎng)絡(luò) NestedNet,每一層由多層次的網(wǎng)絡(luò)組成,高層次網(wǎng)絡(luò)與低層次網(wǎng)絡(luò)以 Network in network (NIN)的方式共享參數(shù):低層次網(wǎng)絡(luò)學(xué)習(xí)公共知識(shí),高層次網(wǎng)絡(luò)學(xué)習(xí)特定任務(wù)的知識(shí).

2.6 知識(shí)蒸餾

知識(shí)蒸餾最早由 Buciluǎ 等人提出,用以訓(xùn)練帶有偽數(shù)據(jù)標(biāo)記的強(qiáng)分類器的壓縮模型和復(fù)制原始分類器的輸出.與其他壓縮與加速方法只使用需要被壓縮的目標(biāo)網(wǎng)絡(luò)不同,知識(shí)蒸餾法需要兩種類型的網(wǎng)絡(luò):教師模型和學(xué)生模型.

預(yù)先訓(xùn)練好的教師模型通常是一個(gè)大型的神經(jīng)網(wǎng)絡(luò)模型,具有很好的性能.如下圖所示,將教師模型的 softmax 層輸出作為 soft target 與學(xué)生模型的 softmax 層輸出作為 hard target 一同送入 total loss 計(jì)算,指導(dǎo)學(xué)生模型訓(xùn)練,將教師模型的知識(shí)遷移到學(xué)生模型中,使學(xué)生模型達(dá)到與教師模型相當(dāng)?shù)男阅?學(xué)生模型更加緊湊高效,起到模型壓縮的目的.
SpringBoot整合MybatisPlus中模型壓縮與加速的示例分析
知識(shí)蒸餾法可使深層網(wǎng)絡(luò)變淺,極大地降低了計(jì)算成本,但也存在其局限性.由于使用 softmax 層輸出作為知識(shí),所以一般多用于具有 softmax 損失函數(shù)的分類任務(wù),在其他任務(wù)的泛化性不好;并且就目前來(lái)看,其壓縮比與蒸餾后的模型性能還存在較大的進(jìn)步空間.

2.7 混合方式

以上這些壓縮與加速方法單獨(dú)使用時(shí)能夠獲得很好的效果,但也都存在各自的局限性,組合使用可使它們互為補(bǔ)充.研究人員通過(guò)組合使用不同的壓縮與加速方法或者針對(duì)不同網(wǎng)絡(luò)層選取不同的壓縮與加速方法,設(shè)計(jì)了一體化的壓縮與加速框架,能夠獲得更好的壓縮比與加速效果.參數(shù)剪枝、參數(shù)量化、低秩分解和參數(shù)共享經(jīng)常組合使用,極大地降低了模型的內(nèi)存需求和存儲(chǔ)需求,方便模型部署到計(jì)算資源有限的移動(dòng)平臺(tái).

知識(shí)蒸餾可以與緊湊網(wǎng)絡(luò)組合使用,為學(xué)生模型選擇緊湊的網(wǎng)絡(luò)結(jié)構(gòu),在保證壓縮比的同時(shí),可提升學(xué)生模型的性能.混合方式能夠綜合各類壓縮與加速方法的優(yōu)勢(shì),進(jìn)一步加強(qiáng)了壓縮與加速效果,將會(huì)是未來(lái)在深度學(xué)習(xí)模型壓縮與加速領(lǐng)域的重要研究方向.

如下圖所示,Han 等人提出了 Deep compression,將參數(shù)剪枝、參數(shù)量化和哈夫曼編碼相結(jié)合,達(dá)到了很好的壓縮效果。
SpringBoot整合MybatisPlus中模型壓縮與加速的示例分析

三、壓縮效果比較

(1) 下表展示了參數(shù)剪枝、緊湊網(wǎng)絡(luò)、參數(shù)共享、知識(shí)蒸餾和混合方式這 5 類壓縮技術(shù)的一些代表性方法,使用 MNIST 數(shù)據(jù)集在 LeNet-5 上的壓縮效果,可以看出,除了 Ref 帶來(lái)較大的 accuracy 損失以外,其他方法的壓縮效果都不錯(cuò).從 accuracy 的角度來(lái)看,自適應(yīng) fastfood 變換的效果更好,在達(dá)到壓縮效果的同時(shí),還提升了 accuracy;從參數(shù)壓縮量的角度來(lái)看,混合方式在 accuracy 輕微下降的情況下,都實(shí)現(xiàn)了較大的壓縮比.
SpringBoot整合MybatisPlus中模型壓縮與加速的示例分析
(2) 小表展示了參數(shù)剪枝、緊湊網(wǎng)絡(luò)、參數(shù)共享和混合方式這 4 類壓縮技術(shù)的一些代表性方法使用 CIFAR-10數(shù)據(jù)集在 VGG-16 上的壓縮效果,可以看出,這 4 類方法的壓縮效果差別比較大.整體來(lái)看,結(jié)構(gòu)化剪枝效果更好,同時(shí)起到了網(wǎng)絡(luò)壓縮和加速的效果,accuracy 甚至有些提升.權(quán)值隨機(jī)編碼方法能夠?qū)崿F(xiàn)高達(dá) 159x 的參數(shù)壓縮比,accuracy 略有下降.
SpringBoot整合MybatisPlus中模型壓縮與加速的示例分析

四、未來(lái)研究方向

截止到目前,深度學(xué)習(xí)模型壓縮與加速技術(shù)尚未發(fā)展成熟,在實(shí)際部署和產(chǎn)品化水平上還有很大的進(jìn)步空間.下面介紹幾個(gè)值得關(guān)注與討論的研究方向:

  • 知識(shí)蒸餾作為一種遷移學(xué)習(xí)的形式,可使小模型盡可能多地學(xué)習(xí)到大模型的知識(shí),具有方法靈活、不依賴硬件平臺(tái)的特點(diǎn),但目前,其壓縮比和蒸餾后性能都有待提高.未來(lái)知識(shí)蒸餾可從以下幾個(gè)方向展開(kāi)研究:打破 softmax 函數(shù)的限制,結(jié)合中間特征層,使用不同形式的知識(shí);在選擇學(xué)生模型的結(jié)構(gòu)時(shí),可以與其他方法集成;打破任務(wù)的限制,例如將圖片分類領(lǐng)域的知識(shí)遷移到其他領(lǐng)域;

  • 將模型壓縮技術(shù)與硬件架構(gòu)設(shè)計(jì)相結(jié)合.目前的壓縮與加速方法大多僅從軟件層面對(duì)模型進(jìn)行優(yōu)化,并且不同方法由于使用的硬件平臺(tái)不同,也很難比較其加速效果的好壞.未來(lái)可針對(duì)主流的壓縮與加速方法專門(mén)設(shè)計(jì)硬件架構(gòu),既能在現(xiàn)有基礎(chǔ)上加速模型,又方便不同方法的比較;

  • 制定更智能的模型結(jié)構(gòu)選擇策略.目前,無(wú)論是參數(shù)剪枝方法還是設(shè)計(jì)更緊湊的網(wǎng)絡(luò)結(jié)構(gòu),都是基于現(xiàn)有模型作為主干網(wǎng)絡(luò),手動(dòng)選擇或使用啟發(fā)式策略進(jìn)行結(jié)構(gòu)縮減,縮小了模型搜索空間.未來(lái)可以利用強(qiáng)化學(xué)習(xí)等策略進(jìn)行自動(dòng)網(wǎng)絡(luò)結(jié)構(gòu)搜索,得到更優(yōu)的網(wǎng)絡(luò)結(jié)構(gòu);

關(guān)于“SpringBoot整合MybatisPlus中模型壓縮與加速的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI