本文來自AI新媒體量子位(QbitAI)
近日,全球最頂級大資料會議Strata Data Conference在京召開。Strata大會被《福布斯》雜志譽為“大資料運動的裡程碑”,吸引了大資料、人工智能領域最具影響力的資料科學家與架構師參會。第四範式聯合創始人、首席研究科學家陳雨強受邀出席,并以“人工智能工業應用痛點及解決思路”為題,發表主題演講。
陳雨強是世界級深度學習、遷移學習專家,曾在NIPS、AAAI、ACL、SIGKDD等頂會發表論文,并獲 APWeb2010 Best Paper Award,KDD Cup 2011名列第三,其學術工作被全球著名科技雜志MITTechnology Review報道。同時,陳雨強也是AI工業應用領軍人物,在百度鳳巢任職期間主持了世界首個商用的深度學習系統、在今日頭條期間主持了全新的資訊流推薦與廣告系統的設計實作,目前擔任第四範式首席研究科學家,帶領團隊研究、轉化最領先的機器學習技術,着力打造人工智能平台級産品“先知”。
以下内容根據陳雨強主題演講編寫,略有删減。
大家好,我是來自于第四範式的陳雨強,目前主要負責人工智能算法研發及應用的相關工作。非常高興與大家分享人工智能在工業界應用的一些痛點、以及相應的解決思路。
人工智能是一個非常炙手可熱的名詞,且已經成功應用在語音、圖像等諸多領域。但是,現在人工智能有沒有達到可以簡單落地的狀态呢?工業界的人工智能需要什麼技術呢?帶着這些問題開始我們的思考。
首先,我們先探讨一下工業界人工智能需要一個什麼樣的系統?人工智能的興起是由于資料量變大、性能提升以及并行計算技術發展共同産生的結果。是以,工業界的問題都是非常複雜的。是以,我們需要一個可擴充系統,不僅在吞吐與計算能力上可擴充,還需要随着資料量與使用者的增多在智能水準上可擴充。怎麼實作一個可擴充系統呢?其實很重要的一點是工業界需要高VC維的模型,去解決智能可擴充性的問題。怎麼獲得一個高VC維的模型呢?大家都知道,機器學習=資料+特征+模型。如果資料在給定的情況下,我們就需要在特征和模型兩個方面進行優化。
特征共分兩種,一種叫宏觀特征,比方說年齡、收入,或是買過多少本書,看過多少部電影。另外一種是微觀特征,指的是比拟細粒度的特征,你具體看過哪幾本書,或者具體看過哪幾部電影。每一部電影,每一本書,每一個人,都是不同的特征。書有幾百萬本,電影有幾百萬部,是以這樣的特征量非常大。
模型可分為兩類,一個是簡單模型,比如說線性模型。還有一種是複雜模型,比如非線性模型。

