最近開始學習機器學習方面的東西,發現這篇綜述性的文章被引用和推薦的次數非常之多。樓主英語水平捉急,覺得翻譯成自己熟悉的東西看起來舒服一點。翻譯得很粗糙,也沒有反覆校對。大體意思應該是沒問題的,但具體的專業詞彙我還不是很瞭解,Google也沒有很好的結果,所以出錯的機率一定會相當大。。。
著作權方面的問題我不是很清楚,如果有的話請大家一定告訴我。
原文連結點擊開啟連結
=======================================分割線=======================================
關於AI的機器學習的非常簡短的介紹
這裡總結的觀點全部包括在這些slides裡
智能
智能的概念可以用許多種方法定義。在這裡我們把智能定義為根據某些標準作出正確決策的能力(例如對於動物來說,生存和繁殖)。作出更好的決策需要知識,以某種可操作的形式,也就是說,能夠被用來解釋感測資料並利用這些資訊作出決策。
人工智慧
電腦已經擁有了一些智能,這要感謝所有人類精心製作的程式,這些程式允許它們做我們認為有用的工作(這也是我們所說的作出正確決策的主要意思)。
但是在21世紀初,仍有一些工作,對於人類和動物而言非常簡單,但卻超出了電腦的能力範圍。
許多這類問題都被劃為人工智慧的範圍,包括很多認知和控制任務。
為什麼我們無法編程解決這類問題?我認為這主要是因為即使我們的大腦能夠完成這些工作,我們依舊沒有明確地知道怎樣處理這些工作。
完成這類任務要牽涉到當前隱含的資訊,但我們擁有關於那些任務的資料和範例(例如,觀察一個人類在接到特定請求或者輸入的反應)。
我們怎樣才能讓機器獲得這樣的智能?學習就是關於利用資料和範例建立操作性知識的過程。
機器學習
機器學習的曆史很長,許多教科書都很好地包含了它的主要原則。
在最近的教科書裡我建議:
- Chris Bishop, “Pattern Recognition and Machine Learning”, 2007
- Simon Haykin, “Neural Networks: a Comprehensive Foundation”, 2009 (3rd edition)
- Richard O. Duda, Peter E. Hart and David G. Stork, “Pattern Classification”, 2001 (2nd edition)
這裡我們把注意力集中到跟課程關係最近的概念上
形式化
首先,讓我們形式化學習的最常見的數學架構。我們擁有訓練範例D={z_1,z_2...z_n}
其中z_i 是從未知的過程P(Z)採樣獲得的樣本。 我們還擁有損耗函數(loss function)L ,它的參數是決策函數f和採樣值z,並返回一個實值的度量。我們希望對於一個未知的generating process,能夠讓L(f,z)的期望值最小。
有監督的學習
在有監督的學習中,每組樣點都是一個(輸入,輸出)對:Z=(X,Y) ,同時f將X作為參數。最常見的例子是:
迴歸: Y 是一個實向量,f的輸出跟Y在同一集合中,我們經常將loss function取為平方誤差函數:
分類:Y是一個有限整數(例如,一個symbol(類標號?符號?))對應著一個類的index,我們經常將loss function取為似然機率的負對數(negative conditional log-likelihood,不知道翻譯得對不對),解釋為f_i(x),它估量的是P(Y=i|X) :
這裡有約束:
無監督的學習
在無監督額學習中我們學習的是一個函數f,它描述的是一個未知的分布P(Z). 有時f就直接是P(Z)自身的一個估計(這被稱為密度估計)。在其他很多情況中f試圖刻畫密度的集中情況。聚類演算法(Clustering algorithms)將輸入所在的空間劃分為不同的地區(經常以一個典型樣本或者質心為中心)。 有些聚類演算法建立一些hard partition (例如k-means演算法),其它的則構建一種soft partition (例如一個高斯混合模型Gaussian mixture
model)指定屬於每一個簇的機率。另一種無監督學習演算法創造一種的新的表示方法。 很多深度學習的演算法都屬於此類,主成分分析也是。
Local Generalization(局部泛化?)
絕大多數學習演算法都利用到一條原則來實現generalization :local generalization.這條原則假設如果一個樣本x_i輸入距離另一個樣本x_j很近,那麼他們的輸出f(x_i)和f(x_j)也應該是接近的。這是實現局部插入的基本原則,這個原則十分強大,但它有局限性:如果我們希望外推怎麼辦?或者等價的,如果未知的目標函數具有比訓練樣本多得多的變化怎麼辦?在這樣的情形中localgeneralization是無法工作的。因為我們至少需要跟目標函數中的上升和下降一樣多的樣本才能包括這些變化並依照這個原則來generalize。因為以下的原因,這個結論同所謂的維度災難具有很強的聯絡。當輸入空間的維度很高時,輸出的變化很可能按照輸入緯度的指數變化。例如,設想我們希望在每個輸入變數(輸入向量的每個元素)的10個值之間做出區分,而且我們關心這些n個變數的所有的10^n
個組合。只是用local generalization,我們需要至少觀察這些10^n個 configurations的至少各一個採樣,這樣才能將結論推廣到所有變數。
Distributed versus Local Representation and Non-Local Generalization(不知道怎麼翻譯了。。)
一個簡單的整數的N二進位本地表示是連續的B位元序列,並且,除了第個N位元都是0。一種簡單的整數的二進位分布式表示是一系列使用通常的二進位編碼的log_2(B)個位元。在這個例子中我們看出,分布式表示的效率較本地表示有指數的提高。一般地,對於學習演算法,分布式表示具有在相同自由參數個數的情況下捕獲更多(指數級)變化的潛力。因此分布式表示具有更好的generalization的潛力,因為學習理論指出需要的樣本數量是O(B)的,自由度的有效維數是O(B)的。
另一個對於分布式表示和本地表示的區別的說明 (相應的,本地和非本地的generalization)是關於聚簇clustering和PCA或者RBM的。前者是本地的,而後者是分布式的。使用k-means聚簇演算法我們為每個prototype維護一個參數向量,也就是說,每個由學習者劃分的地區一個。使用PCA演算法,我們通過跟蹤主要變化方向來標誌其分布。現在設想一個簡化的PCA的解釋,在這裡我們最關心的是在每個變化的方向上,資料在該方向上的投影是否超過或低於某一門限。在d個方向上,我們能夠區分2^d個不同的地區。RBM演算法與此類似,它定義d個超平面,並用一個位元來標誌在平面一側或另一側。一個RBM將一個輸入地區同一個標誌位的組合聯絡起來(在神經網路的說法中,這些位元位被稱為隱藏單元)。RBM的參數個數大約等於這些位元位相對輸入維度倍數(times,應該是倍數吧。。。)。再一次我們發現RBM或者PCA(分布式表示)可以表示的地區個數可以按照參數的指數規律增長,而傳統的聚簇演算法(例如,k-means或者高斯混合,都是本地表示)可以表示的地區個數進按照參數個數線性增長。另一種看待角度是,意識到RBM可以按照隱藏單元的組合歸納相應的新地區,即使這裡還沒有樣本被觀測到。這對於聚簇演算法是不可能的(除了在那些周圍地區已經有樣本被觀察到的地區)。