一文梳理深度學(xué)習(xí)算法演進(jìn)
涉及語音、圖像、nlp、強(qiáng)化學(xué)習(xí)、隱私保護(hù)、藝術(shù)創(chuàng)作、目標(biāo)檢測、醫(yī)療、壓縮序列、推薦排序等方向。文章較長,干貨滿滿。
1. 前言
如果說高德納的著作奠定了第一代計(jì)算機(jī)算法,那么傳統(tǒng)機(jī)器學(xué)習(xí)則擴(kuò)展出第二代,而近十年崛起的深度學(xué)習(xí)則是傳統(tǒng)機(jī)器學(xué)習(xí)上進(jìn)一步發(fā)展的第三代算法。深度學(xué)習(xí)算法的魅力在于它核心邏輯的簡單且通用。 在人類歷史上,可能沒有哪個(gè)方向的技術(shù)能在如此短的時(shí)間內(nèi)吸引如此多的人投入其中,也沒有哪個(gè)技術(shù)在如此短的時(shí)間被應(yīng)用在如此多的場景。深度學(xué)習(xí)算法這過去6年可能說不上產(chǎn)生了多么重大的突破,但是產(chǎn)量絕對(duì)是驚人的,也給我們帶來了許多意想不到的驚喜。 回顧2015年到2021年,個(gè)人期間有幸參與了語音、視覺、NLP和推薦排序等幾個(gè)領(lǐng)域。其中一部分是以直接算法應(yīng)用研究角度,還有一部分是從框架系統(tǒng)支撐視角。部分工作是算法預(yù)研,還有部分成果應(yīng)用在語音搜索,醫(yī)療影像,推薦系統(tǒng)等業(yè)務(wù)。 這篇文章更多是結(jié)合自己實(shí)踐經(jīng)歷,通過一些業(yè)界經(jīng)典成果回顧了過去6年在深度學(xué)習(xí)算法方向上的技術(shù)迭代。最后做了一些歸納總結(jié)和展望。
2. 語音識(shí)別
語音識(shí)別任務(wù)通常是將人的講話轉(zhuǎn)換成文字的能力。這個(gè)能力在Google Voice Search, iPhone Siri助手等多個(gè)領(lǐng)域都有重要的應(yīng)用。 語音識(shí)別技術(shù)的研究從幾十年前就已經(jīng)開始,然而深度學(xué)習(xí)技術(shù)普及之前,離普遍產(chǎn)品應(yīng)用還有不少的距離,錯(cuò)詞率(WER)一直都比較高。即使在低噪音的環(huán)境下,通常至少在10%以上。 傳統(tǒng)的語音識(shí)別通常是多階段的復(fù)雜工程:
先對(duì)語音做一系列信號(hào)處理,轉(zhuǎn)換成中間格式,比如filter-bank。 然后還會(huì)經(jīng)過提取phoneme(音素)的階段。 再經(jīng)過一些語言模型,路徑搜索,詞表等復(fù)雜流程。 最后產(chǎn)生文字結(jié)果。

大概15年底到16年初的時(shí)候,我做了一個(gè)項(xiàng)目是幫谷歌voice search在tensorflow上實(shí)現(xiàn)Listen, Attend and Spell(LAS)這個(gè)論文的工作。LAS的工作是Google Brain的實(shí)習(xí)生William15年在上一代框架DistBelif上完成的,在當(dāng)時(shí)相比傳統(tǒng)方案是個(gè)不小的進(jìn)步,它讓語音識(shí)別從一個(gè)多階段的算法和系統(tǒng)工程,變成了端到端幾百行python代碼的問題。 具體可以大致總結(jié)在幾個(gè)方面:
端到端語音識(shí)別。相比傳統(tǒng)多階段方法,這個(gè)模型使用filter-bank spectra作為輸入,通過seq2eq with attention的結(jié)構(gòu)直接輸出了語言文字。在沒有附加外部語言模型的情況下就達(dá)到了14%的WER。附加語言模型達(dá)到10%的WER。 在當(dāng)時(shí)的K40 GPU算力下,這個(gè)模型的復(fù)雜度是非常高的。其中多層bi-lstm encoder在序列比較長的時(shí)候幾乎訓(xùn)不動(dòng)。為了解決這個(gè)問題,采用了金字塔結(jié)構(gòu)的encoder,逐層降低序列長度。 attention機(jī)制幫助decoder能夠提取encoder sequence重要信息,顯著提升解碼的效果。同時(shí)decoder內(nèi)部隱式學(xué)習(xí)了語言模型。

