AI Insight:放棄幻想,搞 AI 必須過數學關

AI Insight:放棄幻想,搞 AI 必須過數學關

作者 | 子白

從2012年“大數據”概念興起到2016年人工智能大熱,已經四五年時間了,該看的熱鬧看到了,該爆炒的話題炒夠了,該沉澱的也沉下來了。現在越來越多的人已經放下質疑,相信這一屆 AI 確實靠譜,該找找門道了。最近好多關注 AI 的公眾號都發表了文章談數學學習的問題,這就真的上道了。如果你是技術人員,特別是程序員,想成為 AI 工程師,那麼只要你稍微花點時間研究一下 AI 的門道,就會意識到,主要的攔路虎是數學。如果你看到有人說什麼不懂數學也能搞 AI,那你可能要警惕,因為這很可能是一種誤導。

一定要認識到一點,數據科學、機器學習、DT、AI,whatever,不管你叫什麼,它不是 IT 行業中又一項新技術,而是一個新行業。馬雲說 IT 時代結束了,DT 時代開始了,有點標題黨,但大意是對的。

我們要充分認識到,這不是一次 paradigm shift(範式轉換)。遊戲沒變,規則變了,那是 paradigm shift,連遊戲都變了,那就是 game shift 了。比如說,對於商業來說,互聯網是一次 game shift,但對於 IT 行業來說,從企業網 C/S 架構走向互聯網 Web 架構,平臺變了,工具變了,協議變了,模式變了,賺錢的規則也變了,但事情的本質沒變,還是在網絡上構造商業管理和通訊系統。所以面向對象是 paradigm shift,敏捷是 paradigm shift,Web 是 paradigm shift,移動互聯網開發是 paradigm shift。而 AI 不是 paradigm shift,是 game shift。

新行業有新玩法。AI 跟 IT 技術的主要差別是什麼?簡單的說,就是 AI 對數學要求較高,對編程要求較低,而 IT 開發對於編程要求高,特別是對編程經驗要求高,但對數學要求不高。

AI Insight:放棄幻想,搞 AI 必須過數學關

“大學工科數學三板斧”

說一個秘密,全世界的程序員兩千萬,大多數手持大學學歷,外行人以為他們的數學都得要好,但其實大部分人對於大學數學三板斧微積分、線性代數和概率統計的記憶已經基本清零。除了專業從事有關領域的底層技術開發人員,大多數程序員、架構師、軟件工程師、項目經理甚至相當多的 CTO,對於什麼方向導數和梯度、函數項級數的一致收斂、魏爾斯特拉斯定理、拉格朗日乘數法、矩陣特徵值與特徵向量、矩陣二次型、多維隨機變量條件分佈之類的大學數學基本概念,實際已經陌生如聽天書了。這無可指責,因為這些東西在實際產品設計、系統開發和運維當中根本用不著。他們必須將主要精力投入到“廣義計算機語言”的學習當中,適應所謂“熱門驅動開發(Hype Driven-Development)”,包括一門又一門最新最火的編程語言,一個又一個網絡協議,成百上千的 API 用法,各種框架、平臺、數據庫、操作系統和瀏覽器的方言、怪癖甚至陷阱,還有設計模式、架構模式、版本管理、build system、container、DevOps,等等等等,內容實在是太繁雜了,變化實在是太多了,風潮轉換實在是太快了,耗費精力實在是太大了。哪有時間搞沒用的東西?連算法都只是在準備跳槽刷題時才需要認真對待的,數學?一邊涼快去吧。

AI Insight:放棄幻想,搞 AI 必須過數學關

“三板斧之後”

然而搞 AI 就完全是另一回事,關鍵是數學。大學工科數學?那只是一個基礎,想再搞懂 AI 的那些基本的算法和思想,你不但需要把這三板斧基礎打紮實,而且還需要學習矩陣分析和凸優化。這只是一個入門,想要在這個領域有點建樹,你可能還需要在隨機過程、泛函分析、微分流形、數值分析和優化理論等領域進一步深造。想要搞機器人學或自動駕駛?還得研究微分方程、運動學、動力學。

毫不誇張的說,在 AI 學習的入門階段,數學是主要的攻堅對象,任何胸有大志的 AI 學習者都不要幻想繞過數學。

可能正是因為數學是一隻攔路虎,最近我們看到了不少雞湯文章出來安慰說數學不好也可以學 AI。這些文章,大多隻是標題黨,你以為他給你指了一條方便法門,其實打開一看,只不過是舒緩你的畏難情緒,推薦幾本寓教於樂的數學書,給你做做心理按摩,本質上還是一句話:想搞 AI,就得把數學拿下。但是很多人現在看文章只看標題啊,所以就產生了幻想,是不是不學數學也能搞 AI呢?有沒有可能把數學都交給封裝好的框架和程序庫,我只做調用和調試的工作呢?未來會不會達到 AI 工具化、AI 工具傻瓜化的程度呢?

AI 工具化可能性是有的,而且是必然,趨勢很明顯。比如著名的機器學習框架 scikit-learn,把多種機器學習算法包裝成他們所說的“黑盒子”,使用時只需要選擇算法,設置合適的參數進行初始化,然後灌數據訓練模型,得到模型以後就可以進行分析和預測了,大多數複雜性都被包裝在後面。而現在當紅的深度學習,這個趨勢更加明顯。在張重生所著的《深度學習——原理與應用實踐》一書中,作者援引周志華教授的一段話,吐槽當前深度學習現狀說:

“有點幽默,但很樸實,深度學習現在差不多就是民工活,調來調去,刷來刷去。文章發得飛快,貌似熱鬧,但有多少是能沉澱下來的實質真進展、真原理、真算法、真技術,又有多少是換個數據就不靠譜了的矇事撞大運?既缺乏清澈乾淨的內在美感,又不致力於去偽存真、正本清源,只圖熱鬧好看,遲早把 arXiv 變成廢紙堆。”

