回顧6年深度學(xué)習(xí)算法實(shí)踐和演進(jìn)
作者:Peter(滑鐵盧大學(xué)?計(jì)算機(jī))
原文鏈接:https://zhuanlan.zhihu.com/p/464515049
本文轉(zhuǎn)載自知乎,著作權(quán)歸屬原作者,如有侵權(quán),請(qǐng)聯(lián)系刪文。
01
這篇文章更多是結(jié)合自己實(shí)踐經(jīng)歷,通過(guò)一些業(yè)界經(jīng)典成果回顧了過(guò)去6年在深度學(xué)習(xí)算法方向上的技術(shù)迭代。最后做了一些歸納總結(jié)和展望。
02
先對(duì)語(yǔ)音做一系列信號(hào)處理,轉(zhuǎn)換成中間格式,比如filter-bank。 然后還會(huì)經(jīng)過(guò)提取phoneme(音素)的階段。 再經(jīng)過(guò)一些語(yǔ)言模型,路徑搜索,詞表等復(fù)雜流程。 最后產(chǎn)生文字結(jié)果。

端到端語(yǔ)音識(shí)別。相比傳統(tǒng)多階段方法,這個(gè)模型使用filter-bank spectra作為輸入,通過(guò)seq2eq with attention的結(jié)構(gòu)直接輸出了語(yǔ)言文字。在沒(méi)有附加外部語(yǔ)言模型的情況下就達(dá)到了14%的WER。附加語(yǔ)言模型達(dá)到10%的WER。 在當(dāng)時(shí)的K40 GPU算力下,這個(gè)模型的復(fù)雜度是非常高的。其中多層bi-lstm encoder在序列比較長(zhǎng)的時(shí)候幾乎訓(xùn)不動(dòng)。為了解決這個(gè)問(wèn)題,采用了金字塔結(jié)構(gòu)的encoder,逐層降低序列長(zhǎng)度。 attention機(jī)制幫助decoder能夠提取encoder sequence重要信息,顯著提升解碼的效果。同時(shí)decoder內(nèi)部隱式學(xué)習(xí)了語(yǔ)言模型。

03

后來(lái)我把早期完全沒(méi)有性能優(yōu)化(那會(huì)還沒(méi)有FuseBatchNorm)的ResNet放到tensorflow model zoo github上開(kāi)源了。AWS和一些機(jī)構(gòu)沒(méi)有調(diào)優(yōu)就拿過(guò)去做了一些benchmark,得出tensorflow性能遠(yuǎn)差于其他框架的結(jié)論。TensorFlow的老板們表示非常不滿(mǎn),于是tensorflow 1.0版發(fā)布專(zhuān)門(mén)搞了個(gè)官方優(yōu)化的性能benchmark。
04

05

AlphaGo先從人類(lèi)走棋數(shù)據(jù)集上學(xué)習(xí)policy network。監(jiān)督數(shù)據(jù)就是基于當(dāng)前棋局s,預(yù)測(cè)人類(lèi)行為a。 初步學(xué)習(xí)后,AlphaGo再和自己玩,用RL的policy gradient進(jìn)一步優(yōu)化policy network,提升行為準(zhǔn)確性。 然后用policy network生成很對(duì)局?jǐn)?shù)據(jù),數(shù)據(jù)用來(lái)訓(xùn)練value network。value network簡(jiǎn)單來(lái)說(shuō)就是預(yù)判當(dāng)前局勢(shì)的勝率。
AlphaGo會(huì)基于MCTS去探索子樹(shù)(類(lèi)似人類(lèi)心中演繹棋局不同走勢(shì)。演繹多長(zhǎng),越接近結(jié)局,預(yù)判越準(zhǔn))。其中探索過(guò)程會(huì)基于前面說(shuō)的policy network和value network。還會(huì)用一個(gè)小policy network快速走棋到結(jié)束得到一個(gè)大概結(jié)果。 基于子樹(shù)的探索,AphaGo就能夠進(jìn)一步加強(qiáng)對(duì)于不同行動(dòng)的判斷準(zhǔn)確性,進(jìn)而采取更優(yōu)的決策。
其中一個(gè)用強(qiáng)化學(xué)習(xí)去發(fā)現(xiàn)更好的gpu device placement,讓機(jī)器翻譯模型能有更好的GPU分布式訓(xùn)練速度。 另一個(gè)用它去搜索模型結(jié)構(gòu),也就是那篇Neural Architecture Search (NAS)。它發(fā)現(xiàn)了更好的訓(xùn)練imagenet的backbone,效果要超過(guò)SOTA的ResNet等模型。這個(gè)技術(shù)后來(lái)被逐漸泛化成了AutoML。
06
07