當(dāng)時(shí)順便開發(fā)了個(gè)debug工具,能抽樣聽某個(gè)voice search的錄音,對(duì)比識(shí)別的文字結(jié)果。從實(shí)際情況抽樣,這個(gè)模型已經(jīng)超過一般人的水平。模型能并識(shí)別大量地名,物品名,型號(hào)名,比如galaxy s5。 模型訓(xùn)練速度在當(dāng)時(shí)還是比較慢的。為了完成voice search數(shù)據(jù)的訓(xùn)練收斂,動(dòng)用了128個(gè)GPU,訓(xùn)練了將近2個(gè)月。為了多組實(shí)驗(yàn)并行,常常一口氣跑到500~1000個(gè)GPU。那會(huì)還是以GPU worker+PS的異步訓(xùn)練為主。很多人覺得異步訓(xùn)練會(huì)影響模型的收斂效果,也有人覺得異步訓(xùn)練能跳出一些局部鞍點(diǎn)。
從當(dāng)時(shí)實(shí)驗(yàn)上看,精心調(diào)參的異步訓(xùn)練最終的確會(huì)超過同步訓(xùn)練實(shí)驗(yàn)。其中一個(gè)原因可能是當(dāng)時(shí)同步訓(xùn)練在當(dāng)時(shí)硬件設(shè)備和軟件框架上太慢了,很難完成有效的迭代。從18年以后的經(jīng)驗(yàn)看,同步訓(xùn)練的效果和異步訓(xùn)練的效果基本能不相上下,在某些場景同步訓(xùn)練的效果甚至更好(可能大batch size對(duì)于稀疏特征場景這種樣本分布不穩(wěn)定的問題有一定的緩解) 百度的DeepSpeech當(dāng)時(shí)也非常優(yōu)秀,影響更深遠(yuǎn)的是當(dāng)時(shí)百度主推了HPC的訓(xùn)練模式,發(fā)揚(yáng)了同步訓(xùn)練的Ring AllReduce?,F(xiàn)在回過頭看,百度似乎是對(duì)的。TF可能是受早年MapReduce基于commodity machine的分布式思路影響比較深。當(dāng)然后面的TPU也回到了HPC的軌道上。
3. 圖像識(shí)別
15~16年的ResNet算得上是比較突破性的工作了,從它超過10萬的論文引用量就能看出來。ResNet之前是VGG,AlexNet等統(tǒng)治世界,那時(shí)候模型還比較淺,和ResNet相比只算得上是“淺度學(xué)習(xí)” :-)。16年初的時(shí)候,谷歌內(nèi)部還沒有ResNet的TensorFlow實(shí)現(xiàn)(當(dāng)時(shí)內(nèi)部用Inception比較多)。我于是基于TensorFlow寫個(gè)ResNet出來給大家用。

ResNet的突破性在于基于相似結(jié)構(gòu)(Residual Block)的重復(fù)堆疊,并通過Residual Connection將這些Blocks聯(lián)起來,實(shí)現(xiàn)非常深的模型訓(xùn)練。Residual Connection之前,很深的網(wǎng)絡(luò)訓(xùn)練會(huì)有比較明顯梯度暴漲和衰減的問題。記得早年Hinton老爺子訓(xùn)練多層模型是訓(xùn)完一層再加一層,效率會(huì)比較低?;赗esNet的結(jié)構(gòu),模型可以輕易的加到1001層。個(gè)人覺得,深度學(xué)習(xí)在ResNet之后才成為真正的”深度“學(xué)習(xí)。BatchNorm相信每個(gè)搞深度學(xué)習(xí)的都非常熟悉,這也是ResNet的核心模塊。時(shí)間回到16年初,我發(fā)現(xiàn)谷歌內(nèi)部竟然沒能找到一個(gè)TensorFlow正確實(shí)現(xiàn)的BatchNorm。有少量錯(cuò)誤的實(shí)現(xiàn)版本的確在被使用,但是好像并沒有被察覺。有個(gè)笑話說的是你可能分不清一些深度學(xué)習(xí)模型結(jié)構(gòu)到底是bug還是feature,修復(fù)了“bug”反而導(dǎo)致模型的效果下降。 當(dāng)時(shí)TensorFlow寫個(gè)BatchNorm還需要通過加減乘除來拼接。我碰到一個(gè)神奇的問題就是ResNet加到1001層后會(huì)發(fā)生詭異的數(shù)值錯(cuò)誤,通常是NaN。記得仔細(xì)Debug后,好像是參數(shù)有個(gè)moving average的默認(rèn)值0.999...后面的9的個(gè)數(shù)是有講究的。 后來我把早期完全沒有性能優(yōu)化(那會(huì)還沒有FuseBatchNorm)的ResNet放到tensorflow model zoo github上開源了。AWS和一些機(jī)構(gòu)沒有調(diào)優(yōu)就拿過去做了一些benchmark,得出tensorflow性能遠(yuǎn)差于其他框架的結(jié)論。TensorFlow的老板們表示非常不滿,于是tensorflow 1.0版發(fā)布專門搞了個(gè)官方優(yōu)化的性能benchmark。
4. 語言模型和文本歸納
語言模型可以說是NLP領(lǐng)域的核心基礎(chǔ)算法。16年的語言模型還沒有現(xiàn)在的BERT如此強(qiáng)大。當(dāng)時(shí)還有不少的流派,比較傳統(tǒng)的是Ngram模型,基于全網(wǎng)數(shù)據(jù)訓(xùn)練一個(gè)數(shù)百GB的Ngram模型在公司有廣泛應(yīng)用。 然而新的挑戰(zhàn)者已經(jīng)在路上了。當(dāng)時(shí)深度學(xué)習(xí)的當(dāng)紅是LSTM和它的兄弟們,比如Bi-LSTM。不過當(dāng)時(shí)LSTM在TensorFlow上的速度真是一言難盡,實(shí)際生產(chǎn)都會(huì)退而求其次選擇GRU。后來英偉達(dá)搞了個(gè)cudnnLSTM,才算有了比較顯著的進(jìn)步。 我做語音模型時(shí)需要訓(xùn)練一個(gè)domain specific的語言模型,和搜索部門轉(zhuǎn)崗過來的大哥在這塊有些合作。當(dāng)時(shí)他結(jié)合搜索業(yè)務(wù)場景,搞了個(gè)byte-level語言模型,詞表只有256個(gè),目標(biāo)是預(yù)測下一byte,這個(gè)模型厲害之處除了非常精小,而且語言無關(guān),可以同時(shí)預(yù)測混合中英文和數(shù)字的文本。上線到搜索詞補(bǔ)全上,取得了不錯(cuò)的業(yè)務(wù)收益。 文本歸納人機(jī)對(duì)比示例:

