科學式家|第四範式陳雨強:萬字深析工業界機器學習最新黑科技

「範式大學系列課程」第 14 篇文章:科學式家|第四範式陳雨強:萬字深析工業界機器學習最新黑科技

近日,全球最頂級大數據會議Strata Data Conference在京召開。Strata大會被《福布斯》雜誌譽為「大數據運動的里程碑」,吸引了大數據、人工智慧領域最具影響力的數據科學家與架構師參會。第四範式聯合創始人、首席研究科學家陳雨強受邀出席,並以「人工智慧工業應用痛點及解決思路」為題,發表主題演講。

陳雨強是世界級深度學習、遷移學習專家,曾在NIPS、AAAI、ACL、SIGKDD等頂會發表論文,並獲 APWeb2010 Best Paper Award,KDD Cup 2011名列第三,其學術工作被全球著名科技雜誌MITTechnology Review報道。同時,陳雨強也是AI工業應用領軍人物,在百度鳳巢任職期間主持了世界首個商用的深度學習系統、在今日頭條期間主持了全新的信息流推薦與廣告系統的設計實現,目前擔任第四範式首席研究科學家,帶領團隊研究、轉化最領先的機器學習技術,著力打造人工智慧平台級產品「先知」。

以下內容根據陳雨強主題演講編寫,略有刪減。

大家好,我是來自於第四範式的陳雨強,目前主要負責人工智慧演算法研發及應用的相關工作。非常高興與大家分享人工智慧在工業界應用的一些痛點、以及相應的解決思路。

工業大數據需要高VC維

人工智慧是一個非常炙手可熱的名詞,且已經成功應用在語音、圖像等諸多領域。但是,現在人工智慧有沒有達到可以簡單落地的狀態呢?工業界的人工智慧需要什麼技術呢?帶著這些問題開始我們的思考。

首先,我們先探討一下工業界人工智慧需要一個什麼樣的系統?人工智慧的興起是由於數據量變大、性能提升以及並行計算技術發展共同產生的結果。所以,工業界的問題都是非常複雜的。因此,我們需要一個可擴展系統,不僅在吞吐與計算能力上可擴展,還需要隨著數據量與用戶的增多在智能水平上可擴展。怎麼實現一個可擴展系統呢?其實很重要的一點是工業界需要高VC維的模型,去解決智能可擴展性的問題。怎麼獲得一個高VC維的模型呢?大家都知道,機器學習=數據+特徵+模型。如果數據在給定的情況下,我們就需要在特徵和模型兩個方面進行優化。

特徵共分兩種,一種叫宏觀特徵,比方說年齡、收入,或是買過多少本書,看過多少部電影。另外一種是微觀特徵,指的是比擬細粒度的特徵,你具體看過哪幾本書,或者具體看過哪幾部電影。每一部電影,每一本書,每一個人,都是不同的特徵。書有幾百萬本,電影有幾百萬部,所以這樣的特徵量非常大。

模型可分為兩類,一個是簡單模型,比如說線性模型。還有一種是複雜模型,比如非線性模型。

這樣就把人工智慧分為了四個象限。如上圖,左下角是第一象限,使用宏觀特徵簡單模型解決問題。這種模型在工業界應用非常少,因為它特徵數少,模型又簡單,VC維就是低的,不能解決非常複雜的問題。右下角的第二象限是簡單模型加上微觀特徵,最有名的就是大家熟知的谷歌Adwords,用線性模型加上千億特徵做出了世界頂尖的廣告點擊率預估系統。左上角的第三象限是複雜模型加宏觀特徵,也有諸多知名公司做出了非常好的效果,例如Bing廣告和Yahoo,經典的COEC+複雜模型在這個象限內是一個慣用手段。最後是第四象限,利用複雜模型加上微觀特徵,由於模型空間太大,如何計算以及解決過擬合都是研究的熱點。

剛才說沿著模型和特徵兩條路走,那如何沿著模型做更高維度的機器學習呢?研究模型主要是在學術界,大部分的工作是來自於ICML、NIPS、ICLR這樣的會議,非線性有三把寶劍分別是Kernel、Boosting、NeuralNetwork。Kernel在十年前非常火,給當時風靡世界的演算法SVM提供了非線性能力。Boosting中應用最廣泛的當屬GBDT,很多問題都能被很好地解決。Neural Network在很多領域也有非常成功的應用。工業界優化模型的方法總結起來有以下幾點。首先,基於過去的數據進行思考得到一個假設,然後將假設的數學建模抽象成參數加入,用數據去擬合新加入的參數,最後用另一部分數據驗證模型的準確性。這裡舉一個開普勒沿模型這條路發現開普勒三定律的例子。在中世紀的時候,第谷把自己的頭綁在望遠鏡上堅持觀察了30年夜空,將各個行星的運動軌跡都記錄下來。基於這些數據,開普勒不斷的進行假設,最後假設行星的運動軌道是橢圓的,用橢圓的方程去擬合他的數據,發現擬合的非常好,便得到了一個新的模型:開普勒第一定律。這就是一個典型的沿著模型走的思路,通過觀測數據,科學家獲得一個假設,這個假設就是一個模型,然後用數據擬合這個模型的參數,最終在新的數據上驗證模型是否正確,這是沿著模型走的一條路。

沿著特徵走主要是由工業界來主導,比如說谷歌的Adwords裡面有上千億的特徵,想要描述為什麼會產生一次廣告點擊,這就需要解決高效並行的問題。這些技術大部分進展來自於KDD或是WWW。沿著特徵優化機器學習,就是把問題通過特徵的方式分的足夠細,做非常準確的模型。

到底是深度模型好還是寬度模型好呢?這裡有一個沒有免費的午餐定理:不存在萬能的模型。簡單來說,世界上不存在一個優化演算法對任何問題上都有效,也就是說我們總能找到一個問題,讓這個優化演算法表現的並不比隨機的更好。更進一步的說,所有的機器學習都是一個偏執,代表了對這個世界的認知。如果數據較少,這個偏執就需要比較強。比如說科學家觀測物理現象,數據並不是特別多。這種情況下,你需要大量的理論和猜想,有少量數據做擬合驗證就可以了。但如果假設錯的話,就可能出現錯誤的結論。比如用地心論研究天體物理的話,就發現結論都是錯的。但是如果數據很多,我們就不需要很強的偏置,將更多的不確定性加入模型,自動的通過數據進行擬合。綜合起來,工業界的機器學習裡面並沒有免費的午餐,不存在哪一個模型是萬能的模型。所以說你一定要根據你的業務做出合適的選擇,才是最好的一個方式。

人工智慧落地的關鍵:提高AI的易用性

人工智慧目前還遠沒有達到可以遍地開花的程度,即使解決了剛才講的寬與深的問題,我們依然還有很多事情要做。如何訓練出好的模型、如何去選擇好的參數、如何進行特徵組合,都不是一件容易的事情。

比如,數據需要歸集、整理、導入、清洗、拼接、特徵工程等之後才能模型訓練。之後模型上線還要保證系統的穩定性、時效性和吞吐等等指標。同時為了提供線上服務,需要重做一套線上的架構,這個架構需要保證數據流實時性、線上線下一致性,以及模型作用的機制。只有完成這些,這樣才真正擁有了一個落地的人工智慧系統,否則只能稱之為在筆記本上做一個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

下面介紹第四範式最新發布的演算法—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.com

推薦閱讀:

一位「AI 專家」的自白:自己像個騙子
論文篇:Latent Dirichlet Allocation(LDA)(一)
深度學習(Deep Learning)基礎概念5:深度學習基礎概念測試題及詳解

TAG:机器学习 | 人工智能 |