使用預(yù)訓(xùn)練VGG模型某些中間層的輸出作為feature extractors。 其中一些feature extractors的輸出叫做content feature,另一些層的feature extractors輸出經(jīng)過(guò)gram matrix計(jì)算后的值叫做style feature。用VGG分別算出來(lái)原始圖片(上圖中的狗)的content feature,和style圖片(上圖中的藝術(shù)圖片)的style feature。 loss = content loss + style loss。content loss是當(dāng)前content feature和上一步中保存的原始圖片content feature的差。用來(lái)保障圖片還有原來(lái)狗的輪廓。而style loss是狗狗照片style值和藝術(shù)圖片style值的差。讓狗狗照片的style越來(lái)越接近藝術(shù)圖片。 兩個(gè)loss互相平衡,讓vgg feature extractors既能夠保留原圖像的輪廓,同時(shí)還能添加出style。但是原狗狗圖片和藝術(shù)照?qǐng)D片的style顯然不一樣,所以開(kāi)始時(shí)style loss會(huì)比較大。怎么辦? 解法就是將loss反向求出的gradient疊加到原始圖片上。滿(mǎn)足style loss變小的目的。經(jīng)過(guò)幾輪的image=image疊加gradient,原始圖片image會(huì)既有狗的輪廓(content loss),已有藝術(shù)圖片的style(降低style loss)。
08
Youtube BoundingBox

底座通常是個(gè)基于圖片分類(lèi)模型預(yù)訓(xùn)練的feature extractor,比如ResNet50。 接著是在feature map上找box。通常是每個(gè)位置上有多個(gè)不同預(yù)制大小規(guī)格的box。 同時(shí)還要對(duì)每個(gè)box進(jìn)行分類(lèi)。

GoogleMap Segmentation

醫(yī)療影像的應(yīng)用

09

10

Self-Supervise和大模型

