1. 程式人生 > >AI大行其道,你準備好了嗎?—謹送給徘徊於轉行AI的程式設計師

AI大行其道,你準備好了嗎?—謹送給徘徊於轉行AI的程式設計師

前言

  近年來,隨著 Google 的 AlphaGo 打敗韓國圍棋棋手李世乭之後,機器學習尤其是深度學習的熱潮席捲了整個IT界。所有的網際網路公司,尤其是 Google 微軟,百度,騰訊等巨頭,無不在佈局人工智慧技術和市場。百度,騰訊,阿里巴巴,京東,等網際網路巨頭甚至都在美國矽谷大肆高薪挖掘人工智慧人才。現在在北京,只要是機器學習演算法崗位,少則月薪 20k,甚至100k 以上……

  不錯,新時代時代來了,我們從網際網路走向移動網際網路,現在又從移動網際網路走向人工智慧時代。業內有人稱這一次的人工智慧爆發是網際網路3.0時代的開啟。所以現在搞IT開發的工程師的不懂機器學習,就相當於低階程式設計師。趕緊從基礎學起,入門機器學習,走進人工智慧的大門……

這裡寫圖片描述

1、人工智慧的三起三落

  20世紀50-70年代,人工智慧提出後,力圖模擬人類智慧,但是由於過分簡單的演算法、匱乏的難以應對不確定環境的理論,以及計算能力的限制,逐漸冷卻。
  
  20世紀80年代,人工智慧的關鍵應用——專家系統得以發展,但是資料較少,難以捕捉專家的隱性知識,建造和維護大型系統的複雜性和成本也使得人工智慧漸漸不被主流電腦科學所重視。
  
  進入20世紀90年代,神經網路、遺傳演算法等科技“進化”出許多解決問題的最佳方案,於是21世紀前10年,復興人工智慧研究程序的各種要素,例如摩爾定律、大資料、雲端計算和新演算法等,推動人工智慧在20世界20年代進入快速增長時期。預計未來十年,會在一些難以逾越的困惑中迎來奇點時代的爆發式增長。

2、新浪潮為什麼會崛起

  人工智慧(AI)問世之初曾經狂妄自大、令人失望,它如何突然變成當今最熱門的技術領域?這個詞語首次出現在1956年的一份研究計劃書中。該計劃書寫道:“只要精心挑選一群科學家,讓他們一起研究一個夏天,就可以取得重大進展,使機器能夠解決目前只有人類才能解決的那些問題。”至少可以說,這種看法過於樂觀。儘管偶有進步,但AI在人們心目中成為了言過其實的代名詞,以至於研究人員基本上避免使用這個詞語,寧願用“專家系統”或者“神經網路”代替。“AI”的平反和當前的熱潮可追溯到2012年的ImageNet Challenge線上競賽。

  ImageNet是一個線上資料庫,包含數百萬張圖片,全部由人工標記。每年一度的ImageNet Challenge競賽旨在鼓勵該領域的研究人員比拼和衡量他們在計算機自動識別和標記影象方面的進展。他們的系統首先使用一組被正確標記的影象進行訓練,然後接受挑戰,標記之前從未見過的測試影象。在隨後的研討會上,獲勝者分享和討論他們的技術。2010年,獲勝的那個系統標記影象的準確率為72%(人類平均為95%)。2012年,多倫多大學教授傑夫·辛頓(Geoff Hinton)領導的一支團隊憑藉一項名為“深度學習”的新技術大幅提高了準確率,達到85%。後來在2015年的ImageNet Challenge競賽中,這項技術使準確率進一步提升至96%,首次超越人類。

這裡寫圖片描述

  不錯,這一切都歸功於一個概念:“ 深度學習(Deep Learning) ”。雖然2016年之前,深度學習技術已經火了起來,但是真正大爆發的事件卻是2016年Google在韓國首爾舉行的人工智慧機器人AlphaGo與圍棋九段選手李世石之間的人機五翻棋大戰,最終人類最強選手輸給了機器人。曾幾時何,人們認為圍棋是人類棋牌類遊戲的最後的尊嚴陣地,就這樣在人工智慧輕鬆地攻陷了人類智力的最後一塊陣地!這件事震驚了所有人。從這以後,全球學術界和工業界都躁動了,巨頭們都在加緊佈局人工智慧:Google挖來了神經網路演算法的奠基人、深度學習之父 Geoffrey Hinton;Facebook則挖到了Hinton的學生,卷積神經網路(CNN)的奠基人Yann LeCun;然而就在不到一年的時間,微軟也是說動了一直保持中立留在學術界的深度學習領域三大牛的最後一位Yoshua Bengio。當然,國內的網際網路巨頭,百度、阿里、騰訊、京東、滴滴、美團等也都在佈局AI。其中百度更是被認為在AI上已經 All In 了。