通過這段吐槽,我們側面瞭解到深度學習這個領域當前的局面,極少人做核心理論研究,一小部分人開發框架和程序庫,大多數人只是把黑盒子拿來刷參數、攢論文。我們從正面的意義上來理解這件事情,這恰恰表明深度學習的工具化做得比較好,初步形成了一個金字塔模型。專家們批評的,只不過是現在很多金字塔底層的“深度學習民工”在利用 AI 的熱潮和外界對這個領域的不瞭解沽名釣譽,導致某些 AI 人士所說的“深度學習泡沫”。批評歸批評,這個人員分佈結構是合理的,AI 工具化是有效的。

所以,是的,機器學習和 AI 領域的軟件工具也會逐漸走向成熟,也會像黑盒子一樣把很多複雜性包裝起來,把很多今天需要較深數學理解才能做到的事情簡化為調參。但是這是否就能讓我們得出結論說,未來的 AI 工程師可以不懂數學呢?

當然不能。首先,數學不過關的人在 AI 這個圈子裡是無法參與交流的,或者說得直白一點,是被人瞧不起的,根本無法被接納成為AI 圈子裡的人。其次,數學不過關而只能調參數的人,實踐當中並不好用。我接觸過幾個 AI 創業企業,他們都瘋狂的缺人,但是對於不懂數學只會使用工具的“人才”,他們卻大門緊閉。什麼原因?溝通效率低,出活慢,遇到問題無法解決,一句話,“不好用”。第三,即便是調參這件事情本身,懂不懂數學也是有很大差別的。因為調參是一個跟自己較勁的過程,不斷地劃分訓練數據集和驗證數據集,調整參數,追求更高的準確率,又要防範過擬合,一遍又一遍,本身就是非常繁瑣和枯燥的工作。如果你數學不過關,對參數的意義和相關關係理解不深,方向感不強,只能半隨機的去刷參數,那麼工作的單調性和煩瑣性還會大大上升,很難堅持到做出好的模型來。

就這三點,決定了不懂數學的“AI框架調參工”不會是一個令人嚮往的工作。我絕不相信一個年輕人滿懷 AI 夢想走進這個行業,會滿足於做一個“以其昏昏使人昭昭”的調參工。

所以,結論已經很清楚,想搞 AI,數學必須過關。一切與這個結論有衝突的說法,都是耍流氓。

當然,請注意我在這裡說的是“數學必須過關”,只要求過關,並不是要求你為了搞 AI 而先要變成一個數學家,那既不現實也不必要。為什麼只要求過關呢?為什麼不是數學越棒越好呢?因為 AI 要在數學上形成重大的突破,可能是十年甚至幾十年一遇的。今天機器學習中有效的數學方法,絕大多數都是幾十年前做出來的成果。因此做 AI 工程,重點是充分理解、熟練掌握和運用這些成熟的數學工具,尊重分工,把數學領域的創新交給數學家和應用數學家。

機器學習學者張志華教授曾經說過:“搞好機器學習,關鍵是數學,但你又不能把機器學習變成搞數學,那樣就漫無邊際了。”數學浩瀚如海,神靈通天,我們還是要敬畏數學之神,不要毫無目標、不計成本的擴大數學的鑽研,而是要把握好度。對於絕大多數 AI 工程師來說,還是應該以機器學習為主導,對於其中涉及的數學知識形成理解,打牢基礎,突出重點,適度拓寬,這就算過關了。

以後根據主攻方向,隨用隨學,急用先學,這樣就可以了。

數學過關以後,還得懂編程語言、系統架構、數據庫、異構平臺上的高性能計算,要成為一個優秀的 AI 工程師,這些都得通。吳恩達就說過,深度學習的前沿是高性能計算。因為數學的進展是可遇而不可求的,而軟硬件的進步是線性的甚至指數的,是一趟快車。你想衝在前沿,得搭上這趟快車。如果你只是數學好,編程和工程化能力不行,所能做的事情就比較有限,需要一個強有力的工程團隊來支持你。實際上,我就知道一些學院派的 AI 人士,他們的數學背景很好,但是編程玩得不溜,下面的學生又不給力,只能封閉在“數學—Matlab—論文” 這個三角里,對他們來說,編程成了一個障礙。

但是對於一個有一定經驗的程序員而言,編程是優勢。前不久,我向一個在國內 AI 界有點名氣的新銳 AI 科學家瞭解情況,他們手上的深度學習項目使用 Python 和 C++ 語言開發,都是基於開源的深度學習框架,但自己的工程師也要做相當程度的調整和改進。那麼他們對於工程師編程語言的掌握程度有多高的要求呢?Python 語言不需要自己設計 class,就更不用提什麼 decorator, metaclass, asyncio 了,C++ 只要求看懂框架代碼當中核心的部分,只有很少的人需要去修改 C++ 代碼。這裡頭真正有點挑戰的,是要熟練掌握 Python 標準庫和一些流行包中的 API 用法,快速完成數值計算、數據清洗、數據可視化等工作,這是需要時間去熟悉和掌握的。但有經驗的人知道,這些可以邊做邊熟悉,不是什麼硬約束。如果你在“城頭變幻大王旗”的開發界混過幾年,轉行搞 AI,你的編程能力絕對是下山猛虎,完全不必擔心。你真正要過的,就是數學關。只要你過了數學這關,後面將數學理解、工具框架、數據資源和應用結合起來形成正向循環,就可以一步一步的攀爬 AI 的高峰了。


分享到:


相關文章: