AI產(chǎn)品經(jīng)理必讀:如何讓端側(cè)模型更聰明?
受限于設(shè)備的計(jì)算能力和存儲(chǔ)空間,如何讓端側(cè)模型在資源有限的情況下變得更聰明、更高效,成為了AI產(chǎn)品經(jīng)理的一個(gè)關(guān)鍵挑戰(zhàn)。本文將詳細(xì)介紹九種前沿技術(shù),希望能幫到大家。
端側(cè)模型是一種直接在你的設(shè)備上運(yùn)行的人工智能。
為什么要在端側(cè)用AI?云端模型不香嗎?
端側(cè)AI的好處簡直不要太多:它能保護(hù)隱私(數(shù)據(jù)本地保存,不用上傳到云端),反應(yīng)快如閃電(畢竟“大腦”就在身邊,不用千里迢迢造訪“云端”),還不依賴網(wǎng)絡(luò)環(huán)境,隨時(shí)隨地可用(出門在外可不是哪哪都有信號(hào))。
端側(cè)的好處這么多,但問題是,設(shè)備上的“大腦”畢竟空間有限、能量也有限,不像云端動(dòng)輒萬卡集群的超級計(jì)算機(jī)那樣“豪橫”。怎樣才能在“緊巴巴”的條件下,讓端側(cè)模型變得更聰明、更強(qiáng)大呢?
本文為你揭開這些讓端側(cè)模型“小身材,大智慧”的9大技術(shù)。
第一招:名師出高徒 —— “知識(shí)蒸餾(Knowledge Distillation)”的智慧傳承,“濃縮的都是精華!”
想象一下,一位學(xué)識(shí)淵博的老教授(咱們稱它為“教師模型”)和一個(gè)聰明伶俐的學(xué)生(也就是我們的“學(xué)生模型”,即端側(cè)模型)。老教授雖然知識(shí)多,但“體型龐大”,不適合直接塞進(jìn)手機(jī)里。怎么辦呢?
“知識(shí)蒸餾”就像是這位老教授手把手地教學(xué)生。學(xué)生不僅學(xué)習(xí)課本上的標(biāo)準(zhǔn)答案(專業(yè)術(shù)語叫“硬標(biāo)簽”),更重要的是學(xué)習(xí)老教授思考問題的方式和判斷的微妙之處(比如,老教授看到一只貓,不僅知道它是貓,還知道它有90%的可能是英短,10%的可能是美短,這種概率分布就是“軟標(biāo)簽”)。
這樣一來,學(xué)生模型雖然“身材嬌小”,卻能學(xué)到老師傅的“內(nèi)功心法”,表現(xiàn)自然遠(yuǎn)超自己“閉門造車”。
簡而言之讓一個(gè)參數(shù)量小、計(jì)算量小的“學(xué)生模型”去學(xué)習(xí)一個(gè)參數(shù)量大、能力強(qiáng)的“教師模型”的精髓,而不僅僅是學(xué)習(xí)訓(xùn)練數(shù)據(jù)本身。
怎么實(shí)現(xiàn)?
先訓(xùn)練一個(gè)滿血版的“教師模型”(比如在強(qiáng)大的云服務(wù)器上)。
然后,讓“學(xué)生模型”一邊學(xué)習(xí)真實(shí)數(shù)據(jù)的答案,一邊模仿“教師模型”對數(shù)據(jù)的判斷結(jié)果(那些概率分布)。
最終,這個(gè)“學(xué)生模型”就又小又強(qiáng),可以在你的手機(jī)上運(yùn)行了。
舉個(gè)例子:
Google在研究中就曾展示過,通過知識(shí)蒸餾,可以將一個(gè)大型圖像識(shí)別模型的知識(shí)遷移到一個(gè)小得多的移動(dòng)端模型上,后者在保持較低延遲的同時(shí),準(zhǔn)確率損失非常小。例如,一個(gè)大型模型的準(zhǔn)確率可能是85%,通過蒸餾,小型模型可能達(dá)到83%,但模型大小和運(yùn)算量卻減少了數(shù)倍甚至數(shù)十倍。
第二招:精打細(xì)算過日子 —— “量化(Quantization)”的魔力,“從‘奢侈品’到‘經(jīng)濟(jì)適用’!”
我們知道,計(jì)算機(jī)里的數(shù)字都是用一串0和1來表示的。表示得越精確,占的空間就越大,計(jì)算起來也越慢。
“量化”就像是把這些數(shù)字從“高精度奢侈品”變成“經(jīng)濟(jì)適用型”。比如,原來用32位表示一個(gè)數(shù)字,現(xiàn)在我們想辦法用16位(FP16)甚至8位整數(shù)(INT8)來近似表示它。
這就好比,以前我們用精確到小數(shù)點(diǎn)后好幾位的尺子量東西,現(xiàn)在用稍微粗略一點(diǎn)但依然夠用的尺子。模型“體重”瞬間減輕,運(yùn)算速度也“嗖嗖”變快,而且很多時(shí)候,對最終結(jié)果的準(zhǔn)確度影響非常小。
簡而言之降低模型中數(shù)字(權(quán)重和激活值)的表示精度,比如從32位浮點(diǎn)數(shù)變成8位整數(shù),從而大幅減小模型大小和計(jì)算量。
怎么實(shí)現(xiàn)?
訓(xùn)練后量化 (PTQ):模型先用高精度訓(xùn)練好,然后像“快速瘦身”一樣,直接把它轉(zhuǎn)換成低精度的。這需要一個(gè)“校準(zhǔn)”過程,看看這些數(shù)字大概在什么范圍,然后進(jìn)行映射。
量化感知訓(xùn)練 (QAT):更高級的玩法!在訓(xùn)練的時(shí)候就告訴模型:“你以后要過‘低精度’的緊日子了” 模型在訓(xùn)練過程中就會(huì)主動(dòng)去適應(yīng)這種變化,準(zhǔn)確度損失通常更小。
舉個(gè)例子
根據(jù)高通(Qualcomm)等芯片廠商的報(bào)告,通過將模型從FP32量化到INT8,模型大小可以減少約4倍,推理速度在支持INT8運(yùn)算的硬件上(如其驍龍?zhí)幚砥鲀?nèi)的AI引擎)可以提升2到4倍,同時(shí)功耗也顯著降低。例如,在某些圖像分類任務(wù)中,INT8量化后的模型準(zhǔn)確率損失不到1%。
第三招:壯士斷腕,去蕪存菁 —— “剪枝(Pruning)”的藝術(shù),“砍掉不必要的枝丫,才能讓主干更強(qiáng)壯!”
一個(gè)訓(xùn)練好的神經(jīng)網(wǎng)絡(luò),就像一棵枝繁葉茂的大樹。但仔細(xì)一看,有些“枝丫”(網(wǎng)絡(luò)中的連接或神經(jīng)元)其實(shí)對最終“結(jié)果”(模型的預(yù)測)貢獻(xiàn)很小,甚至可以說有點(diǎn)多余。“剪枝”技術(shù)就像一位園藝大師,把這些“不結(jié)果”或者“添亂”的枝丫給修剪掉。
這樣一來,模型的“體型”變小了,計(jì)算量也減少了,跑起來自然更輕快。有研究表明,對一些經(jīng)典的圖像識(shí)別模型(如VGG、ResNet)進(jìn)行剪枝,可以在幾乎不損失精度的情況下,減少50%甚至更多的參數(shù)和計(jì)算量。
簡而言之
移除神經(jīng)網(wǎng)絡(luò)中不那么重要的參數(shù)(權(quán)重)或結(jié)構(gòu)(神經(jīng)元、通道),讓模型變得更小、更快。
怎么實(shí)現(xiàn)?
- 幅度剪枝:最簡單粗暴,哪個(gè)連接的權(quán)重?cái)?shù)值?。ń咏?),就認(rèn)為它不重要,咔嚓剪掉!
- 結(jié)構(gòu)化剪枝:這個(gè)更講究技巧,不是單個(gè)單個(gè)剪,而是一剪就剪掉一整個(gè)“部門”(比如整個(gè)神經(jīng)元或卷積核通道)。這樣做的好處是,修剪后的模型結(jié)構(gòu)更規(guī)整,硬件更容易加速。
- 迭代剪枝:剪一點(diǎn),然后重新“補(bǔ)習(xí)”(微調(diào)訓(xùn)練)一下,讓模型恢復(fù)元?dú)猓偌粢稽c(diǎn),再補(bǔ)習(xí)……如此往復(fù),效果更佳。
做個(gè)類比
這有點(diǎn)像我們大腦的學(xué)習(xí)過程。神經(jīng)科學(xué)家發(fā)現(xiàn),嬰兒時(shí)期大腦神經(jīng)元之間的連接非常多,但隨著成長和學(xué)習(xí),一些不常用的連接會(huì)減弱甚至消失,而常用的連接則會(huì)加強(qiáng),形成高效的神經(jīng)網(wǎng)絡(luò)。剪枝也是在模擬這個(gè)“優(yōu)勝劣汰”的過程。
第四招:AI設(shè)計(jì)AI —— “神經(jīng)架構(gòu)搜索(NAS)”的自動(dòng)化革命,“讓AI自己設(shè)計(jì)自己的構(gòu)造”
以前設(shè)計(jì)神經(jīng)網(wǎng)絡(luò),很依賴人類專家的經(jīng)驗(yàn)和靈感,就像建筑師設(shè)計(jì)房子一樣,需要反復(fù)調(diào)試。但如果想在手機(jī)這種“小地基”上蓋出“又好又快”的房子,挑戰(zhàn)就更大了。
“神經(jīng)架構(gòu)搜索”(NAS)就是讓AI自己去探索和設(shè)計(jì)最適合端側(cè)設(shè)備的網(wǎng)絡(luò)結(jié)構(gòu)。你給AI設(shè)定好目標(biāo)(比如,我想要一個(gè)準(zhǔn)確率高、速度快、耗電少的模型),然后AI就會(huì)在一個(gè)巨大的“積木池”(各種可能的網(wǎng)絡(luò)組件和連接方式)里像玩樂高一樣,自動(dòng)搭建和測試各種神經(jīng)架構(gòu),最后挑出最優(yōu)的那個(gè)。
簡而言之
利用算法自動(dòng)搜索和設(shè)計(jì)神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu),而不是人工設(shè)計(jì),目標(biāo)是找到在特定硬件(如手機(jī)芯片)上性能最優(yōu)的架構(gòu)。
怎么實(shí)現(xiàn)?
- 定義搜索空間:先告訴AI有哪些“積木塊”(比如不同類型的卷積、池化層)可以用,以及它們大概可以怎么搭。
- 采用搜索策略:用強(qiáng)化學(xué)習(xí)、進(jìn)化算法或者基于梯度的方法等高科技手段,指導(dǎo)AI如何有效地“嘗試”不同的組合。
- 評估性能:快速評估每個(gè)“設(shè)計(jì)方案”的好壞,選出冠軍。
舉個(gè)例子
Google的EfficientNet系列模型就是NAS的代表。研究者們通過NAS搜索到了一個(gè)基礎(chǔ)的網(wǎng)絡(luò)架構(gòu),并通過一套統(tǒng)一的縮放規(guī)則,生成了一系列模型,在準(zhǔn)確率和效率方面都有提升,非常適合在移動(dòng)設(shè)備上部署。例如,EfficientNet-B0在達(dá)到與ResNet-50相近的ImageNet準(zhǔn)確率的同時(shí),參數(shù)量和計(jì)算量都大幅減少。
第五招:混合精度訓(xùn)練與推理 (Mixed Precision Training and Inference) “好鋼用在刀刃上,精度按需分配!”
在AI模型進(jìn)行計(jì)算時(shí),不是所有的步驟都需要最高的精度。有些計(jì)算對精度要求很高,差一點(diǎn)可能結(jié)果就謬以千里(比如關(guān)鍵的判斷步驟);而另一些計(jì)算,稍微粗略一點(diǎn)也無傷大雅,還能大大提高速度(比如一些中間特征的傳遞)。
簡而言之
“混合精度”技術(shù)就像一位經(jīng)驗(yàn)豐富的老師傅,知道什么時(shí)候該用游標(biāo)卡尺(高精度FP32),什么時(shí)候用卷尺(低精度FP16甚至INT8)就夠了。它在訓(xùn)練和推理(模型預(yù)測)時(shí),聰明地將高精度計(jì)算和低精度計(jì)算結(jié)合起來:關(guān)鍵部分用高精度保證準(zhǔn)確性,非關(guān)鍵部分用低精度來提升效率、減少內(nèi)存占用和功耗。
怎么實(shí)現(xiàn)?
- 硬件支持:現(xiàn)在的AI芯片(比如NVIDIA的GPU從Volta架構(gòu)開始引入的Tensor Core,以及很多端側(cè)AI加速器)原生支持FP16等低精度計(jì)算,速度遠(yuǎn)超F(xiàn)P32。
- 框架支持:主流的深度學(xué)習(xí)框架如TensorFlow和PyTorch都內(nèi)置了自動(dòng)混合精度(Automatic Mixed Precision, AMP)模塊。開發(fā)者只需要開啟這個(gè)選項(xiàng),框架就會(huì)自動(dòng)判斷哪些運(yùn)算適合用低精度,哪些需要保持高精度,并進(jìn)行相應(yīng)的轉(zhuǎn)換和補(bǔ)償(比如使用損失縮放Loss Scaling來防止梯度消失)。
實(shí)踐效果
在很多情況下,使用混合精度(例如FP32和FP16混合)可以在幾乎不損失模型準(zhǔn)確率的前提下,將訓(xùn)練速度提升2-3倍,推理速度也有顯著提升,同時(shí)還能減少約一半的內(nèi)存占用。這對于希望在端側(cè)設(shè)備上運(yùn)行更大、更復(fù)雜模型的場景來說,無疑是一大利好。例如,在圖像識(shí)別或自然語言處理任務(wù)中,通過混合精度,模型響應(yīng)更快,用戶體驗(yàn)更好。
第六招:眾人拾柴火焰高 —— “聯(lián)邦學(xué)習(xí)(Federated Learning)”的隱私保護(hù)與集體智慧,“數(shù)據(jù)不出家門,智慧共同提升”
我們希望端側(cè)模型能從更多樣的數(shù)據(jù)中學(xué)習(xí),變得更聰明。但用戶的個(gè)人數(shù)據(jù)非常敏感,直接上傳到云端訓(xùn)練模型有隱私泄露的風(fēng)險(xiǎn)。怎么辦?
“聯(lián)邦學(xué)習(xí)”提供了一個(gè)絕妙的解決方案。它就像一個(gè)“去中心化”的學(xué)習(xí)小組。每個(gè)人的數(shù)據(jù)都保留在自己的手機(jī)或設(shè)備上(數(shù)據(jù)不出本地),模型更新的“知識(shí)”(參數(shù)更新)被發(fā)送到中央服務(wù)器進(jìn)行聚合,形成一個(gè)更強(qiáng)大的“集體智慧模型”,然后再把這個(gè)“升級版”模型分發(fā)回各個(gè)設(shè)備。
這樣一來,既保護(hù)了用戶隱私,又能讓模型從海量分散的數(shù)據(jù)中受益。
簡而言之
多個(gè)設(shè)備(比如很多部手機(jī))在不共享各自本地?cái)?shù)據(jù)的前提下,協(xié)同訓(xùn)練一個(gè)機(jī)器學(xué)習(xí)模型。每個(gè)設(shè)備用本地?cái)?shù)據(jù)訓(xùn)練模型,然后只把模型的更新(而不是數(shù)據(jù)本身)發(fā)送給中央服務(wù)器進(jìn)行聚合,最終反哺端側(cè),讓端側(cè)模型獲得更好的表現(xiàn)。
怎么實(shí)現(xiàn)?
第一步 服務(wù)器初始化端側(cè)模型
第二步 模型分發(fā)給選定的端側(cè)設(shè)備
第三步 設(shè)備在本地用自己的數(shù)據(jù)訓(xùn)練模型
第四步 設(shè)備將訓(xùn)練產(chǎn)生的模型更新(比如權(quán)重變化)加密后發(fā)送給服務(wù)器
第五步 服務(wù)器聚合所有設(shè)備的更新(比如取平均值),形成一個(gè)更優(yōu)的全局模型
第六步 重復(fù)2-5步,最終使端側(cè)模型獲得更好表現(xiàn)
舉個(gè)例子
Google的Gboard輸入法就利用聯(lián)邦學(xué)習(xí)來改進(jìn)下一詞預(yù)測模型。數(shù)百萬用戶在輸入時(shí),他們的設(shè)備會(huì)利用本地輸入歷史(這些歷史數(shù)據(jù)不會(huì)離開設(shè)備)來改進(jìn)預(yù)測模型的一小部分,然后這些改進(jìn)被安全地聚合起來,形成對所有用戶都有益的全局模型。這使得輸入法預(yù)測越來越準(zhǔn),同時(shí)用戶的輸入內(nèi)容得到了很好的隱私保護(hù)。
第七招:端側(cè)模型的動(dòng)態(tài)推理與自適應(yīng)計(jì)算 (Dynamic Inference and Adaptive Computation) “看菜下飯,量力而行——AI的‘智能檔位’!”
想象一下,你開車的時(shí)候,平路巡航時(shí)會(huì)用比較省油的檔位和轉(zhuǎn)速;遇到陡坡需要爬升時(shí),就會(huì)切換到更有力的低檔位,加大油門。 “動(dòng)態(tài)推理”或“自適應(yīng)計(jì)算”就是讓端側(cè)AI模型也擁有這種“智能換擋”的能力。
簡而言之
它會(huì)根據(jù)當(dāng)前輸入數(shù)據(jù)的“難度”(比如一張圖片是簡單的純色背景,還是一張細(xì)節(jié)滿滿的復(fù)雜場景),或者設(shè)備當(dāng)前的“體力狀況”(比如電量是否充足、CPU/NPU是否空閑),來動(dòng)態(tài)調(diào)整自己的計(jì)算量和“思考深度”。 簡單的任務(wù),模型就“淺嘗輒止”,用較少的計(jì)算快速給出結(jié)果;復(fù)雜的任務(wù),或者資源充足時(shí),模型就“全力以赴”,調(diào)用更多的網(wǎng)絡(luò)層或更復(fù)雜的計(jì)算路徑,以求達(dá)到最佳效果。
怎么實(shí)現(xiàn)?
- 多分支網(wǎng)絡(luò)/早退機(jī)制 (Multi-Branch Networks/Early Exit):設(shè)計(jì)一個(gè)有多層“出口”的網(wǎng)絡(luò)。對于簡單的輸入,可能在網(wǎng)絡(luò)的較淺層就能得到足夠置信度的結(jié)果,模型就從這個(gè)“提前出口”輸出答案,不必走完全程。這就像考試時(shí),簡單的題目一眼看出答案就不用再反復(fù)驗(yàn)算了。Anytime Prediction模型就是這類思想的體現(xiàn)。
- 條件計(jì)算 (Conditional Computation):網(wǎng)絡(luò)中的某些模塊或計(jì)算路徑只有在滿足特定條件時(shí)才會(huì)被激活。比如,檢測到一個(gè)可能是“貓”的模糊輪廓后,才激活專門用于精細(xì)識(shí)別貓品種的模塊。Google的Switch Transformers就用了類似稀疏激活的思想,但更側(cè)重于超大模型。在端側(cè),這意味著可以根據(jù)需要選擇性地執(zhí)行計(jì)算成本較高的部分。
- 資源感知調(diào)度:模型或AI框架能夠感知設(shè)備的實(shí)時(shí)資源(電量、溫度、可用算力等),并據(jù)此調(diào)整模型的復(fù)雜度或推理策略。
實(shí)踐效果
這種技術(shù)能顯著提升端側(cè)模型的能效比和用戶體驗(yàn)。在大部分情況下,輸入數(shù)據(jù)可能都比較簡單,模型可以用極低的功耗快速響應(yīng);而對于少數(shù)復(fù)雜情況,又能保證處理效果。這使得AI應(yīng)用在電量敏感的移動(dòng)設(shè)備或物聯(lián)網(wǎng)節(jié)點(diǎn)上能“更持久地在線”,并且在不同負(fù)載情況下都能提供相對平穩(wěn)的服務(wù)。例如,一個(gè)智能相機(jī)的目標(biāo)檢測功能,在畫面靜止或物體稀疏時(shí)可以降低幀率或模型復(fù)雜度,一旦檢測到快速運(yùn)動(dòng)或密集物體則提升計(jì)算力。
第八招:天生我材必有用 —— “高效模型架構(gòu)(Efficient Model Architectures)”的先天優(yōu)勢, “生來就為‘快’和‘小’而設(shè)計(jì)!”
除了上述的“后天調(diào)教”方法,我們還可以從“先天基因”入手,直接設(shè)計(jì)那些天生就參數(shù)少、計(jì)算量小的網(wǎng)絡(luò)結(jié)構(gòu)。這就像運(yùn)動(dòng)員里有專門為短跑或馬拉松優(yōu)化的體型和肌肉類型一樣。
這些高效模型架構(gòu),在設(shè)計(jì)之初就充分考慮了端側(cè)設(shè)備的限制。
簡而言之
從一開始就設(shè)計(jì)出結(jié)構(gòu)本身就很輕量級、計(jì)算效率很高的神經(jīng)網(wǎng)絡(luò)模型。
著名代表
- MobileNets (v1, v2, v3):它們的核心是“深度可分離卷積”,把傳統(tǒng)的卷積操作拆分成兩步,大大減少了計(jì)算量和參數(shù)。想象一下,傳統(tǒng)卷積是“大火猛炒一大鍋菜”,深度可分離卷積則是“先每樣菜單獨(dú)小炒,再用少量調(diào)料拌勻”,效率更高。MobileNetV3結(jié)合了NAS技術(shù),進(jìn)一步提升了效率和性能。
- ShuffleNets: 使用了“逐點(diǎn)分組卷積”和“通道混洗”等技巧,像巧妙地重新排列組合積木一樣,進(jìn)一步降低了計(jì)算成本。
- SqueezeNets: 通過“壓縮”(squeeze)和“擴(kuò)展”(expand)模塊,用更少的參數(shù)實(shí)現(xiàn)與大型網(wǎng)絡(luò)相當(dāng)?shù)臏?zhǔn)確率。
- EfficientNets: 如前所述,通過NAS找到最佳的網(wǎng)絡(luò)深度、寬度和輸入圖像分辨率的組合,并進(jìn)行等比例放大,實(shí)現(xiàn)了在不同計(jì)算資源限制下的最優(yōu)性能。
數(shù)據(jù)為證
以MobileNetV2為例,相比于經(jīng)典的VGG16模型,它在ImageNet圖像分類任務(wù)上可以達(dá)到相似的準(zhǔn)確率,但參數(shù)數(shù)量減少了約25倍,計(jì)算量減少了約30倍。這使得它非常適合在手機(jī)等移動(dòng)設(shè)備上流暢運(yùn)行。
第九招:給AI大腦“瘦身健體”—— 內(nèi)存優(yōu)化黑科技, “讓本就寸土寸金的‘腦容量’得到極致利用!”
除了前面那些讓模型變小、變快的通用技巧,還有一些專門針對“摳內(nèi)存”的絕招,確保AI大腦在運(yùn)行時(shí)不會(huì)因?yàn)椤疤嫉貎骸倍盐覀兊氖謾C(jī)、電腦搞到卡頓。
A. 權(quán)重共享/聚類 (Weight Sharing/Clustering)
“物以類聚,參數(shù)分組!”
簡而言之
想象一下,一個(gè)神經(jīng)網(wǎng)絡(luò)里有成千上萬甚至數(shù)百萬個(gè)參數(shù)(權(quán)重)?!皺?quán)重共享”或“權(quán)重聚類”就像是發(fā)現(xiàn)這些參數(shù)里有很多其實(shí)非常相似,或者可以歸為幾類。我們不再為每個(gè)連接都單獨(dú)存儲(chǔ)一個(gè)精確的權(quán)重值,而是讓很多連接共享同一個(gè)(或同一組)權(quán)重值。 這就好比,原來衣柜里有100件顏色、款式都只有細(xì)微差別的白襯衫,每件都要占一個(gè)衣架?,F(xiàn)在我們發(fā)現(xiàn)其實(shí)可以把它們分成“純白款”、“米白款”、“絲光白款”等幾大類,每一類用一個(gè)代表性的“標(biāo)準(zhǔn)白襯衫”參數(shù)。這樣,需要存儲(chǔ)的“標(biāo)準(zhǔn)白襯衫”數(shù)量就大大減少了,內(nèi)存自然就松快多了。
效果
這種方法可以顯著減少存儲(chǔ)權(quán)重所需的內(nèi)存。例如,斯坦福大學(xué)提出的Deep Compression技術(shù),就將權(quán)重聚類(一種形式的權(quán)重共享)與剪枝、量化結(jié)合,成功將AlexNet和VGG等大型網(wǎng)絡(luò)壓縮了35到49倍,而幾乎沒有精度損失,這對于將這些復(fù)雜模型部署到內(nèi)存有限的移動(dòng)設(shè)備上至關(guān)重要。
B. 低秩分解/矩陣分解 (Low-Rank Factorization)
“把‘大胖矩陣’拆成兩個(gè)‘小瘦子’!”
簡而言之
在神經(jīng)網(wǎng)絡(luò)中,很多層的計(jì)算本質(zhì)上是巨大的矩陣乘法。如果一個(gè)權(quán)重矩陣非?!芭帧保ňS度很大),那么它包含的參數(shù)就多,占內(nèi)存也大。 “低秩分解”就像是發(fā)現(xiàn)這個(gè)“大胖矩陣”其實(shí)可以用兩個(gè)或多個(gè)更“瘦”的“小矩陣”相乘來近似表示。就好比,一個(gè)復(fù)雜的圖案(大矩陣),其實(shí)可以由幾個(gè)簡單的基礎(chǔ)圖案(小矩陣)疊加組合而成。我們只需要存儲(chǔ)這些基礎(chǔ)圖案,就能重構(gòu)出原來的復(fù)雜圖案,大大節(jié)省了存儲(chǔ)空間。
效果
例如,在推薦系統(tǒng)中,用戶-物品交互矩陣通常非常巨大且稀疏,通過低秩分解(如SVD或其變種)可以有效地提取潛在特征,并以遠(yuǎn)小于原始矩陣的內(nèi)存存儲(chǔ)這些特征向量,從而實(shí)現(xiàn)高效的個(gè)性化推薦。同樣的思想應(yīng)用于神經(jīng)網(wǎng)絡(luò)層,能顯著減少權(quán)重參數(shù)的存儲(chǔ)。
C. 激活值內(nèi)存優(yōu)化 (Activation Memory Optimization)
“精打細(xì)算每一分‘臨時(shí)內(nèi)存’!”
簡而言之
模型在進(jìn)行預(yù)測(推理)時(shí),不僅模型自身的權(quán)重參數(shù)占內(nèi)存,每一層計(jì)算產(chǎn)生的中間結(jié)果——我們稱之為“激活值”——也需要臨時(shí)存儲(chǔ)在內(nèi)存中,因?yàn)橄乱粚佑?jì)算需要用到它們。對于很深的網(wǎng)絡(luò),這些激活值累加起來可能會(huì)非常占內(nèi)存,就像做飯時(shí),如果每個(gè)步驟的半成品都一直擺在桌上,廚房很快就滿了。 激活值內(nèi)存優(yōu)化就是想辦法減少這部分“臨時(shí)內(nèi)存”的開銷,比如用完一個(gè)半成品馬上清理掉,或者用更小的碗碟(低精度)來裝。
怎么實(shí)現(xiàn)與效果
- 激活值量化:同樣可以將激活值從32位浮點(diǎn)數(shù)降到8位整數(shù),直接減少75%的激活值內(nèi)存。
- 就地計(jì)算 (In-place Computation):巧妙地設(shè)計(jì)計(jì)算流程,讓新的計(jì)算結(jié)果直接覆蓋掉那些不再需要的舊激活值,避免了額外的內(nèi)存開辟。
- 激活值重新計(jì)算 (Recomputation):對于某些激活值,如果重新計(jì)算它們的成本不高,那就在需要它們的時(shí)候再算一遍,而不是一直把它們存在內(nèi)存里。這就像一本參考書,你不是把整本書都背下來(占用大腦內(nèi)存),而是在需要查某個(gè)知識(shí)點(diǎn)的時(shí)候翻一下書(重新計(jì)算)。這在內(nèi)存極度緊張的微控制器(MCU)上部署AI模型時(shí)尤為關(guān)鍵。
融會(huì)貫通,打造終極“端側(cè)最強(qiáng)大腦”
看到這里,你已經(jīng)對如何給端側(cè)AI“增智減負(fù)”有了更全面的了解。
從知識(shí)蒸餾的智慧傳承,到量化、剪枝的精打細(xì)算,再到神經(jīng)架構(gòu)搜索的自動(dòng)化設(shè)計(jì),以及聯(lián)邦學(xué)習(xí)的巧妙應(yīng)用,輔以高效模型架構(gòu)的先天優(yōu)勢,還有專門針對內(nèi)存的權(quán)重共享、低秩分解、激活值優(yōu)化等“瘦身秘籍”,更有追求極致效率的混合精度計(jì)算和靈活應(yīng)變的動(dòng)態(tài)推理。它們共同構(gòu)成了一個(gè)強(qiáng)大的工具箱。
聰明伶俐的端側(cè)AI可能是這樣打造的:
- 首先,通過神經(jīng)架構(gòu)搜索找到一個(gè)天生就適合端側(cè)的高效模型架構(gòu),這個(gè)架構(gòu)本身可能就支持動(dòng)態(tài)推理的某些特性,比如包含多個(gè)計(jì)算分支。
- 然后,通過知識(shí)蒸餾從更強(qiáng)大的“云端教師模型”那里“偷師學(xué)藝”,提升其“智商上限”。
- 接著,運(yùn)用剪枝技術(shù)和低秩分解去掉模型中冗余的參數(shù)和結(jié)構(gòu),縮小其“骨架”。
- 再通過量化(包括權(quán)重和激活值)和權(quán)重共享/聚類技術(shù),結(jié)合混合精度訓(xùn)練與推理的策略,把模型的“體重”和“內(nèi)存占用”進(jìn)一步壓縮到極致,同時(shí)優(yōu)化計(jì)算速度。
- 在運(yùn)行時(shí),采用激活值內(nèi)存優(yōu)化策略,并結(jié)合動(dòng)態(tài)推理機(jī)制,精打細(xì)算地使用每一KB的“臨時(shí)內(nèi)存”和計(jì)算資源。
- 在數(shù)據(jù)隱私至關(guān)重要或者需要匯集多方數(shù)據(jù)的場景,則可以采用聯(lián)邦學(xué)習(xí)的方式進(jìn)行訓(xùn)練和迭代,不斷提升模型的群體智能。
展望未來:端側(cè)AI,不止于“聰明”,更在于“智慧”、“普及”與“無感”
讓端側(cè)模型變得更“聰明”、更“輕巧”,關(guān)系到我們每一個(gè)人未來的數(shù)字生活體驗(yàn)。
隨著這些技術(shù)的不斷發(fā)展和融合,未來的端側(cè)AI將不再僅僅是執(zhí)行簡單命令的工具。它們將擁有更強(qiáng)的理解能力、推理能力和個(gè)性化適應(yīng)能力,同時(shí)對設(shè)備的資源需求越來越小,甚至達(dá)到“無感”運(yùn)行的境界——你幾乎察覺不到它在消耗資源,卻能時(shí)時(shí)刻刻享受到它帶來的智能便利。
想象一下:
- 手機(jī)能夠真正理解你的情緒和意圖,成為你貼心的私人助理,而且這一切都在本地完成,流暢又私密。
- 家里的智能設(shè)備能夠主動(dòng)學(xué)習(xí)你的生活習(xí)慣,為你營造最舒適便捷的環(huán)境,而無需你擔(dān)心隱私泄露或網(wǎng)絡(luò)延遲。
- 工廠里的機(jī)器臂能夠通過端側(cè)AI進(jìn)行更精密的自我校準(zhǔn)和故障預(yù)測,大幅提升生產(chǎn)效率和安全性,其模型小到可以嵌入到每個(gè)傳感器節(jié)點(diǎn)。
- 在醫(yī)療資源匱乏的地區(qū),搭載了強(qiáng)大而輕盈的端側(cè)AI的便攜式診斷設(shè)備能夠輔助醫(yī)生進(jìn)行快速準(zhǔn)確的初步診斷,甚至可以由社區(qū)衛(wèi)生工作者輕松操作。
端側(cè)AI讓尖端科技能夠以更低的成本、更低的功耗、更高的效率、更安全的方式服務(wù)于每一個(gè)人,真正實(shí)現(xiàn)普惠AI。
作者:賽先聲;公眾號(hào):奇點(diǎn)漫游者
本文由 @賽先聲 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)作者許可,禁止轉(zhuǎn)載
題圖來自Unsplash,基于CC0協(xié)議
該文觀點(diǎn)僅代表作者本人,人人都是產(chǎn)品經(jīng)理平臺(tái)僅提供信息存儲(chǔ)空間服務(wù)
- 目前還沒評論,等你發(fā)揮!