作者序一
杜岳華
近年來,資料科學與人工智慧成為顯學。在深度學習上有重大的突破,包含影像辨識的準確率提升、電腦對局在圍棋領域的進展。這些光芒讓大家將目光投射在資料分析及建模上面。相對於此,傳統科學計算及統計建模相對少人談論,但這些卻是一脈相承的技術演進。
在電腦運算效能的提升及軟體與網路技術的整合及普及,傳統科學計算與資料科學都相當需要依賴數值運算的基礎技術。在近代的數學家們奠定了逼近理論及相關的數值方法,而現今的深度學習模型相當依賴以梯度為基礎的最佳化方法。電腦的演進其實是跟著科學計算一起走的,在電腦被做出來以前,先是微分解析機被實作出來。然而,世界上第一個公認的高階程式語言 Fortran 也是因為數值運算目的被設計出來。
理論科學家們則相當依賴初值問題來解決微分方程的數值方法。數值方法被廣泛應用在物理模擬、統計建模及機器學習上。數值方法的實作則與矩陣運算脫不了關係。多數的數值方法會被寫成矩陣運算的形式,進一步可以依賴運算核心的單指令流多資料流(Single Instruction Multiple Data)模式進行加速。大量資料的運算也會以陣列形式表達,如此在處理大量資料流時則可以進行加速。資料分析也是有這些運算基礎,進而搭配上機器學習或是深度學習模型才能有今日的光彩。
本書的定位是給具備少許 Julia 程式經驗,想往資料科學、機器學習或是科學計算前進的人。本書會以資料的角度引入,介紹基礎的資料分析及統計相關知識。此外,書中會提及一些資料處理會應用到的方法。書中結合了些許玩具資料(toy data)的示範,希望讀者可以透過資料及實作體會資料科學的有趣之處。後半部分則會介紹基礎的科學運算及機器學習應用。最後,書中第十一章會介紹最佳化的方法,第十二章則會介紹使用 CUDA 進行運算的相關套件。
特別感謝一位好朋友提供了本書的編寫建議,融入了些許的知識,讓一些程式操作不再是死板的指令。
作者序二
胡筱薇
在校園裡同學們最常問我的一個問題就是:「老師,我該學哪個程式語言比較好?是 R、是 Julia 還是 Python ?」我的答案是,都好!因為重點不在於選擇,而是當你做出選擇之後的每一個嘗試、學習、堅持、突破與精進,這過程所積累出來的實力,才是你該追求的。為了提供學生更多元的學習場域,引動學習動機,我成立了資料實驗室(Data Lab),並長期與企業合作,透過實際的專案項目培養資料科學人才,同時也定期開設相關課程,鍛鍊同學們的基礎能力,一個因緣巧合,我認識了本書的另一位作者──杜岳華老師,岳華讓我印象非常深刻,是個有想法、有才華、有熱情、有能力,堅持理想並付諸行動的年輕人,有一次他跟我說,希望有更多人認識Julia 的這個語言,更希望台灣在國際Julia 社群中的能見度可以提高!我聽了非常感動,也跟著熱血了起來!於是,我們在資料實驗室中開設了Julia 程式語言的課程,接著就是撰寫本書,讓更多中文使用者可以認識這個資料科學語言中的新星── Julia 。
這個時代的學習和過去很不一樣,有太多的新知識與新技術排山倒海的湧入, 就像這幾年大家常常在談的IoT、Big Data、ML、AI、Blockchain,似乎沒有人能明確又清楚的告訴你那些是什麼?它沒有教科書,也沒有結論,因為這一切都還在發展與演化當中,不過可以肯定的是,倘若我們仍舊以過去的學習態度和方法,要能夠跟上這個時代,掌握這些趨勢,肯定很困難,那我們該如何因應呢?既然確定性的知識愈來愈少,那就保持開放的頭腦與心胸吧!當我們思考世界的角度愈多,你的未來就充滿了無限可能。
最後,我想引用Ratatouille 的經典台詞,並稍做修改來鼓勵各個領域的朋友:「Not everyone can become a great Data scientist, but a great Data scientist can come from anywhere.」
衷心祝福各位讀者!