什么是機(jī)器學(xué)習(xí):
我想巡洋艦的關(guān)注者很多是偉大的碼農(nóng), 一個(gè)基本的問題是, 碼農(nóng)(傳統(tǒng)算法工程師)和機(jī)器學(xué)習(xí)工程師都在碼程序做算法,大家都想讓計(jì)算機(jī)給人類做事, 兩個(gè)有什么區(qū)別?
這里可以從一個(gè)簡單的例子入手, 一段程序可以看做一連串從輸入到輸出的過程,無論是工程師還是程序員,我們都想通過設(shè)計(jì)來完成某種功能, 比如說你做一個(gè)網(wǎng)頁, 你要畫視覺圖, UI圖, 前端后端交互圖,我們是給計(jì)算機(jī)設(shè)計(jì)一套解決具體問題的流程, 如做一個(gè)淘寶網(wǎng)。
機(jī)器學(xué)習(xí)呢? 機(jī)器學(xué)習(xí)是你不去設(shè)計(jì), 而讓計(jì)算機(jī)自己去琢磨,讓它在一套很一般的模子里打磨出能夠解決特定問題的武器。
這點(diǎn)上,機(jī)器學(xué)習(xí)做的正是” 自發(fā)能夠產(chǎn)生解決問題的程序的程序” , 一些機(jī)器學(xué)習(xí)的經(jīng)典算法如線性回歸, SVM, 神經(jīng)網(wǎng)絡(luò), 它們單個(gè)都不能解決問題, 但是通過“學(xué)習(xí)”卻可以一會(huì)去預(yù)測(cè)房價(jià)一會(huì)去尋找美女。
它是怎么做到的:
我們模仿人學(xué)習(xí)的過程讓機(jī)器來學(xué)習(xí)些程序:最常見的方法就是是有老師告訴你對(duì)錯(cuò)的學(xué)習(xí) ,這個(gè)稱為有監(jiān)督學(xué)習(xí)。
一個(gè)一般被作為監(jiān)督學(xué)習(xí)入門的實(shí)例, 是預(yù)測(cè)房產(chǎn)的價(jià)格, 一個(gè)房子的價(jià)格決定于非常多的相關(guān)因素, 比如房子中臥室, 廁所,客廳的數(shù)量和面積, 周圍環(huán)境的交通, 安靜與否,有無學(xué)校等, 我們要從這些要素中知道房子的價(jià)格。如果你是傳統(tǒng)的房產(chǎn)專家, 你的方法一定是到各個(gè)地點(diǎn)做調(diào)查成交價(jià), 隨著經(jīng)驗(yàn)的增加, 你會(huì)得到各個(gè)區(qū)域的基準(zhǔn)價(jià)格, 然后按照這個(gè)基本價(jià)格結(jié)合房子的特征上下調(diào)整,得出你的經(jīng)驗(yàn)公式。 這真是累死小哥啊。
有了最原始的機(jī)器學(xué)習(xí),我們也可以把這個(gè)人類得出經(jīng)驗(yàn)的過程讓機(jī)器解決。我們的小哥現(xiàn)在只需要在網(wǎng)上放一分表格, 讓人們把有關(guān)房子的有用無用的信息和價(jià)格都填了, 做一個(gè)巨大的excel表格。 然后我們讓程序從這些信息學(xué)習(xí)價(jià)格的pattern(模式)。
之前的因素在這里我們換以一個(gè)新的詞匯-特征。
每一個(gè)特征, 這次要用一個(gè)數(shù)表示, 如同線性代數(shù)里的坐標(biāo)基。而這些特征如何決定價(jià)格的, 我們就可以不管, 讓機(jī)器決定去。特征的個(gè)數(shù)我們通常稱之為
維度,一個(gè)問題的維度往往決定其復(fù)雜性, 以及所使用的方法, 這就是復(fù)雜系統(tǒng)所擅長討論的范疇了在此不詳述。
維度本身同時(shí)決定我們可能需求的數(shù)據(jù)量多少, 高維度意味著我們需要求解問題的信息量也成比例的增長。
特征工程就是在大量的信息, 比如“我的房子有個(gè)大落地窗”這種話里提取出和房價(jià)可能相關(guān)的屬性(attribute)。
所謂機(jī)器學(xué)習(xí)的模型選擇,就是在尋找一個(gè)基本學(xué)習(xí)框架, 包含你對(duì)預(yù)測(cè)事物的非常一般的理解, 比如房子的價(jià)格可能是很多因素的疊加這種初中水平的東西,學(xué)名線性回歸:
你不是有眾多特征嗎? 我可以用一個(gè)算法,讓一個(gè)非常初級(jí)的模型自動(dòng)的進(jìn)化,機(jī)器學(xué)習(xí)工程師要做的是把這個(gè)模式的毛坯找出來,以及這個(gè)尋找自動(dòng)算法的算法做出來,這個(gè)一旦做出來, 后續(xù)的數(shù)據(jù)就像一顆顆子彈把模型打造成型。
這個(gè)把模型打磨成型的過程就是學(xué)習(xí),行里叫求解參數(shù)。這組參數(shù)不是讓某個(gè)特定的房子的價(jià)格被最好的擬合,而是讓整個(gè)數(shù)據(jù)集都被一組參數(shù)涵蓋。 這組參數(shù)就是我們學(xué)習(xí)的結(jié)果, 放佛具有了一種人一樣的預(yù)測(cè)未知房價(jià)的能力。
就像人一樣,機(jī)器也是從錯(cuò)誤中學(xué)習(xí)的,因此,最經(jīng)典的監(jiān)督學(xué)習(xí)里, 我們首先要做的是衡量錯(cuò)誤的大小,我們用一個(gè)叫cost function的東西衡量模型預(yù)測(cè)的結(jié)果與真實(shí)值的差距, 模型的效果越差, 這個(gè)cost function的值就越高。
這個(gè)函數(shù)告訴你的是,每次犯錯(cuò)都是潛在的風(fēng)險(xiǎn)和損失,我們稱之為cost。而cost 函數(shù)來衡量目前模型離最終正確模型的距離。
這個(gè)cost函數(shù)恰恰是由剛剛說的參數(shù)決定的。 這些參數(shù)的含義是, 當(dāng)你改變某一個(gè)特征比如房屋的面積,你的房子價(jià)格就會(huì)變動(dòng),但是變動(dòng)的方式是什么, 你不知道, 你就去隨機(jī)的擾動(dòng)這些參數(shù)看看得來的價(jià)格會(huì)如何變化,并且和真實(shí)的價(jià)格信息比較, 可能你忽然發(fā)現(xiàn)某個(gè)瞬間, 你的所有房子的價(jià)格都被一組參數(shù)神奇的擬合了。
對(duì), 就是這么神奇, 幾個(gè)參數(shù)可以預(yù)言不是一個(gè),而是所有房子的價(jià)格!
我們稱這組參數(shù)為最優(yōu),或者說我們學(xué)習(xí)的結(jié)果。雖然這個(gè)cost函數(shù)和統(tǒng)計(jì)學(xué)里的方差很相近,但說的不是一個(gè)意思。
機(jī)器學(xué)習(xí)能否成功,就在于這個(gè)最優(yōu)位置能否找到, 而在大多數(shù)時(shí)候,我們連這個(gè)最優(yōu)位置是否存在都不知道。
當(dāng)然剛剛說的隨機(jī)方法很是不靠譜,實(shí)際操作中我們用到的是一個(gè)叫梯度下降的方法, 讓參數(shù)順著最快速減少預(yù)測(cè)錯(cuò)誤的方向去自動(dòng)調(diào)整,如下圖。
圖中的x,y軸代表參數(shù), 高度代表錯(cuò)誤率, 洼地的那個(gè)點(diǎn)正是最優(yōu)參數(shù)點(diǎn)。
訓(xùn)練與測(cè)試:用一個(gè)形象的比喻理解有監(jiān)督學(xué)習(xí),
它就像一個(gè)拿著一堆模擬考試題學(xué)習(xí)的學(xué)生, 這個(gè)過程里你通過不停的比較你和標(biāo)準(zhǔn)答案的差距來學(xué)習(xí)完成試卷, 而最終這個(gè)學(xué)生要面對(duì)的是真實(shí)的考試。 相對(duì)應(yīng)的,我們通常在有監(jiān)督學(xué)習(xí)里把我們的數(shù)據(jù)分成兩部分, 一部分做學(xué)習(xí)的試題,另一個(gè)部分做考試用。 一個(gè)學(xué)生完全可能在平時(shí)練習(xí)的時(shí)候把每道考題被的滾瓜爛熟,而在真正的考試?yán)镆凰浚@種情形我們稱之為過擬合。
如果用兩個(gè)最簡單的例子來解釋過擬合發(fā)生的原因,主要就是在局限的數(shù)據(jù)里過度的挖掘模式導(dǎo)致的。 比上圖說一個(gè)人想要識(shí)別樹葉,它只見過那些有鋸齒的樹葉, 見到?jīng)]有鋸齒的葉子就會(huì)判斷它不是葉子。 或者一個(gè)人只見過白天鵝, 它拼命的根據(jù)已有的經(jīng)驗(yàn)去定義天鵝,而當(dāng)?shù)谝粋€(gè)黑天鵝出現(xiàn)時(shí)候, 它的定義就失效了。
無監(jiān)督學(xué)習(xí) :
再一些更困難的問題里, 我們根本不掌握我們所要求解的信息,比如房屋的價(jià)格, 這好比一個(gè)沒有標(biāo)準(zhǔn)答案的開放性考題, 我們需要學(xué)生發(fā)散式的探索。
無監(jiān)督學(xué)習(xí)看起來不能給出一定的答案, 但是其結(jié)果卻可以讓我們得到意想不到的驚喜。
無監(jiān)督學(xué)習(xí)最典型的范例是聚類, 一個(gè)典型的例子是, 你是一家互聯(lián)網(wǎng)公司,你要對(duì)你的一大堆客戶信息, 你首先面對(duì)的是如何把這些數(shù)據(jù)進(jìn)行整理歸類,無監(jiān)督學(xué)習(xí)里的聚類算法如k-means,它可以輕松的把你的客戶信息根據(jù)特征自動(dòng)劃分成大類, 之后你可以發(fā)現(xiàn)喜歡愛馬仕包的女生也愛喝拉菲的紅酒這種信息,然后你可以驗(yàn)證一下你的猜測(cè),就可以愉快的推銷啦!
再有說如果你有大量的人的心電圖,你要分辨出哪些是異常的可能是心臟病的情況,但是你又不知道病人有關(guān)的信息, 讓機(jī)器自己去無監(jiān)督學(xué)習(xí), 都可能得到意想不到的insight。
機(jī)器學(xué)習(xí)很美嗎:機(jī)器學(xué)習(xí)這件事, 看上去很美, 事實(shí)上一點(diǎn)也不, 因?yàn)槟忝媾R的是變幻莫測(cè)的問題, 你訓(xùn)練的再好, 你的預(yù)測(cè)也是有風(fēng)險(xiǎn)(no free lunch here)的。首先, 因?yàn)榇嬖谀J?,問題才可以預(yù)測(cè), 如果你的問題本身就沒有模式, 或者模式極為不可捉摸, 你的算法再強(qiáng)大也會(huì)失敗。比如說你要預(yù)測(cè)某個(gè)商品網(wǎng)站上衣服的價(jià)格, 但是這個(gè)網(wǎng)站里的衣服都是一個(gè)瘋狂銷售者根據(jù)他每天的心情好壞定的, 而你卻去找了一堆衣服的尺碼材質(zhì)特征來, 那你的算法終究要失敗。
即使是一個(gè)模式存在的問題, 也總會(huì)在某個(gè)時(shí)點(diǎn)上, 碰到問題的邊界。比如說你要做一個(gè)根據(jù)女生特征匹配對(duì)象的機(jī)器學(xué)習(xí)算法, 你的算法總是根據(jù)你過去掌握的男女匹配記錄預(yù)測(cè)的, 而總會(huì)有某個(gè)時(shí)刻, 你的對(duì)象已經(jīng)不符合歷史數(shù)據(jù)的規(guī)律,這時(shí)候要不你調(diào)整算法, 要不你直接放棄服務(wù)這類無法預(yù)測(cè)的人。
機(jī)器學(xué)習(xí)最難的是什么?
如果你思考一遍上述流程, 你可能發(fā)現(xiàn)一切都很容易, 從數(shù)據(jù)清洗,特征提取,到模型選擇, 事實(shí)上這你就錯(cuò)了。 因?yàn)闄C(jī)器學(xué)習(xí)最難的一部 , 這里根本就沒提到, 那就是把現(xiàn)實(shí)生產(chǎn)生活中的問題, 提煉成一個(gè)機(jī)器學(xué)習(xí)問題 。
這需要的是你對(duì)問題本身的深刻洞察。 有一天也許整個(gè)數(shù)據(jù)清洗到模型選擇和交叉驗(yàn)證都自動(dòng)化了。但始終有一個(gè)東西不能完全被機(jī)器搞定, 那就是你如何從一個(gè)全新的領(lǐng)域, 去提取機(jī)器學(xué)習(xí)可以有助解決的最重要的問題。
再有, 無論機(jī)器的預(yù)測(cè)多準(zhǔn)確, 它的結(jié)果如果不是在解答人的需求, 也是一個(gè)沒用的或至少不令人喜歡的東西。 比如我發(fā)明一個(gè)算法能夠特別準(zhǔn)的預(yù)測(cè)老人的壽命, 或者根據(jù)女生現(xiàn)在的長相推測(cè)她80歲的長相, 即使算法十分牛掰, 這樣的產(chǎn)品估計(jì)也不是客戶喜聞樂見的。
聯(lián)系客服