當前位置:
首頁 > 最新 > 人工智慧——機器學習(一)

人工智慧——機器學習(一)

感謝眾讀者的關注與支持,距上投筆,業已近月。因近來加班較頻,筆者發表延遲,敬請讀者見諒。

另者,據累來之反饋,筆者亦發現,C 語言的話題並不引人入勝。業既如斯,和璧有瑕。筆者原所規劃之C語言體系,若讀者無歡,筆者必令其崩殂。

目下,因谷歌AlphaGo的卓越表現,令人工智慧(英文縮寫AI)頃刻間立於浪潮之巔,尤以神經網路為甚。筆者因時際會,順而變更公眾號主題。基於筆者所學,且為讀者展現人工智慧的本質,旨在令更多的人了解人工智慧,亦引導讀者思考人工智慧的數學原理(本文標題頁面下方的摘要已給出了提示)。

何謂人工智慧?

當今世界紛繁如斯,眾人早已淹沒於冗雜的信息之中,致使令是非的判斷亦變得如此艱難。對於筆者此刻論述的話題,讀者亦必多有耳聞,加之科幻電影的錯誤引導。可能讀者所認知的人工智慧,與當今真實的人工智慧,即相去甚遠,甚至天壤之別。

當今的人工智慧基本可以分為兩類,基於規則的系統和機器學習,兩者均可再細分。基於規則的系統即是執行由人工設計的演算法代替人類完成一些特定的任務,典型的例子即是各類普通的棋類AI(AlphaGo類型的除外)和手寫輸入法等,棋類AI如中國象棋、五子棋和黑白棋等,其多數AI演算法是基於博弈樹的演算法,只是其剪枝和評估方法有些區別,均是根據當前棋局,通過一系列的搜索和決策,給出當前的最佳走法。手寫輸入法是通過特徵提取,一般是記錄軌跡的方向,然後通過特定的模式識別演算法進行匹配。

機器學習是人工智慧的另一個分支,其又有很多分類方法,不一而足。神經網路是當前最受關注的技術,其屬於機器學習中的深度學習,AlphaGo的核心演算法即是深度學習。

人工智慧的任務在於幫助人類決解一些傳統演算法難以解決的問題,多數為處理和分類大量非結構化數據,儘管很多任務在人類看來是如此簡單,諸如人臉識別,手寫文字識別,語音識別和情感分析等等,但傳統的計算機演算法則非常難以實現,甚至根本不可能。人工智慧在該領域則有優於傳統演算法的效果,其中即又是機器學習演算法廣收良效。機器學習的演算法主要有分類演算法、回歸演算法、聚類演算法和推薦演算法等,解決的問題亦主要是分類、回歸和聚類等問題。

人工智慧許多早期的成功發生在相對樸素且形式化的環境中,例如,IBM的深藍(Deep Blue)國際象棋系統在1997年擊敗了世界冠軍Garry Kasparov。顯然國際象棋是一個非常簡單的領域,因為它僅含有64個位置並只能以嚴格限制的方式移動32個棋子。國際象棋完全可以由一個非常簡短的、完全形式化的規則列表來描述,如筆者上述的博弈樹演算法。

雖然計算機早已打敗人類頂尖的國際象棋選手,然而直到最近計算機才在識別圖形對象或語音任務中達到人類平均水平。真實世界中的事物具有強烈的主觀性,因此很難通過結構化的方式表達清楚。所以人工智慧的其中一個關鍵挑戰就是如何將這些非結構化的信息傳達給計算機。

具體來說,對於圖像識別類的機器學習,通常的任務是需要在一張特定的圖片中識別是否存在某一元素,或者識別該圖片屬於哪個類別。例如在一張照片中識別是否存在某個人,或者識別手寫文字等。

