自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

初學(xué)者必讀:從迭代的五個(gè)層面理解機(jī)器學(xué)習(xí)

人工智能 機(jī)器學(xué)習(xí)
梯度下降算法(或隨機(jī)梯度下降/stochastic gradient descent)是機(jī)器學(xué)習(xí)的巨大成功。

你能猜到這個(gè)謎語的答案嗎?

  • 如果你學(xué)習(xí)機(jī)器學(xué)習(xí),它將隨處可見……
  • 如果你是一個(gè)程序員,你會(huì)用它上千次……
  • 如果你練習(xí)過任何技術(shù),這儼然是第二個(gè)你……

不,答案不是狂飲咖啡……而是「迭代(iteration)」!

是的,迭代是為了實(shí)現(xiàn)某種結(jié)果而重復(fù)一組任務(wù)的過程。

等等,這難道不是詞典的定義嗎?好吧,是的,這就是迭代真正的意思。我們并不是要揭開一些令人興奮的秘密。但我們希望以一種對(duì)你來說可能是新的方式來構(gòu)建這個(gè)簡單的概念。我們的目標(biāo)是從不同的角度概覽機(jī)器學(xué)習(xí)的基本概念,這有別于教科書里的常規(guī)方法。

我們知道,大多數(shù)書都按照正向順序(sequential)講解機(jī)器學(xué)習(xí)的過程:加載數(shù)據(jù)、預(yù)處理、擬合模型、預(yù)測(cè)等。

這種順序方法當(dāng)然是合理和有幫助的,但現(xiàn)實(shí)的機(jī)器學(xué)習(xí)很少如此線性。相反,實(shí)用機(jī)器學(xué)習(xí)有一個(gè)特殊的循環(huán)(cyclical)性質(zhì),需要不斷的迭代、調(diào)整和改進(jìn)。

因此,我們想展示簡單的迭代技術(shù)是如何在機(jī)器學(xué)習(xí)中具有美麗形式和深刻意義的。這篇文章是針對(duì)初學(xué)者寫的,但更有經(jīng)驗(yàn)的讀者也不妨一讀。

為什么討論迭代問題?

迭代是機(jī)器學(xué)習(xí)的核心概念,它在許多方面至關(guān)重要。了解這個(gè)簡單的概念在機(jī)器學(xué)習(xí)工作流程中的確切位置,這會(huì)帶來很多切實(shí)的好處:

1. 你能更好地理解算法

2. 你能制定出更實(shí)際的項(xiàng)目進(jìn)度時(shí)間表

3. 你會(huì)發(fā)現(xiàn)更容易實(shí)現(xiàn)的模型改進(jìn)方法

4. 幫助你更容易堅(jiān)持下去,即使初步結(jié)果較差

5. 幫助你進(jìn)一步解決機(jī)器學(xué)習(xí)中更復(fù)雜的問題

根據(jù)經(jīng)驗(yàn),以迭代的角度看機(jī)器學(xué)習(xí)的工作流,能夠幫助初學(xué)者了解機(jī)器學(xué)習(xí)背后的概念。

所以不用多說,讓我們開始介紹機(jī)器學(xué)習(xí)迭代的 5 個(gè)層面吧。

目錄

  • 模型層面:擬合參數(shù)
  • 微觀層面:調(diào)試超參數(shù)
  • 宏觀層面:解決問題
  • 元數(shù)據(jù)層面:改進(jìn)數(shù)據(jù)
  • 人類層面:提升自己

模型層面:擬合參數(shù)

迭代能夠起到重要作用的***個(gè)層面是模型層面。任何模型,無論是回歸模型、決策樹還是神經(jīng)網(wǎng)絡(luò),都是由許多(有時(shí)甚至數(shù)百萬)模型參數(shù)定義的。

例如,回歸模型由回歸系數(shù)定義,決策樹由節(jié)點(diǎn)分類的方式定義,神經(jīng)網(wǎng)絡(luò)由連接各層的權(quán)重定義。

然而機(jī)器是如何學(xué)習(xí)正確的模型參數(shù)值的?其中迭代算法發(fā)揮了作用!

用梯度下降法擬合參數(shù)

梯度下降算法(或隨機(jī)梯度下降/stochastic gradient descent)是機(jī)器學(xué)習(xí)的巨大成功。

梯度下降是一種迭代方法,用于找到函數(shù)的最小值。在機(jī)器學(xué)習(xí)中,該函數(shù)通常是損失(loss)(或成本/cost)函數(shù)?!笓p失」指的是衡量預(yù)測(cè)錯(cuò)誤代價(jià)的量化指標(biāo)。

