<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          回顧6年深度學(xué)習的算法實踐和演進

          共 14988字,需瀏覽 30分鐘

           ·

          2022-02-12 19:01

          ↑ 點擊藍字?關(guān)注極市平臺

          作者丨Peter潘欣@知乎(已授權(quán))
          來源丨h(huán)ttps://zhuanlan.zhihu.com/p/464515049
          編輯丨極市平臺
          本文已獲得作者授權(quán),二次轉(zhuǎn)載請聯(lián)系原作者

          極市導(dǎo)讀

          ?

          深度學(xué)習在短時間內(nèi)得到了蓬勃的發(fā)展,該技術(shù)被大范圍的應(yīng)用在多個場景。作者在2015年-2021年里參與了視覺、語音、NLP等多個領(lǐng)域,并結(jié)合自己實踐經(jīng)歷,通過一些業(yè)界經(jīng)典成果帶大家回顧過去6年在深度學(xué)習算法方向上的技術(shù)迭代。>>加入極市CV技術(shù)交流群,走在計算機視覺的最前沿

          前言

          如果說高德納的著作奠定了第一代計算機算法,那么傳統(tǒng)機器學(xué)習則擴展出第二代,而近十年崛起的深度學(xué)習則是傳統(tǒng)機器學(xué)習上進一步發(fā)展的第三代算法。深度學(xué)習算法的魅力在于它核心邏輯的簡單且通用。

          在人類歷史上,可能沒有哪個方向的技術(shù)能在如此短的時間內(nèi)吸引如此多的人投入其中,也沒有哪個技術(shù)在如此短的時間被應(yīng)用在如此多的場景。深度學(xué)習算法這過去6年可能說不上產(chǎn)生了多么重大的突破,但是產(chǎn)量絕對是驚人的,也給我們帶來了許多意想不到的驚喜。

          回顧2015年到2021年,個人期間有幸參與了語音、視覺、NLP和推薦排序等幾個領(lǐng)域。其中一部分是以直接算法應(yīng)用研究角度,還有一部分是從框架系統(tǒng)支撐視角。部分工作是算法預(yù)研,還有部分成果應(yīng)用在語音搜索,醫(yī)療影像,推薦系統(tǒng)等業(yè)務(wù)。

          這篇文章更多是結(jié)合自己實踐經(jīng)歷,通過一些業(yè)界經(jīng)典成果回顧了過去6年在深度學(xué)習算法方向上的技術(shù)迭代。最后做了一些歸納總結(jié)和展望。

          語音識別

          語音識別任務(wù)通常是將人的講話轉(zhuǎn)換成文字的能力。這個能力在Google Voice Search, iPhone Siri助手等多個領(lǐng)域都有重要的應(yīng)用。
          語音識別技術(shù)的研究從幾十年前就已經(jīng)開始,然而深度學(xué)習技術(shù)普及之前,離普遍產(chǎn)品應(yīng)用還有不少的距離,錯詞率(WER)一直都比較高。即使在低噪音的環(huán)境下,通常至少在10%以上。
          傳統(tǒng)的語音識別通常是多階段的復(fù)雜工程:

          • 先對語音做一系列信號處理,轉(zhuǎn)換成中間格式,比如filter-bank。
          • 然后還會經(jīng)過提取phoneme(音素)的階段。
          • 再經(jīng)過一些語言模型,路徑搜索,詞表等復(fù)雜流程。
          • 最后產(chǎn)生文字結(jié)果。

          大概15年底到16年初的時候,我做了一個項目是幫谷歌voice search在tensorflow上實現(xiàn)Listen, Attend and Spell(LAS)這個論文的工作。LAS的工作是Google Brain的實習生William15年在上一代框架DistBelif上完成的,在當時相比傳統(tǒng)方案是個不小的進步,它讓語音識別從一個多階段的算法和系統(tǒng)工程,變成了端到端幾百行python代碼的問題。

          具體可以大致總結(jié)在幾個方面:

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

          當時順便開發(fā)了個debug工具,能抽樣聽某個voice search的錄音,對比識別的文字結(jié)果。從實際情況抽樣,這個模型已經(jīng)超過一般人的水平。模型能并識別大量地名,物品名,型號名,比如galaxy s5。

          模型訓(xùn)練速度在當時還是比較慢的。為了完成voice search數(shù)據(jù)的訓(xùn)練收斂,動用了128個GPU,訓(xùn)練了將近2個月。為了多組實驗并行,常常一口氣跑到500~1000個GPU。那會還是以GPU worker+PS的異步訓(xùn)練為主。很多人覺得異步訓(xùn)練會影響模型的收斂效果,也有人覺得異步訓(xùn)練能跳出一些局部鞍點。從當時實驗上看,精心調(diào)參的異步訓(xùn)練最終的確會超過同步訓(xùn)練實驗。其中一個原因可能是同步訓(xùn)練在當時硬件設(shè)備和軟件框架上太慢了,很難完成有效的迭代。

          百度的DeepSpeech當時也非常優(yōu)秀,影響更深遠的是當時百度主推了HPC的訓(xùn)練模式,發(fā)揚了同步訓(xùn)練的Ring AllReduce?,F(xiàn)在回過頭看,百度似乎是對的。TF可能是受早年MapReduce基于commodity machine的分布式思路影響比較深。當然后面的TPU也回到了HPC的軌道上。

          圖像識別

          15~16年的ResNet算得上是比較突破性的工作了,從它超過10萬的論文引用量就能看出來。ResNet之前是VGG,AlexNet等統(tǒng)治世界,那時候模型還比較淺,和ResNet相比只算得上是“淺度學(xué)習” :-)。16年初的時候,谷歌內(nèi)部還沒有ResNet的TensorFlow實現(xiàn)(當時內(nèi)部用Inception比較多)。我于是基于TensorFlow寫個ResNet出來給大家用。

          ResNet的突破性在于基于相似結(jié)構(gòu)(Residual Block)的重復(fù)堆疊,并通過Residual Connection將這些Blocks聯(lián)起來,實現(xiàn)非常深的模型訓(xùn)練。Residual Connection之前,很深的網(wǎng)絡(luò)訓(xùn)練會有比較明顯梯度暴漲和衰減的問題。記得早年Hinton老爺子訓(xùn)練多層模型是訓(xùn)完一層再加一層,效率會比較低?;赗esNet的結(jié)構(gòu),模型可以輕易的加到1001層。個人覺得,深度學(xué)習在ResNet之后才成為真正的”深度“學(xué)習。

          BatchNorm相信每個搞深度學(xué)習的都非常熟悉,這也是ResNet的核心模塊。時間回到16年初,我發(fā)現(xiàn)谷歌內(nèi)部竟然沒能找到一個TensorFlow正確實現(xiàn)的BatchNorm。有少量錯誤的實現(xiàn)版本的確在被使用,但是好像并沒有被察覺。有個笑話說的是你可能分不清一些深度學(xué)習模型結(jié)構(gòu)到底是bug還是feature,修復(fù)了“bug”反而導(dǎo)致模型的效果下降。

          當時TensorFlow寫個BatchNorm還需要通過加減乘除來拼接。我碰到一個神奇的問題就是ResNet加到1001層后會發(fā)生詭異的數(shù)值錯誤,通常是NaN。記得仔細Debug后,好像是參數(shù)有個moving average的默認值0.999...后面的9的個數(shù)是有講究的。
          后來我把早期完全沒有性能優(yōu)化(那會還沒有FuseBatchNorm)的ResNet放到tensorflow model zoo github上開源了。AWS和一些機構(gòu)沒有調(diào)優(yōu)就拿過去做了一些benchmark,得出tensorflow性能遠差于其他框架的結(jié)論。TensorFlow的老板們表示非常不滿,于是tensorflow 1.0版發(fā)布專門搞了個官方優(yōu)化的性能benchmark。

          語言模型和文本歸納

          語言模型可以說是NLP領(lǐng)域的核心基礎(chǔ)算法。16年的語言模型還沒有現(xiàn)在的BERT如此強大。當時還有不少的流派,比較傳統(tǒng)的是Ngram模型,基于全網(wǎng)數(shù)據(jù)訓(xùn)練一個數(shù)百GB的Ngram模型在公司有廣泛應(yīng)用。

          然而新的挑戰(zhàn)者已經(jīng)在路上了。當時深度學(xué)習的當紅是LSTM和它的兄弟們,比如Bi-LSTM。不過當時LSTM在TensorFlow上的速度真是一言難盡,實際生產(chǎn)都會退而求其次選擇GRU。后來英偉達搞了個cudnnLSTM,才算有了比較顯著的進步。

          我做語音模型時需要訓(xùn)練一個domain specific的語言模型,和搜索部門轉(zhuǎn)崗過來的大哥在這塊有些合作。當時他結(jié)合搜索業(yè)務(wù)場景,搞了個byte-level語言模型,詞表只有256個,目標是預(yù)測下一byte,這個模型厲害之處除了非常精小,而且語言無關(guān),可以同時預(yù)測混合中英文和數(shù)字的文本。上線到搜索詞補全上,取得了不錯的業(yè)務(wù)收益。

          文本歸納人機對比示例:

          后來16年我參與了一個Moonshot項目是做自動文本歸納。模型結(jié)構(gòu)基本是復(fù)用了前文說道的語音識別的模型seq2seq+attention。數(shù)據(jù)是dailynews等,使用正文作為輸入,標題作為樣本,經(jīng)過了加深和加寬的暴力訓(xùn)練,很輕松的就超過了當時的SOTA。

          實際Debug分析時,我們發(fā)現(xiàn)文本歸納模型對于股市類新聞的歸納非常的精準。但是在許多復(fù)雜場景還是有比較嚴重的缺陷的。比如某個警匪案件中,A發(fā)現(xiàn)B的兄弟C謀害了D,模型很容易就會錯誤歸納成B謀害了D,或者D謀害了C。

          當時模型的優(yōu)化目標是F1 Score,簡單的說就是比較樣本和預(yù)測之間字詞是否一樣。這顯然是有缺陷的,每篇文章都有很多不同的歸納方法。

          當時有個研究員建議我先基于海量數(shù)據(jù)預(yù)訓(xùn)練語言模型,然后再用dailynews fine tune這個文本歸納模型。放到今天這是個不言而喻的常規(guī)操作,然而當時我卻因為其他事務(wù)沒有嘗試。

          深度強化學(xué)習與AlphaGo和AutoML

          深度強化學(xué)習大概是16~17年迎來了一個小高潮,原因是AlphaGo戰(zhàn)勝了人類世界冠軍,緊接著又迭代了AphaGo Zero和AphaZero兩版,俗稱AlphaGo三部曲。當時Brain請DeepMind的同事過來做了些分享,對我的震撼還是挺大的,強化學(xué)習跟動物的自然學(xué)習方式太像了。

          簡單回顧一下AlphaGo系列三部曲:

          • AlphaGo先從人類走棋數(shù)據(jù)集上學(xué)習policy network。監(jiān)督數(shù)據(jù)就是基于當前棋局s,預(yù)測人類行為a。
          • 初步學(xué)習后,AlphaGo再和自己玩,用RL的policy gradient進一步優(yōu)化policy network,提升行為準確性。
          • 然后用policy network生成很對局數(shù)據(jù),數(shù)據(jù)用來訓(xùn)練value network。value network簡單來說就是預(yù)判當前局勢的勝率。

          上面說的的是訓(xùn)練過程。其中蒙特卡洛搜索樹MCTS是這個訓(xùn)練過程中重要數(shù)據(jù)結(jié)構(gòu),這就不展開說了。在推理過程(線上比賽):

          • AlphaGo會基于MCTS去探索子樹(類似人類心中演繹棋局不同走勢。演繹多長,越接近結(jié)局,預(yù)判越準)。其中探索過程會基于前面說的policy network和value network。還會用一個小policy network快速走棋到結(jié)束得到一個大概結(jié)果。
          • 基于子樹的探索,AphaGo就能夠進一步加強對于不同行動的判斷準確性,進而采取更優(yōu)的決策。

          上面講的比較簡略了,感興趣的可以去閱讀原文。AlphaGo Zero去掉了“基于人類對戰(zhàn)數(shù)據(jù)監(jiān)督”的過程,完全是自己和自己玩來提高。AlphaZero則將這個算法框架通用化到了多個棋類游戲,比如chess等。

          其實強化學(xué)習早就有了,其基礎(chǔ)理論可以追溯到動態(tài)規(guī)劃,馬爾科夫鏈和圖靈狀態(tài)機。當它和深度學(xué)習融合后效果就產(chǎn)生了巨大的進步(Oracle Turing Machine中的“Oracle”)。21年AlphaGo系列的作者寫了篇文章叫Reward Is Enough,談到強化學(xué)習更大的可能性,感興趣讀者可以看看。這里回顧下前幾年發(fā)生了那些事。大概16~17年的時候,Brain有兩位實習生分別利用強化學(xué)習干了兩件事:

          • 其中一個用強化學(xué)習去發(fā)現(xiàn)更好的gpu device placement,讓機器翻譯模型能有更好的GPU分布式訓(xùn)練速度。
          • 另一個用它去搜索模型結(jié)構(gòu),也就是那篇Neural Architecture Search (NAS)。它發(fā)現(xiàn)了更好的訓(xùn)練imagenet的backbone,效果要超過SOTA的ResNet等模型。這個技術(shù)后來被逐漸泛化成了AutoML。

          隱私保護Differential Privacy

          人臉識別技術(shù)是相對發(fā)展比較快和成熟比較早的。有論文發(fā)現(xiàn)可以從模型中逆向還原訓(xùn)練數(shù)據(jù)中的人臉圖片。如何保護訓(xùn)練數(shù)據(jù)的隱私成了一個比較重要的問題。

          當時做的其實也比較簡單。在一個研究員指導(dǎo)下,我Hack了一些TensorFlow Optimizer,在gradient中注入了一定比例的高斯噪聲。根據(jù)噪聲的設(shè)置,對與最終模型的效果有一定的影響。研究員基于一些復(fù)雜的公式能夠量化privacy泄露上界。

          深度學(xué)習的藝術(shù)創(chuàng)作

          +

          =

          深度學(xué)習的模型訓(xùn)練和預(yù)測往往不只有predict target。靈活的控制feature extractor和gradient propagation,可以玩出許多花樣來。比如在Adversarial Training中對抗惡意樣本攻擊,或者在Neural Style Transfer中修改原圖的樣式。

          16年參與到了Nerual Style Transfer的一個模型的實現(xiàn),它可以將一個藝術(shù)圖片的“藝術(shù)”(可能叫紋理比較好)快速的加入到另一張普通圖片中,讓普通圖片獲得“藝術(shù)”??傮w原理如下:

          • 使用預(yù)訓(xùn)練VGG模型某些中間層的輸出作為feature extractors。

          • 其中一些feature extractors的輸出叫做content feature,另一些層的feature extractors輸出經(jīng)過gram matrix計算后的值叫做style feature。用VGG分別算出來原始圖片(上圖中的狗)的content feature,和style圖片(上圖中的藝術(shù)圖片)的style feature。

          • loss = content loss + style loss。content loss是當前content feature和上一步中保存的原始圖片content feature的差。用來保障圖片還有原來狗的輪廓。而style loss是狗狗照片style值和藝術(shù)圖片style值的差。讓狗狗照片的style越來越接近藝術(shù)圖片。

          • 兩個loss互相平衡,讓vgg feature extractors既能夠保留原圖像的輪廓,同時還能添加出style。但是原狗狗圖片和藝術(shù)照圖片的style顯然不一樣,所以開始時style loss會比較大。怎么辦?

          • 解法就是將loss反向求出的gradient疊加到原始圖片上。滿足style loss變小的目的。經(jīng)過幾輪的image=image疊加gradient,原始圖片image會既有狗的輪廓(content loss),已有藝術(shù)圖片的style(降低style loss)。

          這個能力看似只能娛樂,但是再Adobe看來卻是塊寶貝。高度可控的Neural Style修改技術(shù)可以極大的提高大家的PS效率。記得當年在舊金山還辦過幾個AI藝術(shù)展。

          既然聊到這,不得不提一下GAN,GAN的作用現(xiàn)在看來是非常重要。當年也曾經(jīng)一度沖到CVPR的最熱門Topic。各種花式GAN變種如雨后春筍般出現(xiàn),而GAN模型的效果卻不像圖片分類一下好PK。后來好像有篇論文分析了10個不同的GAN算法,發(fā)現(xiàn)他們之間的效果沒有顯著差異。

          目標檢測和分割

          Youtube BoundingBox

          橫跨16到17年,很大一部分工作都在目標檢測(Object Detection)和分割(Segmentation)上。最開始是Youtube和Brain團隊一塊想搞個世界上最大的目標檢測數(shù)據(jù)集。

          然而預(yù)料之外的是這個項目花了很多時間在數(shù)據(jù)標注上,先是開發(fā)了個簡單的數(shù)據(jù)標注網(wǎng)站,然后后期經(jīng)費竟然不夠用了。。。為什么會不夠用?從下面這張圖示例就能看出來。如果標注按框框算錢,這一群斑馬就像是燃燒的經(jīng)費。

          后來我們做了個艱難的決定,對于這種情況,一個圖片只標注其中一匹斑馬。我這邊負責實現(xiàn)一個目標檢測模型,評估一下SOTA模型在這個數(shù)據(jù)集上的效果。當時有兩個選擇,SSD和Faster-RCNN。SSD的實現(xiàn)要簡單不少,但是當時效果比不過FasterRCNN,于是決定實現(xiàn)FasterRCNN。FasterRCNN大致結(jié)構(gòu)如下:

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

          雖然說起來邏輯不復(fù)雜。實現(xiàn)過程還是差點翻車。當時我搞了挺久也沒能完全復(fù)現(xiàn)CoCo數(shù)據(jù)集的結(jié)果。這里面的loss設(shè)計、hard negative mining等都有不少的trick。比較幸運的是Research部門有另一個團隊的幾個人也在復(fù)現(xiàn)FasterRCNN,于是我借鑒了比較多他們的工作。

          從實踐來看,即使數(shù)據(jù)集中僅標注了多個同類物體中的某一個,在預(yù)測集上,該模型依然能夠在某個圖片進行多個同類物體的圈選。

          GoogleMap Segmentation

          如果目標檢測只是大致框出圖片中的物體,分割(Segmentation)則是要清晰精確的切割出物體的輪廓(據(jù)說這個領(lǐng)域目前已經(jīng)卷到去切割頭發(fā)絲和牙齒的輪廓了)。17年GoogleMap找我們預(yù)研切割衛(wèi)星視圖下的房屋的輪廓,據(jù)說是要為無人機投遞快遞做準備,防止投遞到馬路或者屋頂上。

          Segmentation領(lǐng)域傳統(tǒng)的Semantic Segmentation結(jié)構(gòu)相對比較簡單,比如UNet等,已經(jīng)能取得不錯的效果。后來Mask-RCNN出來能夠在一個模型中同時學(xué)習分割和檢測,這樣能夠進一步提升分割的效果(IOU)。

          當時我們做到的效果基本已經(jīng)接近人的水平了。但是有很多難樣本還是不好解決。比如有些屋頂被大樹遮蓋后和草地顏色非常相近?;蛘呤且恍┨厥鈴S房屋頂輪廓和顏色都比較特殊。模型還是偶爾會做出錯誤的分割。

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

          17年Brain下成立一個放射科的醫(yī)療影像團隊:Radiology。由于我正好在這個領(lǐng)域開發(fā)模型,就幫助了這個團隊的創(chuàng)建。

          最初我們先從簡單的XRay下手。我將FasterRCNN先經(jīng)過CoCo的預(yù)訓(xùn)練,然后再幾百張XRay樣本上做了一些fine-tune,結(jié)果意外的好。

          后來我們深入到更難的CT場景。CT是對人進行3維立體的掃描,因此對應(yīng)的框需要包含長寬高。由于當時是兼崗,我簡單將CT做了抽幀,轉(zhuǎn)換成多張二維圖片,然后通過FasterRCNN,然后再三維化。這樣效果比較一般。后來一個韓國小哥實現(xiàn)了一個高性能的3D檢測,取得了更好的效果。

          花絮

          AI醫(yī)療的上線是非常困難的,特別是在美國這種FDA管理比較嚴格的國家。當時我們找到一個場景,據(jù)說是不需要FDA Apporve的:

          通常需要被診斷的Radiology數(shù)據(jù)是FIFO排隊被醫(yī)生診斷的。這就有個問題,有可能某個人的情況很緊急(比如車禍胸部骨折),但是他的XRay被排在了后面,耽誤了診斷。我們可以用AI模型對這些XRAY做一個嚴重程度的排序,給醫(yī)生提出建議。另外,我們還在印度搞了流動醫(yī)療車,免費提供相關(guān)的診斷。

          看見未來Frame Prediction

          Self-Driving Car和Brain有個合作,要預(yù)測無人車在未來的一段時間能看到的場景。研究員建議我使用Variational AutoEncoder,將一系列歷史Frame序列輸入到模型中,進過Encoder,構(gòu)造出未來一段時間將會出現(xiàn)的畫面。通過調(diào)整隨機輸入,可以讓模型預(yù)測多種不同的結(jié)果。

          這個模型的訓(xùn)練模式和語言模型比較類似。只要汽車一直采集視頻,模型就用最后一幀的圖片監(jiān)督模型對這一幀的預(yù)測,無需人工標注就可以產(chǎn)生源源不斷的監(jiān)督信號。

          序列的崛起Transformer,BERT

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

          Transformer是深度學(xué)習興起以來NLP翻身仗的開端,甚至有Transformer Everywhere的大一統(tǒng)趨勢。為之后的BERT, 大規(guī)模預(yù)訓(xùn)練模型打開了一個關(guān)鍵突破口。

          Transformer開始流行的18年,我大部分時間都投入到Paddle框架的開發(fā)中,對于算法的關(guān)注相對比較少。不過Transformer從一開始就是我們重點優(yōu)化性能的benchmark模型。先是優(yōu)化Transformer單GPU的訓(xùn)練性能,然后是多GPU的訓(xùn)練性能。當時我們還分析了對于一個O(n)的序列,Transformer和LSTM的時間復(fù)雜度。然而Transformer的關(guān)鍵優(yōu)勢在于它可以并行的處理整個序列,而LSTM需要一個Recurrent的過程,從一頭往另一頭逐個處理。在GPU這種設(shè)備下,Transformer的性能優(yōu)勢會非常明顯。

          Self-Supervise和大模型

          Transformer方興未艾,18年以后緊接著BERT,GPT-3也火了。數(shù)據(jù)集和模型變得一個比一個大,幾乎以每年一個數(shù)量級持續(xù)了幾年?;貞浽?6年的時候,我和幾個研究員討論是不是模型參數(shù)量達到人腦神經(jīng)元的量級,自然就會產(chǎn)生更高級的智能。在那個時候,VGG、ResNet等模型參數(shù)量和人腦還有幾個數(shù)量級的差距。通過人們習慣的線性思維,很難想象5年后模型的規(guī)模已經(jīng)達到人腦神經(jīng)元的量級了(100Billion https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2776484/)。

          數(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ù)人小時候都玩過。這個游戲給BERT模型玩卻顯著的提高了模型的泛化效果。

          類似的思想也在最近兩年被應(yīng)用在CV領(lǐng)域,比如扣掉圖片中一部分讓模型預(yù)測?;蛘哒Z音領(lǐng)域,擋住一段音頻feature,讓模型去預(yù)測。都取得了不錯的效果。

          隨著模型規(guī)模的增長,我們似乎正在打開AI更高階段的另一扇門。和之前“小”模型相比,這些巨型模型有一些更接近人的特殊能力,比如:

          • One-shot, Few-shot Learning。使用很少的樣本就能在大模型的基礎(chǔ)上訓(xùn)練獲得新領(lǐng)域的能力。

          • Multi-Tasking。這些大的預(yù)訓(xùn)練模型可以被用在很多不同的任務(wù)上。之前卷積feature extractor也有類似的能力,但是相對局限一些。

          業(yè)界大佬Jeff Dean和FeiFei Li等對未來的預(yù)測也都多少基于這些預(yù)訓(xùn)練大模型的技術(shù),做出延展。比如Jeff的Pathway以及FeiFei的Foundation Model。

          壓縮

          其實壓縮技術(shù)比深度學(xué)習技術(shù)的出現(xiàn)更加久遠。早期的很多深度學(xué)習模型的壓縮技術(shù)都是從其他領(lǐng)域的壓縮技術(shù)借鑒而來,比如int8量化。深度學(xué)習由于模型體積遠大于傳統(tǒng)模型,而且研究也發(fā)現(xiàn)深度學(xué)習模型其中存在大量冗余參數(shù)。因此伴隨著深度學(xué)習技術(shù)的應(yīng)用,相關(guān)模型壓縮技術(shù)也取得了非常顯著的進步。簡單回顧一些個人相關(guān)實踐。

          • bfloat16。17年的時候,TPU訓(xùn)練卡的底層開發(fā)已經(jīng)完成,為了讓TensorFlow用戶更好的使用TPU,需要整個python層完成bfloat16支持,并打通C++層的XLA?;趯嶒灧治?,bfloat16緩解了float16在梯度很小的時候容易round to zero的問題,保留了更多exponential bits,犧牲了不那么重要的precision bits。

          • int16, int8, int4。量化(quantization)和定點數(shù)計算取得了不錯的成果。一方面是節(jié)省了空間,另外硬件定點數(shù)的計算效率也通常更高。比如在GPU上int8的理論速度可以比float32高一個數(shù)量級。int16可以被應(yīng)用在部分模型的訓(xùn)練上,int8和int4等則多是在推理模型的存儲和計算上使用。量化技術(shù)看似簡單,其實細節(jié)很多,這里稍微展開一點:

            • training-aware or not。在訓(xùn)練時就進行量化可以減少一些效果的損失。
            • 黑白名單。許多算子是對量化不友好的(e.g. conv vs softmax)。通常對于不友好的算子,會在前面插入反量化邏輯,回到浮點數(shù)。
            • min-max rounding。如果簡單使用min-max作為上下界,很可能因為某個outlier導(dǎo)致大部分數(shù)值的解析度太低。因此會有許多方法自動計算合理的min-max。將outlier clip到min or max。
          • Distillation。有時也叫teacher-student。用一個大模型的中間輸出去調(diào)教一個小模型。蒸餾的變種也很多,比如co-distillation,三個臭皮匠頂個諸葛亮。我們在推薦排序領(lǐng)域,用精排去蒸餾粗排、召回取得了不錯的成果。

          • Sparsification。前面提到DNN模型有大量參數(shù)其實是無效的。很多裁剪技術(shù)也都證明了這一點。通過一些技術(shù)(比如是loss中增加相關(guān)約束),可以讓有效的參數(shù)遠離0,無效的參數(shù)逼近0。在通過一些結(jié)構(gòu)化的技術(shù),可以裁剪調(diào)模型中很大一部分,而保障效果無損,或者損失較少。

            • Jeff看中的Pathway里稀疏激活不知是否也可以歸到這一類。這是一個很誘人,也是一個非常難的方向。誘人在于不但可以將模型壓縮幾個數(shù)量級,理論計算量和能耗都能大幅壓縮。艱難在于現(xiàn)在硬件和模型訓(xùn)練方式都不容易達到這個目標。但是,人腦似乎就是這么工作的。人類在思考的時候,大腦只有比較少的一部分被激活。

          推薦排序

          最近三年在推薦排序上的系統(tǒng)方向工作比較多,對于相關(guān)算法也有一些研究。

          這個方向有時被稱作“沉默的大多數(shù)”:

          • “大多數(shù)”是因為互聯(lián)網(wǎng)公司的主要AI算力其實都消耗在推薦排序類的深度學(xué)習模型上了。這些模型不但承載了互聯(lián)網(wǎng)公司的主要業(yè)務(wù)形態(tài)(比如電商和視頻的推薦),還承擔了公司關(guān)鍵收入來源(比如廣告推薦)。
          • “沉默”是說深度學(xué)習的技術(shù)突破和首先應(yīng)用通常不源于這個方向,而更多來自于CV,NLP等更基礎(chǔ)的方面。許多推薦排序技術(shù)的提升大多來自于CV,NLP成功技術(shù)的跨領(lǐng)域應(yīng)用。深度學(xué)習領(lǐng)域的頂級研究員也相對少提到推薦排序相關(guān)的問題(有可能是個人局限性視角)。

          海量的Embedding和渺小的DNN

          據(jù)了解,當16~17年CV,NLP大模型還在幾百MB或者幾GB的階段徘徊時,廣告排序模型就已經(jīng)逼近了TB量級。巨大模型的參數(shù)不來自DNN里的Conv, LSTM或者是Attention。它們來自于巨大的Embedding Table。EmbeddingTable中每一行(向量)表示一個稀疏特征值(e.g. user_314151, Beijing, etc)的隱式表達。

          這個EmbeddingTable可以達到數(shù)百億行。為何會如此之大?除了互聯(lián)網(wǎng)公司海量的用戶規(guī)模,還來自于特征工程里面的笛卡爾交叉。

          舉個例子,一共有100個值表示不同年齡,100個值表示不同城市,100個表示不同的收入。我們可以做個特征交叉獲得一類新的交叉特征100*100*100=10^6,其中只要一個特征值可以表示“北京60歲高收入”人群。遇到這個特征值,模型就可以給他們推薦個性化的商品了(人參?)。如果笛卡爾積出現(xiàn)了user-id, item-id,模型體積可以輕易突破TB。

          和EmbeddingTable相比,早期排序模型的DNN就小的多了,很多時候就是幾層FullyConntected Layers。然而隨著技術(shù)的發(fā)展,下文會看到DNN的模型結(jié)構(gòu)也變得更加多樣化。

          LR,F(xiàn)M,F(xiàn)FM,WDL,MMOE

          從和算法人員的溝通發(fā)現(xiàn),“好的特征”比“好的DNN模型”更有收益。一些論文也描述過當前DNN難以有效的學(xué)習高度稀疏特征之間的交叉泛化關(guān)系。

          從直覺上,推薦排序模型的高維稀疏特征和CV、語音、NLP的信號相比有著比較大的不同。視覺圖片和語音wave都是自然信號,有著非常強的規(guī)律性。NLP雖然是人造的產(chǎn)物,但是也大體服從顯而易見的語法規(guī)律(否則就沒法溝通了)。

          但是推薦模型的特征輸入?yún)s是高度自定義,且長尾信號非常稀疏的,就比如前面舉例的“北京60歲高收入”只是10^6可能性中的一個(e.g. 深圳90歲無收入就比較少)。每次輸入是從數(shù)億個特征中挑選其中幾百個或者幾千個,來刻畫這個用戶的請求。

          智能不夠人工來湊。勤勞的算法人員在早期LR,F(xiàn)M,F(xiàn)FM等階段,更多采用了人工實驗的方式挑選了特征,但是我們也逐漸看到隱式、自動化交叉取得了更好的效果。

          16年的WDL是一個轉(zhuǎn)折性的工作,推薦排序相對有機的融合了人工特征和DNN學(xué)習兩個流派的優(yōu)點。Wide負責記憶,Deep負責泛化。WDL更像是一個框架,Wide和Deep可以被替換成其他的結(jié)構(gòu),比如Wide使用FM就變成了DeepFM。而Deep的花樣更多,可以引入Attention, RNN等等。

          18年的MMOE(Multi-gate Mixture-of-Experts)對推薦排序模型是一個新的較大的改進。和CV和NLP任務(wù)通常有明確的優(yōu)化目標不太一樣,推薦場景通常需要優(yōu)化用戶多個維度的體驗,比如時長,點擊,轉(zhuǎn)發(fā),點贊,多樣性等等。傳統(tǒng)方法需要單獨訓(xùn)練多個模型。而MMOE解決了單個模型多個任務(wù)的問題。后來的PLE進一步緩解了蹺蹺板效應(yīng),讓模型能夠同時改進多個目標的效果。

          最近兩年模型DNN突破性的結(jié)構(gòu)變化相對比較少,但是許多效果演進還是不少,累計也進一步提高了推薦排序的效果。比如更加復(fù)雜的embedding交叉結(jié)構(gòu),結(jié)合transformer、序列建模,構(gòu)建更多、更細粒度的訓(xùn)練目標等等。

          總體而言,推薦排序DNN復(fù)雜度相比NLP來說,要低很多。一個可能的原因是CPU訓(xùn)練的算力限制。隨著新的架構(gòu)解決了海量embedding的GPU訓(xùn)練問題,可能GPU訓(xùn)練能為推薦排序模型DNN復(fù)雜度和效果提升帶來新的突破。

          Tower, Tree, Graph

          如果覺得推薦排序只有上一節(jié)提到的玩法,就有點太小看這個領(lǐng)域的算法人員了。市面上能找到的主流深度學(xué)習算法技術(shù)其實在推薦領(lǐng)域都被試了個遍,這里簡單說幾個:

          雙塔模型是推薦領(lǐng)域的經(jīng)典了,常常被用在召回、粗排等需要極高性能的場景。由于Item特征的變化相對緩慢,可以提前批量算出所有Item Embedding。這樣在線上服務(wù)時,只需要基于實時的User特征計算User Embedding,然后再做一個Cosine距離就可以知道這個User和Item的匹配程度了。

          雙塔模型為了能夠分別計算User和Item向量,限制了特征和模型的復(fù)雜度,不方便進行user和item交叉特征的學(xué)習。Tree模型的思路是通過樹的分治減少需要計算的item量,這樣可以使用復(fù)雜的召回模型。類似的還有DeepRetrival等。

          說起Graph模型不得不提這幾年火起來的GraphNeuralNetwork(GNN),比如GraphSage等。其實思想有點類似word2vec和一些自監(jiān)督的算法,通過一些游走策略改造子圖,并通過他們之間的鄰近關(guān)系,以及非子圖節(jié)點的非相似關(guān)系來來構(gòu)造樣本進行學(xué)習,最終得到每個節(jié)點的隱式表達。而這些隱式表達則可以被用在推薦領(lǐng)域召回相似的物品。

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

          大的互聯(lián)網(wǎng)公司通常會有許多業(yè)務(wù),比如字節(jié)的抖音、頭條,騰訊的瀏覽器、視頻、新聞、音樂等。每個業(yè)務(wù)內(nèi)部又有細分為許多子場景,比如主頁Feed,以及點擊某個物品后進入到相似物品的推薦。而每個子場景又常常拆分為召回、粗排、精排、混排等多個階段。通常人員組織架構(gòu)也符合這樣的拆分。

          從下圖可以看到,這種結(jié)構(gòu)下產(chǎn)生了非常多的橫向“豎井”,用戶和數(shù)據(jù)被切割在各個豎井中了??v向漏斗也被切分成各個階段的獨立模型,產(chǎn)生了較多的bias和訓(xùn)練目標一致性問題。

          針對上面的問題,可以進行了橫向的和縱向的打通工作:

          • 橫向來看,構(gòu)造多場景的異構(gòu)圖,或者通過share和independent feature的方式構(gòu)造多業(yè)務(wù)場景的MMOE模型?;诟S富的數(shù)據(jù)進行預(yù)訓(xùn)練,而后應(yīng)用在子場景上。這種方式對對于新用戶和中小場景的提升尤其明顯。
          • 縱向上看,通過一次性訓(xùn)練任務(wù)同時訓(xùn)練召回、粗排、精排模型。利用精排更復(fù)雜和精準的預(yù)測結(jié)果來蒸餾前面兩個階段。這種方式一方面可以顯著提升召回、粗排的效果,也可以壓縮粗排模型的體積。

          總結(jié)與展望

          回顧深度學(xué)習模型過去的發(fā)展歷史,我們看到過去一些明顯的規(guī)律和局限:

          • 更寬、更深、更大的模型持續(xù)帶來效果和能力上的驚喜,但是似乎在22年走到了一個反思的節(jié)點。用VGG的100M和Megatron的530B相比,規(guī)模提升了1000~10000倍。然而,規(guī)模的邊際效用降低,能耗和迭代效率都成為較大的問題。

          • 模型越來越全能,算法越來越歸一。放在10年前,CV和NLP的研究員可能風馬牛不相及。但是現(xiàn)在我發(fā)現(xiàn)CV,NLP,語音的SOTA模型都能用上Transformer結(jié)構(gòu),都能用上自監(jiān)督訓(xùn)練。而且模型能夠編碼多種模態(tài)的輸入。

          • 可解釋,可控性,可預(yù)測能力依然沒有突破。就好像對人腦的理解一樣,對于深度學(xué)習模型的理解依然很單薄?;蛟S高維空間本身就是無法被直觀理解的。無法被理解的基礎(chǔ)上,就不容易被管控。通過one-shot似乎可以讓模型快速掌握新的能力,但是對于模型其他能力的影響缺失很難判斷的。就好比你讓一輛車很容易躲避障礙物,卻可能導(dǎo)致它側(cè)翻的概率增加。

          • 隨機應(yīng)變和規(guī)劃能力不足。雖然模型有著超越人類的感知和記憶能力,但是面對復(fù)雜世界的行動和決策卻相對較弱。從AlphaGo和一些相關(guān)工作,可能強化學(xué)習是一個可以持續(xù)挖掘突破的方向。但是強化學(xué)習的發(fā)展有可能帶來對可控性和可預(yù)測性的擔憂。假如用強化學(xué)習來訓(xùn)練無人機,并用“擊中目標”作為Reward。會發(fā)生什么?能不能讓它“絕不傷害人類”。

          • 算力、數(shù)據(jù)、算法的進步造就了今天技術(shù)成就。但是現(xiàn)在能耗,硬件算力,體系結(jié)構(gòu)(e.g. 馮諾依曼架構(gòu)、內(nèi)存墻)都對人工智能的發(fā)展產(chǎn)生了制約,可能邁向通用人工智能的路上還需要先進行、更徹底的底層顛覆。

          從規(guī)律和問題出發(fā),可以展望未來的一些發(fā)展趨勢:

          • 受限能耗、系統(tǒng)性能、模型迭代效率,邊際效益遞減等因素,模型的規(guī)模增長不會像過去幾年一樣高速,而是朝更高效的模型結(jié)構(gòu)(e.g. Sparse Activation),訓(xùn)練方式(Self-supervise),更高效的部署(e.g. Distillation)發(fā)展。
          • 模型的感知和記憶能力會快速、全面超過人類水平,并且固化下來,形成通用化的應(yīng)用場景。而模型的動態(tài)決策能力,復(fù)雜場景的應(yīng)變能力還有較大的發(fā)展空間。模型的可解釋性、可控性短期可能不會有比較大的突破,但是大的研究機構(gòu)會持續(xù)的投入,并形成一些差異化的競爭力。
          • 深度學(xué)習算法和生命科學(xué),金融風控等場景結(jié)合,可能會逐步有更多突破性的應(yīng)用進展。比如在生命科學(xué)、生物制藥方向,可能會產(chǎn)生影響整個人類物種的技術(shù)。而一旦金融風控等領(lǐng)域取得重大突破,社會的許多治理會逐漸從人變成機器。
          • 在虛擬世界(或者說是現(xiàn)在比較火的元宇宙),未來5~10年可能會先出現(xiàn)比較通用的智能體。原因是基于強化學(xué)習的相關(guān)技術(shù)在虛擬世界有較低的迭代成本和安全顧慮。
          • AI計算的終極硬件可能不是基于布爾邏輯的二進制計算。而是更高效的數(shù)字模擬的,更接近神經(jīng)之間通信的信號。

          如果覺得有用,就請分享到朋友圈吧!

          △點擊卡片關(guān)注極市平臺,獲取最新CV干貨

          公眾號后臺回復(fù)“transformer”獲取最新Transformer綜述論文下載~


          極市干貨
          課程/比賽:珠港澳人工智能算法大賽保姆級零基礎(chǔ)人工智能教程
          算法trick目標檢測比賽中的tricks集錦從39個kaggle競賽中總結(jié)出來的圖像分割的Tips和Tricks
          技術(shù)綜述:一文弄懂各種loss function工業(yè)圖像異常檢測最新研究總結(jié)(2019-2020)


          #?CV技術(shù)社群邀請函?#

          △長按添加極市小助手
          添加極市小助手微信(ID : cvmart4)

          備注:姓名-學(xué)校/公司-研究方向-城市(如:小極-北大-目標檢測-深圳)


          即可申請加入極市目標檢測/圖像分割/工業(yè)檢測/人臉/醫(yī)學(xué)影像/3D/SLAM/自動駕駛/超分辨率/姿態(tài)估計/ReID/GAN/圖像增強/OCR/視頻理解等技術(shù)交流群


          每月大咖直播分享、真實項目需求對接、求職內(nèi)推、算法競賽、干貨資訊匯總、與?10000+來自港科大、北大、清華、中科院、CMU、騰訊、百度等名校名企視覺開發(fā)者互動交流~


          覺得有用麻煩給個在看啦~??
          瀏覽 49
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  性高潮视频在线观看 | www.亚洲视频 | 少妇免费网站 | 九一操逼视频 | 亚洲免费a |