后來16年我參與了一個(gè)Moonshot項(xiàng)目是做自動(dòng)文本歸納。模型結(jié)構(gòu)基本是復(fù)用了前文說道的語音識(shí)別的模型seq2seq+attention。數(shù)據(jù)是dailynews等,使用正文作為輸入,標(biāo)題作為樣本,經(jīng)過了加深和加寬的暴力訓(xùn)練,很輕松的就超過了當(dāng)時(shí)的SOTA。細(xì)心的讀者會(huì)發(fā)現(xiàn),其實(shí)各個(gè)不同領(lǐng)域,比如語音、文本,的模型結(jié)構(gòu)的統(tǒng)一趨勢在這個(gè)時(shí)候已經(jīng)比較明顯了。
實(shí)際Debug分析時(shí),我們發(fā)現(xiàn)文本歸納模型對(duì)于股市類新聞的歸納非常的精準(zhǔn)。但是在許多復(fù)雜場景還是有比較嚴(yán)重的缺陷的。比如某個(gè)警匪案件中,A發(fā)現(xiàn)B的兄弟C謀害了D,模型很容易就會(huì)錯(cuò)誤歸納成B謀害了D,或者D謀害了C。 當(dāng)時(shí)模型的優(yōu)化目標(biāo)是F1 Score,簡單的說就是比較樣本和預(yù)測之間字詞是否一樣。這顯然是有缺陷的,每篇文章都有很多不同的歸納方法。 當(dāng)時(shí)有個(gè)研究員建議我先基于海量數(shù)據(jù)預(yù)訓(xùn)練語言模型,然后再用dailynews fine tune這個(gè)文本歸納模型。放到今天這是個(gè)不言而喻的常規(guī)操作,然而當(dāng)時(shí)我卻因?yàn)槠渌聞?wù)沒有嘗試。