給定一組參數(shù),梯度下降計(jì)算對(duì)應(yīng)模型的預(yù)測(cè)損失,然后調(diào)整這些參數(shù)以減少損失。重復(fù)這一過程,直到損失不能進(jìn)一步減少。

最小化損失的***一組參數(shù)就是最終的擬合模型。

直觀的梯度下降算法

我們不會(huì)在這里推導(dǎo)梯度下降的數(shù)學(xué)公式,但我們將直觀的給出梯度下降的概念:

1. 設(shè)想帶有山谷和山峰的山脈(損失函數(shù));

2. 山脈的每個(gè)位置(參數(shù)集)都有一個(gè)高度(損失);

3. 現(xiàn)在把一個(gè)滾珠放在山脈的某個(gè)地方(初始化);

4. 在任何時(shí)刻,球沿最陡的方向(梯度)滾動(dòng);

5. 它繼續(xù)滾動(dòng)(迭代),直到它卡在某個(gè)山谷底部(局部最小);

6. 理想情況下,你想找到***的山谷(全局最小);

7. 有很多聰明的方法來防止球被卡在局部最小值(例如初始化多個(gè)球,給它們更多的動(dòng)量,以便球可以越過小山丘等);

8. 對(duì)了,如果山地形狀像碗(凸函數(shù)),那么球一定能到達(dá)***點(diǎn)。

在實(shí)踐中,調(diào)用機(jī)器學(xué)習(xí)的應(yīng)用包(如 Scikit-Learn)時(shí),并不需要從頭開始編寫梯度下降算法。

微觀層面:調(diào)試超參數(shù)

下一個(gè)迭代發(fā)揮巨大作用的層面是我們所謂的「微觀」水平,更通常被稱為通用模型或模型族(model family)。

你可以將模型族視為廣泛類別的具有可定制結(jié)構(gòu)的模型。logistic 回歸、決策樹、支持向量機(jī)(SVM)和神經(jīng)網(wǎng)絡(luò)實(shí)際上都是不同的模型族。在實(shí)際擬合模型參數(shù)之前,每個(gè)模型族都有一組結(jié)構(gòu)可供選擇。

例如,在 logistic 回歸族中,可以使用 L1 或 L2 正則化懲罰項(xiàng)(regularization penalty)來構(gòu)建單獨(dú)的模型。在決策樹族中,可以選用不同結(jié)構(gòu)的模型,例如樹的深度(depth)、修剪閾值(pruning threshold)或分割標(biāo)準(zhǔn)(splitting criteria)。

這些結(jié)構(gòu)選擇變量稱為超參數(shù)(hyperparameter)。

為什么超參數(shù)很特別

超參數(shù)是無法使用梯度下降或其它優(yōu)化算法直接從數(shù)據(jù)學(xué)習(xí)的「更高級(jí)」參數(shù)。它們描述了在擬合模型參數(shù)之前必須確定的關(guān)于模型的結(jié)構(gòu)信息。

所以當(dāng)人們說他們要「訓(xùn)練一個(gè) logistic 回歸模型」時(shí),他們真正的意思包含了兩個(gè)階段的過程。

  1. 首先,決定模型族的超參數(shù)。例如,模型是否應(yīng)該添加 L1 或 L2 懲罰項(xiàng)以防止過擬合(overfitting)?
  2. 然后,根據(jù)數(shù)據(jù)擬合模型參數(shù)。例如,如何擬合模型系數(shù)(coefficient)以最小化損失函數(shù)(loss function)?

我們之前討論了梯度下降如何幫助執(zhí)行步驟 2。但是為了使用梯度下降擬合模型參數(shù),必須首先從模型族入手設(shè)置超參數(shù)。

那么我們?nèi)绾翁幚聿襟E 1,找到模型族的***超參數(shù)?

使用交叉驗(yàn)證調(diào)試超參數(shù)

交叉驗(yàn)證(cross-validation)是在眾多場(chǎng)景最有用的技術(shù)之一,在使用它時(shí)幾乎有一種作弊的感覺。

在此背景下,交叉驗(yàn)證也是一種迭代方法,用于評(píng)估用給定的一組超參數(shù)構(gòu)建的模型的性能。這是一種重復(fù)使用訓(xùn)練數(shù)據(jù)的聰明方式,將它分割成幾塊并循環(huán)使用它們(詳情見下一小節(jié))。

使用交叉驗(yàn)證,你可以僅使用訓(xùn)練集來擬合和評(píng)估具有各種超參數(shù)集的模型。這意味著你可以將測(cè)試集單獨(dú)拿出來(hold-out set)并用于最終模型選擇(更多內(nèi)容將在下一部分中介紹)。

