關(guān)于機器學習的前世今生和怎么用機器學習的方法去解決問題
既然說機器學習,就從什么機器學習開始,相對而言,機器學習是一個比較泛的概念
初看的話,會覺得機器學習和人工智能,數(shù)據(jù)挖掘講的東西很像,實際他們之間的關(guān)系可以概括為:
機器學習是人工智能的一個子方向
機器學習是數(shù)據(jù)挖掘的一種實現(xiàn)方式
舉個簡單的例子,給一些蘋果和香蕉,人會通過特征的判斷做區(qū)分,并且記憶這些特征,下次來了一個新的蘋果或者香蕉的時候,就可以判斷是香蕉還是蘋果了
作為任意一個算法或者說用程序執(zhí)行的數(shù)學問題,總需要一些輸入,一些輸出
對于機器學習而言,輸入就是特征所構(gòu)成向量的向量,或者說是一個矩陣
如果只有一個特征,輸入就是一個向量了,當然,向量是一個弱化的矩陣概念,統(tǒng)一稱作矩陣
• 目前機器學習的核心技術(shù)是基于矩陣的優(yōu)化技術(shù)
輸入:矩陣 – 待學習的信息
輸出:模型 – 總結(jié)出的規(guī)則
因此,目前主流的機器學習技術(shù)就可以形式化為
•輸入:特征矩陣 X、標注向量 y
X 是特征矩陣,不包括“樣本名稱”和“樣本 標注”
y 是標注向量,即“樣本標注”那列
•輸出:模型向量 w
•期望:X·w 盡可能接近 y
多種優(yōu)化算法可以解 w,區(qū)別在于如何定義 “盡可能接近”
舉個例子來說,要計算廣告的CTR
這個例子中
目標是要根據(jù)已知的auc特征,猜測這個目標廣告是否會被點擊
例子中特征只有兩個,query關(guān)鍵詞和“是否飄紅”,判斷結(jié)果是是否點擊
好了,現(xiàn)在問題和輸入輸出都有了,具體解決這個問題,就可以選用相關(guān)的算法了
前面定義里面有這么一個隱含的關(guān)鍵點:X w 盡可能接近 y
如何定義這個“接近”,思路不同,算法就不同
比如對于LR (LogisTIc Regression)和SVM(Support Vector Machine)是不同的,作為樣例,可以按照下圖理解
數(shù)學形式表示,就是
具體算法細節(jié)不是這里討論的重點,在這兩個算法中,“接近”的定義不同
學術(shù)的講,就是“優(yōu)化目標不同”
無論是否相同,我們都至少可以選一個優(yōu)化目標了
有了優(yōu)化目標,下面要做的就是如何求解這個優(yōu)化目標了
一般現(xiàn)在用的思路主要是
L-BFGS,CDN,SGD這一些
把上面這一些要素放在一起,就有了完整的一個機器學習問題
Part 2: 如果你要用機器學習的方法去解決問題
就需要注意三個方面的優(yōu)化了:
算法,數(shù)據(jù),特征
我們下面分開來說
算法,就是優(yōu)化目標 + 優(yōu)化算法
從優(yōu)化目標的角度,工業(yè)界往往沒有那個資源或者實力去研究新的算法,大多是在使用已有算法或者在已有算法的基礎(chǔ)上做擴展
從優(yōu)化算法的角度,主要是三點:
更小的計算代價
更快的收斂
更好的并行
這三點也比較好理解,對于一個工程問題,計算代價小,機器就可以做別的事情,更快的收斂,就可以更好的把結(jié)果投入使用,更好的并行,就可以用現(xiàn)有的大數(shù)據(jù)框架解決問題
訓練數(shù)據(jù),就是盡可能和實際同分布的數(shù)據(jù) + 盡可能充分的數(shù)據(jù)
機器學習算法中,由于期望的往往是總的誤差最小,所以很可能講數(shù)據(jù)量小的類目判別錯誤
如果樣本數(shù)據(jù)和實際數(shù)據(jù)分布差異大的話,對于實際的算法效果一般都不好
充分的數(shù)據(jù),這個就好解釋了,數(shù)據(jù)越充分,訓練就越充分,就好比考試前做的練習越多,一般效果越好
特征,就是盡可能包含足夠多的需要識別對象的信息
一個簡單的例子,如果只有一個特征,對于水果的判斷往往偏頗,就會造成下面的結(jié)果
隨著特征的增多,訓練就會準確
往往對于一個工程問題來說,特征是決定最多的方面
一個算法方面的優(yōu)化,可能只是優(yōu)化了2~3%的效果,但是特征可能就是50~60%了,一個工程項目七八成的精力往往都是畫在特征選取上的,比如百度CTR預(yù)測,特征數(shù)據(jù)目前就是100億級別的。
最后來說一點關(guān)于deep learning 的東西
Deep learning和目前的機器學習算法(Shallow Learning)最大的區(qū)別在于特征層數(shù)
目前的機器學習算法主要是一層的,就是從特征直接推斷是結(jié)果;
而Deep Learning和人類的處理問題的結(jié)果更接近,是由特征推斷出一些中間層的結(jié)果,進而推斷出最終結(jié)果的;
比如視覺是由一些點,進而判斷出一些邊,進而判斷出一些形狀,然后才是整體的物體的。
之前大量使用Shallow learning 主要是因為 Shallow Learning有很好的數(shù)學特征
解空間是凸函數(shù)
凸函數(shù)有大量的求解方法
凸函數(shù)優(yōu)化可以參考
**Convex OpTImizaTIon
**
**~boyd/cvxbook/
而Deep Learning則容易找到局部最優(yōu)解,而非全局最優(yōu)解
Deep Learning解法可以參考
G. Hinton et al., A Fast Learning Algorithm for Deep Belief Nets. Neural ComputaTIon, 2006.
也可以看Andrew NG最近的課程
這里有最新的中文翻譯http://deeplearning.stanford.edu/wiki/index.php/UFLDL教程