日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人工智能 > ChatGpt >内容正文

ChatGpt

极智AI | 谈谈几种量化策略:MinMax、KLD、ADMM、EQ

發(fā)布時(shí)間:2024/3/12 ChatGpt 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 极智AI | 谈谈几种量化策略:MinMax、KLD、ADMM、EQ 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

? 歡迎關(guān)注我的公眾號(hào) [極智視界],獲取我的更多筆記分享

? O_o ? >_< ? o_O ? O_o ? ~_~ ? o_O

? 本文主要聊一下深度學(xué)習(xí)模型量化相關(guān)策略。

? 模型小型化是算法部署的關(guān)鍵技術(shù),模型小型化的過(guò)程通常用模型量化來(lái)描述。量化通常是高比特位到低比特位的映射過(guò)程,量化的對(duì)象既可以是權(quán)重?cái)?shù)據(jù),也可以是激活值。量化方式具有多種形態(tài),不管是混合量化、還是全整型量化;不管是單層量化、成組量化、還是整網(wǎng)量化,都存在浮點(diǎn)數(shù)映射到整型數(shù)的過(guò)程,這個(gè)過(guò)程一定存在精度損失,而對(duì)于我們來(lái)說(shuō),要做的是把精度損失控制在可接受的范圍。

? 量化又可以分為后量化、訓(xùn)練時(shí)量化又或是量化感知訓(xùn)練。后量化相比訓(xùn)練時(shí)量化,是一種更加高效和無(wú)侵入式的算法加速技術(shù),這里主要聊一下后量化,包括一些主要的量化類(lèi)型和量化策略:

  • 量化類(lèi)型:非對(duì)稱(chēng)量化和對(duì)稱(chēng)量化、非線(xiàn)性量化和線(xiàn)性量化;
  • 量化策略:MinMax、KLD、ADMM、EQ;

文章目錄

    • 1、量化類(lèi)型
      • 1.1 非對(duì)稱(chēng)量化和對(duì)稱(chēng)量化
      • 1.2 非線(xiàn)性量化和線(xiàn)性量化
    • 2、量化策略
      • 2.1 MinMax 量化
      • 2.2 KLD 量化
      • 2.3 ADMM 量化
      • 2.4 EQ 量化
    • 3、量化實(shí)驗(yàn)

1、量化類(lèi)型

1.1 非對(duì)稱(chēng)量化和對(duì)稱(chēng)量化

? 非對(duì)稱(chēng)量化是比對(duì)稱(chēng)量化更加廣義的概念,對(duì)稱(chēng)量化是非對(duì)稱(chēng)量化的一種特殊情況。

? 非對(duì)稱(chēng)量化也就是帶有偏置的線(xiàn)性映射,其數(shù)學(xué)表達(dá)可以是這樣:

? 其中 Z 不一定等于 0,代表浮點(diǎn)數(shù)的零點(diǎn)不一定對(duì)應(yīng)整型的零點(diǎn)。E() 代表截?cái)嗪瘮?shù),作用是使其截?cái)嗟綄?duì)應(yīng)整型的數(shù)值表述范圍內(nèi)。對(duì)于非對(duì)稱(chēng)量化,滿(mǎn)足如下的約束:

? 上述約束中,T1 和 T2 是對(duì)于浮點(diǎn)數(shù)的截?cái)喾秶?#xff0c;也就是非對(duì)稱(chēng)量化的閾值。通過(guò)換算可以得到閾值和線(xiàn)性映射參數(shù) S 和 Z 的數(shù)學(xué)關(guān)系,在確定了閾值后,也就確定了線(xiàn)性映射的參數(shù)。

? 對(duì)稱(chēng)量化可以看作非對(duì)稱(chēng)量化當(dāng) Z = 0 時(shí)的一種特殊情況,滿(mǎn)足 T1 = -T2,此時(shí)的閾值和線(xiàn)性映射參數(shù)的數(shù)學(xué)關(guān)系如下:


1.2 非線(xiàn)性量化和線(xiàn)性量化

? 線(xiàn)性量化往往又被稱(chēng)為均勻量化,這在目前的算法落地中是最常用的,上面提到的非對(duì)稱(chēng)量化和對(duì)稱(chēng)量化也是基于線(xiàn)性量化的。非線(xiàn)性量化實(shí)際用的比較少,以 LOG 量化為代表。

? 不同的量化方式對(duì)數(shù)據(jù)分布具有選擇性。對(duì)于均勻量化,假設(shè)數(shù)據(jù)在整個(gè)表達(dá)空間內(nèi)均勻分布,在均勻分布下線(xiàn)性量化是一種較好的量化方式。 LOG 量化則可以保證數(shù)值空間內(nèi)相對(duì)誤差的最優(yōu)化,這是目前大部分非線(xiàn)形量化的目標(biāo),通過(guò)對(duì)數(shù)據(jù)分布的分析,可以提升高密度數(shù)據(jù)區(qū)域的表達(dá)能力。

? 舉個(gè)例子,假設(shè)我要對(duì)一組數(shù)據(jù) x 進(jìn)行 int8 對(duì)稱(chēng)量化,量化范圍為 (-a, a),對(duì)于線(xiàn)性量化,可以用以下數(shù)學(xué)式進(jìn)行表達(dá):

