? 歡迎關注我的公眾號 [極智視界],獲取我的更多筆記分享
? O_o ? >_< ? o_O ? O_o ? ~_~ ? o_O
? 本文主要聊一聊深度學習模型量化中對激活函式的處理方式,
? 之前已經寫過幾篇關于模型量化的文章:《【模型推理】談談幾種量化策略:MinMax、KLD、ADMM、EQ》、《【模型推理】談談模型量化組織方式》,里面對一些常用的量化演算法及量化的組織方式進行了一些介紹,有興趣的同學可以查閱,這里主要說一下模型中的激活函式特別是非線性激活函式的量化方式,
? RELU 函式比較特殊,在 Conv 后跟著 RELU 后,一般會進行融合量化,其中 RELU 這種分段線性函式可以用 clip 函式截斷處理進行量化,但是有許多激活函式是非線性的,無法進行截斷處理,那么非線性激活函式該如何量化呢?其實非線性激活函式在很多框架中是不會進行量化的,若非要量化,可以采用查表法、泰勒展開法,
文章目錄
- 1、查表法
- 2、泰勒展開
1、查表法
? 查表法的思路在運算性能低或者沒有專門的非線性函式指令的單板機上常常被使用,對于神經網路中非線性激活函式的量化中查表法該如何使用呢?
? 任何一個非線性激活函式在進行量化時,都可以用如下數學運算式進行等效:

? 上述式子中,很多情況下 f() 這個函式是無法徹呼叫整型運算代替的,而查表法的思想是基于輸入 qx 在被量化后為 int8 型別,其值域為有限集合[-2^7, 2^7-1],因此,用查表代替運算時,我們可以預先算好任何 qx 所對應的量化值:

? 實際推理程序中,我們預先計算好的表其長度為 256,假設表的第 128 位數的指標為 Y128,那么取出經過非線性函式的量化值是個很簡單的取址操作,如下所示:

? 以下分別是 sigmoid 和 mish 激活函式經過模擬出來的浮點數,其輸入分布為在 [-4, 4] 的平均分布時使用 KL 散度量化演算法進行量化后的曲線圖:


2、泰勒展開
? 對可導函式在某點 x0 進行泰勒展開,該函式在該點必須是無限可導的,那么其展開式如下:

? 將量化公式代入上述式子,可得到如下的量化等效式:

? 這樣就實作了使用泰勒展開方法對非線性激活函式進行量化,但是可想而知,這種通過這樣方法來進行量化的方法缺陷很多,其中最為嚴重就是量化精度誤差與運算耗時,所以這種量化方式不一定適合實際的部署,
? 以上聊了一下深度學習模型中的非線性激活函式的量化方法,有問題歡迎討論,
?【公眾號傳送】
《【模型推理】談談非線性激活函式的量化方式》
掃描下方二維碼即可關注我的微信公眾號【極智視界】,獲取更多AI經驗分享,讓我們用極致+極客的心態來迎接AI !

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/323303.html
標籤:AI
上一篇:Linux作業系統