5. 深度強(qiáng)化學(xué)習(xí)與AlphaGo和AutoML
深度強(qiáng)化學(xué)習(xí)大概是16~17年迎來了一個(gè)小高潮,原因是AlphaGo戰(zhàn)勝了人類世界冠軍,緊接著又迭代了AphaGo Zero和AphaZero兩版,俗稱AlphaGo三部曲。當(dāng)時(shí)Brain請(qǐng)DeepMind的同事過來做了些分享,對(duì)我的震撼還是挺大的,強(qiáng)化學(xué)習(xí)跟動(dòng)物的自然學(xué)習(xí)方式太像了。
簡單回顧一下AlphaGo系列三部曲:
AlphaGo先從人類走棋數(shù)據(jù)集上學(xué)習(xí)policy network。監(jiān)督數(shù)據(jù)就是基于當(dāng)前棋局s,預(yù)測人類行為a。 初步學(xué)習(xí)后,AlphaGo再和自己玩,用RL的policy gradient進(jìn)一步優(yōu)化policy network,提升行為準(zhǔn)確性。 然后用policy network生成很對(duì)局?jǐn)?shù)據(jù),數(shù)據(jù)用來訓(xùn)練value network。value network簡單來說就是預(yù)判當(dāng)前局勢的勝率。
上面說的的是訓(xùn)練過程。其中蒙特卡洛搜索樹MCTS是這個(gè)訓(xùn)練過程中重要數(shù)據(jù)結(jié)構(gòu),這就不展開說了。在推理過程(線上比賽):
AlphaGo會(huì)基于MCTS去探索子樹(類似人類心中演繹棋局不同走勢。演繹多長,越接近結(jié)局,預(yù)判越準(zhǔn))。其中探索過程會(huì)基于前面說的policy network和value network。還會(huì)用一個(gè)小policy network快速走棋到結(jié)束得到一個(gè)大概結(jié)果。 基于子樹的探索,AphaGo就能夠進(jìn)一步加強(qiáng)對(duì)于不同行動(dòng)的判斷準(zhǔn)確性,進(jìn)而采取更優(yōu)的決策。
上面講的比較簡略了,感興趣的可以去閱讀原文。AlphaGo Zero去掉了“基于人類對(duì)戰(zhàn)數(shù)據(jù)監(jiān)督”的過程,完全是自己和自己玩來提高。AlphaZero則將這個(gè)算法框架通用化到了多個(gè)棋類游戲,比如chess等。 其實(shí)強(qiáng)化學(xué)習(xí)早就有了,其基礎(chǔ)理論可以追溯到動(dòng)態(tài)規(guī)劃,馬爾科夫鏈和圖靈狀態(tài)機(jī)。當(dāng)它和深度學(xué)習(xí)融合后效果就產(chǎn)生了巨大的進(jìn)步(Oracle Turing Machine中的“Oracle”)。21年AlphaGo系列的作者寫了篇文章叫Reward Is Enough,談到強(qiáng)化學(xué)習(xí)更大的可能性,感興趣讀者可以看看。這里回顧下前幾年發(fā)生了那些事。大概16~17年的時(shí)候,Brain有兩位實(shí)習(xí)生分別利用強(qiáng)化學(xué)習(xí)干了兩件事:
其中一個(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,效果要超過SOTA的ResNet等模型。這個(gè)技術(shù)后來被逐漸泛化成了AutoML。
6. 隱私保護(hù)Differential Privacy
人臉識(shí)別技術(shù)是相對(duì)發(fā)展比較快和成熟比較早的。有論文發(fā)現(xiàn)可以從模型中逆向還原訓(xùn)練數(shù)據(jù)中的人臉圖片。如何保護(hù)訓(xùn)練數(shù)據(jù)的隱私成了一個(gè)比較重要的問題。 當(dāng)時(shí)做的其實(shí)也比較簡單。在一個(gè)研究員指導(dǎo)下,我Hack了一些TensorFlow Optimizer,在gradient中注入了一定比例的高斯噪聲。根據(jù)噪聲的設(shè)置,對(duì)與最終模型的效果有一定的影響。研究員基于一些復(fù)雜的公式能夠量化privacy泄露上界。
7. 深度學(xué)習(xí)的藝術(shù)創(chuàng)作



深度學(xué)習(xí)的模型訓(xùn)練和預(yù)測往往不只有predict target。靈活的控制feature extractor和gradient propagation,可以玩出許多花樣來。比如在Adversarial Training中對(duì)抗惡意樣本攻擊,或者在Neural Style Transfer中修改原圖的樣式。16年參與到了Nerual Style Transfer的一個(gè)模型的實(shí)現(xiàn),它可以將一個(gè)藝術(shù)圖片的“藝術(shù)”(可能叫紋理比較好)快速的加入到另一張普通圖片中,讓普通圖片獲得“藝術(shù)”??傮w原理如下:
使用預(yù)訓(xùn)練VGG模型某些中間層的輸出作為feature extractors。 其中一些feature extractors的輸出叫做content feature,另一些層的feature extractors輸出經(jīng)過gram matrix計(jì)算后的值叫做style feature。用VGG分別算出來原始圖片(上圖中的狗)的content feature,和style圖片(上圖中的藝術(shù)圖片)的style feature。 loss = content loss + style loss。content loss是當(dāng)前content feature和上一步中保存的原始圖片content feature的差。用來保障圖片還有原來狗的輪廓。而style loss是狗狗照片style值和藝術(shù)圖片style值的差。讓狗狗照片的style越來越接近藝術(shù)圖片。 兩個(gè)loss互相平衡,讓vgg feature extractors既能夠保留原圖像的輪廓,同時(shí)還能添加出style。但是原狗狗圖片和藝術(shù)照?qǐng)D片的style顯然不一樣,所以開始時(shí)style loss會(huì)比較大。怎么辦? 解法就是將loss反向求出的gradient疊加到原始圖片上。滿足style loss變小的目的。經(jīng)過幾輪的image=image疊加gradient,原始圖片image會(huì)既有狗的輪廓(content loss),已有藝術(shù)圖片的style(降低style loss)。
這個(gè)能力看似只能娛樂,但是再Adobe看來卻是塊寶貝。高度可控的Neural Style修改技術(shù)可以極大的提高大家的PS效率。記得當(dāng)年在舊金山還辦過幾個(gè)AI藝術(shù)展。 既然聊到這,不得不提一下GAN,GAN的作用現(xiàn)在看來是非常重要。當(dāng)年也曾經(jīng)一度沖到CVPR的最熱門Topic。各種花式GAN變種如雨后春筍般出現(xiàn),而GAN模型的效果卻不像圖片分類一下好PK。后來好像有篇論文分析了10個(gè)不同的GAN算法,發(fā)現(xiàn)他們之間的效果沒有顯著差異。
8. 目標(biāo)檢測和分割
8.1 Youtube BoundingBox
橫跨16到17年,很大一部分工作都在目標(biāo)檢測(Object Detection)和分割(Segmentation)上。最開始是Youtube和Brain團(tuán)隊(duì)一塊想搞個(gè)世界上最大的目標(biāo)檢測數(shù)據(jù)集。 然而預(yù)料之外的是這個(gè)項(xiàng)目花了很多時(shí)間在數(shù)據(jù)標(biāo)注上,先是開發(fā)了個(gè)簡單的數(shù)據(jù)標(biāo)注網(wǎng)站,然后后期經(jīng)費(fèi)竟然不夠用了。。。為什么會(huì)不夠用?從下面這張圖示例就能看出來。如果標(biāo)注按框框算錢,這一群斑馬就像是燃燒的經(jīng)費(fèi)。