? 同樣的,對(duì)于 LOG 非線(xiàn)性量化可以用如下式子進(jìn)行表達(dá):


2、量化策略

? 從上述的映射關(guān)系中,如果知道了閾值,那么其對(duì)應(yīng)的線(xiàn)性映射參數(shù)也就知道了,整個(gè)量化過(guò)程也就明確了。那么該如何確定閾值呢?一般來(lái)說(shuō),對(duì)于權(quán)重的量化,由于權(quán)重的數(shù)據(jù)分布是靜態(tài)的,一般直接找出 MIN 和 MAX 線(xiàn)性映射即可;而對(duì)于推理激活值來(lái)說(shuō),其數(shù)據(jù)分布是動(dòng)態(tài)的,為了得到激活值的數(shù)據(jù)分布,往往需要一個(gè)所謂校準(zhǔn)集的東西來(lái)進(jìn)行抽樣分布,有了抽樣分布后再通過(guò)一些量化算法進(jìn)行量化閾值的選取。

2.1 MinMax 量化

? MinMax 是最簡(jiǎn)單的量化方法,量化示意如下:

? MinMax 其實(shí)就是簡(jiǎn)單的把浮點(diǎn)數(shù)直接映射到 int8 的數(shù)據(jù)范圍,MinMax 方法由浮點(diǎn)映射到定點(diǎn)的數(shù)學(xué)表達(dá)如下:

? 其中,R:真實(shí)浮點(diǎn)值(fp32);Q:量化后的定點(diǎn)值(int8,Q屬于[-127, 127]);Z:表示0浮點(diǎn)值對(duì)應(yīng)的量化定點(diǎn)值;S:定點(diǎn)量化后可表示的最小刻度。

? 這種量化方式,主要關(guān)注浮點(diǎn)范圍的最大值和最小值,然后通過(guò)尺度 S 線(xiàn)性映射。這種量化方法往往會(huì)使精度下降較多,一般后面還會(huì)跟一個(gè) requantize 的微調(diào)優(yōu)化。實(shí)際上,把 MinMax 量化應(yīng)用于網(wǎng)絡(luò)權(quán)重這樣靜態(tài)分布的數(shù)據(jù)的時(shí)候,對(duì)于網(wǎng)絡(luò)推理最后的精度損失影響不大,且量化操作開(kāi)銷(xiāo)更小,量化過(guò)程效率更高,這是 Nvidia 經(jīng)過(guò)大量實(shí)驗(yàn)得出的結(jié)論。


2.2 KLD 量化

? KLD 量化是用 KL 散度來(lái)衡量?jī)蓚€(gè)分布之間的相似性,是 Nvidia TensorRT 中對(duì)于激活值采用的量化方法,KLD 量化的示意如下:

  • 這種方法不是直接將 [min, max] 映射到 [-127,127],而是去尋找一個(gè)閾值|T| < max(|max|, |min|),將其 [-T, T] 映射到 [-127, 127]。認(rèn)為只要閾值選取得當(dāng),就能將閾值外的值舍棄掉,也不會(huì)對(duì)精度損失造成大的影響;
  • 超出閾值 ±|T| 外的直接映射為閾值。比如上圖中的三個(gè)紅色點(diǎn),直接映射為-127,這種映射關(guān)系為飽和的(Saturate );

? KLD 量化方法試圖將 fp32 數(shù)值分布和 int8 數(shù)值分布抽象成兩個(gè)分布,用閾值 |T| 來(lái)更新兩個(gè)數(shù)值分布,并用 KL 散度來(lái)衡量?jī)蓚€(gè)分布的相似性,若 KL 散度值越小,說(shuō)明這兩個(gè)分布越相似,也說(shuō)明這個(gè)閾值 |T| 選擇的最好。

? 下面的圖是 TensorRT 中的關(guān)于 KL 散度校準(zhǔn)的偽代碼,這個(gè)圖也完美詮釋了 KLD 整個(gè)量化過(guò)程。


2.3 ADMM 量化

? ADMM 交替方向乘子法,是優(yōu)化函數(shù)的一種方式,一般用于帶有約束的最優(yōu)解問(wèn)題。類(lèi)似的,梯度下降法、牛頓下降法、拉格朗日乘子法也是類(lèi)似的優(yōu)化方法。

? 其通用優(yōu)化式子如下:

? 在 ADMM 中,其等價(jià)的優(yōu)化式,也就是拉格朗日式如下:

? 同拉格朗日乘子法不同的是,ADMM 采用的是類(lèi)似于分布迭代的方式獲得最終解。其采用如下的步驟:

? 下面我們將量化閾值的選取策略變換成 ADMM 算法,利用前面所說(shuō)的對(duì)稱(chēng)量化方法,把量化當(dāng)成一個(gè)編碼問(wèn)題,編碼再加上解碼,就還原出了可以跟原始數(shù)據(jù)進(jìn)行對(duì)比的數(shù)據(jù)。這樣的邏輯下,將優(yōu)化目標(biāo)設(shè)計(jì)成如下表達(dá):