這裡寫圖片描述

深度神經網路(DNN)

3、機器學習是你必經之路

  入門AI,機器學習是必須要學習的,可以這麼說:機器學習是人工智慧的基石和精髓。只有學好了機器學習演算法原理和思想,你才算真正的入門人工智慧。但是,對於非專業的半路出家的你們該如何入門?這個問題其實很難回答,因為每個人的目標不一樣,技術基礎和數學基礎也都不一樣,所以因人而異。但是通常來說,學習機器學習演算法,需要的必備知識還是可以羅列的。

3.1 機器學習必備基礎

這裡寫圖片描述
機器學習的學習過程

  對於上圖,之所以最左邊寫了『數學基礎』 『經典演算法學習』 『程式設計技術』 三個並行的部分,是因為機器學習是一個將數學、演算法理論和工程實踐緊密結合的領域,需要紮實的理論基礎幫助引導資料分析與模型調優,同時也需要精湛的工程開發能力去高效化地訓練和部署模型和服務。

  在網際網路領域從事機器學習的人基本上屬於以下兩種背景:其中絕大部分是程式設計師出身,這類童鞋工程經驗相對會多一些;另一部分是學數學統計領域的,這部分童鞋理論基礎相對紮實一些。因此對比上圖,這二類童鞋入門機器學習,所欠缺和需要加強的部分是不一樣的。

3.1.1 關於數學

   曾經有無數的滿懷激情,誓要在機器學習領域有一番作為的同學,在看到公式的一刻突然就覺得自己狗帶了。是的,機器學習之所以門檻高並且顯得高大上的主要原因就是數學。每一個演算法,要在訓練集上最大程度擬合同時又保證泛化能力,需要不斷分析結果和資料,調優引數,這需要我們對資料分佈和模型底層的數學原理有一定的理解。所幸的是如果只是想合理應用機器學習,而不是做相關方向高精尖的研究,所需要的數學知識讀完本科的理工科童鞋還是能很容易的把這些數學知識學明白的。

   基本所有常見機器學習演算法需要的數學基礎,都集中在微積分、線性代數和概率與統計當中。下面我們先過一過知識重點,文章的後部分會介紹一些幫助學習和鞏固這些知識的資料。

  • 微積分

       微分的計算及其幾何、物理含義,是機器學習中大多數演算法的求解過程的核心。比如演算法中運用到梯度下降法、牛頓法等。如果對其幾何意義有充分的理解,就能理解“梯度下降是用平面來逼近區域性,牛頓法是用曲面逼近區域性”,能夠更好地理解運用這樣的方法。

      凸優化和條件最優化的相關知識在演算法中的應用隨處可見,如果能有系統的學習將使得你對演算法的認識達到一個新高度。

這裡寫圖片描述
梯度下降法示意圖
  • 線性代數

       大多數機器學習的演算法要應用起來,依賴於高效的計算,這種場景下,程式設計師童鞋們習慣的多層for迴圈通常就行不通了,而大多數的迴圈操作可轉化成矩陣之間的乘法運算,這就和線性代數有莫大的關係了。向量的內積運算更是隨處可見。矩陣乘法與分解在機器學習的主成分分析(PCA)和奇異值分解(SVD) 等部分呈現刷屏狀地出現。
      

    enter image description here

    奇異值分解過程示意圖

       在機器學習領域,有相當多的應用與奇異值分解都有非常緊密的聯絡,比如機器學習中常做feature reduction的PCA,做資料壓縮(以影象壓縮為代表)的演算法,還有做搜尋引擎語義層次檢索的LSI(Latent Semantic Indexing)
  • 概率與統計

       從廣義來說,機器學習在做的很多事情,和統計層面資料分析和發掘隱藏的模式,是非常類似的。以至於傳統的機器學習很大一部分被稱作統計學習理論,這充分說明了統計學在機器學習領域的重要性。

      極大似然思想、貝葉斯模型是理論基礎,樸素貝葉斯(NaiveBayes)、語言模型(Ngram)、隱馬爾科夫(HMM)、隱變數混合概率模型是他們的高階形態。常見分佈如高斯分佈是混合高斯模型(GMM)等的基礎。

enter image description here

樸素貝葉斯演算法的基本原理