后來我們做了個(gè)艱難的決定,對(duì)于這種情況,一個(gè)圖片只標(biāo)注其中一匹斑馬。我這邊負(fù)責(zé)實(shí)現(xiàn)一個(gè)目標(biāo)檢測模型,評(píng)估一下SOTA模型在這個(gè)數(shù)據(jù)集上的效果。當(dāng)時(shí)有兩個(gè)選擇,SSD和Faster-RCNN。SSD的實(shí)現(xiàn)要簡單不少,但是當(dāng)時(shí)效果比不過FasterRCNN,于是決定實(shí)現(xiàn)FasterRCNN。FasterRCNN大致結(jié)構(gòu)如下:
底座通常是個(gè)基于圖片分類模型預(yù)訓(xùn)練的feature extractor,比如ResNet50。 接著是在feature map上找box。通常是每個(gè)位置上有多個(gè)不同預(yù)制大小規(guī)格的box。 同時(shí)還要對(duì)每個(gè)box進(jìn)行分類。
雖然說起來邏輯不復(fù)雜。實(shí)現(xiàn)過程還是差點(diǎn)翻車。當(dāng)時(shí)我搞了挺久也沒能完全復(fù)現(xiàn)CoCo數(shù)據(jù)集的結(jié)果。這里面的loss設(shè)計(jì)、hard negative mining等都有不少的trick。比較幸運(yùn)的是Research部門有另一個(gè)團(tuán)隊(duì)的幾個(gè)人也在復(fù)現(xiàn)FasterRCNN,于是我借鑒了比較多他們的工作。 從實(shí)踐來看,即使數(shù)據(jù)集中僅標(biāo)注了多個(gè)同類物體中的某一個(gè),在預(yù)測集上,該模型依然能夠在某個(gè)圖片進(jìn)行多個(gè)同類物體的圈選。

8.2 GoogleMap Segmentation
如果目標(biāo)檢測只是大致框出圖片中的物體,分割(Segmentation)則是要清晰精確的切割出物體的輪廓(據(jù)說這個(gè)領(lǐng)域目前已經(jīng)卷到去切割頭發(fā)絲和牙齒的輪廓了)。17年GoogleMap找我們預(yù)研切割衛(wèi)星視圖下的房屋的輪廓,據(jù)說是要為無人機(jī)投遞快遞做準(zhǔn)備,防止投遞到馬路或者屋頂上。Segmentation領(lǐng)域傳統(tǒng)的Semantic Segmentation結(jié)構(gòu)相對(duì)比較簡單,比如UNet等,已經(jīng)能取得不錯(cuò)的效果。后來Mask-RCNN出來能夠在一個(gè)模型中同時(shí)學(xué)習(xí)分割和檢測,這樣能夠進(jìn)一步提升分割的效果(IOU)。 當(dāng)時(shí)我們做到的效果基本已經(jīng)接近人的水平了。但是有很多難樣本還是不好解決。比如有些屋頂被大樹遮蓋后和草地顏色非常相近?;蛘呤且恍┨厥鈴S房屋頂輪廓和顏色都比較特殊。模型還是偶爾會(huì)做出錯(cuò)誤的分割。

8.3 醫(yī)療影像的應(yīng)用
17年Brain下成立一個(gè)放射科的醫(yī)療影像團(tuán)隊(duì):Radiology。由于我正好在這個(gè)領(lǐng)域開發(fā)模型,就幫助了這個(gè)團(tuán)隊(duì)的創(chuàng)建。 最初我們先從簡單的XRay下手。我將FasterRCNN先經(jīng)過CoCo的預(yù)訓(xùn)練,然后再幾百張XRay樣本上做了一些fine-tune,結(jié)果意外的好。 后來我們深入到更難的CT場景。CT是對(duì)人進(jìn)行3維立體的掃描,因此對(duì)應(yīng)的框需要包含長寬高。由于當(dāng)時(shí)是兼崗,我簡單將CT做了抽幀,轉(zhuǎn)換成多張二維圖片,然后通過FasterRCNN,然后再三維化。這樣效果比較一般。后來一個(gè)韓國小哥實(shí)現(xiàn)了一個(gè)高性能的3D檢測,取得了更好的效果。 花絮 AI醫(yī)療的上線是非常困難的,特別是在美國這種FDA管理比較嚴(yán)格的國家。當(dāng)時(shí)我們找到一個(gè)場景,據(jù)說是不需要FDA Apporve的: 通常需要被診斷的Radiology數(shù)據(jù)是FIFO排隊(duì)被醫(yī)生診斷的。這就有個(gè)問題,有可能某個(gè)人的情況很緊急(比如車禍胸部骨折),但是他的XRay被排在了后面,耽誤了診斷。我們可以用AI模型對(duì)這些XRAY做一個(gè)嚴(yán)重程度的排序,給醫(yī)生提出建議。另外,我們還在印度搞了流動(dòng)醫(yī)療車,免費(fèi)提供相關(guān)的診斷。

9. 看見未來Frame Prediction
Self-Driving Car和Brain有個(gè)合作,要預(yù)測無人車在未來的一段時(shí)間能看到的場景。研究員建議我使用Variational AutoEncoder,將一系列歷史Frame序列輸入到模型中,進(jìn)過Encoder,構(gòu)造出未來一段時(shí)間將會(huì)出現(xiàn)的畫面。通過調(diào)整隨機(jī)輸入,可以讓模型預(yù)測多種不同的結(jié)果。 這個(gè)模型的訓(xùn)練模式和語言模型比較類似。只要汽車一直采集視頻,模型就用最后一幀的圖片監(jiān)督模型對(duì)這一幀的預(yù)測,無需人工標(biāo)注就可以產(chǎn)生源源不斷的監(jiān)督信號(hào)。

