大數據、資料科學、機器學習等一直都是近期非常熱門的詞彙,許多訊息都告訴我們,「資料」在未來只會變得越來越重要,涉入我們生活的程度越來越深,小的有我們上網時看見的廣告,大到防疫、氣候變遷等議題都會有關係。

台灣第一次的資料科學愛好者年會於週末在中央研究院舉行,吸引八百人參與,門票更是在 90 分鐘內就售罄,除了主題演講之外,還搭配舉行了 g0v 的黑客松以及 R 語言的教學課程。

而本次年會的第一場演講,就是台大林智仁教授的「Big-data analytics: challenges and opportunities」:

談到大數據,相信不少人都聽過知名的行為經濟學教授 Dan Ariely 的名言:

6565656  

現在大家都在談大數據,但是真的要對這個主題有一個全面性的了解,並不是一件容易的事。

林教授的演講主題是他個人針對大數據分析的技術,其發展與挑戰的一些看法。

從資料探勘(Data Mining)到大數據(Big Data)

資料探勘是在 90 年代出起興起的名詞,後來經過了十幾二十年的發展,在今日要做資料探勘,無論是方法(methods)還是工具(tools)都已經相當豐富且有完善的整合,但是,要從資料當中去挖掘有用的資訊,並不是那麼容易的事,因為我們對資料、人工智慧等等的了解,還有很長的路要走。

林教授坦言,對他這樣的學校老師來說,前兩項,也就是方法和工具,是他比較熟悉的領域,業界的人對於實際應用應該更有經驗。

何謂大數據?

何謂大數據?跟以前資料探勘的「資料」有和不同?對林教授來說,大數據跟資料探勘之間最明顯的差別可以說就是資料量,用一個簡單的概念來講,「大數據」就是一台機器存放不下的資料量。

兩大差異

林教授進一步說明資料探勘與大數據的重要差別有兩個,一個是比較負面的,另一個則是正面的:

  • 負面:分析大數據的方法還未臻成熟,更不用說整合性的工具。今日我們要再一個分散式的系統上去應用資料探勘或是機器學習的技術,還是相當的不方便。
  • 正面:隨著資料量增加,接近取之不盡用之不竭的情況下,從中提取資訊會變得更加容易。

而林教授想要討論的是第一點差異。

分散式資料分析的好處

可以同時讀取資料。舉例來說,如果要一次讀取硬碟中 TB 等級的資料,速度上會比較慢,但假設這些資料是平均分散在 100 台機器當中,那麼讀取的所需時間就會是 1/100。當然,要讓資料分散在 100 台機器中,準備好讀取,那又是另外一個問題了。

另外一個好處是容錯,資料重複儲存在個別機器中,如果有一台出問題,其他的不會受影響。另一個好處則是工作流程不容易被打斷,但相對的也會變得更複雜、機器之間的溝通與同步會很令人頭疼。

只是我們真的有必要做分散式的資料分析嗎?林教授引用紐約大學教授、主持 Facebook 人工智慧實驗室的 Yann LeCun 在今年出受訪時講的:

I have seen people insisting on using Hadoop for datasets that could easily fit on a flash drive and could easily be processed on a laptop.1

許多在一台機器上很容易的事,在分散式系統上會變得很難很複雜。舉例來說,以前在單一機器上做 subsampling 很容易,但是在分散式的系統反而困難。

挑戰

過去資料探勘的工具在設計之初,是針對單一機器的環境,而非今日的分散式系統。過去,隨時存取資料不是什麼困難的事。林教授將現今大數據分析所面臨的挑戰整理如下:

  • 方法還沒發展完備
  • 沒有方便的工具
  • 系統面的變化很快速
  • 其他各種挑戰

林教授明白的指出今日大數據分析依然是在早期的階段,因此他想要提出的問題就是:

我們的機會是什麼?

要針對大數據分析開發工具,大致上來說有兩條路可以走:一是從過去單一機器上開發工具和方法的脈絡上借鏡,另一個極端則是忘掉原本在單一機器上的東西,從頭開發。林教授說自己相信有個介於兩種方向中間的作法,不過他也說:

其實我不知道這樣做會不會成功,但我們還是要想一下。

