圖片來源: 

洪政偉攝影

「大資料技術就像青少年時期的性愛一樣:大家都在談論這個議題,沒有人真正知道該怎麼做,而每個人都覺得其他人在做......」,臺灣大學資訊工程學系特聘教授林智仁引用知名美國心理及行為經濟學家Dan Ariely的話。

台灣資料科學愛好者年會在8月30日一早在中央研究院拉開序幕,第一場演講由林智仁為大家帶來「大資料分析的挑戰與機會」,講述了資料探勘與大資料的差異,以及機器學習遇見大資料技術所產生的困境,還有自己在面對這些問題的思路。

首先,林智仁以機器學習的角度定義了什麼是大資料,常見定義大資料有3個V的特性,不只是有多樣化的資料來源(Variety),資料產生的速度很快(Velocity),並且資料量非常大(Volume),但林智仁說,當以機器學習為前提,資料在使用前必定經過一定的預處理程序,因此就機器學習領域而言,他認為大資料就是資料量很大,大到需要多台機器構成分散式系統。

過去的機器學習都是在單一機器上就可以完成,當要在分散式系統上運作,會有一些優點與缺點。林智仁說,第一項優點是,過去要從硬碟讀取TB級的資料是一件很慢且沒有效率的事,但是當有100臺電腦做這件事,資料的讀取時間就會變為百分之一,不過把資料散布在100臺電腦又是另一個議題。第二項優點是,錯誤容忍度增加,當某些資料在複製時,一臺電腦出錯,還是有其他電腦正常運作。第三項優點,使工作流不因資料的讀取而中斷。

而林智仁表示,使用分散式系統的缺點理所當然使架構更加複雜,而且會有機器間溝通與同步的問題。由於機器分析的發明者,起初的設定便是在單一機器的環境下,因此沒有考慮過運算的資料讀取和中間產物的溝通。例如Least-square regression就難以在分散式環境中運算。

因此整體來說,在分散式環境的機器學習面臨的問題是,目前沒有成熟的方法以及工具,在系統上也面臨快速的改變。

林智仁在這之中看到機會,認為這是這領域的初期階段,每個人都有機會改進些什麼,因此可行的方法有兩種,其一是平行化現行的演算法,其二是在特定的分散式環境中,設計一些新的演算法。

分而治之(Divide and Conquer)或許是可行的思路之一,林智仁舉了矩陣運算的例子,他曾經自己寫程式用for迴圈暴力法計算3000乘3000的矩陣,從開始到計算出結果耗時3分鐘24秒,但是當他用Matlab計算同樣算式時,僅需4秒鐘。林智仁說,差異就在Matlab呼叫了BLAS演算法,這個演算法在計算矩陣時,會將大矩陣先拆分成小矩陣,小矩陣運算會使記憶體的Page faults大大降低,進而提升運算速度。

林智仁笑著說:「這個例子當然不是告訴我們以後都不要自己寫程式,要去用Matlab」,而是要想辦法改善方法,因為矩陣運算耗時3分半鐘的例子,很像是目前機器學習面臨大資料技術的樣子。

這之中需要很多的技能以及探索,包括他們也用了記憶體群集運算平台Spark和Scala做了一個Classifier,發現Spark中,用mapPartition比mpa快,Scala裡的for迴圈比while迴圈慢得多。

目前尚未有夠多的成功案例,林智仁說下的資料,比較常見的問題是增加點擊率(Click Through Rate,CTR),許多公司都用分散式的分類架構處理點擊率的問題,點擊率的算法間單來說就是點擊數在曝光數中的比例。林智仁說,這樣的系統設計,通常期望在分散式的環境下,有最少的資料存取與溝通,最好可以即時處理,不過不需要追求資料一定要即時同步,或許非同步的解法會更好。

林智仁表示,很多時候機器學習是不需要使用到大資料技術的,並非資料量很大就需要大資料技術,要看任務是大資料小規模分析還是大資料要做深度分析,以高鐵訂票紀錄為例,就搜尋單筆訂票記錄,是從很大的資料量中,撈出一筆資料,那就是不需要太過複雜的處理,不過如果是想從所有訂票紀錄中找出某項資訊或關聯,那或許才需要考慮大資料技術。

 

林智仁演講投影片 

 

熱門新聞

Advertisement