10. 序列的崛起Transformer,BERT
個(gè)人認(rèn)為17年之前,卷積網(wǎng)絡(luò)和CV進(jìn)展幾乎占據(jù)了深度學(xué)習(xí)領(lǐng)域重要成果的大部分,模型效果顯著超過人的水平,大量被應(yīng)用在生活中。而NLP的進(jìn)展在17年之前,相比之下就顯得慢一些。雖然機(jī)器翻譯等有了不少進(jìn)步,但是LSTM和GRU無法建模長序列,性能開銷大,難以并行計(jì)算的問題一直制約NLP和序列相關(guān)問題的進(jìn)展。同時(shí)我們發(fā)現(xiàn)LSTM也不像Conv那樣容易進(jìn)行多層堆疊。

Transformer是深度學(xué)習(xí)興起以來NLP翻身仗的開端,甚至有Transformer Everywhere的大一統(tǒng)趨勢。為之后的BERT, 大規(guī)模預(yù)訓(xùn)練模型打開了一個(gè)關(guān)鍵突破口。Transformer開始流行的18年,我大部分時(shí)間都投入到Paddle框架的開發(fā)中,對(duì)于算法的關(guān)注相對(duì)比較少。不過Transformer從一開始就是我們重點(diǎn)優(yōu)化性能的benchmark模型。先是優(yōu)化Transformer單GPU的訓(xùn)練性能,然后是多GPU的訓(xùn)練性能。當(dāng)時(shí)我們還分析了對(duì)于一個(gè)O(n)的序列,Transformer和LSTM的時(shí)間復(fù)雜度。然而Transformer的關(guān)鍵優(yōu)勢在于它可以并行的處理整個(gè)序列,而LSTM需要一個(gè)Recurrent的過程,從一頭往另一頭逐個(gè)處理。在GPU這種設(shè)備下,Transformer的性能優(yōu)勢會(huì)非常明顯。
10.1 Self-Supervise和大模型
Transformer方興未艾,18年以后緊接著BERT,GPT-3也火了。數(shù)據(jù)集和模型變得一個(gè)比一個(gè)大,幾乎以每年一個(gè)數(shù)量級(jí)持續(xù)了幾年?;貞浽?6年的時(shí)候,我和幾個(gè)研究員討論是不是模型參數(shù)量達(dá)到人腦神經(jīng)元的量級(jí),自然就會(huì)產(chǎn)生更高級(jí)的智能。在那個(gè)時(shí)候,VGG、ResNet等模型參數(shù)量和人腦還有幾個(gè)數(shù)量級(jí)的差距。通過人們習(xí)慣的線性思維,很難想象5年后模型的規(guī)模已經(jīng)達(dá)到人腦神經(jīng)元的量級(jí)了(100Billion ncbi.nlm.nih.gov/pmc/ar)。