交叉驗(yàn)證詳細(xì)步驟

以下是使用 10 折交叉驗(yàn)證選擇超參數(shù)的步驟:

1. 將訓(xùn)練集分成 10 等份,即「折(fold)」;

2. 從備選的所有超參數(shù)集中,選擇一組超參數(shù);

3. 在給定一組超參數(shù)后,用訓(xùn)練數(shù)據(jù)的前 9 折訓(xùn)練你的模型;

4. 用第 10 折,或單獨(dú)拿出的數(shù)據(jù)(hold-out)折去評(píng)估模型;

5. 用同一組超參數(shù)重復(fù)步驟(3)和(4)10 次,每次單獨(dú)拿出不同的數(shù)據(jù)折(10 折都要用一次)做評(píng)估;

6. 總計(jì)所有 10 次循環(huán)的結(jié)果,并作為該超參數(shù)集的性能指標(biāo);

7. 對(duì)于所有備選的超參數(shù)集,重復(fù)步驟(2)至(6);

下面是偽代碼:

  1. #  pseudocode for cross-validation 
  2. all_folds = split_into_k_parts(all_training_data) 
  3.  
  4. for set_p in hyperparameter_sets: 
  5.    model = InstanceFromModelFamily() 
  6.  
  7.    for fold_k in all_folds: 
  8.        training_folds = all_folds besides fold_k 
  9.        fit model on training_folds using set_p 
  10.        fold_k_performance = evaluate model on fold_k 
  11.  
  12.    set_p_performance = average all k fold_k_performances for set_p 
  13.  
  14. select set from hyperparameter_sets with best set_p_performance 

宏觀層面:解決問題

現(xiàn)在我們要撇開單個(gè)模型,甚至模型族。我們將在解決問題層面討論迭代。

通常,***個(gè)構(gòu)建的模型并不是***的,即使采用交叉驗(yàn)證調(diào)試過參數(shù)。這是因?yàn)閿M合模型參數(shù)和調(diào)試超參數(shù)只是整個(gè)機(jī)器學(xué)習(xí)問題解決工作流程的兩個(gè)部分。

還有其它的幾種迭代技術(shù),可以利用它們來找到***性能的解決方案。我們認(rèn)為下面的兩種技術(shù)可以比較容易地提高預(yù)測(cè)性能。

嘗試不同的模型族

機(jī)器學(xué)習(xí)中有一個(gè)概念稱為「無免費(fèi)午餐定理(NFL/No Free Lunch theorem)」。人們對(duì) NFL 定理有不同的解釋,但我們關(guān)心的是:沒有一個(gè)模型族是最適合每一個(gè)問題的。

由于各種因素,如數(shù)據(jù)類型、問題域、稀疏數(shù)據(jù)、甚至收集的數(shù)據(jù)量,不同的模型族會(huì)有不同的表現(xiàn)。

因此,為改進(jìn)給定問題的解決方案,最簡單方法之一是嘗試幾個(gè)不同的模型族。這個(gè)迭代層面要高于之前其它的層面。

下面是偽代碼:

  1. # eudocode for selecting model family 
  2. training_data, test_data = randomly_split(all_data) 
  3.  
  4. list_of_families = logistic regression, 
  5. decision tree, 
  6. SVM, 
  7. neural network, etc… 
  8.  
  9. for model_family in list_of_families: 
  10. best_model = tuned with cross-validation on training_data 
  11.  
  12. evaluate best_model from each model_family on test_data 
  13. select final model 

請(qǐng)注意,這里的交叉驗(yàn)證步驟與上一節(jié)中的交叉驗(yàn)證步驟相同。這種美麗的嵌套迭代(nested iteration)形式是解決機(jī)器學(xué)習(xí)問題的有效方法。

組合模型

下一個(gè)改進(jìn)解決方案的方法是將多個(gè)模型組合成一個(gè)整合模型(ensemble)。這是從擬合這些模型的迭代過程的直接擴(kuò)展。

我們將保存對(duì)不同的整合方法的詳細(xì)討論,但一個(gè)常見的整合形式是簡單地取多個(gè)模型預(yù)測(cè)的平均值。當(dāng)然,還有更先進(jìn)的方法來組合你的模型,但是擬合多個(gè)模型的迭代方法是一樣的。