3.1.2 經典演算法的學習

  機器學習中有很多的經典演算法:感知機KNN樸素貝葉斯K-MeansSVMAdaBoostEM決策樹隨機森林GDBTHMM……

  演算法這麼多,那麼對於初學者應該怎麼學習呢?我的答案是:分門別類很重要。基本上,對機器學習演算法的分類普遍的觀點是分為三大類:有監督學習無監督學習強化學習

  • 有監督學習

      有監督學習是指進行訓練的資料包含兩部分資訊:特徵向量 + 類別標籤。也就是說,他們在訓練的時候每一個數據向量所屬的類別是事先知道的。在設計學習演算法的時候,學習調整引數的過程會根據類標進行調整,類似於學習的過程中被監督了一樣,而不是漫無目標地去學習,故此得名。下圖中,不同顏色的點代表不同的類別,直線就是我們學習出來的分介面(也叫學習器分類器)。

這裡寫圖片描述

典型的有監督學習
  • 無監督學習

      相對於有監督而言,無監督方法的訓練資料沒有類標,只有特徵向量。甚至很多時候我們都不知道總共的類別有多少個。因此,無監督學習就不叫做分類,而往往叫做 聚類。就是採用一定的演算法,把特徵性質相近的樣本聚在一起成為一類。

      K-Means演算法就是一個無監督學習演算法,在它執行前資料是每有類標的,執行過程中才會有類標,但是此時類標不固定,只有當聚類完成後每個樣本的類標才能固定。如下圖所示就是無監督演算法的執行過程。

這裡寫圖片描述
K-Means演算法聚類過程
  • 強化學習

      所謂強化學習就是智慧系統從環境到行為對映的學習,以使獎勵訊號(強化訊號)函式值最大,強化學習不同於連線主義學習中的監督學習,主要表現在教師訊號上,強化學習中由環境提供的強化訊號是對產生動作的好壞作一種評價(通常為標量訊號),而不是告訴強化學習系統RLS(reinforcement learning system)如何去產生正確的動作。由於外部環境提供的資訊很少,RLS必須靠自身的經歷進行學習。通過這種方式,RLS在行動-評價的環境中獲得知識,改進行動方案以適應環境。

      本文是一個教你入門的方法,只是帶你領略瞭解機器學習的大致框架。不會介紹具體的演算法的詳細原理與過程,所以想要深入瞭解可以檢視相關書籍或者文獻。對於具體的演算法屬於哪一類,並且為什麼這麼劃分,請讀者認真學習相關的機器學習教程。

3.1.3 程式設計技術

  對於程式設計技術學習和選擇,無非就是 程式語言開發環境。我個人的建議是 Python + PyCharm。原因很簡單,python簡單易學,不至於讓我們把太多的時間花在語言的學習上(PS:學習機器學習的重點在於各個機器學習演算法理論的學習和掌握)。並且Jetbrains公司開發的Python整合開發環境PyCharm也是非常的簡單易用。

這裡寫圖片描述

Python與PyCharm

4、你是否真的準備好了?

  說完了機器學習的入門過程,我得給大家潑點冷水。雖然說目前AI真的很火熱,就在剛剛,我寫累了休息看新聞的時候就有新聞推送給我:商湯科技B輪融資4.5億美元。這場革命是機遇,但是它真的適合你嗎?我可以很肯定的說,並不是所有人都適合轉行AI。
  
下面是的總結,想轉行的人可以自我對照:

  1. 如果你天生感覺學習數學很吃力,並且程式碼能力很一般的人。我可以很負責人的告訴你,轉行AI,學習機器學習演算法將會是你人生的災難。對於這類 猿友 你一定不能轉行AI;

  2. 如果你數學一般,但是程式設計能力非常好,你曾經有著用程式碼改變世界的雄心。對於這一類 猿友 ,我覺得你轉行也行,但是你一定要走應用化的AI道路。因為數學是你的天花板,你註定成不了 Hinton 那樣的學術大牛;

  3. 如果你數學很好,但是程式設計薄弱。恭喜你,你具備了轉行AI的先天優勢。對於這類 猿友,我覺得你可以轉行AI,但是你得努力把程式設計水平提上來。

  4. 如果你數學很牛,曾經與菲爾茲獎擦肩而過,曾經給Apache頂級專案貢獻N萬行核心程式碼。恭喜你,AI領域需要的就是你,你就是未來的Hinton吳恩達……

- - -AI大行其道,你準備好了嗎?



機器學習、深度學習、資料探勘、人工智慧 感興趣的小夥伴請關注公眾號:燕哥帶你學演算法!點選連結:燕哥帶你學演算法公眾號團隊簡介

這裡寫圖片描述

參考文獻:

  1. 李航. 統計學習方法[M]. 清華大學出版社, 2012.
  2. 周志華. 機器學習 : = Machine learning[M]. 清華大學出版社, 2016.