數(shù)據(jù)規(guī)模和模型爆發(fā)增長背后的算法突破很大一部分歸功于Self-supervise Learning。(訓(xùn)練架構(gòu)上也有不少突破:Peter潘欣:巨型AI模型背后的分布式訓(xùn)練技術(shù): https://zhuanlan.zhihu.com/p/430383324。說起來BERT采用的Self-supervise方法出奇的簡單,就是最簡單的填詞游戲,相信大多數(shù)人小時(shí)候都玩過。這個(gè)游戲給BERT模型玩卻顯著的提高了模型的泛化效果。 類似的思想也在最近兩年被應(yīng)用在CV領(lǐng)域,比如扣掉圖片中一部分讓模型預(yù)測?;蛘哒Z音領(lǐng)域,擋住一段音頻feature,讓模型去預(yù)測。都取得了不錯(cuò)的效果。 隨著模型規(guī)模的增長,我們似乎正在打開AI更高階段的另一扇門。和之前“小”模型相比,這些巨型模型有一些更接近人的特殊能力,比如:
One-shot, Few-shot Learning。使用很少的樣本就能在大模型的基礎(chǔ)上訓(xùn)練獲得新領(lǐng)域的能力。 Multi-Tasking。這些大的預(yù)訓(xùn)練模型可以被用在很多不同的任務(wù)上。之前卷積feature extractor也有類似的能力,但是相對(duì)局限一些。
業(yè)界大佬Jeff Dean和FeiFei Li等對(duì)未來的預(yù)測也都多少基于這些預(yù)訓(xùn)練大模型的技術(shù),做出延展。比如Jeff的Pathway以及FeiFei的Foundation Model。
11. 壓縮
其實(shí)壓縮技術(shù)比深度學(xué)習(xí)技術(shù)的出現(xiàn)更加久遠(yuǎn)。早期的很多深度學(xué)習(xí)模型的壓縮技術(shù)都是從其他領(lǐng)域的壓縮技術(shù)借鑒而來,比如int8量化。深度學(xué)習(xí)由于模型體積遠(yuǎn)大于傳統(tǒng)模型,而且研究也發(fā)現(xiàn)深度學(xué)習(xí)模型其中存在大量冗余參數(shù)。因此伴隨著深度學(xué)習(xí)技術(shù)的應(yīng)用,相關(guān)模型壓縮技術(shù)也取得了非常顯著的進(jìn)步。簡單回顧一些個(gè)人相關(guān)實(shí)踐。
bfloat16。17年的時(shí)候,TPU訓(xùn)練卡的底層開發(fā)已經(jīng)完成,為了讓TensorFlow用戶更好的使用TPU,需要整個(gè)python層完成bfloat16支持,并打通C++層的XLA。基于實(shí)驗(yàn)分析,bfloat16緩解了float16在梯度很小的時(shí)候容易round to zero的問題,保留了更多exponential bits,犧牲了不那么重要的precision bits。
int16, int8, int4。量化(quantization)和定點(diǎn)數(shù)計(jì)算取得了不錯(cuò)的成果。一方面是節(jié)省了空間,另外硬件定點(diǎn)數(shù)的計(jì)算效率也通常更高。比如在GPU上int8的理論速度可以比float32高一個(gè)數(shù)量級(jí)。int16可以被應(yīng)用在部分模型的訓(xùn)練上,int8和int4等則多是在推理模型的存儲(chǔ)和計(jì)算上使用。量化技術(shù)看似簡單,其實(shí)細(xì)節(jié)很多,這里稍微展開一點(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。如果簡單使用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í)是無效的。很多裁剪技術(shù)也都證明了這一點(diǎn)。通過一些技術(shù)(比如是loss中增加相關(guān)約束),可以讓有效的參數(shù)遠(yuǎn)離0,無效的參數(shù)逼近0。在通過一些結(jié)構(gòu)化的技術(shù),可以裁剪調(diào)模型中很大一部分,而保障效果無損,或者損失較少。
Jeff看中的Pathway里稀疏激活不知是否也可以歸到這一類。這是一個(gè)很誘人,也是一個(gè)非常難的方向。誘人在于不但可以將模型壓縮幾個(gè)數(shù)量級(jí),理論計(jì)算量和能耗都能大幅壓縮。艱難在于現(xiàn)在硬件和模型訓(xùn)練方式都不容易達(dá)到這個(gè)目標(biāo)。但是,人腦似乎就是這么工作的。人類在思考的時(shí)候,大腦只有比較少的一部分被激活。
12. 推薦排序
最近三年在推薦排序上的系統(tǒng)方向工作比較多,對(duì)于相關(guān)算法也有一些研究。
這個(gè)方向有時(shí)被稱作“沉默的大多數(shù)”:
“大多數(shù)”是因?yàn)榛ヂ?lián)網(wǎng)公司的主要AI算力其實(shí)都消耗在推薦排序類的深度學(xué)習(xí)模型上了。這些模型不但承載了互聯(lián)網(wǎng)公司的主要業(yè)務(wù)形態(tài)(比如電商和視頻的推薦),還承擔(dān)了公司關(guān)鍵收入來源(比如廣告推薦)。 “沉默”是說深度學(xué)習(xí)的技術(shù)突破和首先應(yīng)用通常不源于這個(gè)方向,而更多來自于CV,NLP等更基礎(chǔ)的方面。許多推薦排序技術(shù)的提升大多來自于CV,NLP成功技術(shù)的跨領(lǐng)域應(yīng)用。深度學(xué)習(xí)領(lǐng)域的頂級(jí)研究員也相對(duì)少提到推薦排序相關(guān)的問題(有可能是個(gè)人局限性視角)。