隨著模型規(guī)模的增長(zhǎng),我們似乎正在打開(kāi)AI更高階段的另一扇門(mén)。和之前“小”模型相比,這些巨型模型有一些更接近人的特殊能力,比如:
One-shot, Few-shot Learning。使用很少的樣本就能在大模型的基礎(chǔ)上訓(xùn)練獲得新領(lǐng)域的能力。 Multi-Tasking。這些大的預(yù)訓(xùn)練模型可以被用在很多不同的任務(wù)上。之前卷積feature extractor也有類(lèi)似的能力,但是相對(duì)局限一些。
11
bfloat16。17年的時(shí)候,TPU訓(xùn)練卡的底層開(kāi)發(fā)已經(jīng)完成,為了讓TensorFlow用戶(hù)更好的使用TPU,需要整個(gè)python層完成bfloat16支持,并打通C++層的XLA。基于實(shí)驗(yàn)分析,bfloat16緩解了float16在梯度很小的時(shí)候容易round to zero的問(wèn)題,保留了更多exponential bits,犧牲了不那么重要的precision bits。 int16, int8, int4。量化(quantization)和定點(diǎn)數(shù)計(jì)算取得了不錯(cuò)的成果。一方面是節(jié)省了空間,另外硬件定點(diǎn)數(shù)的計(jì)算效率也通常更高。比如在GPU上int8的理論速度可以比f(wàn)loat32高一個(gè)數(shù)量級(jí)。int16可以被應(yīng)用在部分模型的訓(xùn)練上,int8和int4等則多是在推理模型的存儲(chǔ)和計(jì)算上使用。量化技術(shù)看似簡(jiǎn)單,其實(shí)細(xì)節(jié)很多,這里稍微展開(kāi)一點(diǎn): training-aware or not。在訓(xùn)練時(shí)就進(jìn)行量化可以減少一些效果的損失。 黑白名單。許多算子是對(duì)量化不友好的(e.g. conv vs softmax)。通常對(duì)于不友好的算子,會(huì)在前面插入反量化邏輯,回到浮點(diǎn)數(shù)。 min-max rounding。如果簡(jiǎn)單使用min-max作為上下界,很可能因?yàn)槟硞€(gè)outlier導(dǎo)致大部分?jǐn)?shù)值的解析度太低。因此會(huì)有許多方法自動(dòng)計(jì)算合理的min-max。將outlier clip到min or max。 Distillation。有時(shí)也叫teacher-student。用一個(gè)大模型的中間輸出去調(diào)教一個(gè)小模型。蒸餾的變種也很多,比如co-distillation,三個(gè)臭皮匠頂個(gè)諸葛亮。我們?cè)谕扑]排序領(lǐng)域,用精排去蒸餾粗排、召回取得了不錯(cuò)的成果。 Sparsification。前面提到DNN模型有大量參數(shù)其實(shí)是無(wú)效的。很多裁剪技術(shù)也都證明了這一點(diǎn)。通過(guò)一些技術(shù)(比如是loss中增加相關(guān)約束),可以讓有效的參數(shù)遠(yuǎn)離0,無(wú)效的參數(shù)逼近0。在通過(guò)一些結(jié)構(gòu)化的技術(shù),可以裁剪調(diào)模型中很大一部分,而保障效果無(wú)損,或者損失較少。 Jeff看中的Pathway里稀疏激活不知是否也可以歸到這一類(lèi)。這是一個(gè)很誘人,也是一個(gè)非常難的方向。誘人在于不但可以將模型壓縮幾個(gè)數(shù)量級(jí),理論計(jì)算量和能耗都能大幅壓縮。艱難在于現(xiàn)在硬件和模型訓(xùn)練方式都不容易達(dá)到這個(gè)目標(biāo)。但是,人腦似乎就是這么工作的。人類(lèi)在思考的時(shí)候,大腦只有比較少的一部分被激活。
12
“大多數(shù)”是因?yàn)榛ヂ?lián)網(wǎng)公司的主要AI算力其實(shí)都消耗在推薦排序類(lèi)的深度學(xué)習(xí)模型上了。這些模型不但承載了互聯(lián)網(wǎng)公司的主要業(yè)務(wù)形態(tài)(比如電商和視頻的推薦),還承擔(dān)了公司關(guān)鍵收入來(lái)源(比如廣告推薦)。 “沉默”是說(shuō)深度學(xué)習(xí)的技術(shù)突破和首先應(yīng)用通常不源于這個(gè)方向,而更多來(lái)自于CV,NLP等更基礎(chǔ)的方面。許多推薦排序技術(shù)的提升大多來(lái)自于CV,NLP成功技術(shù)的跨領(lǐng)域應(yīng)用。深度學(xué)習(xí)領(lǐng)域的頂級(jí)研究員也相對(duì)少提到推薦排序相關(guān)的問(wèn)題(有可能是個(gè)人局限性視角)。

海量的Embedding和渺小的DNN
LR,F(xiàn)M,F(xiàn)FM,WDL,MMOE

Tower, Tree, Graph

多場(chǎng)景,端到端,預(yù)訓(xùn)練