林教授告訴我們,像 R 這樣的工具,並不是一夕之間就出現的,而是經過十年、二十年的發展。

我們平常用試算表軟體或是統計軟體做計算時(例如將多個數值加總後平均),很少去關心軟體背後運作的方式,但如果我們要開發工具,就必須去碰這一塊。

林教授在這邊用了一個計算矩陣相乘的一段程式碼做了很清晰的說明:如果我們用 C 語言寫一個三層的 for loop 來處理 3000X3000 的矩陣相乘,在有做最佳化的情況下,大約要花三分 24 秒,但是如果用 MATLAB 呢?就算已經設定成單核模式(也就是比較慢的模式),也只要四秒。

但我們不能因此就說:「哇,這些工具真好用,我再也不要自己寫程式了。」(語畢,哄堂大笑)

林教授指出,現在我們面對大數據,就好像 80 年代自己寫程式(而非用工具)來計算矩陣相乘一樣。他認為,如果要在未來取得分散性的數據分析方面有技術上突破性的進展,那麼必須要同時用上演算法和系統的優勢才行。

所以說,如果你同時精通這兩個領域,你將會是非常搶手的人才。

可惜的是,林教授在教學中發現,學習資料探勘或機器學習的學生們,對於系統都不是很瞭解,事實上在單一機器上也的確不太需要了解。但是這樣的情況到了分散式的數據分析上就完全是另外一回事。

為此,林教授舉了早期電腦產業的發展情形為例,當初產業沒有分的那麼細,產業裡的工作者和研究人員,對於大部分的領域都一定程度的了解。但是今日的電腦科學就像醫學一樣,專業上已經分類分到很細緻的程度,也因此會出現這樣精通兩大領域人才稀少的情形。

現在發展大數據方法跟工具,有點像是我們在寫一組程式,但底下的 OS 跟 compiler 還一直在改。

以 CTR(點擊率)預測為例

關於大數據分析真正的成功應用,林教授認為目前其實沒有夠多的案例。不過他還是以業界常見的點擊率預測舉例。點擊率(Click-through Rate,CTR)就是將點擊數除以曝光(impression),林教授說像這樣的 binary classification(二元分類,因為只有「點擊」與「沒有點擊」),要一直反覆訓練機器(演算法),建立起模型去預測使用者會點擊的廣告,然後送出那樣的廣告,接著再看使用者有沒有點廣告,然後再將這個結果送回去訓練機器,提高使用者點擊廣告的機率。頻繁的調校演算法在 CTR 預測系統裡面很常見,也一定是分散式的。

通用工具(general tool)就在不遠處

一般而言,在分散式的環境下我們會想要減少機器的溝通與資料的存取。過去單一機器的作法 A 比作法 B 好,在分散式的環境下很可能結果會倒過來。例如 batch learning 與 online learning,後者在單一機器的作法可能不如前者,但是在談到大數據分析,結果則相反。另一個例子是同步(synchronous)和異步(asychronous)的演算法,林教授認為說不定後者更適合用於大數據分析。

數據分析只是整個大數據應用的一小部分

在做資料分析時,從最初的 raw data(原始數據)到最終的應用,中間有很多環節,以往在單一機器上都是聚焦在分析上,但是在分散式的環境中,很可能在進行分析之前就會遭遇困難。

他以 Spark 框架的開發為例,就是因為人們了解到 mapreduce 沒辦法支援分散式的環境下的資歷探勘和機器學習。

現今許多大數據的應用會需要針對演算法做特殊設定,但是他相信未來出現通用性的工具是可能的。

開發工具,失敗是有可能的,但我們還是得嘗試。

就像前面提到 Yann LeCun 的說法,其實很多時候我們不一定會需要事事都用上大數據分析。

開源的發展對大數據分析很重要

最後,林教授談到開源社群對大數據發展的重要性。事實上,具有強大競爭力的公司,再開源社群的貢獻度往往也是名列前茅。林教授鼓勵台灣的公司應該積極參與,而且企業又比學校更適合做這件事,因為有在開發實際的產品。他舉例,某公司用開源專案 Y 做 X 產品,但 Y 不夠好,所以投入資源開發 Y,最後整個社群都獲益。

arrow
arrow
    全站熱搜

    Shacho San 發表在 痞客邦 留言(0) 人氣()