這樣就把人工智能分為了四個象限。如上圖,左下角是第一象限,使用宏觀特征簡單模型解決問題。這種模型在工業界應用非常少,因為它特征數少,模型又簡單,VC維就是低的,不能解決非常複雜的問題。右下角的第二象限是簡單模型加上微觀特征,最有名的就是大家熟知的谷歌Adwords,用線性模型加上千億特征做出了世界頂尖的廣告點選率預估系統。左上角的第三象限是複雜模型加宏觀特征,也有諸多知名公司做出了非常好的效果,例如Bing廣告和Yahoo,經典的COEC+複雜模型在這個象限内是一個慣用手段。最後是第四象限,利用複雜模型加上微觀特征,由于模型空間太大,如何計算以及解決過拟合都是研究的熱點。
剛才說沿着模型和特征兩條路走,那如何沿着模型做更高次元的機器學習呢?研究模型主要是在學術界,大部分的工作是來自于ICML、NIPS、ICLR這樣的會議,非線性有三把寶劍分别是Kernel、Boosting、NeuralNetwork。Kernel在十年前非常火,給當時風靡世界的算法SVM提供了非線性能力。Boosting中應用最廣泛的當屬GBDT,很多問題都能被很好地解決。Neural Network在很多領域也有非常成功的應用。工業界優化模型的方法總結起來有以下幾點。首先,基于過去的資料進行思考得到一個假設,然後将假設的數學模組化抽象成參數加入,用資料去拟合新加入的參數,最後用另一部分資料驗證模型的準确性。這裡舉一個開普勒沿模型這條路發現開普勒三定律的例子。在中世紀的時候,第谷把自己的頭綁在望遠鏡上堅持觀察了30年夜空,将各個行星的運動軌迹都記錄下來。基于這些資料,開普勒不斷的進行假設,最後假設行星的運動軌道是橢圓的,用橢圓的方程去拟合他的資料,發現拟合的非常好,便得到了一個新的模型:開普勒第一定律。這就是一個典型的沿着模型走的思路,通過觀測資料,科學家獲得一個假設,這個假設就是一個模型,然後用資料拟合這個模型的參數,最終在新的資料上驗證模型是否正确,這是沿着模型走的一條路。
沿着特征走主要是由工業界來主導,比如說谷歌的Adwords裡面有上千億的特征,想要描述為什麼會産生一次廣告點選,這就需要解決高效并行的問題。這些技術大部分進展來自于KDD或是WWW。沿着特征優化機器學習,就是把問題通過特征的方式分的足夠細,做非常準确的模型。
到底是深度模型好還是寬度模型好呢?這裡有一個沒有免費的午餐定理:不存在萬能的模型。簡單來說,世界上不存在一個優化算法對任何問題上都有效,也就是說我們總能找到一個問題,讓這個優化算法表現的并不比随機的更好。更進一步的說,所有的機器學習都是一個偏執,代表了對這個世界的認知。如果資料較少,這個偏執就需要比較強。比如說科學家觀測實體現象,資料并不是特别多。這種情況下,你需要大量的理論和猜想,有少量資料做拟合驗證就可以了。但如果假設錯的話,就可能出現錯誤的結論。比如用地心論研究天體實體的話,就發現結論都是錯的。但是如果資料很多,我們就不需要很強的偏置,将更多的不确定性加入模型,自動的通過資料進行拟合。綜合起來,工業界的機器學習裡面并沒有免費的午餐,不存在哪一個模型是萬能的模型。是以說你一定要根據你的業務做出合适的選擇,才是最好的一個方式。
人工智能目前還遠沒有達到可以遍地開花的程度,即使解決了剛才講的寬與深的問題,我們依然還有很多事情要做。如何訓練出好的模型、如何去選擇好的參數、如何進行特征組合,都不是一件容易的事情。
比如,資料需要歸集、整理、導入、清洗、拼接、特征工程等之後才能模型訓練。之後模型上線還要保證系統的穩定性、時效性和吞吐等等名額。同時為了提供線上服務,需要重做一套線上的架構,這個架構需要保證資料流實時性、線上線下一緻性,以及模型作用的機制。隻有完成這些,這樣才真正擁有了一個落地的人工智能系統,否則隻能稱之為在筆記本上做一個AI的玩具而已。
剛才說到的還隻是一個公司的問題與系統,如果用在各行各業的不同問題上,會發現問題非常多,是以企業一定需要一個內建上述所有能力的人工智能平台。開源社群内好的工具平台和算法能夠起到很大作用,這些工具也會日趨成熟,但并不足夠。雖然看起來人工智能已經在非常多的領域應用或者開始了突破性的嘗試,但是如果對比Hadoop這樣的分布式存儲計算系統來說,還遠遠未普及。
關于這個問題我們先分析Hadoop。之所有這麼多人用Hadoop是因為它雖然是個分布式系統,但對使用它的程式員并不需要掌握很高的分布式系統知識,研發人員并不需要為了使用Hadoop針對性的對自己的資料、業務做出改變,也不需要因為Map-Reduce架構重新設計自己的線上服務系統。但人工智能不一樣,為了使用AI,所有的上下遊元件都會和模型相關:不同的模型不僅意味着不同的訓練系統,還意味着不同的實時、非實時的資料流,不同的拼表要求與架構選擇、不同的特征抽取、不同的線上服務架構、不同的災備架構、復原架構相關。這樣你就會發現,為AI系統做資料流與線上系統的架構師,必須要懂機器學習才能做好工作。
是以現在能夠做AI應用的人,主要還是那些研究及應用的機器學習科學家,需要那種既懂機器學習,又了解業務,還精通系統架構的工程師。這就造成了AI的高門檻。就如同三四十年前,真正程式設計的人并不是現在我們這樣的人,而是一群科學家們,他們通過紙帶來控制程式的運作,自己不僅要程式設計,還得非常懂計算機體系架構。導緻的結果是,根本不是每個人都能接觸到這項技術,不是每個企業都能受惠于這個技術。但是現在,甚至在Excel中都可以程式設計,這些程式員可能完全不知道計算機的體系結構、作業系統、編譯原理、資料庫的概念,将全部心思花在了解與解決業務問題上,達到事半功倍的效果。
是以,如果想讓AI在工業界中産生更大的影響,真正的落地,我們需要的是一個完整的人工智能應用平台,讓人以更低的成本用上人工智能。從這個角度上看,阻礙AI普及的并不是現在的算法效果不夠好,而是現在算法的門檻太高,研發新的平台以及算法降低門檻的重要性大于優化算法效果的重要性,我們期望用低的門檻獲得好的效果。
如何降低這些門檻呢?這裡分享一下第四範式的成果。首先特征工程是工業界應用AI的巨大的難關。特征工程的目标是針對于某個模型找出與要解決問題相關的關鍵屬性,現在也有一些開源的項目嘗試解決特征工程,下圖就列出了Spark 2.2官方文檔中包含的特征工程算法。那麼,針對不同的業務、不同的模型,這些算子就足夠我們低門檻模組化了嗎?
如果想要做好特征工程,需要對将要使用的機器學習算法有深入了解才行,随便地将所有的特征全部扔進去,現有的算法并不能很好地處理。有時候,不同的算法為了達到同一個目标,使用特征工程與做法會完全不一樣。以新聞推薦為例,我們要做兩種特征,來提高推薦新聞的點選率。一種是一階特征,描述的是那些使用者直接喜歡的内容。另一種是二階特征,描述的的是個性興趣的擴充。比如說喜歡大資料的人,很有可能對機器學習也感興趣。
在下面的示意中,小人代表一個使用者(User),小人下面表示通過統計得到的使用者畫像,也就是使用者的曆史興趣點(User_Topic)。右邊是3篇新聞,每個新聞有一個話題(News_Topic)。
那麼,如何在之前提到的“簡單模型(線性模型)+微觀特征”這條路添加一階特征呢?如圖左上角所示,我們隻需要簡單的将使用者與新聞話題做組合特征(User-New_Topic笛卡爾積)就可以了。在這條路上,我們并不需要任何的使用者畫像統計,因為最後每篇新聞點選或者不點選就已經可以訓練出“User-News_Topc”組合特征的權重與偏好了。這種方式下,線上上服務的時候,所有的資訊都是推薦時能擷取的,但是為了使用者興趣更新及時,我們需要把模型的時效性做到非常高。
回頭看,如何在之前提到的“複雜模型(非線性模型)+宏觀特征”這條路添加一階特征呢?如圖左下角所示,由于是宏觀特征,我們需要将不同的話題變成單個特征,一種做法是通過一階邏輯的判斷“本篇新聞的話題是否屬于使用者曆史的興趣”加入。這種方式下,線上上服務的時候,我們除了需要推薦實時資訊之外,還需要實時維護使用者曆史的興趣點,但是模型本生的更新頻率就不用那麼快了。畢竟,為了達到推薦時效性目标,要麼特征靜态、模型特别實時,要麼特征實時、模型靜态不變。
那麼,如果我們要學習二階特征呢?對于線性模型(如右上角所示),我們也需要用到使用者的曆史興趣點,将使用者的曆史喜好與文章的話題進行組合(User_Topic-New_Topic),這樣模型就可以學到曆史上喜歡什麼樣話題的人還會喜歡什麼樣的新聞話題,達到二階遷移的目标。對于非線性模型(如右下角所示),我們要做的将原先的一階邏輯判斷(可以認為是個Identity矩陣)變成一個二階狀态轉移矩陣,通過曆史統計得知不同話題間喜歡轉換的情況,推算出一個不在使用者現有興趣點中的文章話題是不是使用者喜歡的。
更進一步的,我們總結對比一下,對于前文提到的機器學習四象限中的第2,3,4象限的模型,我們做特征工程的方式差距非常大。對于一階特征,如果是線性模型加精細特征,直接做組合,不用統計;如果做非線性模型是需要統計的,同時用包含關系來做;如果用非線性模型不需要用包含關系,模型本身會進行特征組合。如果做二階特征,每種方法都需要使用統計特征,但适用方式也各不相同,比方說非線性模型宏觀特征,你需要三個相關的資訊和很多統計才可以做到。
這個例子說明了一個道理,如果要做好的特征工程,需要非常多的針對模型的定制化的優化,僅用現在的工具還完全不夠,完全需要靠人的經驗與判斷。是以,研發自動特征工程的算法就變得尤為重要。自動特征工程是一個比較難的問題,在學術界與工業界都在積極地研究這個問題,這裡跟大家分享自動工程的三個方向,隐式特征組合(如NN,FM),半顯式特征組合(如GBDT)與顯式特征組合(顯式特征叉乘)。
隐式特征組合主要特點是對連續值特征非常友好,最成功的應用場景是語音和圖像。在這些原始信号是像素或是聲波的問題裡面,深度學習通過神經元網絡産生底層的Filter以及階層化的特征組合,獲得了遠超人類手工特征工程的效果。但是深度神經網絡并不是萬能的,在深度學習中,高維離散特征的變量處理非常複雜,同時缺乏可解釋性,過于黑盒化也是神經網絡大家關注的焦點。這樣會導緻深度學習出來的特征組合相對難用到其他算法之上,也很難給人明确的資訊回報。
針對NN難以處理離散特征的問題,我們需要Large Scale Embedding的技術進行解決。Embedding最早在NN上的應用是在NLP的問題上,當時研究者們使用Embedding的技術将每個單詞映射到一個低維空間,通過concat,sum,poolling,convolution等方式形成等長的最底層輸入,然後使用标準的深度神經網絡進行訓練。随後在越來越多的領域用上了Embedding技術,推薦是一個典型的場景,限制波爾茲曼機(RBM)在提出之初就曾使用Embedding嘗試解決協同過濾問題。最近,谷歌發表描述如何使用大規模Embedding技術在Youtube上向數以十億計的使用者推薦數以億計的視訊,在他們的工作中,他們同時對每個使用者與視訊進行Embedding,之後把使用者觀看曆史、搜尋曆史等視訊的向量通過求和變成特征,繼而進行深度學習,獲得了比較大的成功。
Large Scale Embedding在現在依然是一個比較熱門的研究領域,其中的成果包括Discrete Factorization Machine,FNN, PNN, DeepFM等,上圖顯示了這些算法的異同,簡單來講這些模型既能找到特征之間的推理關系,同時也能去記憶比較細的特征。在這個領域,第四範式提出了DSN(Deep Sparse Network)的算法,它是一個非常寬且深的模型,裡面同樣會做大規模Embedding,用神經網絡做自動學習組合,目标解決高維模型(上萬萬億VC次元)的正則化以及并行計算問題。
第二個是半顯式的組合,主要基于的是樹模型。為什麼說是“半顯式”呢?因為大家可能認為樹模可解釋或者做特征組合是很自然的事情,但其實并不是:葉子節點的每一個分支并不是一種顯式、直接的特征組合,而是這些特征在特定取值區間的組合。是以從結果上來說我們做到了特征組合,有一定可解釋性,但是同樣也沒有辦法直接看特征相關性或者特征之間組合關系。作為非線性模型,樹模型主要的特點是容易了解,效果也是非常好的。但是類似的,它對離散的精細特征非常難處理,傳統上訓練一棵m個特征n個訓練資料k層深t棵樹的模型需要O(mntk)的時間,即使對系數特征進行優化,也很難降低特征分裂中分桶上的空間與傳輸消耗。在這個方面,第四範式提出了一系列算法,包括HE-TreeNet和GBM系列算法,通過Embedding,Ensemble、Stacking,General Boosting等方式讓樹模型可以在大規模特征的情況下可以進行特征組合。
第三個介紹一下顯式的組合,算法的輸出會明确指定哪些特征組合起來(笛卡爾積)作為基礎特征。整體思路沿着搜尋與搜尋優化這條路,也有一些地方使用正則化加貪心。由于顯式特征組合的問題求解空間大,尋找最優特征組合是個非常難的問題。我們對比AlphaGo下圍棋,19乘19的棋盤上每個點上有黑子/白子/無子三種狀态,它的狀态空間最大是。考慮顯式特征組合要做的事情,我們要有個特征,限制高階組合階數不超過,從中選取個特征,那麼2到特征的總量是,最終再從其中選取個特征,其空間是 ,即使将不大的中帶入,量級會遠遠大于,從解空間大小的角度看顯示特征組合比下圍棋還要更難。
顯式特征組合還有一個問題是如何做連續值的組合,比如說一個人的年齡是30,收入是10000,應該怎麼做組合特征呢?是乘、是加還是平方和?在NN中,是通過線性組合加上非線性變化,在GBDT中使用過特征值分裂,但是對限時特征組合,實際上沒有一個好的現有方法去直接組合。
雖然有着重重困難,顯式特征組合的優勢在于可解釋性,會提供一個非常深入的洞察,可以知道哪些特征是潛在有關系的,應該組合起來;同時這樣的方法享受比較好的可疊加性:所有機器學習算法都基于特征,顯式特征組合的産出是特征集,這個特征集可以增強所有其他機器學習的算法,成為訓練的基礎。
目前,顯式特征組合主要有幾種算法,一些方法基于Boosting,訓練單Feature弱分類器,通過Boosting的過程尋找組合的啟發;或者基于Regularization進行權重截斷,形成組合候選。這些算法一般不是為了特征組合而設計,組合也多為訓練過程的副産物,很難真正的獲得高階的組合特征。
下面介紹第四範式最新釋出的算法—FeatureGO。它是基于MCTS,對特征與特征組合狀态進行模組化,訓練組合下的收益函數。在搜尋的過程中,我們做了非常多的調優技術,使用我們内部線性分型算法LFC解決連續值特征組合的問題。最終,我們發現這個特征組合最多能達到十階以上,且發現即使達到十階也能提供明顯的的效果提升,這個是過去靠人所做不到的事情。即使是在最好的廣告或者推薦系統中,人工的特征組合一般也隻能到達5-6階。
我們在4個資料及上實驗了FeatureGO算法,包括兩個公開的資料集(higgs、criteoDeepFM)與兩個我們私有的資料集(l_data,m_data),資料集統計資訊如下:
在這四個資料集上,我們使用FeatureGO産生的特征集合加上LR模型進行訓練,使用AUC作為評估标準。實驗效果如下。可以看到,使用了FeatureGO進行特征工程,在4個資料集上的效果都有非常明顯的提升,大部分提升在AUC 2個百分點左右。
我們也實驗了效果随着時間與新組合特征的加入而發生的變化,如下圖所示。可以看到随着時間的變長,特征組合數越多,特征組合效果會越來越好。
基線對比算法除了LR之外,我們也比較了一些最新的非線性算法成果,在cretio廣告資料上進行實驗,結果如下。在這個實驗裡,我們也可以看到,即使是基于最新NN或者FM的特征組合,也并不能找全所有可以利用的資訊,這個對比中顯式特征組合依然有非常好的表現。同時要注意到的是,FeatureGO産出的新組合特征還可以進一步提高上述所有模型的效果。
在FeatureGO這樣的算法背後,其實還有好多隐藏的架構上的黑科技,讓基于搜尋的算法可以實際變成可行。比方說我們提出了CPS(Cross Parameter-server Sharing),Dynamic Graph等技術,将計算過程中公共的資料讀取處理、特征請求存儲更新等進行共享,達到同時訓練10個模型的時候使用遠小于10倍單模型時間的效果。
關于計算能力與架構,我們認為這是人工智能至關重要的一部分。過去将APP開機速度由20ms優化到2ms其實意義并不是特别大,但是在機器學習中,10倍的速度意味着同時間訓練10倍多的資料,或者同時能訓練10個模型,也就意味着更好的效果,這也就代表着以往模型優化、效果優化這種隻有科學家做的事情,現在優秀架構師也能做到。在這方面,谷歌是非常好的榜樣。在過去,從沒有人想過LR這麼簡單的模型也能獲得良好的效果,但是通過極緻的工程架構與實作優化,谷歌證明了使用上千億特征,即使簡單的LR模型也不比任何非線性模型差。第四範式也是一個架構工程優化和算法并重的公司。我們不僅做人工智能的通用平台,也會投入非常多的精力去優化速度與架構,希望能獲得更強、更全面的人工智能水準和能力。
說到計算與架構這一點,也要提到谷歌Deepmind團隊最近做的另外一件工作NEURAL ARCHITECTURE SEARCH WITH REINFORCEMENT LEARNING,通過強化學習架構自動進行神經元網絡結構的學習,有人提到這個工作為了自動獲得一個網絡結構,使用了800塊GPU同時進行訓練,非常不實用。但我們認為,談到将來的趨勢,不會是通過專家來節省機器,降低機器的使用,而是通過機器節省專家降低專家的參與,因為随着摩爾定律,機器的計算成本會指數級的降低,但是專家的數量并不會指數增加。要讓更多的領域用上人工智能,更少人力的AutoML是将來的必經之路。
目前,第四範式的算法與産品“先知平台”在更廣泛意義上的AutoML與減低門檻兩方面,都在持續的投入和研究。這些新的研究方向包括自動拼表資料導入、模型可解釋、自動線上優化等。我們要做的事情,是如何把人工智能變的更加自動化,使AI變得跟Windows一樣普及。現在,“先知平台”試用版已經正式對外開放,歡迎登陸prophet.4paradigm.xpm注冊使用。
【完】
原文釋出時間:2017-07-25