張澤玲
不可或缺的算法
要想弄明白機器學習,我們必須得了解計算機科學里一個重要的概念:算法。什么是算法呢?舉個“栗子”,如果我們要算自然數1到100的和,既可以1+2+3+……+100 這樣一步步計算,也可以像數學家高斯小時候那樣,機智地用(1+100)x 50來計算。對于同一個數學計算問題,不同的計算方法就可以稱之為一種“算法”。計算機科學中,科學家們經常要考慮,對于某個問題用哪種算法又快又準。對某些問題,如果現有的算法中沒有高效的算法,計算機科學家們還需要為該類問題設計新的算法。聽到這里,可能你會覺得有點疑惑:關于算法的研究感覺更像是數學研究啊?沒錯,你的感覺是對的,深厚的數學功底確實有利于算法研究,比如計算機科學的兩位祖師爺阿蘭·圖靈和馮·諾依曼,他們也都是厲害的數學家,所以算法研究本身確實也可以歸類為應用數學。有了對算法的基本概念,我們就可以說機器學習其實是一類算法的統稱。
機器學習的三大分支
由于訓練方法和應用領域的不同,機器學習主要有三個分支,分別是監督學習、無監督學習和強化學習。它們各不相同,依靠著各自的特點在人工智能研究領域中大顯身手。
第一分支:監督學習(Supervised Learning)
所謂的監督學習,其實就像老師沒講知識點,先給我們留作業題讓我們自己學著做,然后再出個測試看我們學習的效果。這個過程中,我們會給程序一個數據集,稱之為訓練集,其中一部分稱為例子,相當于習題;一部分稱為目標,相當于答案。然后設定一個函數模型,讓程序不斷把訓練集的例子代入函數模型,算答案,對答案。算的答案不對,程序就去調整這個函數模型里的某些參數,再重復之前的過程,直到能得出較高的正確率。 接著再給程序一個測試集,相當于考試。如果程序對測試集里的例子算出的答案正確率也比較高,表明訓練成功。在監督學習的訓練過程中,用到了許多數學里的回歸近似方法。當然,具體應用中的數學模型并不只是回歸這樣簡單,還包括一些方法來避免訓練集本身帶來的偏差,就好像老師給你的習題有答案是錯的,這些方法會避免錯誤答案干擾AI的訓練。在人工智能中,監督學習主要被應用于快速高效地教受AI現有的知識。例如在2016年3月打敗圍棋世界冠軍的著名AI,AlphaGo, 就是利用監督學習來“記憶理解”上千萬盤的人類對弈棋譜。
第二分支:無監督學習(Unsupervised Learning)
無監督學習說起來比監督學習更難一點,因為這個過程非常像老師沒講知識點就給我們一堆沒有答案的習題,然后讓我們自己做,看我們能不能從中學到什么。再舉個“栗子”,假設我們還不知道貓、老虎、獅子、豹子這幾個動物同屬于“貓科”,狼、狐貍、狗屬于犬科,但是經過觀察,我們發現前種動物在外形上都跟貓比較相似,后幾種都跟狗比較相似,所以我們可以猜測它們分別屬于兩個分類。這個過程中并沒有什么人來“監督”指導我們學習,我們自己就得出了這兩種分類。而計算機程序也有類似的算法實現這個過程,我們稱之為“聚類分析”。 無監督學習還有另一類任務是尋找所給數據例子之間的關系,比如說,根據一個人的購物記錄,算出他買了牛奶和黃油以后有多大的可能還會買面包,得出了這個概率以后,下一次這個人買了牛奶和黃油,程序就可以預測這個人會不會買面包。從廣義上來講,無監督學習在AI應用中的內容并不僅限于此,比如說,目前的無監督學習都需要讓程序從比較大量的數據里學習得到規律,我們希望AI像人一樣只通過很少的例子得出可靠的結論。但是由于我們本身對人類學習思維活動的認知還非常有限,計算機科學家在尋找新的算法和方法模擬人類“無監督學習”過程中依舊困難重重。
第三分支:強化學習(Reinforcement Learning)
強化學習,有點像平時老師讓我們用學到的知識去解決某些答案并不確定的復雜問題。比如說,我們雖然下棋前就熟知了五子棋的規則,也知道一些基本的下棋策略,但是在下五子棋的過程中,我們每下一步之前,還是需要猜測一下對手會怎么走,自己下一步如何走,來評估下這一步的優劣。我們下棋這個過程就是一個強化學習的過程。同時我們也有這樣的體驗:下棋盤數多了,之后再下棋的速度會變快,錯誤也會變少。讓我們在 AlphaGo上具體感受一下:AlphaGo利用監督學習參照人類的走法大致學會了預測下一步,但是缺乏實戰經驗,于是計算機科學家讓兩個非監督學習下建立的AlphaGo互相下棋并不斷調整,看哪邊下贏了就保留勝方的模式和參數,這樣下過3000萬盤后,AlphaGo便通過“左右互搏”提高了“實戰能力”。強化學習這一方法背后的數學原理,與監督/非監督學習略有差異。監督/非監督學習更多地應用了統計學,而強化學習更多地結合了離散數學、隨機過程這些數學方法。在強化學習領域,依然還有很多未知的方法等待我們發現。