獨家 | 機器學習先驅Michael Jordan清華演講原文:計算思維,推斷思維與數據科學
聽譯&校對| 馬越 曹翔 王婷 湯人懿 蘇國睿
以下為喬丹院士作的題為“計算思維、推斷思維與數據科學的主題報告原文,在不改變愿意的前提下,部分有刪改。
再次感謝!
很榮幸來到這里,今天我不會做一個技術講座,但仍會側重技術上和數學上的問題,我覺得清華的學生應該會對這些感興趣。思考數學問題是有益的,我將會把演講分為兩個部分。
我將從一些挑戰開始講起,這部分會偏重于技術;接著我會轉到系統的挑戰上,所以相對于給幾張數據增長的幻燈片,包括數據的用法,這個部分將著重于真實的數據科學家是什么樣子的。
想象一下,我的剛剛從伯克利畢業的學生們,去硅谷找了個工作,上班的***天老板就對他們說,我要你幫我建一個大數據系統,不管它是什么吧,但它將會用個性化的服務系統取代我們傳統的服務系統。這種情況在硅谷經常發生,可能在中國也一樣。
傳統的服務系統做的事情比如搜索、電商或是醫藥,是對所有人都只提供這一個服務系統,他們全年的工作就是用數據去優化服務系統器。所以搜索服務系統通常是某種加上參數的算法,數據涌入,你開始調整參數,使輸出的數據質量越來越高。
過去十年里,他們收集了大量的數據,并開始意識到他們提供的服務系統可以不止一種。他們可以提供個性化的服務系統,至少對于大公司來說是這樣的。
小公司在提供大量的服務系統這一點上是無法和大公司對抗的,但他們也意識到可以提供更個性化的服務系統,所以許多小公司也開始向個性化方向調整。
那么,你作為一個技術員,該怎么做呢?
我要做的就是重復這個算法可能,成百上千次,用更專業化的數據和更個性化的數據,每種都進行循環重復。我不會用每個個人的數據去重復,而是用一些分成小組的數據比如同一家庭的數據等。
我在后臺做這件事時需要很多電腦,不僅僅是服務系統,而是成千上萬種模型,這就是我們現在所處的狀況。很多人都在學著構建這樣的系統,而且他們通常都會成功。
但真正的難題并不在這里,老板也意識到了一些情況。我們知道統計模型是有錯誤的,因為它是基于現有數據,但是你不能讓錯誤次數隨著服務系統的人越來越多而不斷增大,我可以忍受少量錯誤,但我不能忍受錯誤持續增長,否則當我把這個服務系統投放市場時,它***天產生10個錯誤,一年后這個服務系統變得極受歡迎,但產生了10,000個錯誤,那么這10,000個人將會不高興了,然后他們就會想搞個大新聞,抱怨你的服務系統并沒有那么好。
所以我只能忍受保持不變的錯誤數據,它不能隨著系統規模的擴大而擴大。作為一個統計學家,我認為那才是真正的問題所在。我曾考慮過錯誤率成比例的增加時,用統計學里的L2或是L1范數去控制這種錯誤,相當于要去控制L***范數,你就要思考如何用尾概率和冪定律等去做這件事。我的學生們,如果他們被培養的不錯的話,都會知道怎么去思考這些問題,怎么去構建這樣一個系統。然而更糟糕的是,你的老板不僅要求你解決這個問題,還會順便要求你這個系統至少得和老系統跑的一樣快,好吧,現在我們必須得有計算思想了。前半件事就是一種系統再加上統計和機器學習,現在我們還要預計運行時間,我們想要這個系統在一定的時間內完成,于是你發現你做的事情和計算機科學家非常相像。
統計學家沒有運行時間的概念,統計理論體系里的人們從來不會討論這個問題,機器學習領域里也不討論。我們不知道什么叫好的***運行時間,我們沒有一個概念可以把允許承擔的統計風險和運行放在一起考量。所以在統計學里,你知道通常調用的數據量,了解正在評估的參數的維度假設空間的復雜性,有賴以構建系統的方程,但你不知道運行時間,并且數據量不同運行時間還不一樣。這本是計算機科學家應該干的活,他們本該介入并把一些量轉化成運行時間。
這對我的學生們來說開始成為一個小挑戰了。他們會說我可以構建一個系統,如果它運行的慢那你就得給我更多電腦,但我還是不能打包票,為什么現在不能運行緩慢。因為大部分這種服務系統具有時間預算,比如你的搜索引擎,你要幾十毫秒才能得到反饋,是吧?那就是九十年代時***的搜索引擎的反應時長。
點了搜索按鈕幾十毫秒之后你才能得到反饋,而不是瞬時得到結果。前幾代的搜索引擎下,點擊按鈕甚至需要等待一段不確定的時間,一般是好幾秒,這對使用者來說是件很沮喪的事,所以他們花了很大功夫優化這點,***反應變成了幾毫秒到幾十毫秒。
所以如果現在你說我要構建一個服務系統,它將是個性化的,會給你更好的信息,但是它跑起來比較慢,沒有人會滿意的。我打賭這對于系統構建人員來說是個不小的限制因素,使得這個任務更具挑戰性了。
如果你思考的再長遠一些,比如老板說這個系統應該也是可伸縮的,今天我有10TB的數據,五年后我將有PB級別的數據量,每個人我都會有更多的數據,把個性化做的更好。這看上去沒什么問題,更多的數據就應該得到更好的模型,但是對算法而言,數據越多意味著運行時間也越長,處理數據也需要更多時間,如果讀數據進行采樣的話,又會得到更多你并不想要的誤差,你又必須去控制這些誤差。所以實際上當前我們并沒構建這樣一個系統的準則,真的只靠人們不斷地嘗試和猜測,如果系統沒有按照預期運行,就去購買更多的電腦,最終他們意識到花費太多的錢仍然沒有效果,公司也因此破產。更糟糕的是,他們今天設計了這個系統,花了很多錢,但是***卻很少能夠正常工作,新的數據進來了,系統卻不能擴展。
這對很多行業和公司來說都是致命的,如果只是對搜索或電商還不算什么大問題,系統掛了你頂多是得到了不好的搜索結果,還不算太糟糕,沒有出人命,也沒人受傷。但是當你換一個行業,比如在個性化醫療領域應用大數據系統的時候,你可能會得到很差的預測結果,系統會很慢,而且有可能會出人命!如果應用在交通、金融等領域,可能會傷害到很多人。我認為這些問題實際上都是正在發生的,我認為很多大數據系統都在做糟糕的預測,人們使用不必要的藥物,接受不必要的手術,產生不必要的問題。
而且我認為這種狀態實際上只會變得更糟,直到我們發展出一種科學 一套工程原則——可以允許我們思考數據。我喜歡用的一個類比是修建高樓和橋梁,幾千年來這些實踐讓人類社會更加先進發達,但當發生高樓倒塌或橋梁斷裂事故的時候,也會奪走人的生命。
***一門叫做土木工程的學科出現了。研究給定一個建筑的高度,給定明確的風力大小,給定土壤等等,怎么修建建筑。但在大數據領域,我們沒有任何和這相似的東西。
我們有計算機科學、統計學、機器學習,我們有很多新想法,我們很聰明,可以做任何事情。但是當我們設計一個系統時,我們不知道錯誤率和時間,不知道在大規模情況下是否能有更好的決策,不知道這會隨著時間推移變得更差。而且當實際構建這樣的系統時還要面臨很多其他問題,比如很多數據是來自于很注重隱私的人,他們不想給你醫療數據,特別是不想讓你公開給任何人。所以你不能只是把數據拿過來就分析,你必須考慮數據收集的問題,這里面也有管理風險、帶寬限制等等。
這些問題全都要考慮到,因為它們會影響到統計推斷的質量,它們會讓誤差增加,這是很常見的工業界對員工的要求,但是在學術界并沒有這樣的領域能提供這些解決方案,至少對我而言是這樣。我認為這是下個世紀的挑戰,不是把我們現有的想法拿過來直接應用,而是作為科學來認真思考和踐行。所以,這個問題上一個非常有幫助的表述是——計算思維和推斷思維的結合。
計算思維不是說知道如何編程和使用數據庫,而是一種思想。關于思考一個問題的抽象概念、模塊性、性能……一切你在計算機課堂上學到的東西,而不僅僅是編程。計算機背景的人應該很熟悉這些,不熟悉的可能是推斷思維。那是已經有超過兩百年歷史的統計學里的東西,不是一個新的領域,不是拿到數據就開始進行操作,像做數據庫的人那樣。
首先要考慮數據從哪來,數據背后是什么,數據獲取的過程中有什么問題,這就是推斷,還不嚴格屬于計算機科學的研究范疇。即便***得到的東西都是所謂的算法,你也必須思考背后的統計采樣和總體。所以其實我并不是太喜歡機器學習這個詞,我認為并沒有什么新東西,還是統計思維。但是因為計算機科學家不太懂統計推斷的東西,所以他們取了一個新名字叫做機器學習。
很多機器學習的工作都沒有考慮推斷、采樣以及總體,只是把機器學習模型應用到數據卻沒有得到正確的答案,因為沒有考慮偏差、因果推斷等內容。我認為把兩者結合起來并且認真研究是真正的挑戰。我我以前更多關注算法和系統,過去幾年越來越像個理論家,逐漸更關注理論同時在某些方面也是關注系統。我在實驗室里設計系統的過程中看到了理論性的問題,所以我去尋找計算機和統計的理論,它們有什么概念可以怎么結合起來。所以我們發展了數據科學這個交叉學科,這并不容易。
統計決策理論里有損失函數和風險,但它的基礎理論中沒有運行時間的概念,你可以去查看幾十年來成千上萬的統計決策相關的論文,你不會看到任何一篇提及了運行時間;同樣地,在計算機這邊你可以找到成千上萬的論文討論復雜度,各種復雜度理論,但是卻找不到關于統計風險的文章。而利用統計風險理論可以控制基于數據的錯誤率。此外,對統計估計問題的深刻理解不僅僅包括學習算法、還包括學習下界,學習你可能做的***的是什么,但是在計算機理論里卻沒有太多關于下界的。有倒是有,但是不多。
接下來的演講將進入我今天的重點主題,談談一些關于“理論”(theory)的問題。在統計學“推算”(inference)概念上的“計算”(computational)限制,以及一些關于建立數據分析棧的問題。差不多是AMP實驗室里所做的事情,以及后續的叫RISE實驗室的一些發展動態。
我們已經建立了一個系統來替代Spark。我想告訴大家,事實上這是我***向公眾宣布這個信息。這個打算替代Spark的工程正在進行中,這個替代會在1月份完成,而我在今天就宣布了。
我們現在來談談一系列問題,我使用一個私人數據分析的案例。這些隱私數據與你們是否相關可能并不重要,但它們的確引出了一些需要承載的問題。人們通常擁有數據,并希望這些數據發揮作用,但他們也希望他們自己的數據能得到保護,比說誰知道他們的數據。
試想一下,接下來的幾年的醫療數據,你們當中的大多數人可能會得到你們的基因組序列,現在需要花費500美元去獲得它。或許在五年或十年的將來,去找你的醫生時,醫生可能會對你說,在杯子里留一些你的血液或唾液,這樣我就能獲得你的基因。他會獲得你所有的三十億對基因,并且會存入數據庫,他們將用這些數據做什么呢?
去預測你可能將來會患的所有疾病,也會嘗試用于生物醫學,以及生物信息學。他們未來會嘗試通過給定的基因找出相對應的藥物,并且把基因在一些方面表現出的缺陷和相對應的治療聯系起來。這是一個很好的機會,但也會帶來很多問題,特別是隱私問題。
如果我是一個生物醫學研究者,說我可以得到你的基因嗎?我知道你擁有這些基因。他會問我:首先,你要用我的這些基因數據做什么?你會怎樣保護我的基因數據?
如果我說這些數據是用于研究解決他的家族遺傳疾病,他會非常樂意并給我他的基因。如果我說是用于計算并確定保險費率,他也會認為這是件好事情。他希望通過數據來保護自己。我可能會舍棄一些數據而僅使用其中一部分數據來做研究。
如果我說我用這些數據來通過百度給你展示廣告,他可能會拒絕,表示他不喜歡我這樣使用他的數據。所以每個人都希望能夠控制自己的數據,希望存在一種類似開關值參數的東西,來控制數據涉及隱私的程度。根據具體問題和有哪些保障來做出決定。所以為了把隱私考慮進去,這種事會成為數據堆的組建的一部分,而且這并不容易。
下面我將通過一些圖片來說明。我知道在坐諸位很多在研究大數據,那么讓我們以大數據思維來進行下面的內容。假設現在數據庫中是銀行數據,我擁有一些人的年齡、身高、體重、地址,以及他們有多少存款,這是非常典型的銀行數據。
一個“詢問”(query)可能是:誰的存款最多?或者存款平均值是多少?我會得到一個答案,我把它叫做帶有波浪號的theta。如果你考慮到了數據庫中的個人隱私問題,你可能就會想:如何在數據庫中加入噪聲來保護人們的隱私,這樣就別人就不能掌握數據庫中的原始數據,或者獲得儲蓄人的信息。
于是你將它放入一個渠道(channel)或者一個隨機的運算因子Q, 得到一個私有化數據庫。在這個數據庫中“詢問”同樣的問題時,你將會得到新的答案叫帶有乘方號(^)的theta,并且有理論能夠證明出來。
帶乘方號(^)的theta和帶波浪號的theta是十分接近的,在Q上計算結果的概率很高,以及所有的“詢問”和數據庫,所以目前這個計算理論有許多不同的版本,其中***的是差分隱私(differential privacy),應用非常廣泛。這會讓數據庫中有用的數據增多,即給出一個問題,通過一種算法來解決,同時也有了理論上的保證。
這種方式有統計推理(inferential)的性質嗎?當我***次接觸這個領域時,我問我做數據庫研究的同事:“你在構建框架時進行統計推理么”?他們說那是當然,因為“詢問”可以是統計性質的,比如可以計算平均值和標準差等等。但是我回答說 :“這并不是推理性統計(inferential statistics),這只是描述性統計(descriptive statistics)。”
他問那推理性統計是什么意思?我說我們需要交流一下了。這里我舉另外一個例子,一個來自醫療研究領域的案例。我有一些數據庫中的人員信息,有他們的年齡、身高、體重、以及他們服用和不服用治療藥物的壽命,這是典型的醫療數據。好,現在,我想不想保護他們的隱私?當然想!這是他們的醫療數據!所以我會采用和前文講的一樣的保護數據隱私的方式。但是在銀行數據庫的例子里,我僅關注數據庫中的人。他們是我數據庫中的人,我希望知道他們的存款數額,他們的收入和支出情況,我僅僅對銀行中的人進行研究(做詢問)。
然而在醫療案例中,我可能對數據庫中的人絲毫不感興趣,事實上數據庫中的人可能已經死亡或者離開……我不關心這些人。我采集數據只是為了根據這些數據來為新的病人進行評估和治療,所以我需要思考的是那些將來可能會納入數據庫但是現在還沒有被納入的病人的數據。這才是統計學的推理性思維——那些將來可能會納入數據庫但是現在還沒有的,我想研究的是他們。
這個思維不是從計算機科學里來的,而是從統計學推理思維來的。所以如果我是一個醫生,病人走進我的辦公室,我會根據他的年齡、身高、 體重來決定是否給他藥物。但是我不能僅僅靠猜測,我需要根據從其他人處獲得的舊數據做分析后進行判斷,所以說我并不只對數據庫里已經有的人感興趣。
這就是統計學家的思維:他們面對一個數據庫時會思考“詢問”,比如數據庫樣本涉及的人員數量。他們必須對人員數量非常清楚,不能隨便說一個數,而且它們必須成為采樣模型,可能是隨機的、可能是線性的、可能是分層的……這是他們必須思考的問題。
如果不這樣做就得不到算法。你不能有個數據庫就直接想用什么算法、怎么處理數據,這并不是統計學推理思維。你先得思考數據是怎么排布陣型的,然后思考過后你才能得到算法,所以統計學家會對人數(P)進行一個“詢問”,詢問那些將來可能會納入數據庫、但是現在還沒有被納入的病人的數據,接下來才能得到答案,我們把它叫做theta。統計學家證明了總體theta和樣本的theta有很大概率在所有的采樣(S)、所有的查詢(query)和所有可能的分布下都很接近。這是統計學做的事情,是我們過去30年甚至更久一直在做的事情。
新的問題在于要把兩個概念結合起來,把推理性和計算性結合起來。假設我們采集了一堆數據,我想保護數據庫里的人的隱私,即在收集數據時給他們一個保證。但是我也需要思考準備用數據來做推測的那一群應用人群,我需要證明總體theta和樣本theta很接近,在S、Q等一系列方面有很高的重合概率。這就是這種新的挑戰。而且這不只是在隱私這一領域里的事情,這種挑戰存在于很多領域里,比如(數據)壓縮,你可能想研究:如果把一群數據壓縮至渠道Q來發展一個壓縮了的數據庫,因為我有太多的數據,即便在數據被壓縮以后,我依然想對總體數據做出可靠的推測。
我的一位學生Yuchen Zhang今天正好在場,他是做這方面研究的,在“關于數據推測和壓縮方面”寫了幾篇很不錯的文章。加州伯克利大學在這個隱私問題上做了不少研究。我今天只簡單講一下這個。這是一個典型的隱私問題引導圖,這里是隱私化數據,穿過一個渠道后這是Z值,是你愿意公開給統計學家的,他們通過這個計算某種估量函數,數學方面就一張幻燈片,這里的細節我就不講了,于是我們建立了一個有限制性的優化問題,這個問題有種鞍點的感覺,也有更進一步的下確界。
這個只是給觀眾里的專家看看,從紅色地方開始,損失量的期望值的極限,在統計學里叫做***風險,藍色部分是估計函數的下確界,叫做極小極大風險。然后我們新加的部分是所有渠道的下確界,在這個叫alpha的保護界限,隱私程度這叫在alpha級的微分隱私度。加上那個以后我們現在有了一個大型優化問題,一定空間 、一定復雜度、一定數學特性,我們做了數學演算來解決這個問題,最終得到了不少答案,不過我們算出了一個很簡單的結果,得到了一個沒有隱私度的統計率。
觀察數據點的數量n,然后把n替換成n乘以alpha的平方除以alpha是微分隱私參數,是數據的維度,這樣就得到了一個新的式子。這個新的式子通過原式的小小轉變就能得到,目前我們真正地把隱私和統計學結合在了一起。它們就真正的在一個式子里了,這個式子包含一些統計變量:數據點的數量、維度參數和一個計算變量alpha,即微分隱私參數,我們有幾篇論文,如果你對這類問題感興趣的話可以看看。
以上只是結合隱私問題來做推測的一個例子,更難的問題在于把推測和計算和一些更廣的東西結合在一起。
計算就是萬物是不是?圖靈告訴我們它無所不能,機器學習也只不過是計算的一種例子。我們能夠說:我可以在一定時間里和一定的內存限制下,達到一定精準度和一定的問題,一定的估計函數和機器學習算法,這些都是計算機科學家做的事情。像談論時間和空間等等,我做的就是加入統計誤差的分析和數據的風險和量等統計學上的東西,搞出一套理論把計算機和統計結合起來。但我想說這是不可能的,目前我們沒有這個能力,而且我認為圖靈復雜度(Turing Complexity)不是向前發展的,而且很顯然這不是發展趨勢。***化領域的communication復雜度這些這些可能會有用,它們中的某一個可能是最終的解決方案。這個領域需要新的想法,我們需要一種新的計算的概念。
圖靈的計算概念太籠統了,什么都是,但是我們不需在一個機器里做所有的事情,尤其是對于我們很多的運作器來說,改了一點日期它們不會改變太多,它們有很好的穩定性或者說利普希茨性質(Lipschitz)。我們可以想到一些有利普希茨性質(Lipschitz)計算理論,這些理論不會變化太多,圖靈復雜(Turing Complexity)就沒有這種性質,一點點改變就能完全改變得到的答案。你在計算機領域會很擔心這一點,但在我們統計學領域并不需要擔心那么多!
所以也許,我們可以發展一個更限制性的“計算”版本,也就是說更適合統計“推測”。這張ppt展示了在這個問題上近10年的探究,沒有一個是解決方案,但是它們都是將計算和統計學以各種方式結合在一起的嘗試。最早的一個方式是把計算和幾何結合在一起,然后把幾何和統計結合在一起,***從結合到推測。這些是計算和幾何之間凸松弛和運行時間已經存在的關系,關于它們是有研究的,這樣我們發展了一套平行理論。將幾何與統計結合在一起:簡單講,當你把一個問題“弛化”時,運行時間就減少了,這是已知的,然后我們證明了當你進一步“弛化”這個問題的時候,統計學風險就進一步提高,所以運行時間和統計風險程度是呈負相關的。我們也研究過并發控制這個對數據庫的人員來說很熟悉的概念,他們用這個來控制統計風險和時間的權衡,我們在***化Oracle的***范圍上做過很多研究,包括***化率,也得到了很多令人興奮的成果。我們也有很多在二次抽樣上的研究,你取更小的數據集嘗試對它們作影響,然后把它們重新定位到大數據集里。
這是一個計算機里很自然的概念,叫做divide和conquer,能夠引導出真正的困難的統計學。比如置信區間,如果我通過某個較大的因子減少數據量,置信區間會變得更大。如果我用小量的數據,我會得到錯誤的答案,我需要在我把規模調回的時候通過某種方式糾正錯誤,搞清楚這個怎么做是不容易的。
以上是這次講座的前三分之二的內容,這些是關于理論的。現在我們來說一說系統,這個會相對短一些。早些時候我是一個實驗室的聯合***研究員,從事數據分析開發系統。嘗試把統計學和機器學習的想法結合在一起。我們有一定成果,但是我們還是處于中級階段,這個叫AMPLab的實驗項目大概一個月前結束了,我們正在籌備稱為RISE Lab的新實驗室,Ion Stoica是新實驗室的負責人,我也是***研究員之一。
我會簡要介紹一下新的實驗室。首先,這個實驗室主要是企業贊助的。我們大學給予我們非常少,基本上沒有任何支持。州政府也沒有提供任何支持,主要原因是加州的財政危機。因此我們開始接觸企業,尋求支持,我們的募款非常成功,這些企業給予了我們極大的支持來運營這個實驗室,這是我們能夠運營這個項目長達5年的原因。我記得贊助企業中有幾家中國公司,我記得華為在某個時候參與了進來,在這張片子上的企業是我們做這張片子時候已經參與進來的。初始想法是結合我所擅長的算法——機器學習 ,以及我同事所擅長的機器和云計算及其他領域,一起思考人類數據和眾包。這是我們的基本思路。
我們是分布式計算軟件增長的貢獻力量之一,現在這方向的生態系統已經得到極大的拓展,我們實驗室開發的Spark已是這個生態系統中的重要部分。Spark誕生的真實原因是我組的機器學習研究員對Hadoop非常不滿意,他們抱怨很多。我們一開始讓他們使用Hadoop來進行更大規模的測試,研究員使用后覺得Hadoop對機器學習非常不適用,因為大部分機器學習(算法)需要迭代,輸入數據,處理一小部分數據,對參數作出一點修改,重新處理數據,然后再做一點修改,這個過程需要不斷重復。
對于Hadoop來說,數據需要經常從磁盤輸出然后存儲回去,每一步都需要需要重復映射和化簡,然后回到磁盤讀取數據。這個過程太慢了,一名研究系統的學生Matei (譯注:Matei Zaharia)聽到我們的討論,幫助我們開發了新系統,讓大部分中間結果緩存而不是寫入磁盤,這樣Spark就誕生了。這是AMPLab棧的Spark生態系統之一(譯注: 伯克利數據分析棧)。在最下面是儲存層和資源虛擬化層,不過我們主要研究往上的層,Spark Streaming支持流式數據處理,支持誤差計算和抽樣運作,也支持各種語言和圖像處理。
Splash是一種并行計算框架,由今天也在座的You Chan開發,他也開發了其他機器學習相關的工具。我也會簡要介紹模型服務器Velox,這個生態系統大概一年前的狀況,過去這一年它持續演化,結果非常成功。部分原因是因為這是學術界開發的,非常多企業發布過數據分析軟件棧,IBM Google 微軟都發布過,基本上它們都沒能引起大家的使用興趣,沒有人使用它們的工具,這軟件(Spark)的使用比那些企業的工具廣泛得多 ,而Spark的開發只需要幾名學者,因為其他(獨立)研究員信任學術界。
學術界不會突然讓他們支付軟件,不會隨意改動軟件,不會為軟件建立商業模式而研究人員成為中間一份子,所以,學術人員是絕對有能力與大企業競爭的。你可以接觸到各種資源,沒有人真正信任大企業,不過他們會信任你!
接下來讓我簡單解釋這個迭代問題。我將在幾分鐘內完成。我剛才所介紹的都在這個圖上了。這個是經典的映射/簡化原理,希望你們都已經知道。MapReduce會輸入數據,通過并行地執行一個映射步驟,多線程多服務器地進行計算,然后執行一個簡化步驟,然后不斷重復。這個做法成本很高,因此Spark的原理是把每個階段的輸出存儲起來,形成緩存,這樣就不需要總是存到磁盤。
這想法聽起來容易,不過要做成一個可以規模化拓展的系統需要很多人大量的工作,所以Spark后有什么大動作?
過去幾個月我們都在進行一個新項目,這項目并不是通過研究系統的學生完成的。我的兩名學生主要負責這項目,之后他們也能研究系統了,他們是Philipp Moritz 和 Robert Nishihara,他們也和我同事Ion Stoica合作。Ion是系統領域的專家,我們把這系統命名為Ray,一月份將會公布beta版本,希望大家可以開始使用。簡單說明一下為什么我們想要做這項目——我們對這項目感興趣主要是因為我們是機器學習的研究員,機器學習中許多問題遠不止于數據,其中非常多問題與研究、優化和線性代數相關,Spark在這些方面非常低效,尤其是在和線性代數方面,MPS比其他系統運行快很多,不過沒有人喜歡使用,在上面非常難編程,它們也不適用于現在通用的并行硬件。這些是我們希望解決的問題,我們希望能夠在單機和集群上運行同樣的代碼 ,這是考慮因素之一。
同樣,我們也不想在分布式上修改代碼,我們希望系統可以支持大量小任務 ,這意味著不同任務間更多的數據共享。因此,我們不再使用左邊的這個經典映射/簡化模型,這個更像是數據流模型,當他們接收到所有需要的信息后 ,任務即可執行。這模式中不存在同步屏障,這非常重要,要實現這想法需要在任務排程上做很多工作,我們在排程上下了很大功夫,這做法明顯有很多優點,如果你嘗試把神經網絡放到Spark上,同步屏障問題會非常讓人頭疼,你只能執行一部分任務 ,然后等所有其他任務執行完畢才可以到下一層。在這個系統上,實際上就是數據流架構在藍色的節點完成后,紅色的節點即可執行,在整個網絡中逐步執行任務,這例子是在Python上完成的。目標是對Python代碼進行非常少的改動就可以轉換為分布式。在這代碼上,每隔一定step size執行運算,返回結果以不同的step size并行運算。這基本上就是機器學習的經典做法。
看這個新的命令array.remote,這指令了系統去利用分布式環境啟動排程器,在后端運行所有的機器學習。我們從系統架構方面看一下,運行中產生了本地對象和全局變量,對應了本地和全局的排程器,以及所有相關因素的關系,這是整個架構的基本原理。
基本上,這是已經存在的機器學習分布式Python版本,這系統已經開發完畢了,在很多標準上遠快于Spark。這就是下一代的大數據處理工具,實驗室的另一個項目與模型服務有關。在很多情況下,我們建立了很大的模型,輸入了海量數據,一切都變得太大后,就難以獲得系統的實時回應,因此,我們需要能夠同時運行大模型,以及快速運行與大模型相關的小模型的系統,我們可以在邊緣上快速對小模型迭代,然后慢慢地把信息轉移回大模型。
某程度上這類似人腦的運作,我們每天產生少量記憶,形成短期記憶,然后轉移到長期記憶里,這個系統可以解決很多這類型的問題,我們需要以簡化的本地模型作出快速決策,然后逐步整合到大模型中。
我快要結束演說了,這個話題就差不多了,我們需要注意一下這個架構 ,這里面有一邊是學習板塊,建立大模型,然后是我們稱為的推理板塊,這版塊可以基于當前較小的時間尺度調整模型。這個話題就這樣吧!
回到主題上,在過去10年,我的工作和發表成果主要和抽象的數學問題相關。如果你對理論問題感興趣,你該感到興奮!這是個充滿新理論問題的領域,非同步、分布式、流式數據等等,都和行為系統相關,大量的理論性問題。你還需要控制統計誤差,對于理論研究員來說這是新問題,我們可以真正地建立系統,獲取數據,嘗試各種處理、實現模型。這是從所未有的合作方式。
再次感謝邀請我到這里來演講!
【本文是51CTO專欄機構大數據文摘的原創譯文,微信公眾號“大數據文摘( id: BigDataDigest)”】