橫向來(lái)看,構(gòu)造多場(chǎng)景的異構(gòu)圖,或者通過(guò)share和independent feature的方式構(gòu)造多業(yè)務(wù)場(chǎng)景的MMOE模型?;诟S富的數(shù)據(jù)進(jìn)行預(yù)訓(xùn)練,而后應(yīng)用在子場(chǎng)景上。這種方式對(duì)對(duì)于新用戶(hù)和中小場(chǎng)景的提升尤其明顯。 縱向上看,通過(guò)一次性訓(xùn)練任務(wù)同時(shí)訓(xùn)練召回、粗排、精排模型。利用精排更復(fù)雜和精準(zhǔn)的預(yù)測(cè)結(jié)果來(lái)蒸餾前面兩個(gè)階段。這種方式一方面可以顯著提升召回、粗排的效果,也可以壓縮粗排模型的體積。
13
更寬、更深、更大的模型持續(xù)帶來(lái)效果和能力上的驚喜,但是似乎在22年走到了一個(gè)反思的節(jié)點(diǎn)。用VGG的100M和Megatron的530B相比,規(guī)模提升了1000~10000倍。然而,規(guī)模的邊際效用降低,能耗和迭代效率都成為較大的問(wèn)題。 模型越來(lái)越全能,算法越來(lái)越歸一。放在10年前,CV和NLP的研究員可能風(fēng)馬牛不相及。但是現(xiàn)在我發(fā)現(xiàn)CV,NLP,語(yǔ)音的SOTA模型都能用上Transformer結(jié)構(gòu),都能用上自監(jiān)督訓(xùn)練。而且模型能夠編碼多種模態(tài)的輸入。 可解釋?zhuān)煽匦裕深A(yù)測(cè)能力依然沒(méi)有突破。就好像對(duì)人腦的理解一樣,對(duì)于深度學(xué)習(xí)模型的理解依然很單薄?;蛟S高維空間本身就是無(wú)法被直觀理解的。無(wú)法被理解的基礎(chǔ)上,就不容易被管控。通過(guò)one-shot似乎可以讓模型快速掌握新的能力,但是對(duì)于模型其他能力的影響缺失很難判斷的。就好比你讓一輛車(chē)很容易躲避障礙物,卻可能導(dǎo)致它側(cè)翻的概率增加。 隨機(jī)應(yīng)變和規(guī)劃能力不足。雖然模型有著超越人類(lèi)的感知和記憶能力,但是面對(duì)復(fù)雜世界的行動(dòng)和決策卻相對(duì)較弱。從AlphaGo和一些相關(guān)工作,可能強(qiáng)化學(xué)習(xí)是一個(gè)可以持續(xù)挖掘突破的方向。但是強(qiáng)化學(xué)習(xí)的發(fā)展有可能帶來(lái)對(duì)可控性和可預(yù)測(cè)性的擔(dān)憂(yōu)。假如用強(qiáng)化學(xué)習(xí)來(lái)訓(xùn)練無(wú)人機(jī),并用“擊中目標(biāo)”作為Reward。會(huì)發(fā)生什么?能不能讓它“絕不傷害人類(lèi)”。 算力、數(shù)據(jù)、算法的進(jìn)步造就了今天技術(shù)成就。但是現(xiàn)在能耗,硬件算力,體系結(jié)構(gòu)(e.g. 馮諾依曼架構(gòu)、內(nèi)存墻)都對(duì)人工智能的發(fā)展產(chǎn)生了制約,可能邁向通用人工智能的路上還需要先進(jìn)行、更徹底的底層顛覆。
受限能耗、系統(tǒng)性能、模型迭代效率,邊際效益遞減等因素,模型的規(guī)模增長(zhǎng)不會(huì)像過(guò)去幾年一樣高速,而是朝更高效的模型結(jié)構(gòu)(e.g. Sparse Activation),訓(xùn)練方式(Self-supervise),更高效的部署(e.g. Distillation)發(fā)展。 模型的感知和記憶能力會(huì)快速、全面超過(guò)人類(lèi)水平,并且固化下來(lái),形成通用化的應(yīng)用場(chǎng)景。BERT可能只是一個(gè)開(kāi)始,基于視頻等復(fù)雜環(huán)境的自監(jiān)督學(xué)習(xí)可能會(huì)構(gòu)建更好的“世界模型”(world model),這個(gè)模型的通用能力會(huì)進(jìn)一步的提升。 模型的動(dòng)態(tài)決策能力,復(fù)雜場(chǎng)景的應(yīng)變能力還有較大的發(fā)展空間。模型的可解釋性、可控性短期可能不會(huì)有比較大的突破,但是大的研究機(jī)構(gòu)會(huì)持續(xù)的投入,并形成一些差異化的競(jìng)爭(zhēng)力。 深度學(xué)習(xí)算法和生命科學(xué),金融風(fēng)控等場(chǎng)景結(jié)合,可能會(huì)逐步有更多突破性的應(yīng)用進(jìn)展。比如在生命科學(xué)、生物制藥方向,可能會(huì)產(chǎn)生影響整個(gè)人類(lèi)物種的技術(shù)。而一旦金融風(fēng)控等領(lǐng)域取得重大突破,社會(huì)的許多治理會(huì)逐漸從人變成機(jī)器。 在虛擬世界(或者說(shuō)是現(xiàn)在比較火的元宇宙),未來(lái)5~10年可能會(huì)先出現(xiàn)比較通用的智能體。原因是基于強(qiáng)化學(xué)習(xí)的相關(guān)技術(shù)在虛擬世界有較低的迭代成本和安全顧慮。
——The ?End——
分享
收藏
點(diǎn)贊
在看

評(píng)論
圖片
表情