概括論述。完成上述任務,首先需要收集大量的圖片樣本,並手動將樣本加上標籤,標籤即是說明該圖片是否存在待識別的對象,或者該圖片顯示的是哪個手寫文字。然後將圖片表示為結構化數據,通常是張量。這裡筆者解釋一下,張量是一個數學概念,零階張量即是標量,一階張量則是向量,二階張量為矩陣,以此類推。一張彩色圖片是三階張量,除了二階的像素點矩陣外,還有一階色彩通道值。將圖片表示為結構化數據後,輸入特定的機器學習數學模型,例如支持向量機或者神經網路等等,該模型由具體的演算法和極多的參數構成,計算之前需要將參數初始化,這可以隨機設置或者按特定的策略設置。初始化完成後即可將經結構化表示的圖像數據輸入該機器學習模型,經該模型計算後會輸出一個結果,將該結果與對應該圖片的標籤進行比對,通常這個結果都是不正確的,這時需要一個誤差函數或者稱代價函數來描述結果與標籤的誤差程度,根據誤差情況來調整模型的參數。不斷輸入數據重複上述過程修正模型參數,以此將誤差函數逐漸降低到非常小的程度。是為機器學習。利用樣本數據修正模型參數的過程即為機器學習的訓練過程,將訓練好的模型用於識別未知樣本,通常都有優異的表現。

總而言之,機器學習本質上屬於應用統計學,專註於如何用計算機統計地估計複雜函數。人工智慧不是飄懸於頭頂的空中樓閣,而是立足於腳下的技術。誠然可以從哲學層次來欣賞科學與技術,但過度地從哲學層面來研究科學問題只會導致一些空洞的概念。諸如科幻電影中關於人工智慧與人類的倫理問題,甚至人工智慧控制人類等等,均是杞人憂天。讀者可以實際運行一下筆者下述的機器學習演算法,如此必然受益良多,亦會更加深刻地理解筆者所言。

略述,筆者最初關於人工智慧的一些啟蒙性思想,來源於筆者的吉他手室友,其此刻仍在名校繼續深造,在此致予誠摯問候,別來無恙!

支持向量機

如前所述,筆者將為眾讀者提供一個簡單的機器學習常式以便真實的接觸人工智慧。筆者需要說明的是,此刻的深度學習已經優於與之競爭的其他機器學習技術以及手工設計規則的AI系統。但限於文章篇幅,筆者首先提供一個支持向量機(英文縮寫SVM)的機器學習演算法,用於完成識別手寫數字的任務。至於深度神經網路演算法,筆者承諾後續提供。同樣限於文章篇幅,關於支持向量機的數學原理,筆者無法涉及。當然,如果讀者迫切需要,筆者可以考慮後續文章逐漸論述。

支持向量機的基本原理是先將輸入的數據結構化表示為N維向量,然後將N維向量映射到N+1維的空間中,再通過特定演算法生成一個N維超平面將數據分為兩份,如此即完成了數據分類。如下圖:

筆者的常式使用0~9的手寫數字圖片作為輸入數據,每個數字四張圖片,共四十張訓練圖,另有0~9各一張的驗證圖片。大小均為40*40的RGB三通道圖片。由於數據較少,所以筆者沒有使用MNIST數據,全部由筆者使用PhotoShop繪製。也因為數據較少,所以筆者驗證該支持向量機的正確率高達 100% 。

筆者的源代碼和所有訓練及驗證圖片均發佈於GitHub,地址為https://github.com/USST-LvXuDong/SVM,讀者可以自由下載或克隆,下載方法筆者在《序》中已經論述,讀者可以查閱公眾號歷史文章。

為順利運行筆者的常式,讀者需要安裝和配置Python開發環境。建議版本為32位Python2.7,以及NumPy和MLPY庫,建議讀者使用Anaconda或WinPython管理開發環境。另外由於筆者使用OpenCV進行圖像處理,所以還需安裝OpenCV-Python庫。

常式運行結果如下:

下期預告:深度神經網路。

敬請期待!


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 機器學習 的精彩文章:

模式識別和機器學習、數據挖掘之前的區別與聯繫

TAG:機器學習 |