對(dui)于TinyML來說(shuo),他們(men)面(mian)臨的主要挑戰是如何(he)采用相對(dui)較大的神(shen)經網絡(有時為(wei)(wei)數百兆字節),使(shi)其(qi)適(shi)合(he)并在資源受限的微控制器上運行,同時保持(chi)最(zui)小的功(gong)率(lv)預算。為(wei)(wei)此,最(zui)有效(xiao)的技(ji)術稱(cheng)為(wei)(wei)量化(quantization)。
本(ben)文將提(ti)供對量化的(de)基本(ben)理解,它是什么,它是如何使用的(de),以及為什么它很重要。
在理解量(liang)化(hua)之前,重要的(de)是要討論為(wei)什(shen)么神(shen)經網絡通常(chang)會占(zhan)用如此(ci)多的(de)內存(cun)。
神(shen)(shen)經(jing)(jing)(jing)網絡由一(yi)系(xi)列(lie)層中的(de)(de)一(yi)系(xi)列(lie)相(xiang)互連接的(de)(de)神(shen)(shen)經(jing)(jing)(jing)元(yuan)組(zu)成(cheng)。如(ru)圖 1 所示,標準(zhun)神(shen)(shen)經(jing)(jing)(jing)網絡由相(xiang)互連接的(de)(de)神(shen)(shen)經(jing)(jing)(jing)元(yuan)層組(zu)成(cheng),每個(ge)神(shen)(shen)經(jing)(jing)(jing)元(yuan)都有自己(ji)的(de)(de)權重(weights)、偏差(biases)和與(yu)之(zhi)相(xiang)關的(de)(de)激活函數。
圖 1. 神(shen)(shen)經(jing)網絡中的(de)神(shen)(shen)經(jing)元(yuan)示例。神(shen)(shen)經(jing)元(yuan)之(zhi)間的(de)每個連接都(dou)有(you)自己的(de)權(quan)重(zhong)(zhong),而每個神(shen)(shen)經(jing)元(yuan)都(dou)有(you)自己的(de)偏(pian)置和激(ji)活函數(shu) 這些權(quan)重(zhong)(zhong)和偏(pian)差通常被(bei)稱(cheng)為神(shen)(shen)經(jing)網絡的(de)“參(can)數(shu)”。
每個神經(jing)元也有自己(ji)的(de)“激(ji)活(huo)”(activation),這個數(shu)字(zi)決定了該神經(jing)元的(de)活(huo)躍(yue)程度(du)。神經(jing)元的(de)激(ji)活(huo)基于其(qi)權重(zhong)和偏(pian)差值,以(yi)及使用的(de)激(ji)活(huo)函數(shu)。
權(quan)重和偏差是(shi)在(zai)訓練期(qi)間調整的(de)參(can)數,并且通過擴展,神(shen)經元的(de)激活也(ye)是(shi)如此(ci)。
這些值、權重、偏差和(he)激活值是神(shen)經網絡物(wu)理存儲(chu)在內(nei)存中(zhong)的(de)大部分內(nei)容。標準是將這些數字表示為 32 位浮點值,這樣(yang)可以實現高水平的(de)精度,并最(zui)終提(ti)高神(shen)經網絡的(de)準確性。
這種準確性是神經網(wang)絡傾(qing)向于(yu)占(zhan)用(yong)如(ru)此(ci)多內存的原(yuan)因(yin)。對于(yu)具有數(shu)百(bai)萬個參數(shu)和激(ji)活(huo)的網(wang)絡,每個都存儲(chu)為(wei)一(yi)個 32 位(wei)值,內存使(shi)用(yong)量很快就會增加。
例如,50 層的 ResNet 架(jia)(jia)構包含大約 2600 萬(wan)個(ge)權(quan)重(zhong)和(he) 1600 萬(wan)個(ge)激活。通過使用 32 位(wei)浮點(dian)值(zhi)來表(biao)示權(quan)重(zhong)和(he)激活值(zhi),整個(ge)架(jia)(jia)構將(jiang)需要 168 MB 的存儲空(kong)間。
量化是降低權(quan)重、偏差(cha)和(he)激活(huo)的精度的過程(cheng),以使它(ta)們消耗更少的內存。
換(huan)(huan)句話說,量化(hua)的(de)(de)過程就(jiu)是(shi)取一(yi)個神經網絡(luo)的(de)(de)過程,它一(yi)般使(shi)用 32 位(wei)浮點數來表示參數,而是(shi)將其轉換(huan)(huan)為使(shi)用更小的(de)(de)表示,例(li)如 8 位(wei)整數。
例如,從 32 位到 8 位,模型大小(xiao)會減少 4 倍,因此(ci)量化的一(yi)個明(ming)顯好(hao)處是顯著減少內存。
圖 2 顯示(shi)了一個示(shi)例。
圖 2.量化(hua)通(tong)過降低權重、偏差和激活(huo)的精度(du)來(lai)縮小神經網(wang)絡
量化的另(ling)一個(ge)好處是它可(ke)以降(jiang)低網(wang)絡延遲和提高(gao)電源效率。
由于可以(yi)使用(yong)整(zheng)數而不是(shi)浮點數據類型執(zhi)行操作,因(yin)此提高(gao)了網絡速度。這些(xie)整(zheng)數運算(suan)需要在(zai)大多數處理器內核(包括微控(kong)制器)上進行較少的(de)計算(suan)。
總(zong)體而(er)言,由于減少(shao)了(le)計(ji)算(suan)和減少(shao)了(le)內存訪(fang)問,因此功率效率得(de)到了(le)提高。
盡(jin)管有這些好處(chu),但與量(liang)化(hua)(hua)的(de)(de)權衡(heng)是神經(jing)網絡(luo)(luo)可能(neng)會(hui)失(shi)去準確性,因(yin)為它(ta)們不能(neng)精(jing)確地表示信息(xi)。然而,根據精(jing)度損(sun)失(shi)的(de)(de)多少(shao)、網絡(luo)(luo)架構和網絡(luo)(luo)訓練/量(liang)化(hua)(hua)方案,已經(jing)表明量(liang)化(hua)(hua)通常會(hui)導(dao)致(zhi)非常小的(de)(de)精(jing)度損(sun)失(shi),尤(you)其是在(zai)權衡(heng)延遲(chi)、內存使用方面的(de)(de)改進時,和權力。
在實踐中,有兩種主(zhu)要的(de)量(liang)化方式: 1.訓練后量(liang)化 2.量(liang)化感知訓練
顧名思義,訓(xun)練后(hou)量化(hua)是一(yi)種技(ji)術,其中(zhong)神經網絡完全使用浮(fu)點計算進行訓(xun)練,然后(hou)進行量化(hua)。
為此,一旦訓練結束,神經網絡就(jiu)會被(bei)凍(dong)結,這意味著(zhu)它的參(can)(can)數(shu)不能再更新,然后(hou)(hou)參(can)(can)數(shu)就(jiu)會被(bei)量化。量化模型最終被(bei)部署并用于執行(xing)推理,而無需對訓練后(hou)(hou)參(can)(can)數(shu)進行(xing)任何更改。
雖然這種(zhong)方(fang)法很(hen)簡單,但由于所(suo)有與量化相關的誤差都發生在訓練完成后,因(yin)此(ci)無(wu)法補償,因(yin)此(ci)會導(dao)致更高的精度損失。
如圖 3 所(suo)示,量(liang)(liang)化(hua)感(gan)知訓練通(tong)過在訓練期間使用前向傳遞中的量(liang)(liang)化(hua)版本訓練神(shen)經網(wang)絡來補償與量(liang)(liang)化(hua)相關的誤(wu)差。
圖(tu)3.量化感知訓練流程圖(tu) 這個想法是(shi)量化相關的(de)誤(wu)差(cha)會在(zai)訓練過程中累(lei)積在(zai)模型的(de)總損失中,訓練優化器將相應地調整參數并整體減少誤(wu)差(cha)。
量(liang)化感知訓練(lian)的好(hao)處是損失比訓練(lian)后量(liang)化低得多。
有(you)關量化(hua)背后的數學的更深(shen)入的技術討論(lun),建(jian)議閱讀Gholami 等人的這篇(pian)論(lun)文。
對于 TinyML,量化是(shi)(shi)一個非(fei)常(chang)寶貴的工具,是(shi)(shi)整個領域的核心。
總而言之,量化是必要(yao)(yao)的,主(zhu)要(yao)(yao)有以(yi)下三(san)個原因:
1.量化(hua)顯著(zhu)減(jian)小(xiao)了模型大小(xiao)——這使得在內存受限的設(she)備(如微控制器)上運(yun)行 ML 更加(jia)可行。
2.量化允許 ML 模型(xing)在需要較少處理能力的情況下運(yun)行——TinyML 中使用(yong)的 MCU 的處理單元的性能往往低于標準(zhun) CPU 或 GPU。
3.量(liang)化可以(yi)降低功(gong)耗——TinyML 的最初目標是(shi)以(yi)低于 1mW 的功(gong)率預算執行 ML 任(ren)務。這是(shi)在由紐扣電池(chi)等小型電池(chi)供電的設(she)備上部署(shu) ML 所必需的。