最近人工智慧方面最重要的發展之一就是機器學習了。它主要著眼於智慧,而不是傳統計算機程式意義上指定機器做什麼東西,也就是說機器自己可以學習,這樣它就可以直接從經驗(或者資料)中學會如何處理複雜的任務。
即使是很簡單的機器學習演算法也能區分照片上的貓和狗
伴隨著計算機速度的提高和演算法的進步,機器學習的發展也非常迅速。從中衍生的演算法已經對我們的生活造成了深刻的影響,而且有時候比人類做得更好。那麼問題來了,機器學習到底是如何工作的?
從經驗中學習
在一個機器學習系統中,計算機通過自己給自己編程式碼來完成一個任務,它一般是由基於這個任務的大量的資料來訓練的。其中很大一部分涉及識別這些任務中的模式,然後根據這些模式做出決策。舉一個(有點嚇人)的例子,假設你的公司想要招聘一個新員工。你做了廣告,然後有1000個人想來應聘,他們每個人都發了一份簡歷。你需要篩選這些簡歷,但是1000份簡歷也太多了吧,所以你就想訓練一個機器來做這件事。
為了保證這件事有一定的可行性,假設你有以前招聘時收到的簡歷。每一份簡歷都有被錄用或沒有被錄用的記錄。你把這些簡歷的一半用來訓練機器,讓它發現這些簡歷是否被成功錄用的模式。因此,如果你給機器一份簡歷,它就能知道這份簡歷是否可以被錄用。訓練完機器,你用另一半的簡歷來做測試。假設成功率很高,你就會相信機器可以勝任篩選簡歷的工作了。在上述的每一個階段,都沒有人的干預。這樣的一個過程,以現在的計算機的能力是完全可以做到的。
基本要點
為了讓機器學習的過程更加透明化,我們用開發可識別手寫數字的機器的非常具體的例子來考慮模式識別的問題。這樣的機器應該能夠做到:不管一個手寫的數字寫得怎麼樣,它都能識別出來。
即使對人類來說,手寫的數字都能難得像密文一樣
數字識別有兩個階段。首先,我們把影象掃描進機器,然後從數字影象中提取重要的資料資訊。這通常使用主成分分析(PCA)的統計方法,它可以自動提取一個影象的主要特徵,比如高度和寬度,再比如影象中的交叉的點的個數,等等。這個過程與找一個矩陣的特徵值和特徵向量緊密相關,和谷歌用於在網路上搜尋資訊的過程也很像。
第二,我們要訓練機器利用這些提取的資訊來學習辨別數字。完成這個過程的一個很普遍的方法就是神經網路。這個技術基於我們對大腦如何工作的認識。第一步是,創造大量的“神經元”並把它們互相連線。這些神經元可以互相傳送資訊。第二步,讓神經網路去求解大量的結果已知的問題。通過這個過程,它就“學會”了神經元之間應該如何連線,所以它就能成功地識別資料中哪些模式可以產生正確的結果。
這種神經網路的早期例子是稱為感知器的單層系統,它可以模擬單個神經元。 感知器的概念是Frank Rosenblatt在1962年提出的。感知器的典型結構如下所示。
感知器有n個輸入,從X1,X2到Xn,每個輸入都乘以一個權重因子Wi再相加,和為
如果這個結果比某個臨界值C大,就返回1,否則,就返回0。
就是說,當
就返回1,而
就返回0。
在我們的例子中,Xi就是提取的影象的特徵,決策就是 這個數字是3還是4。訓練感知器的過程包括找到合適的權重因子wi和臨界值C使得感知器識別到正確的數字。要做到這一點,需要謹慎使用基於統計的數學優化演算法。
一個例子
舉個例子,設想我們只從影象中提取兩個特徵X1,X2,X1可以是影象中直線的數目,X2是影象中交叉點的數目。每個手寫的數字3和4都有這兩個值,這樣就可以在座標中表示出來。由於數字“3”中沒有直線也沒有交叉的點,所以就可能對應接近座標(0,0)的點。而數字“4”中有三條直線和一個交叉的點,所以它在座標中對應(3,1)附近的點。
這樣一來,感知器中計算的和就是
對一個給定的w1,w2和C,令方程等於0就決定了一條直線l。如果,使用影象來訓練機器,感知器設法找到w1,w2和C的值使得l可以把3和4對應的點全部分開,如下圖所示,這樣它就可以有很大概率可以正確識別一個新的影象中的數字是3還是4。如果存在這樣的一條直線l,這樣的資料就叫做線性可區分。
設想紅色的點來自影象中的數字“3”,藍色的點來自數字“4”。如果演算法使用C=2,X1=X2=1,這樣加權和等於0對應的直線如圖所示。對於藍色的點來說,它對應的加權和大於0,對於紅色的點來說,其對應的加權和小於0,所以演算法總能給出正確的結果。
如果資料點不能被一條直線分開——如果資料不是線性可區分的——你可以在更高的維度上做這件事並希望在更高的維度上它們是線性可區分的。一個非常簡單的例子,你可以把點畫到螢幕以外的地方,畫在三維的空間中。當然了,實際上通常都會使用更復雜的辦法。另外,如果你從影象中提取的特徵不只是兩個,也可以在更高的維度上使用相同的辦法。
感知器的方法在區分貓和狗方面也適用。
這些圖演示了隨著可獲得的資料的增加,演算法如何更新直線的選擇(也就是,常數C和W1,W2)
神經網路和深度學習
簡單的感知器可以被訓練做很多簡單的任務,但很快就達到它的極限了。很明顯,通過將許多感知器耦合在一起可以實現更多,但這種發展必須等待更強大的計算機的出現。 當感知層連線在一起產生神經網路時,取得了重大突破。 這種神經網路的典型結構如下所示。 在這種情況下,輸入組合以觸發第一層感知器。 這些輸出組合起來觸發下一層,最後這些組合起來給出輸出。
層數越多,就可以擁有“更深層次”的網路。 然後通過為上面的每個連線分配權重來訓練這樣的網路。 這個過程有點類似於大腦加強或減弱神經通路的方式。 深度學習描述了訓練這種神經網路的過程。
由於新的數學優化演算法的發展,結合廣泛的(谷歌的DeepMind更廣泛)計算機能力,現在已經可以做到。 在為網路找到合適的權重Wi的過程結束時,你會有一個黑盒子,它可以非常快速地執行並且可以做決策。
不同的方法
現在我們再來關注學習過程的更多細節。對於一個神經網路來說有很多不同型別。
在有監管學習中,由網路的使用者預先提供一組示例輸入和輸出對。然後,學習方法要找到一個神經網路,該網路提供與示例匹配的輸出。將神經網路的輸出與示例的輸出進行比較的常用方法是找出正確輸出和實際輸出之間的均方誤差。然後訓練網路以使該誤差最小化。它的一個非常標準的應用是在統計學中的曲線擬合,但它也同樣適用於手寫識別和其他模式識別問題。
在強化學習中,資料不是由使用者預先給出的,而是由神經網路控制的機器與環境的相互作用及時產生的。在每個時間點,機器對環境執行動作,該動作產生觀察以及該動作的成本。訓練網路使它可以選擇最小化總成本的動作。在許多方面,這個過程類似於人類(尤其是幼兒)的學習方式。
為了學習下象棋,alpha zero 和自己下了700000局
近年來,機器學習的數學演算法取得了很大進展。 卷積神經網路(CNN)是這些方法的一個令人興奮的新的擴充套件,同時它也非常重要。它將影象處理技術與深度神經網路相結合。 它們可用於人臉識別,甚至可用於檢測情緒。 它們現在被用於許多其他應用,包括醫學診斷。
為了學習如何順利下棋,AlphaZero使用了深度卷積神經網路。 這是使用強化方法訓練的,機器與自己進行了700,000場比賽,時間超過24小時。 通用蒙特卡羅樹搜尋(MCTS)演算法用於分配權重。 在學習如何玩將棋和圍棋時,也使用了類似的方法,並且在每種情況下都達到了相同的水平。令人印象深刻!
隨著更快的訓練演算法和越來越多的資料的推動,誕生了更復雜、更深層次的網路,這讓機器學習進展迅猛。 但讓機器去做可能改變生命的決定(例如醫療診斷)是否安全而且符合倫理道德?
文章的最後部分,我們放送乾貨。其實機器學習的優質資源非常多。小編也是翻遍瀏覽器收藏夾,也問同事取了取經把公司以前一起研究的論文筆記整合了一部分資源羅列