討論問題的前提是概念的澄清,概念的混淆是研發(fā)溝通中的一大障礙,極大地影響了溝通的效率。在人工智能尤其是機(jī)器學(xué)習(xí)領(lǐng)域,算法和模型是兩個(gè)相關(guān)而又有區(qū)別的兩個(gè)概念,弄清二者的含義和聯(lián)系可以使我們討論的問題更加明確。
什么是算法?
在計(jì)算機(jī)領(lǐng)域,算法有著明確的定義。為了通俗起見,這里引用百度百科對算法的描述:
算法(Algorithm)是指解題方案的準(zhǔn)確而完整的描述,是一系列解決問題的清晰指令,算法代表著用系統(tǒng)的方法描述解決問題的策略機(jī)制。
也就是說,對于算法而言,能夠?qū)σ欢ㄒ?guī)范的輸入,在有限時(shí)間內(nèi)獲得所要求的輸出。算法中的指令描述的是一個(gè)計(jì)算,當(dāng)其運(yùn)行時(shí)能從一個(gè)初始狀態(tài)和(可能為空的)初始輸入開始,經(jīng)過一系列有限而清晰定義的狀態(tài),最終產(chǎn)生輸出并停止于一個(gè)終態(tài)。
不同的算法可能用不同的時(shí)間、空間或效率來完成同樣的任務(wù),一個(gè)算法的優(yōu)劣可以用空間復(fù)雜度與時(shí)間復(fù)雜度來衡量。
什么是模型?
模型是一個(gè)概念外延非常廣泛的詞,這里同樣引用百度百科中的描述:
通過主觀意識(shí)借助實(shí)體或者虛擬表現(xiàn),構(gòu)成客觀闡述形態(tài)結(jié)構(gòu)的一種表達(dá)目的的物件(物件并不等于物體,不局限于實(shí)體與虛擬、不限于平面與立體)。
模型可以是模型玩具,科學(xué)模型,經(jīng)濟(jì)學(xué)模型,邏輯模型等等,例如,地球儀就是就是地球的模型,理性人經(jīng)濟(jì)人是經(jīng)濟(jì)學(xué)關(guān)于人行為的模型,計(jì)算機(jī)網(wǎng)絡(luò)中的7層協(xié)議是網(wǎng)絡(luò)協(xié)議的模型等等。
其中,科學(xué)模型是科學(xué)研究中對一類研究方法的通稱,使用數(shù)學(xué)公式、電腦模擬或簡單的圖示來表示一個(gè)簡化的自然界,透過分析這個(gè)模型,以期能夠進(jìn)一步了解科學(xué),包括說明、驗(yàn)證假說、或資料分析。依據(jù)不同需求,科學(xué)模型可以借由概念模型幫助了解現(xiàn)象,操作模型給出操作型定義,數(shù)學(xué)模型幫助量化,以及用圖像模型將抽象概念可視化。
需要重點(diǎn)關(guān)注的是數(shù)學(xué)模型。數(shù)學(xué)模型是關(guān)于部分現(xiàn)實(shí)世界以及為一種特殊目的而作的一個(gè)抽象的、簡化的結(jié)構(gòu),用字母、數(shù)字及其它數(shù)學(xué)符號建立起來的等式或不等式,以及圖表、圖像、框圖等描述客觀事物的特征及其內(nèi)在聯(lián)系的數(shù)學(xué)結(jié)構(gòu)表達(dá)式。
簡單來說, 模型是對事物的抽象。
機(jī)器學(xué)習(xí)中的算法與模型
在具體的機(jī)器學(xué)習(xí)領(lǐng)域,算法和模型也有著更為具體的定義。
機(jī)器學(xué)習(xí)中的"算法"
機(jī)器學(xué)習(xí)中的算法是指一種具體的計(jì)算方法,也就是如何求解全局最優(yōu)解,并使得這個(gè)過程高效而且準(zhǔn)確,本質(zhì)上就是計(jì)算機(jī)算法。
機(jī)器學(xué)習(xí)算法執(zhí)行“模式識(shí)別”,從數(shù)據(jù)中“學(xué)習(xí)”,或者對數(shù)據(jù)集進(jìn)行“擬合”。機(jī)器學(xué)習(xí)算法可以用偽代碼來描述,可以用任何一種現(xiàn)代編程語言來實(shí)現(xiàn),對算法效率的分析和描述也是如此。多種機(jī)器學(xué)習(xí)算法可以在一起實(shí)現(xiàn),并在具有標(biāo)準(zhǔn)應(yīng)用程序編程接口(API)的庫中提供。一個(gè)流行的例子是 scikit-learn 庫,它提供了 Python 中許多分類、回歸和聚類等機(jī)器學(xué)習(xí)算法的實(shí)現(xiàn)。
機(jī)器學(xué)習(xí)中的“模型”
機(jī)器學(xué)習(xí)中的“模型”是運(yùn)行在數(shù)據(jù)集上的機(jī)器學(xué)習(xí)算法的輸出,表示機(jī)器學(xué)習(xí)算法所學(xué)到的內(nèi)容,即用于進(jìn)行預(yù)測所需的規(guī)則、數(shù)字和任何其他特定算法的數(shù)據(jù)結(jié)構(gòu)。也就是說,機(jī)器學(xué)習(xí)模型是一個(gè)由機(jī)器學(xué)習(xí)算法自動(dòng)編寫、創(chuàng)建或?qū)W習(xí)的程序,用來解決一類具體的問題。在某種意義上看,數(shù)據(jù)結(jié)構(gòu)可以看作是一種模型,下面是BTree和神經(jīng)網(wǎng)絡(luò)模型的對比。
機(jī)器學(xué)習(xí)要考慮的主要問題是學(xué)習(xí)什么樣的模型。例如,在監(jiān)督學(xué)習(xí)過程中,模型就是所要學(xué)習(xí)的條件概率分布或決策函數(shù)。數(shù)據(jù)構(gòu)成的樣本空間中可能包含各種條件概率分布或者決策函數(shù),每一個(gè)都對應(yīng)著一個(gè)模型,那么這個(gè)樣本空間中的模型個(gè)數(shù)就有多個(gè)。
機(jī)器學(xué)習(xí)中與模型相關(guān)的另一個(gè)概念是策略。策略是從樣本空間中挑選出參數(shù)最優(yōu)的模型的準(zhǔn)則,模型的分類或預(yù)測結(jié)果與實(shí)際情況的誤差(損失函數(shù))越小,模型就越好。也就是說,策略就是通過引入損失函數(shù)的方式來度量模型的好壞。
機(jī)器學(xué)習(xí)中算法與模型的關(guān)系
算法和模型往往都是分不開的。算法是一類問題的解答,是模型建立流程的一個(gè)環(huán)節(jié),也是賦予模型“思考”能力的環(huán)節(jié)。而模型則是一系列算法的數(shù)學(xué)表達(dá),同時(shí)包含了數(shù)據(jù)以及任務(wù)的概念。因此,我們評估一個(gè)模型的好壞,而不是評估算法的好壞,算法只有其適用環(huán)境和場景。
就機(jī)器學(xué)習(xí)而言,通俗來講,模型可以近似地理解為目標(biāo)函數(shù),算法則是求解該目標(biāo)函數(shù)的方法。所有問題都可以有多種建模的方法,比如分類問題可以用SVM或者NB來做,但它們的目標(biāo)函數(shù)不同。例如,在決策樹中,其模型可以是二叉樹模型,如果寫成目標(biāo)函數(shù),那么則是一個(gè)分段函數(shù)。有了這個(gè)目標(biāo)函數(shù),怎么求解呢?一種典型的算法是貪心算法,或者叫啟發(fā)式算法,從根開始,采取一定的分裂原則進(jìn)行分裂,這個(gè)分裂的原則是信息增益最大化,Gini系數(shù)方差最小。
基于決策樹的方案及其演化變種,到目前為止,其根本采用的方式都是啟發(fā)式分裂,無論是后續(xù)的Bagging,Boosting,隨機(jī)森林,深度森林,算法在本質(zhì)上都沒改變,只是采用的模型在變化而已。
小結(jié)
算法和模型都有著廣泛的一般性意義。具體地,在機(jī)器學(xué)習(xí)領(lǐng)域,算法是在代碼中實(shí)現(xiàn)并在數(shù)據(jù)上運(yùn)行的過程。模型由算法輸出,由模型數(shù)據(jù)和預(yù)測算法組成。機(jī)器學(xué)習(xí)算法提供了一種自動(dòng)編程的類型,其中機(jī)器學(xué)習(xí)模型代表程序。明晰了概念,就有了進(jìn)一步學(xué)習(xí)和討論的基礎(chǔ)。