這種組合的預(yù)測(cè)通常有與任何單個(gè)模型相比微小的性能提升。下面是構(gòu)建一個(gè)簡單的整合模型的偽代碼:

  1. # pseudocode for building a simple ensemble modal 
  2. training_data, test_data = randomly_split(all_data) 
  3.  
  4. list_of_families = logistic regression, 
  5. decision tree, 
  6. SVM, 
  7. neural network, etc… 
  8.  
  9. for model_family in list_of_families: 
  10. best_model = tuned with cross-validation on training_data 
  11.  
  12. average predictions by best_model from each model_family 
  13. … profit! (often) 

請(qǐng)注意,該過程的大部分內(nèi)容與之前的技術(shù)完全相同!

實(shí)際上,這意味著你可以很容易地復(fù)制這兩種技術(shù)。首先,你可以從各種不同的模型族構(gòu)建***模型。然后你可以整合它們。***,你可以在相同的測(cè)試集上評(píng)估單個(gè)模型和整合模型。

作為***一個(gè)忠告:你應(yīng)該總是單獨(dú)拿出一個(gè)未經(jīng)測(cè)試的測(cè)試集,以選擇你的最終模型。我們建議在建模過程開始時(shí)將數(shù)據(jù)分成訓(xùn)練集和測(cè)試集。不到***不要使用測(cè)試集。

元數(shù)據(jù)層面:改進(jìn)數(shù)據(jù)

更好的數(shù)據(jù)打敗更好的算法,但這并不總是意味著更多的數(shù)據(jù)打敗更好的算法。是的,更好的數(shù)據(jù)通常意味著更多的數(shù)據(jù),但它也意味著更清潔的數(shù)據(jù)、更相關(guān)的數(shù)據(jù)、以及有更好的特征的數(shù)據(jù)。

改進(jìn)數(shù)據(jù)也是一個(gè)迭代過程。當(dāng)你面對(duì)機(jī)器學(xué)習(xí)的更大挑戰(zhàn)時(shí),你會(huì)意識(shí)到,很難從一開始就完全獲得所有數(shù)據(jù)。

也許還有一些你沒有想到的關(guān)鍵特征。也許你沒有收集到足夠的數(shù)據(jù)。也許你錯(cuò)誤理解了數(shù)據(jù)集中的一個(gè)列,需要返回去重新向同事解釋它。

一個(gè)偉大的機(jī)器學(xué)習(xí)從業(yè)者總是保持開放的心態(tài),并不斷改進(jìn)數(shù)據(jù)集。

收集更好的數(shù)據(jù)

收集更好的數(shù)據(jù)的能力是隨時(shí)間、經(jīng)驗(yàn)和更多領(lǐng)域?qū)I(yè)知識(shí)而發(fā)展的技能。例如,如果你正在構(gòu)建一個(gè)房地產(chǎn)定價(jià)模型,你應(yīng)該收集關(guān)于房子本身、附近的社區(qū)、甚至過去支付的財(cái)產(chǎn)稅等公開可用的信息。

更好的數(shù)據(jù)的另一個(gè)要素是數(shù)據(jù)的整體清潔度(cleanliness)。這意味著減少丟失數(shù)據(jù)、降低測(cè)量誤差,并盡力用主要指標(biāo)(primary metric)替換代理指標(biāo)(proxy metric)。

這里有幾個(gè)問題,可以激發(fā)你改進(jìn)數(shù)據(jù)集的想法:

  • 正在收集的數(shù)據(jù)是否具有所需的所有特征?
  • 你可以更好地清理數(shù)據(jù)嗎?
  • 你能減少測(cè)量誤差嗎?
  • 是否有可以刪除的異常值?
  • 收集更多的數(shù)據(jù)是否廉價(jià)?

設(shè)計(jì)更好的特征

特征工程,或通過利用領(lǐng)域內(nèi)知識(shí)從數(shù)據(jù)創(chuàng)建新特征,是用以改善模型的最有價(jià)值的活動(dòng)。

它通常是困難和耗時(shí)的,但它被認(rèn)為是應(yīng)用機(jī)器學(xué)習(xí)的關(guān)鍵。因此,作為機(jī)器學(xué)習(xí)的從業(yè)者,你有責(zé)任在你選擇的領(lǐng)域繼續(xù)學(xué)習(xí)。

這是因?yàn)楫?dāng)你了解更多關(guān)于該領(lǐng)域的信息時(shí),你將培養(yǎng)對(duì)***影響力的特征更好的直覺。你應(yīng)該把學(xué)習(xí)過程也作為一個(gè)迭代過程,隨著個(gè)人專長的增長而改善。

人類層面:提升自己

現(xiàn)在我們已經(jīng)到了機(jī)器學(xué)習(xí)中最重要的層面:人類層面。即使你忘記了這篇文章中的一切,我們希望你從這一節(jié)學(xué)習(xí)到東西。

