deeplearning算法优化原理
生活随笔
收集整理的這篇文章主要介紹了
deeplearning算法优化原理
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
deeplearning算法優(yōu)化原理
目錄
? 量化原理介紹
? 剪裁原理介紹
? 蒸餾原理介紹
? 輕量級(jí)模型結(jié)構(gòu)搜索原理介紹
- Quantization Aware Training量化介紹
1.1 背景
近年來,定點(diǎn)量化使用更少的比特?cái)?shù)(如8-bit、3-bit、2-bit等)表示神經(jīng)網(wǎng)絡(luò)的權(quán)重和激活已被驗(yàn)證是有效的。定點(diǎn)量化的優(yōu)點(diǎn)包括低內(nèi)存帶寬、低功耗、低計(jì)算資源占用以及低模型存儲(chǔ)需求等。
低精度定點(diǎn)數(shù)操作的硬件面積大小及能耗比高精度浮點(diǎn)數(shù)要少幾個(gè)數(shù)量級(jí)。 使用定點(diǎn)量化可帶來4倍的模型壓縮、4倍的內(nèi)存帶寬提升,以及更高效的cache利用(很多硬件設(shè)備,內(nèi)存訪問是主要能耗)。除此之外,計(jì)算速度也會(huì)更快(通常具有2x-3x的性能提升)。由表2可知,在很多場(chǎng)景下,定點(diǎn)量化操作對(duì)精度并不會(huì)造成損失。另外,定點(diǎn)量化對(duì)神經(jīng)網(wǎng)絡(luò)于嵌入式設(shè)備上的推斷來說是極其重要的。
目前,學(xué)術(shù)界主要將量化分為兩大類:Post Training Quantization和Quantization Aware Training。Post Training Quantization是指使用KL散度、滑動(dòng)平均等方法確定量化參數(shù)且不需要重新訓(xùn)練的定點(diǎn)量化方法。Quantization Aware Training是在訓(xùn)練過程中對(duì)量化進(jìn)行建模以確定量化參數(shù),它與Post Training Quantization模式相比可以提供更高的預(yù)測(cè)精度。
1.2 量化原理
1.2.1 量化方式
目前,存在著許多方法可以將浮點(diǎn)數(shù)量化成定點(diǎn)數(shù)。例如:
r=min(max(x,a),b)r=min(max(x,a),b)
s=fracb?an?1s=fracb?an?1
q=leftlfloorfracr?asrightrceilq=leftlfloorfracr?asrightrceil
式中,xxx是待量化的浮點(diǎn)值,[a,b][a, b][a,b]是量化范圍,aaa是待量化浮點(diǎn)數(shù)中的最小值, bbb 是待量化浮點(diǎn)數(shù)中的最大值。leftlfloorrightrceilleft lfloor right rceilleftlfloorrightrceil 表示將結(jié)果四舍五入到最近的整數(shù)。如果量化級(jí)別為kkk,則nnn為2k2^k2k。例如,若kkk為8,則nnn為256。qqq是量化得到的整數(shù)。 PaddleSlim框架中選擇的量化方法為最大絕對(duì)值量化(max-abs),具體描述如下:
M=max(abs(x))M=max(abs(x))
q=leftlfloorfracxM?(n?1)rightrceilq=leftlfloorfracxM?(n?1)rightrceil
式中,xxx是待被量化的浮點(diǎn)值,MMM是待量化浮點(diǎn)數(shù)中的絕對(duì)值最大值。leftlfloorrightrceilleft lfloor right rceilleftlfloorrightrceil表示將結(jié)果四舍五入到最近的整數(shù)。對(duì)于8bit量化,PaddleSlim采用int8_t,即n=27=128n=2^7=128n=27=128。qqq是量化得到的整數(shù)。 無論是min-max量化還是max-abs量化,他們都可以表示為如下形式: q=scale?r+bq = scale * r + bq=scale?r+b 其中min-max和max-abs被稱為量化參數(shù)或者量化比例或者量化范圍。
1.2.2 量化訓(xùn)練
1.2.2.1 前向傳播
前向傳播過程采用模擬量化的方式,具體描述如下:
基于模擬量化訓(xùn)練的前向過程可被描述為以下四個(gè)部分: 1) 輸入和權(quán)重均被量化成8-bit整數(shù)。 2) 在8-bit整數(shù)上執(zhí)行矩陣乘法或者卷積操作。 3) 反量化矩陣乘法或者卷積操作的輸出結(jié)果為32-bit浮點(diǎn)型數(shù)據(jù)。 4) 在32-bit浮點(diǎn)型數(shù)據(jù)上執(zhí)行偏置加法操作。此處,偏置并未被量化。 對(duì)于通用矩陣乘法(GEMM),輸入XXX和權(quán)重WWW的量化操作可被表述為如下過程:
Xq=leftlfloorfracXXm?(n?1)rightrceilXq=leftlfloorfracXXm?(n?1)rightrceil
Wq=leftlfloorfracWWm?(n?1)rightrceilWq=leftlfloorfracWWm?(n?1)rightrceil
執(zhí)行通用矩陣乘法: KaTeX parse error: Can't use function '$' in math mode at position 24: …_q * Wq 對(duì)量化乘積結(jié)果$?Yq$進(jìn)行反量化:對(duì)量化乘積結(jié)… 上述公式表明反量化操作可以被移動(dòng)到GEMM之前,即先對(duì)XqXqXq和WqWqWq執(zhí)行反量化操作再做GEMM操作。因此,前向傳播的工作流亦可表示為如下方式:
訓(xùn)練過程中,PaddleSlim使用等價(jià)工作流。在設(shè)計(jì)中,量化Pass在IrGraph中插入量化op和反量化op。因?yàn)樵谶B續(xù)的量化、反量化操作之后輸入仍然為32-bit浮點(diǎn)型數(shù)據(jù)。因此,PaddleSlim量化訓(xùn)練框架所采用的量化方式被稱為模擬量化。
1.2.2.2 反向傳播
權(quán)重更新所需的梯度值可以由量化后的權(quán)重和量化后的激活求得。反向傳播過程中的所有輸入和輸出均為32-bit浮點(diǎn)型數(shù)據(jù)。注意,梯度更新操作需要在原始權(quán)重上進(jìn)行,即計(jì)算出的梯度將被加到原始權(quán)重上而非量化后或反量化后的權(quán)重上。
因此,量化Pass也會(huì)改變相應(yīng)反向算子的某些輸入。
1.2.2.3 確定量化比例系數(shù)
存在著兩種策略可以計(jì)算求取量化比例系數(shù),即動(dòng)態(tài)策略和靜態(tài)策略。動(dòng)態(tài)策略會(huì)在每次迭代過程中計(jì)算量化比例系數(shù)的值。靜態(tài)策略則對(duì)不同的輸入采用相同的量化比例系數(shù)。 對(duì)于權(quán)重而言,在訓(xùn)練過程中采用動(dòng)態(tài)策略。換句話說,在每次迭代過程中量化比例系數(shù)均會(huì)被重新計(jì)算得到直至訓(xùn)練過程結(jié)束。 對(duì)于激活而言,可以選擇動(dòng)態(tài)策略也可以選擇靜態(tài)策略。若選擇使用靜態(tài)策略,則量化比例系數(shù)會(huì)在訓(xùn)練過程中被評(píng)估求得,且在推斷過程中被使用(不同的輸入均保持不變)。靜態(tài)策略中的量化比例系數(shù)可于訓(xùn)練過程中通過如下三種方式進(jìn)行評(píng)估: - 在一個(gè)窗口中計(jì)算激活最大絕對(duì)值的平均值。
- 在一個(gè)窗口中計(jì)算激活最大絕對(duì)值的最大值。
- 在一個(gè)窗口中計(jì)算激活最大絕對(duì)值的滑動(dòng)平均值,計(jì)算公式如下:
Vt=(1?k)?V+k?Vt?1Vt=(1?k)?V+k?Vt?1
式中,VVV 是當(dāng)前batch的最大絕對(duì)值, VtVtVt是滑動(dòng)平均值。kkk是一個(gè)因子,例如其值可取為0.9。
1.2.4 訓(xùn)練后量化
訓(xùn)練后量化是基于采樣數(shù)據(jù),采用KL散度等方法計(jì)算量化比例因子的方法。相比量化訓(xùn)練,訓(xùn)練后量化不需要重新訓(xùn)練,可以快速得到量化模型。
訓(xùn)練后量化的目標(biāo)是求取量化比例因子,主要有兩種方法:非飽和量化方法 ( No Saturation) 和飽和量化方法 (Saturation)。非飽和量化方法計(jì)算FP32類型Tensor中絕對(duì)值的最大值abs_max,將其映射為127,則量化比例因子等于abs_max/127。飽和量化方法使用KL散度計(jì)算一個(gè)合適的閾值T (0<T<mab_max),將其映射為127,則量化比例因子等于T/127。一般而言,對(duì)于待量化op的權(quán)重Tensor,采用非飽和量化方法,對(duì)于待量化op的激活Tensor(包括輸入和輸出),采用飽和量化方法 。
訓(xùn)練后量化的實(shí)現(xiàn)步驟如下:
? 加載預(yù)訓(xùn)練的FP32模型,配置DataLoader;
? 讀取樣本數(shù)據(jù),執(zhí)行模型的前向推理,保存待量化op激活Tensor的數(shù)值;
? 基于激活Tensor的采樣數(shù)據(jù),使用飽和量化方法計(jì)算它的量化比例因子;
? 模型權(quán)重Tensor數(shù)據(jù)一直保持不變,使用非飽和方法計(jì)算它每個(gè)通道的絕對(duì)值最大值,作為每個(gè)通道的量化比例因子;
? 將FP32模型轉(zhuǎn)成INT8模型,進(jìn)行保存。 - 卷積核剪裁原理
該策略參考paper: Pruning Filters for Efficient ConvNets
該策略通過減少卷積層中卷積核的數(shù)量,來減小模型大小和降低模型計(jì)算復(fù)雜度。
2.1 剪裁卷積核
剪裁注意事項(xiàng)1 剪裁一個(gè)conv layer的filter,需要修改后續(xù)conv layer的filter。剪掉Xi的一個(gè)filter,會(huì)導(dǎo)致Xi+1X{i+1}Xi+1少一個(gè)channel, Xi+1X{i+1}Xi+1對(duì)應(yīng)的filter在input_channel緯度上也要減1。
剪裁注意事項(xiàng)2
剪裁完XiXiXi之后,根據(jù)注意事項(xiàng)1從Xi+1X{i+1}Xi+1的filter中刪除了一行,在計(jì)算Xi+1X_{i+1}Xi+1?的filters的l1_norm的時(shí)候,有兩種選擇: 算上被刪除的一行:independent pruning 減去被刪除的一行:greedy pruning
剪裁注意事項(xiàng)3 在對(duì)ResNet等復(fù)雜網(wǎng)絡(luò)剪裁的時(shí)候,還要考慮到后當(dāng)前卷積層的修改對(duì)上一層卷積層的影響。 在對(duì)residual block剪裁時(shí),Xi+1X{i+1}Xi+1層如何剪裁取決于project shortcut的剪裁結(jié)果,因?yàn)橐WCproject shortcut的output和Xi+1X{i+1}Xi+1的output能被正確的concat.
2.2 Uniform剪裁卷積網(wǎng)絡(luò)
每層剪裁一樣比例的卷積核。 在剪裁一個(gè)卷積核之前,按l1_norm對(duì)filter從高到低排序,越靠后的filter越不重要,優(yōu)先剪掉靠后的filter.
2.3 基于敏感度剪裁卷積網(wǎng)絡(luò)
根據(jù)每個(gè)卷積層敏感度的不同,剪掉不同比例的卷積核。
兩個(gè)假設(shè)
? 在一個(gè)conv layer的parameter內(nèi)部,按l1_norm對(duì)filter從高到低排序,越靠后的filter越不重要。
? 兩個(gè)layer剪裁相同的比例的filters,稱對(duì)模型精度影響更大的layer的敏感度相對(duì)高。
剪裁filter的指導(dǎo)原則
? layer的剪裁比例與其敏感度成反比
? 優(yōu)先剪裁layer內(nèi)l1_norm相對(duì)低的filter
敏感度的理解
橫坐標(biāo)是將filter剪裁掉的比例,豎坐標(biāo)是精度的損失,每條彩色虛線表示的是網(wǎng)絡(luò)中的一個(gè)卷積層。 以不同的剪裁比例單獨(dú)剪裁一個(gè)卷積層,并觀察其在驗(yàn)證數(shù)據(jù)集上的精度損失,并繪出虛線。虛線上升較慢的,對(duì)應(yīng)的卷積層相對(duì)不敏感,優(yōu)先剪不敏感的卷積層的filter.
選擇最優(yōu)的剪裁率組合
折線擬合為曲線,每在豎坐標(biāo)軸上選取一個(gè)精度損失值,就在橫坐標(biāo)軸上對(duì)應(yīng)著一組剪裁率。 用戶給定一個(gè)模型整體的剪裁率,通過移動(dòng)實(shí)線來找到一組滿足條件的且合法的剪裁率。
迭代剪裁
考慮到多個(gè)卷積層間的相關(guān)性,一個(gè)卷積層的修改可能會(huì)影響其它卷積層的敏感度,采取了多次剪裁的策略,步驟如下:
? step1: 統(tǒng)計(jì)各卷積層的敏感度信息
? step2: 根據(jù)當(dāng)前統(tǒng)計(jì)的敏感度信息,對(duì)每個(gè)卷積層剪掉少量filter, 并統(tǒng)計(jì)FLOPS,如果FLOPS已滿足要求,進(jìn)入step4,否則進(jìn)行step3。
? step3: 對(duì)網(wǎng)絡(luò)進(jìn)行簡(jiǎn)單的fine-tune,進(jìn)入step1
? step4: fine-tune訓(xùn)練至收斂 - 蒸餾
一般情況下,模型參數(shù)量越多,結(jié)構(gòu)越復(fù)雜,其性能越好,但參數(shù)也越允余,運(yùn)算量和資源消耗也越大;模型蒸餾是將復(fù)雜網(wǎng)絡(luò)中的有用信息將復(fù)雜網(wǎng)絡(luò)中的有用信息提取出來提取出來,遷移到一個(gè)更小的網(wǎng)絡(luò)中去,在的工具包中,支持兩種蒸餾的方法。
第一種是傳統(tǒng)的蒸餾方法(參考論文:Distilling the Knowledge in a Neural Network)
使用復(fù)雜的網(wǎng)絡(luò)作為teacher模型去監(jiān)督訓(xùn)練一個(gè)參數(shù)量和運(yùn)算量更少的student模型。teacher模型可以是一個(gè)或者多個(gè)提前訓(xùn)練好的高性能模型。student模型的訓(xùn)練有兩個(gè)目標(biāo):一個(gè)是原始的目標(biāo)函數(shù),為student模型輸出的類別概率和label的交叉熵,記為hard-target;另一個(gè)是student模型輸出的類別概率和teacher模型輸出的類別概率的交叉熵,記為soft target,這兩個(gè)loss加權(quán)后得到最終的訓(xùn)練loss,共同監(jiān)督studuent模型的訓(xùn)練。 第二種是基于FSP的蒸餾方法(參考論文:A Gift from Knowledge Distillation: Fast Optimization, Network Minimization and Transfer Learning) 相比傳統(tǒng)的蒸餾方法直接用小模型去擬合大模型的輸出,該方法用小模型去擬合大模型不同層特征之間的轉(zhuǎn)換關(guān)系,其用一個(gè)FSP矩陣(特征的內(nèi)積)來表示不同層特征之間的關(guān)系,大模型和小模型不同層之間分別獲得多個(gè)FSP矩陣,然后使用L2 loss讓小模型的對(duì)應(yīng)層FSP矩陣和大模型對(duì)應(yīng)層的FSP矩陣盡量一致,具體。這種方法的優(yōu)勢(shì),通俗的解釋是,比如將蒸餾類比成teacher(大模型)教student(小模型)解決一個(gè)問題,傳統(tǒng)的蒸餾是直接告訴小模型問題的答案,讓小模型學(xué)習(xí),而學(xué)習(xí)FSP矩陣是讓小模型學(xué)習(xí)解決問題的中間過程和方法,因此其學(xué)到的信息更多。
由于小模型和大模型之間通過L2 loss進(jìn)行監(jiān)督,必須保證兩個(gè)FSP矩陣的維度必須相同,而FSP矩陣的維度為M*N,其中M、N分別為輸入和輸出特征的channel數(shù),因此大模型和小模型的FSP矩陣需要一一對(duì)應(yīng)。 - 輕量級(jí)模型結(jié)構(gòu)搜索
深度學(xué)習(xí)模型在很多任務(wù)上都取得了不錯(cuò)的效果,網(wǎng)絡(luò)結(jié)構(gòu)的好壞對(duì)最終模型的效果有非常重要的影響。手工設(shè)計(jì)網(wǎng)絡(luò)需要非常豐富的經(jīng)驗(yàn)和眾多嘗試,并且眾多的超參數(shù)和網(wǎng)絡(luò)結(jié)構(gòu)參數(shù)會(huì)產(chǎn)生爆炸性的組合,常規(guī)的random search幾乎不可行,因此最近幾年自動(dòng)模型搜索技術(shù)(Neural Architecture Search)成為研究熱點(diǎn)。區(qū)別于傳統(tǒng)NAS,專注在搜索精度高并且速度快的模型結(jié)構(gòu),將該功能統(tǒng)稱為Light-NAS.
4.1 搜索策略
搜索策略定義了使用怎樣的算法可以快速、準(zhǔn)確找到最優(yōu)的網(wǎng)絡(luò)結(jié)構(gòu)參數(shù)配置。常見的搜索方法包括:強(qiáng)化學(xué)習(xí)、貝葉斯優(yōu)化、進(jìn)化算法、基于梯度的算法。當(dāng)前的實(shí)現(xiàn)以模擬退火算法為主。
4.1.1 模擬退火
模擬退火算法來源于固體退火原理,將固體加溫至充分高,再讓其徐徐冷卻,加溫時(shí),固體內(nèi)部粒子隨溫升變?yōu)闊o序狀,內(nèi)能增大,而徐徐冷卻時(shí)粒子漸趨有序,在每個(gè)溫度都達(dá)到平衡態(tài),最后在常溫時(shí)達(dá)到基態(tài),內(nèi)能減為最小。
鑒于物理中固體物質(zhì)的退火過程與一般組合優(yōu)化問題之間的相似性,將其用于網(wǎng)絡(luò)結(jié)構(gòu)的搜索。
使用模擬退火算法搜索模型的過程如下:
Tk=T0?thetakTk=T0?thetak
begin{equation} P(r_k) = begin{cases} e^{frac{(r_k-r)}{T_k}} & r_k < r1 & r_k>=r end{cases} end{equation}
在第k次迭代,搜到的網(wǎng)絡(luò)為NkN_kNk?, 對(duì)NkN_kNk?訓(xùn)練若干epoch后,在測(cè)試集上得到reward為rkr_krk?, 以概率P(rk)P(r_k)P(rk?)接受rkr_krk?,即執(zhí)行r=rkr=r_kr=rk?。rrr在搜索過程起始時(shí)被初始化為0. T0T_0T0?為初始化溫度,thetathetatheta為溫度衰減系數(shù),TkT_kTk?為第k次迭代的溫度。
在的NAS任務(wù)中,區(qū)別于RL每次重新生成一個(gè)完整的網(wǎng)絡(luò),將網(wǎng)絡(luò)結(jié)構(gòu)映射成一段編碼,第一次隨機(jī)初始化,然后每次隨機(jī)修改編碼中的一部分(對(duì)應(yīng)于網(wǎng)絡(luò)結(jié)構(gòu)的一部分)生成一個(gè)新的編碼,然后將這個(gè)編碼再映射回網(wǎng)絡(luò)結(jié)構(gòu),通過在訓(xùn)練集上訓(xùn)練一定的epochs后的精度以及網(wǎng)絡(luò)延時(shí)融合獲得reward,來指導(dǎo)退火算法的收斂。
4.2 搜索空間
搜索空間定義了優(yōu)化問題的變量,變量規(guī)模決定了搜索算法的難度和搜索時(shí)間。因此為了加快搜索速度,定義一個(gè)合理的搜索空間至關(guān)重要。在Light-NAS中,為了加速搜索速度,將一個(gè)網(wǎng)絡(luò)劃分為多個(gè)block,先手動(dòng)按鏈狀層級(jí)結(jié)構(gòu)堆疊c,再 使用搜索算法自動(dòng)搜索每個(gè)block內(nèi)部的結(jié)構(gòu)。
因?yàn)橐阉鞒鲈谝苿?dòng)端運(yùn)行速度快的模型,參考了MobileNetV2中的Linear Bottlenecks和Inverted residuals結(jié)構(gòu),搜索每一個(gè)Inverted residuals中的具體參數(shù),包括kernelsize、channel擴(kuò)張倍數(shù)、重復(fù)次數(shù)、channels number。4.3 模型延時(shí)評(píng)估
搜索過程支持 FLOPS 約束和模型延時(shí)約束。而基于 Android/iOS 移動(dòng)端、開發(fā)板等硬件平臺(tái),迭代搜索過程中不斷測(cè)試模型的延時(shí)不僅消耗時(shí)間而且非常不方便,因此開發(fā)了模型延時(shí)評(píng)估器來評(píng)估搜索得到模型的延時(shí)。通過延時(shí)評(píng)估器評(píng)估得到的延時(shí)與模型實(shí)際測(cè)試的延時(shí)波動(dòng)偏差小于 10%。
延時(shí)評(píng)估器分為配置硬件延時(shí)評(píng)估器和評(píng)估模型延時(shí)兩個(gè)階段,配置硬件延時(shí)評(píng)估器只需要執(zhí)行一次,而評(píng)估模型延時(shí)則在搜索過程中不斷評(píng)估搜索得到的模型延時(shí)。
? 配置硬件延時(shí)評(píng)估器 - 獲取搜索空間中所有不重復(fù)的 op 及其參數(shù)
- 獲取每組 op 及其參數(shù)的延時(shí)
? 評(píng)估模型延時(shí) - 獲取給定模型的所有 op 及其參數(shù)
- 根據(jù)給定模型的所有 op 及參數(shù),利用延時(shí)評(píng)估器去估計(jì)模型的延時(shí)
- 參考文獻(xiàn)
- High-Performance Hardware for Machine Learning
- Quantizing deep convolutional networks for efficient inference: A whitepaper
- Pruning Filters for Efficient ConvNets
- Distilling the Knowledge in a Neural Network
- A Gift from Knowledge Distillation: Fast Optimization, Network Minimization and Transfer Learning
總結(jié)
以上是生活随笔為你收集整理的deeplearning算法优化原理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: deeplearning模型库
- 下一篇: deeplearning搜索空间