12.1 海量的Embedding和渺小的DNN
據(jù)了解,當(dāng)16~17年CV,NLP大模型還在幾百M(fèi)B或者幾GB的階段徘徊時(shí),廣告排序模型就已經(jīng)逼近了TB量級(jí)。巨大模型的參數(shù)不來自DNN里的Conv, LSTM或者是Attention。它們來自于巨大的Embedding Table。EmbeddingTable中每一行(向量)表示一個(gè)稀疏特征值(e.g. user_314151, Beijing, etc)的隱式表達(dá)。 這個(gè)EmbeddingTable可以達(dá)到數(shù)百億行。為何會(huì)如此之大?除了互聯(lián)網(wǎng)公司海量的用戶規(guī)模,還來自于特征工程里面的笛卡爾交叉。
舉個(gè)例子,一共有100個(gè)值表示不同年齡,100個(gè)值表示不同城市,100個(gè)表示不同的收入。我們可以做個(gè)特征交叉獲得一類新的交叉特征100100100=10^6,其中只要一個(gè)特征值可以表示“北京60歲高收入”人群。遇到這個(gè)特征值,模型就可以給他們推薦個(gè)性化的商品了(人參?)。如果笛卡爾積出現(xiàn)了user-id, item-id,模型體積可以輕易突破TB。 和EmbeddingTable相比,早期排序模型的DNN就小的多了,很多時(shí)候就是幾層FullyConntected Layers。然而隨著技術(shù)的發(fā)展,下文會(huì)看到DNN的模型結(jié)構(gòu)也變得更加多樣化。
12.2 LR,F(xiàn)M,F(xiàn)FM,WDL,MMOE
從和算法人員的溝通發(fā)現(xiàn),“好的特征”比“好的DNN模型”更有收益。一些論文也描述過當(dāng)前DNN難以有效的學(xué)習(xí)高度稀疏特征之間的交叉泛化關(guān)系。 從直覺上,推薦排序模型的高維稀疏特征和CV、語音、NLP的信號(hào)相比有著比較大的不同。視覺圖片和語音wave都是自然信號(hào),有著非常強(qiáng)的規(guī)律性。NLP雖然是人造的產(chǎn)物,但是也大體服從顯而易見的語法規(guī)律(否則就沒法溝通了)。 但是推薦模型的特征輸入?yún)s是高度自定義,且長尾信號(hào)非常稀疏的,就比如前面舉例的“北京60歲高收入”只是10^6可能性中的一個(gè)(e.g. 深圳90歲無收入就比較少)。每次輸入是從數(shù)億個(gè)特征中挑選其中幾百個(gè)或者幾千個(gè),來刻畫這個(gè)用戶的請(qǐng)求。 智能不夠人工來湊。勤勞的算法人員在早期LR,F(xiàn)M,F(xiàn)FM等階段,更多采用了人工實(shí)驗(yàn)的方式挑選了特征,但是我們也逐漸看到隱式、自動(dòng)化交叉取得了更好的效果。16年的WDL是一個(gè)轉(zhuǎn)折性的工作,推薦排序相對(duì)有機(jī)的融合了人工特征和DNN學(xué)習(xí)兩個(gè)流派的優(yōu)點(diǎn)。Wide負(fù)責(zé)記憶,Deep負(fù)責(zé)泛化。WDL更像是一個(gè)框架,Wide和Deep可以被替換成其他的結(jié)構(gòu),比如Wide使用FM就變成了DeepFM。而Deep的花樣更多,可以引入Attention, RNN等等。18年的MMOE(Multi-gate Mixture-of-Experts)對(duì)推薦排序模型是一個(gè)新的較大的改進(jìn)。和CV和NLP任務(wù)通常有明確的優(yōu)化目標(biāo)不太一樣,推薦場景通常需要優(yōu)化用戶多個(gè)維度的體驗(yàn),比如時(shí)長,點(diǎn)擊,轉(zhuǎn)發(fā),點(diǎn)贊,多樣性等等。傳統(tǒng)方法需要單獨(dú)訓(xùn)練多個(gè)模型。而MMOE解決了單個(gè)模型多個(gè)任務(wù)的問題。后來的PLE進(jìn)一步緩解了蹺蹺板效應(yīng),讓模型能夠同時(shí)改進(jìn)多個(gè)目標(biāo)的效果。 最近兩年模型DNN突破性的結(jié)構(gòu)變化相對(duì)比較少,但是許多效果演進(jìn)還是不少,累計(jì)也進(jìn)一步提高了推薦排序的效果。比如更加復(fù)雜的embedding交叉結(jié)構(gòu),結(jié)合transformer、序列建模,構(gòu)建更多、更細(xì)粒度的訓(xùn)練目標(biāo)等等。 總體而言,推薦排序DNN復(fù)雜度相比NLP來說,要低很多。一個(gè)可能的原因是CPU訓(xùn)練的算力限制。隨著新的架構(gòu)解決了海量embedding的GPU訓(xùn)練問題,可能GPU訓(xùn)練能為推薦排序模型DNN復(fù)雜度和效果提升帶來新的突破。

12.3 Tower, Tree, Graph
如果覺得推薦排序只有上一節(jié)提到的玩法,就有點(diǎn)太小看這個(gè)領(lǐng)域的算法人員了。市面上能找到的主流深度學(xué)習(xí)算法技術(shù)其實(shí)在推薦領(lǐng)域都被試了個(gè)遍,這里簡單說幾個(gè): 雙塔模型是推薦領(lǐng)域的經(jīng)典了,常常被用在召回、粗排等需要極高性能的場景。由于Item特征的變化相對(duì)緩慢,可以提前批量算出所有Item Embedding。這樣在線上服務(wù)時(shí),只需要基于實(shí)時(shí)的User特征計(jì)算User Embedding,然后再做一個(gè)Cosine距離就可以知道這個(gè)User和Item的匹配程度了。 雙塔模型為了能夠分別計(jì)算User和Item向量,限制了特征和模型的復(fù)雜度,不方便進(jìn)行user和item交叉特征的學(xué)習(xí)。Tree模型的思路是通過樹的分治減少需要計(jì)算的item量,這樣可以使用復(fù)雜的召回模型。類似的還有DeepRetrival等。 說起Graph模型不得不提這幾年火起來的GraphNeuralNetwork(GNN),比如GraphSage等。其實(shí)思想有點(diǎn)類似word2vec和一些自監(jiān)督的算法,通過一些游走策略改造子圖,并通過他們之間的鄰近關(guān)系,以及非子圖節(jié)點(diǎn)的非相似關(guān)系來來構(gòu)造樣本進(jìn)行學(xué)習(xí),最終得到每個(gè)節(jié)點(diǎn)的隱式表達(dá)。而這些隱式表達(dá)則可以被用在推薦領(lǐng)域召回相似的物品。

12.4 多場景,端到端,預(yù)訓(xùn)練
大的互聯(lián)網(wǎng)公司通常會(huì)有許多業(yè)務(wù),比如字節(jié)的抖音、頭條,騰訊的瀏覽器、視頻、新聞、音樂等。每個(gè)業(yè)務(wù)內(nèi)部又有細(xì)分為許多子場景,比如主頁Feed,以及點(diǎn)擊某個(gè)物品后進(jìn)入到相似物品的推薦。而每個(gè)子場景又常常拆分為召回、粗排、精排、混排等多個(gè)階段。通常人員組織架構(gòu)也符合這樣的拆分。 從下圖可以看到,這種結(jié)構(gòu)下產(chǎn)生了非常多的橫向“豎井”,用戶和數(shù)據(jù)被切割在各個(gè)豎井中了??v向漏斗也被切分成各個(gè)階段的獨(dú)立模型,產(chǎn)生了較多的bias和訓(xùn)練目標(biāo)一致性問題。

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