真相是:機(jī)器學(xué)習(xí)和數(shù)據(jù)科學(xué)是非常大和麻煩的主題。特別是如果你是一個(gè)初學(xué)者,你可能會(huì)感到不知所措。有這么多內(nèi)容,每天都有新的發(fā)展在發(fā)生。

你知道嗎?機(jī)器學(xué)習(xí)部分對(duì)于我們?nèi)匀环浅FD難和困惑。但是沒關(guān)系,因?yàn)槲覀儓?jiān)信,最重要的迭代層面是在個(gè)人層面,即機(jī)器學(xué)習(xí)的實(shí)踐者。

因此,我們要以幾塊建議來結(jié)束這篇冗長的文章。我們希望這***一部分可以幫助你保持洞察力,而不被這個(gè)領(lǐng)域超載的信息所淹沒。

#1. 不要停止學(xué)習(xí)

正像上文所說的,迭代建立在機(jī)器學(xué)習(xí)過程的每一個(gè)層面。你的個(gè)人技能也不例外。機(jī)器學(xué)習(xí)是一個(gè)深刻和豐富的領(lǐng)域,你練習(xí)得越多,一切就會(huì)變得越容易。

#2. 不要從一開始就期望***

你不需要贏得你的***次 Kaggle 比賽。即使你發(fā)現(xiàn)建立的模型完全不能用也沒有關(guān)系,最寶貴的寶藏是你的個(gè)人成長和改善,這應(yīng)該是你的主要關(guān)注點(diǎn)。

#3. 什么都不知道也沒關(guān)系

事實(shí)上,一個(gè)人幾乎不可能知道關(guān)于機(jī)器學(xué)習(xí)的一切。關(guān)鍵是建立一個(gè)基礎(chǔ),以幫助你根據(jù)需要選擇新的算法和技術(shù)。是的……理解迭代也是基礎(chǔ)的一部分。

#4. 至少嘗試兩次

掙扎在算法或任務(wù)之中?花費(fèi)的時(shí)間比你想象的時(shí)間長嗎?沒問題,只記得至少多嘗試一次。第二次嘗試一切都變得更容易和更快,這是你進(jìn)步的***方式。

#5. 理論、實(shí)踐和項(xiàng)目三者的循環(huán)

我們相信學(xué)習(xí)機(jī)器學(xué)習(xí)的最有效的方法是在理論、目標(biāo)實(shí)踐和更大的項(xiàng)目之間循環(huán)。這是掌握理論同時(shí)發(fā)展應(yīng)用、實(shí)際技能的最快方式。

總結(jié)

迭代是一個(gè)簡單而又美麗的概念,它能將機(jī)器學(xué)習(xí)的每一個(gè)層面粘合到一起:

  • 人類層面:反復(fù)練習(xí)以提升技能
  • 元數(shù)據(jù)層面:持續(xù)改進(jìn)數(shù)據(jù)和特征
  • 宏觀層面:探索不同的模型族和組合方式
  • 微觀層面:交叉驗(yàn)證以調(diào)試模型超參數(shù)
  • 模型層面:梯度下降以擬合模型參數(shù)
責(zé)任編輯:武曉燕 來源: 人工智能在線
相關(guān)推薦

2024-12-25 08:00:00

機(jī)器學(xué)習(xí)ML管道人工智能

2010-05-19 17:54:50

2022-01-21 09:05:34

機(jī)器學(xué)習(xí)工具安全

2017-05-25 11:14:21

機(jī)器學(xué)習(xí)算法神經(jīng)網(wǎng)絡(luò)

2017-05-25 13:37:46

機(jī)器學(xué)習(xí)算法神經(jīng)網(wǎng)絡(luò)

2024-03-11 18:17:18

Python字符串分隔符

2010-10-18 09:30:55

2010-03-15 18:55:22

Java編程語言

2011-07-12 13:01:00

CC++

2009-09-28 09:45:00

CCNA學(xué)習(xí)經(jīng)驗(yàn)CCNA

2015-07-20 13:56:59

SDN

2020-09-08 19:03:41

Java代碼初學(xué)者

2023-08-05 16:12:47

systemdLinux

2016-12-30 13:23:30

AI 初學(xué)者分類

2017-10-30 14:56:04

機(jī)器學(xué)習(xí)算法非監(jiān)督學(xué)習(xí)

2024-07-18 08:24:09

2011-05-07 15:26:09

復(fù)印機(jī)復(fù)合機(jī)

2023-10-25 16:16:27

2021-01-10 08:29:03

機(jī)器學(xué)習(xí)ML算法

2009-06-12 15:16:53

Hibernate學(xué)習(xí)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)