? 2-范式易于求導(dǎo),那么上述的優(yōu)化目標(biāo)可以轉(zhuǎn)換成如下形式:

? 個(gè)人認(rèn)為在對(duì)于對(duì)稱(chēng)量化不需要使用 ADMM,因?yàn)橹挥幸粋€(gè)變量,使用梯度下降法也是可以得到最終的s。


2.4 EQ 量化

? EQ 量化即 EasyQuant,是格靈深瞳開(kāi)源的量化算法,在文章《EasyQuant: Post-training Quantization via Scale Optimization》中進(jìn)行了介紹。EQ 量化方法的主要思想是:誤差累計(jì)、整網(wǎng)決策變成單網(wǎng)決策、以余弦相似度為優(yōu)化目標(biāo)、交替優(yōu)化權(quán)重縮放系數(shù)和激活值縮放系數(shù)。

? 假設(shè)量化公式如下(為了方便起見(jiàn),采用對(duì)稱(chēng)量化進(jìn)行說(shuō)明):

? 假設(shè)量化目標(biāo)精度為 IntN,其中的 clip 函數(shù)表示把量化后的數(shù)值規(guī)范到整型范圍,如下:

? EQ 量化算法把縮放系數(shù) S 的獲得看成數(shù)學(xué)優(yōu)化問(wèn)題,將優(yōu)化目標(biāo)進(jìn)行了如下表達(dá):假設(shè)傳入的校準(zhǔn)集中樣本個(gè)數(shù)為 N、被量化模型的網(wǎng)絡(luò)層個(gè)數(shù)為 L,Qil 表示未量化推理時(shí)第 l 層網(wǎng)絡(luò)層的第 i 個(gè)樣本的輸出值,Q^il 表示量化推理時(shí)第 l 層網(wǎng)絡(luò)層的第 i 個(gè)樣本的輸出值,因?yàn)檎`差累計(jì)和問(wèn)題分解的手段,使用余弦相似度作為評(píng)判標(biāo)準(zhǔn),最終的優(yōu)化目標(biāo)如下所示:

? 其中 Qil 和 Q^il 在該層為卷積的時(shí)候?yàn)?#xff1a;

? EQ 算法最大的亮點(diǎn)在于對(duì)權(quán)重的縮放系數(shù)也進(jìn)行了優(yōu)化,其他的量化閾值選取策略基本是不考慮對(duì)權(quán)重的縮放系數(shù)進(jìn)行優(yōu)化,直接使用 Min-Max 得到縮放系數(shù)。加入了權(quán)重的縮放系數(shù)的優(yōu)化變量,導(dǎo)致了多變量?jī)?yōu)化問(wèn)題。如若按照常規(guī)的方式進(jìn)行多變量?jī)?yōu)化,該優(yōu)化目標(biāo)往往難以解析,EQ 給出的解法是使用交替優(yōu)化權(quán)重激活系數(shù)和激活縮放系數(shù)。

? EQ 算法流程如下:


3、量化實(shí)驗(yàn)

? 這里選取了 KLD 和 ADMM 兩種量化算法進(jìn)行了一些實(shí)驗(yàn)?zāi)M。

? 使用 python numpy 創(chuàng)造隨機(jī)數(shù)據(jù)分布,下面均是以正太分布進(jìn)行試驗(yàn)。對(duì)同個(gè)分布分別使用 KL 和 ADMM 算法進(jìn)行閾值計(jì)算。

? 以下是三次試驗(yàn)的結(jié)果:

? 使用 KLD 和 ADMM 算法得到的閾值如下:

? 實(shí)驗(yàn)小結(jié):單從試驗(yàn)結(jié)果可知,ADMM 得到的量化閾值總是比 KLD 的量化閾值要高,基本穩(wěn)定在max(|均值-3 * 標(biāo)準(zhǔn)差|,|均值+ 3 * 標(biāo)準(zhǔn)差|)。按照正太分布的定義,ADMM 的閾值會(huì)覆蓋 99.99% 分布的數(shù)據(jù),因?yàn)槠鋬?yōu)化目標(biāo)難以忍受太小的閾值,那樣會(huì)讓閾值外的數(shù)值量化 + 反量化后誤差極大。


? 以上聊了一下一些量化算法相關(guān)的東西,包括量化類(lèi)型、量化策略以及貼了個(gè)試驗(yàn)分析,關(guān)于量化是一個(gè)實(shí)用且值得深挖的領(lǐng)域,有問(wèn)題歡迎討論,我也在學(xué)習(xí)中~


? 好了,收工~


?【公眾號(hào)傳送】

《【模型推理】談?wù)剮追N量化策略:MinMax、KLD、ADMM、EQ》



掃描下方二維碼即可關(guān)注我的微信公眾號(hào)【極智視界】,獲取更多AI經(jīng)驗(yàn)分享,讓我們用極致+極客的心態(tài)來(lái)迎接AI !

總結(jié)

以上是生活随笔為你收集整理的极智AI | 谈谈几种量化策略:MinMax、KLD、ADMM、EQ的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。