器學(xué)習(xí)期末復(fù)習(xí)全攻略:從梯度下降到SVM核心考點(diǎn)梳理)
又到期末了。不管是西電、山大還是國科大“機(jī)器學(xué)習(xí)期末復(fù)習(xí)”這幾個字一搜出來滿屏都是焦慮。我當(dāng)年也是這樣過來的PPT翻了一遍又一遍算法公式看著都眼熟可是一做題就發(fā)現(xiàn)細(xì)節(jié)全對不上。后來我總結(jié)出一個道理機(jī)器學(xué)習(xí)這門課難點(diǎn)從來不在某個公式有多復(fù)雜而在于知識點(diǎn)之間是網(wǎng)狀關(guān)聯(lián)的——你只背線性回歸的公式卻不知道它和梯度下降、特征縮放、過擬合有什么關(guān)系那考試換個問法就懵了。這篇文章就是一份完整的機(jī)器學(xué)習(xí)知識點(diǎn)回顧按期末復(fù)習(xí)的邏輯來組織先搭框架再摳底層概念然后把監(jiān)督學(xué)習(xí)、無監(jiān)督學(xué)習(xí)、深度學(xué)習(xí)、動手實(shí)驗(yàn)逐個過一遍。適合正在備戰(zhàn)期末的學(xué)生也適合剛?cè)腴T想系統(tǒng)梳理知識體系的學(xué)習(xí)者。我盡量用大家看得懂的話把“為什么這樣做”講明白而不只是列公式。1. 先搭框架機(jī)器學(xué)習(xí)到底在學(xué)什么1.1 從期末考卷反推整門課的知識地圖很多人復(fù)習(xí)機(jī)器學(xué)習(xí)是從翻課件開始的這其實(shí)是最低效的方式。課件是按教學(xué)順序排的但考卷是按知識塊出題的。真正有效的復(fù)習(xí)方式是先搞清楚這門課由哪些核心模塊組成再往每個模塊里填細(xì)節(jié)。機(jī)器學(xué)習(xí)課程的核心模塊大致可以分為六塊機(jī)器學(xué)習(xí)概述與基本概念什么是機(jī)器學(xué)習(xí)、監(jiān)督/無監(jiān)督/半監(jiān)督/強(qiáng)化學(xué)習(xí)的區(qū)別、泛化能力、過擬合與欠擬合。模型評估與選擇訓(xùn)練集/驗(yàn)證集/測試集劃分、交叉驗(yàn)證、性能度量錯誤率、精度、查準(zhǔn)率、查全率、F1、ROC與AUC。經(jīng)典監(jiān)督學(xué)習(xí)算法線性回歸、邏輯回歸、決策樹、支持向量機(jī)、樸素貝葉斯、K近鄰。集成學(xué)習(xí)Bagging、Boosting、隨機(jī)森林、AdaBoost、GBDT。無監(jiān)督學(xué)習(xí)聚類K-Means、層次聚類、DBSCAN、降維PCA、等度量映射、EM算法。深度學(xué)習(xí)基礎(chǔ)神經(jīng)網(wǎng)絡(luò)、卷積神經(jīng)網(wǎng)絡(luò)CNN及其核心組件。對照這個清單去復(fù)習(xí)比按章節(jié)順序翻PPT要高效得多。你可以拿一張白紙先憑記憶把這六個模塊的框架畫出來再對照課件補(bǔ)充細(xì)節(jié)。能畫出來的部分說明已經(jīng)掌握了畫不出來的部分就是復(fù)習(xí)重點(diǎn)。期末復(fù)習(xí)還有一個技巧回頭看作業(yè)和實(shí)驗(yàn)。頭歌平臺上的實(shí)驗(yàn)、課后編程題往往就是期中期末大題的原型。如果實(shí)驗(yàn)里實(shí)現(xiàn)過K-Means聚類、決策樹、支持向量機(jī)考試時遇到類似題目至少不會慌。1.2 教科書怎么選課程怎么跟說到參考書周志華的《機(jī)器學(xué)習(xí)》也就是大家常說的“西瓜書”是繞不開的。這本書的特點(diǎn)是理論體系完整數(shù)學(xué)推導(dǎo)扎實(shí)但說實(shí)話對初學(xué)者并不友好。第一次讀的時候很多推導(dǎo)會卡住。我的建議是第一遍通讀時跳過復(fù)雜的數(shù)學(xué)推導(dǎo)重點(diǎn)理解算法思想和流程第二遍復(fù)習(xí)時再死磕公式那時你已經(jīng)知道每個算法是干什么用的理解推導(dǎo)會容易很多。視頻課方面李宏毅的課和吳恩達(dá)的課是最多人推薦的但風(fēng)格完全不同。吳恩達(dá)的Coursera課程數(shù)學(xué)門檻低例子生動適合完全零基礎(chǔ)入門李宏毅的課內(nèi)容新、貼近工業(yè)界講解風(fēng)格幽默課后作業(yè)也很有挑戰(zhàn)性。期末復(fù)習(xí)階段我的建議是不要從頭刷視頻太耗時。正確姿勢是哪個知識點(diǎn)搞不懂就針對性看那一節(jié)的視頻講解。比如SVM的核函數(shù)想不通就單獨(dú)搜“李宏毅 SVM 核函數(shù)”來看。還有一份資源經(jīng)常被忽略就是Scikit-learn官方文檔。它里面有每個算法的數(shù)學(xué)原理、參數(shù)說明和示例代碼比很多二手博客靠譜多了。復(fù)習(xí)到哪個算法就順手翻一下官方文檔對應(yīng)的頁面把參數(shù)和公式對應(yīng)起來考試時遇到“這個參數(shù)是什么意思”之類的題就不會懵。2. 最容易被扣分的底層概念2.1 機(jī)器學(xué)習(xí)的三大假設(shè)熱搜詞里有一個“機(jī)器學(xué)習(xí)三大假設(shè)”這幾乎是每份期末卷子都會涉及的考點(diǎn)。這門課里反復(fù)提到的“三大假設(shè)”雖然不是某本教材里一字不差寫死的定義但核心是公認(rèn)的第一個是獨(dú)立同分布假設(shè)i.i.d.即訓(xùn)練樣本和測試樣本都是從同一個未知分布中獨(dú)立采樣得到的。這個假設(shè)是整個監(jiān)督學(xué)習(xí)的地基。沒有它“用歷史數(shù)據(jù)訓(xùn)練、用未來數(shù)據(jù)預(yù)測”這件事就失去了合法性。試卷常見的考法是讓你解釋為什么機(jī)器學(xué)習(xí)模型能泛化到新樣本答案的核心就是獨(dú)立同分布假設(shè)。第二個是潛在分布假設(shè)也就是假設(shè)數(shù)據(jù)背后存在一個可學(xué)習(xí)的規(guī)律或函數(shù)關(guān)系。比如線性回歸假設(shè)x和y的關(guān)系可以用線性函數(shù)近似SVM假設(shè)數(shù)據(jù)在某個特征空間里可以被超平面分開。學(xué)習(xí)算法的本質(zhì)就是從這個假設(shè)空間中選出一個最優(yōu)的函數(shù)。第三個是損失函數(shù)假設(shè)即我們認(rèn)為預(yù)測錯誤帶來的代價是可以量化的并且優(yōu)化這個代價就能得到好模型。回歸用均方誤差、分類用交叉熵或0-1損失都是這個假設(shè)的體現(xiàn)。關(guān)于獨(dú)立同分布還有一個有意思的細(xì)節(jié)。我看見有人問“樹模型是假設(shè)獨(dú)立同分布的嗎”。這個問題值得展開說一下。嚴(yán)格來說訓(xùn)練數(shù)據(jù)獨(dú)立同分布是統(tǒng)計(jì)學(xué)習(xí)框架層面的一般性假設(shè)幾乎所有監(jiān)督學(xué)習(xí)算法都默認(rèn)它成立。但決策樹在構(gòu)建過程中選擇劃分特征時并不要求特征之間相互獨(dú)立——它基于信息增益或基尼指數(shù)做貪心劃分本質(zhì)上是想通過遞歸分區(qū)來擬合復(fù)雜的決策邊界。所以準(zhǔn)確說訓(xùn)練樣本之間的關(guān)系遵循i.i.d.假設(shè)但樹模型對特征本身沒有獨(dú)立同分布的要求。這也是樹模型能處理特征之間存在相關(guān)性的數(shù)據(jù)的原因。2.2 梯度下降到底在做什么“機(jī)器學(xué)習(xí)中的梯度”能上熱搜足以說明這個點(diǎn)卡住了多少人。很多人背下了梯度下降的參數(shù)更新公式卻不理解為什么要往梯度的反方向走。梯度的數(shù)學(xué)定義是對多元函數(shù)求偏導(dǎo)后組成的向量方向指向函數(shù)值增長最快的方向。我們希望最小化損失函數(shù)自然就要朝函數(shù)值下降最快的方向走也就是梯度的反方向。這就是參數(shù)更新公式w ← w - η·?L(w)中負(fù)號的來歷。學(xué)習(xí)率η則控制每一步走多遠(yuǎn)它既不能太大容易震蕩甚至發(fā)散也不能太小收斂太慢。期末復(fù)習(xí)時我建議親手推導(dǎo)一次最簡單的線性回歸梯度下降。線性回歸的損失函數(shù)是MSE對參數(shù)w求梯度后更新公式長這樣# 線性回歸梯度下降單個樣本/隨機(jī)梯度下降形式 import numpy as np def gradient_descent(X, y, lr0.01, epochs1000): m, n X.shape w np.zeros(n) b 0 for epoch in range(epochs): y_pred np.dot(X, w) b dw (1 / m) * np.dot(X.T, (y_pred - y)) db (1 / m) * np.sum(y_pred - y) w - lr * dw b - lr * db return w, b這里有個容易在考試中丟分的地方為什么有些教材里梯度項(xiàng)是1/m乘以殘差有些沒有區(qū)別在于損失函數(shù)是否已經(jīng)做了均值歸一化。使用MSE的均值形式1/m乘以殘差平方和時梯度自然會帶出1/m使用平方和形式時就沒有。考試時看清題目用的是哪種形式的損失函數(shù)別被符號差異帶偏。關(guān)于梯度還必須理解批量梯度下降BGD、隨機(jī)梯度下降SGD和小批量梯度下降Mini-batch GD的區(qū)別。BGD每次用全量數(shù)據(jù)計(jì)算梯度穩(wěn)定但慢SGD每次只用一個樣本快但震蕩劇烈Mini-batch GD是兩者的折中也是深度學(xué)習(xí)中最常用的方式。復(fù)習(xí)到這里可以想一想為什么SGD的震蕩反而是它逃離局部最優(yōu)點(diǎn)的助力這也是面試和考試中常見的拓展提問。3. 監(jiān)督學(xué)習(xí)核心算法逐個過3.1 線性回歸與模型評估的坑線性回歸是監(jiān)督學(xué)習(xí)的起點(diǎn)。它的核心假設(shè)是y w^T x b目標(biāo)是通過最小化均方誤差來估計(jì)參數(shù)。這里有一個理解難點(diǎn)為什么最小化均方誤差等價于極大似然估計(jì)如果假設(shè)噪聲服從均值為0的高斯分布那么最大化似然函數(shù)經(jīng)過一系列對數(shù)運(yùn)算后得到的優(yōu)化目標(biāo)恰好就是最小化均方誤差。這個推導(dǎo)在期末復(fù)習(xí)時值得親手推一遍它連接了概率論和優(yōu)化兩個知識塊。波士頓房價數(shù)據(jù)集是線性回歸最經(jīng)典的實(shí)驗(yàn)數(shù)據(jù)集之一。它包含506條樣本、13個特征目標(biāo)變量是房屋價格中位數(shù)。如果你在頭歌平臺上做過這個實(shí)驗(yàn)應(yīng)該記得代碼里有個關(guān)鍵步驟是特征歸一化。原因很簡單不同特征的數(shù)值范圍差異非常大比如犯罪率是0到1之間的小數(shù)房間數(shù)卻是3到9之間的整數(shù)如果不歸一化梯度下降的收斂速度會非常慢。歸一化有兩種常見方式標(biāo)準(zhǔn)化的公式是(x - mean) / std在sklearn里對應(yīng)StandardScaler。模型評估也是必考內(nèi)容。回歸任務(wù)看R2、均方誤差分類任務(wù)看準(zhǔn)確率、精確率、召回率、F1、ROC和AUC。這里有一個經(jīng)典陷阱類別不平衡時準(zhǔn)確率會騙人。比如99%的樣本是負(fù)類模型全部預(yù)測為負(fù)類也能拿到99%的準(zhǔn)確率但這顯然是沒用的模型。所以考試常給一個混淆矩陣讓你算精確率和召回率然后判斷模型在不同業(yè)務(wù)場景下的取舍。精確率和召回率是一對矛盾指標(biāo)提高閾值精確率通常上升召回率通常下降。F1是兩者的調(diào)和平均公式是2PR/(PR)調(diào)和平均對較小值更敏感所以只有當(dāng)精確率和召回率都高時F1才高。3.2 分類器從邏輯回歸到SVM邏輯回歸雖然名字里有“回歸”但它本質(zhì)上是分類器。它在線性回歸的基礎(chǔ)上套了一個sigmoid函數(shù)把輸出壓縮到0到1之間表示樣本屬于正類的概率。理解邏輯回歸的關(guān)鍵是理解交叉熵?fù)p失函數(shù)。為什么不用MSE因?yàn)閟igmoid函數(shù)加上MSE會導(dǎo)致?lián)p失函數(shù)非凸梯度下降容易陷入局部最優(yōu)而交叉熵?fù)p失與sigmoid結(jié)合后是凸函數(shù)有全局最優(yōu)解。這個“為什么”是高頻考點(diǎn)。支持向量機(jī)SVM是分類器里的硬骨頭。它的核心思想是找到一個超平面使得兩類樣本到超平面的間隔最大化。間隔越大泛化能力越好這是結(jié)構(gòu)風(fēng)險最小化思想的具體體現(xiàn)。SVM涉及的概念包括函數(shù)間隔、幾何間隔、支持向量、對偶問題、KKT條件、核函數(shù)、軟間隔。期末復(fù)習(xí)到SVM時很多同學(xué)會被“對偶問題”卡住。這里我給你一個復(fù)習(xí)捷徑考試對SVM的考察通常不會讓你從頭推導(dǎo)拉格朗日對偶的每一步而是考你對核心思想的理解。你要能回答這些問題什么是支持向量答距離超平面最近的那些訓(xùn)練樣本點(diǎn)它們決定了超平面的位置。為什么引入核函數(shù)答為了把低維空間線性不可分的數(shù)據(jù)映射到高維空間使其線性可分同時避免顯式計(jì)算映射后的坐標(biāo)。軟間隔中的懲罰參數(shù)C有什么作用C越大對誤分類的懲罰越大模型越傾向于嚴(yán)格分類容易過擬合C越小模型越寬容容易欠擬合。還有一個高頻題“SVM和邏輯回歸有什么區(qū)別”可以從損失函數(shù)hinge loss vs 交叉熵、輸出距離度量 vs 概率、優(yōu)化目標(biāo)最大間隔 vs 最大似然三個角度回答。能說清楚這個對比說明你真正理解了兩種算法的本質(zhì)差異。3.3 決策樹與樹模型的細(xì)節(jié)決策樹是必考算法涉及的子知識點(diǎn)非常多。構(gòu)建決策樹的核心是特征選擇三個經(jīng)典準(zhǔn)則需要對比記憶信息增益ID3選擇信息增益最大的特征劃分。信息增益的計(jì)算公式是父節(jié)點(diǎn)的信息熵減去子節(jié)點(diǎn)的加權(quán)信息熵。增益率C4.5信息增益有個缺點(diǎn)取值數(shù)目多的特征更容易獲得高信息增益。增益率通過除以特征的固有值來懲罰取值多的特征。基尼指數(shù)CARTCART樹使用基尼指數(shù)選擇基尼指數(shù)最小的特征劃分。基尼指數(shù)表示從樣本集中隨機(jī)抽取兩個樣本類別不一致的概率。關(guān)于決策樹期末最常考的是手算信息增益。給你一個小數(shù)據(jù)集讓你計(jì)算某個特征的信息增益。這類題只要記住熵的公式一步一步算就能拿分。熵的公式是Ent(D) -Σ p_k * log2(p_k)。信息增益 Ent(D) - Σ (|D_v|/|D|) * Ent(D_v)。決策樹的過擬合問題也很常考。解決方法是剪枝分預(yù)剪枝和后剪枝。預(yù)剪枝指在構(gòu)建過程中如果當(dāng)前節(jié)點(diǎn)的劃分不能帶來驗(yàn)證集性能提升就停止劃分并標(biāo)記為葉子節(jié)點(diǎn)后剪枝是先把樹長完整再從底向上判斷把不能提升驗(yàn)證集性能的子樹替換成葉子節(jié)點(diǎn)。通常后剪枝保留的分支更多泛化性能往往更好但計(jì)算開銷也更大。如果你復(fù)習(xí)到樹模型建議順手記住隨機(jī)森林的思想它是Bagging加隨機(jī)特征選擇的組合。Bagging的核心是有放回采樣bootstrap每次用不同的樣本子集訓(xùn)練一棵樹最后投票。隨機(jī)森林在Bagging基礎(chǔ)上每次劃分特征時從一個隨機(jī)特征子集中選最優(yōu)劃分特征進(jìn)一步降低樹與樹之間的相關(guān)性。這種“多個模型組合優(yōu)于單個模型”的思想就是集成學(xué)習(xí)的精髓。3.4 集成學(xué)習(xí)AdaBoost和GBDT集成學(xué)習(xí)是期末大題的常客也是工作中最常用的機(jī)器學(xué)習(xí)方法之一。集成學(xué)習(xí)分兩大類Bagging和Boosting。考試常考它們的區(qū)別這里給你一個易記的框架Bagging并行訓(xùn)練多個獨(dú)立模型每個模型用不同的有放回采樣子集訓(xùn)練最終投票或取平均。本質(zhì)上降低方差對高方差模型比如深決策樹效果明顯。Boosting串行訓(xùn)練一系列模型每個新模型重點(diǎn)關(guān)注之前模型預(yù)測錯誤的樣本。本質(zhì)上降低偏差對高偏差模型比如淺決策樹樁效果明顯。AdaBoost是Boosting的代表算法。它的機(jī)制是初始化時所有樣本權(quán)重相等每一輪訓(xùn)練后增大被分錯樣本的權(quán)重讓下一輪的分類器更關(guān)注難分的樣本最后按分類器的錯誤率加權(quán)組合所有弱分類器。理解AdaBoost的關(guān)鍵在于樣本權(quán)重的更新公式和分類器權(quán)重的計(jì)算公式考試常給一個簡化的例子讓你手算一輪權(quán)重更新。GBDT梯度提升決策樹是更進(jìn)階的Boosting算法。它的核心思想是每輪訓(xùn)練一棵決策樹去擬合上一輪預(yù)測的負(fù)梯度殘差而不是直接調(diào)整樣本權(quán)重。GBDT的每一步迭代都是讓新樹去學(xué)習(xí)當(dāng)前模型的“不足”。復(fù)習(xí)時可以對比AdaBoost和GBDT的實(shí)現(xiàn)差異順便了解它在工業(yè)界的地位——很多推薦系統(tǒng)、風(fēng)控模型都用它。基于GBDT改進(jìn)的XGBoost和LightGBM在競賽和工業(yè)場景中一直是非常強(qiáng)的baseline。4. 無監(jiān)督學(xué)習(xí)聚類、降維與EM算法4.1 聚類算法K-Means、層次聚類和DBSCAN聚類是典型的無監(jiān)督學(xué)習(xí)任務(wù)目標(biāo)是把相似樣本分到同一簇中。期末復(fù)習(xí)至少需要掌握三種算法K-Means是最基礎(chǔ)的聚類算法。它的流程是隨機(jī)選k個中心點(diǎn)迭代地執(zhí)行“分配樣本到最近中心點(diǎn)”和“更新中心點(diǎn)為簇內(nèi)均值”兩步直到中心點(diǎn)不再變化或達(dá)到最大迭代次數(shù)。考試常考的問題是K-Means的k怎么選答案是用肘部法則畫出不同k值下?lián)p失函數(shù)所有樣本到所屬簇中心的距離平方和的曲線選擇曲線下降趨勢明顯變緩的拐點(diǎn)。但這個拐點(diǎn)有時候并不明顯所以實(shí)際中還需要結(jié)合業(yè)務(wù)判斷。K-Means的局限性也很常考對初始中心點(diǎn)敏感、只能發(fā)現(xiàn)凸形簇、對異常值敏感。這些局限引出了它的改進(jìn)版K-Means優(yōu)化初始中心點(diǎn)選擇和后面要說的DBSCAN。層次聚類是另一類經(jīng)典方法AGNES是其中最具代表性的自底向上聚類算法。它的思路是一開始每個樣本是一簇然后不斷合并距離最近的兩個簇直到簇數(shù)達(dá)到指定值。這里考點(diǎn)在于“簇間距離”的不同定義最小距離single-linkage、最大距離complete-linkage、平均距離average-linkage。不同距離定義生成的聚類結(jié)果差異很大考試可能會讓你根據(jù)距離定義手算兩個簇的距離。DBSCAN是基于密度的聚類算法它的最大優(yōu)勢是能發(fā)現(xiàn)任意形狀的簇并且能自動識別噪聲點(diǎn)。核心參數(shù)有兩個半徑ε和最小樣本數(shù)MinPts。核心樣本的定義是在半徑為ε的鄰域內(nèi)樣本數(shù)不少于MinPts的樣本。DBSCAN通過不斷訪問鄰域內(nèi)樣本把密度相連的樣本歸入同一個簇。期末常考的是給定一組點(diǎn)和參數(shù)讓你判斷哪些點(diǎn)是核心點(diǎn)、哪些是邊界點(diǎn)、哪些是噪聲點(diǎn)。這類題只要理解了定義就能做對但要注意邊界點(diǎn)屬于哪個簇以及ε半徑小于兩個簇的間距時兩個簇是否會被合并——這些都是出題人喜歡挖的坑。聚類算法的性能評估也需要掌握分外部指標(biāo)和內(nèi)部指標(biāo)。外部指標(biāo)是在有真實(shí)標(biāo)簽的情況下評估聚類結(jié)果常用的是Jaccard系數(shù)、FM指數(shù)和Rand指數(shù)。內(nèi)部指標(biāo)是不需要真實(shí)標(biāo)簽基于簇內(nèi)緊密程度和簇間分離程度來評估常用的是輪廓系數(shù)和DB指數(shù)。輪廓系數(shù)的取值范圍是-1到1越接近1說明聚類效果越好這個在實(shí)驗(yàn)報告中經(jīng)常用到。4.2 降維PCA與流形學(xué)習(xí)降維的目的是在保留數(shù)據(jù)主要結(jié)構(gòu)的前提下減少特征數(shù)量作用包括降低計(jì)算開銷、緩解維度災(zāi)難、便于數(shù)據(jù)可視化。最經(jīng)典的降維算法是PCA它的數(shù)學(xué)原理是找到一組正交基使得數(shù)據(jù)投影到這組基上后方差最大。PCA的操作步驟期末必考對原始數(shù)據(jù)做中心化每個特征減去均值。計(jì)算協(xié)方差矩陣。對協(xié)方差矩陣做特征值分解。取最大的k個特征值對應(yīng)的特征向量組成投影矩陣。用投影矩陣對原始數(shù)據(jù)做線性變換得到降維后的數(shù)據(jù)。這里要理解為什么選擇方差最大的方向方差大意味著數(shù)據(jù)在這個方向上的區(qū)分度大丟失的信息少。PCA是線性降維方法對線性結(jié)構(gòu)的數(shù)據(jù)效果好但遇到流形結(jié)構(gòu)的數(shù)據(jù)就不夠用了。等度量映射Isomap是流形學(xué)習(xí)的代表算法頭歌平臺有專門實(shí)驗(yàn)。它的核心思想是在高維空間中直接計(jì)算歐氏距離會被“扭曲”但數(shù)據(jù)所在的低維流形上樣本之間的測地線距離更能反映真實(shí)的相似度。Isomap的做法是構(gòu)建近鄰圖用圖上的最短路徑近似測地線距離然后對這個距離矩陣做MDS多維縮放。理解了這個邏輯你就能回答“Isomap和PCA的區(qū)別”這類題PCA基于歐氏距離的線性投影Isomap基于測地線距離的非線性嵌入。4.3 EM算法的直覺EM算法最大期望算法在期末復(fù)習(xí)里屬于“看起來很難、其實(shí)考得淺”的知識點(diǎn)。它的應(yīng)用場景是帶有隱變量的概率模型估計(jì)最經(jīng)典的例子是高斯混合模型GMM。EM算法迭代地執(zhí)行E步和M步E步根據(jù)當(dāng)前參數(shù)計(jì)算隱變量的后驗(yàn)概率即每個樣本屬于每個高斯成分的概率。M步用這些后驗(yàn)概率做加權(quán)更新模型參數(shù)均值、方差、混合系數(shù)。直觀理解EME步相當(dāng)于“猜”隱變量的值M步相當(dāng)于根據(jù)“猜”的結(jié)果更新模型參數(shù)然后再用新參數(shù)重新“猜”反復(fù)迭代直到收斂。考試時不太可能讓你完整推導(dǎo)EM公式更多是考它的基本流程和GMM場景下的應(yīng)用。如果時間緊張把這個直覺抓住再把E步和M步各自做什么背清楚這塊分?jǐn)?shù)就能拿下。5. 深度學(xué)習(xí)入門卷積神經(jīng)網(wǎng)絡(luò)的四個關(guān)鍵參數(shù)期末復(fù)習(xí)到了深度學(xué)習(xí)部分經(jīng)常會出現(xiàn)頭歌平臺的“卷積神經(jīng)網(wǎng)絡(luò)卷積、池化、步長、核、填充”實(shí)驗(yàn)。CNN的考點(diǎn)高度集中核心就兩個卷積層和池化層以及四個參數(shù)卷積核大小、步長、填充、池化方式。卷積層的作用是提取局部特征。卷積核也叫濾波器在輸入圖像上滑動每次對覆蓋的區(qū)域做加權(quán)求和得到輸出特征圖上的一個像素點(diǎn)。這里需要理解兩個關(guān)鍵思想局部連接每個神經(jīng)元只連接輸入的局部區(qū)域和參數(shù)共享同一個卷積核在整個輸入上滑動參數(shù)不變。這兩個機(jī)制大幅減少了參數(shù)量是CNN相對全連接網(wǎng)絡(luò)的核心優(yōu)勢。輸出特征圖尺寸的計(jì)算公式是高頻考點(diǎn)輸出尺寸 (輸入尺寸 2 × 填充大小 - 卷積核大小) / 步長 1舉例來說輸入是32×32的圖像卷積核是3×3步長為1填充為1代入公式(32 2×1 - 3)/1 1 32輸出尺寸不變。而paddingsame的含義就是通過填充讓輸出尺寸等于輸入尺寸除以步長后向上取整。如果步長為2paddingsame輸出尺寸就是輸入的一半這是圖像下采樣的常見做法。池化層的作用是下采樣保留主要特征的同時壓縮數(shù)據(jù)量。最大池化取窗口內(nèi)的最大值平均池化取窗口內(nèi)的平均值。最大池化能保留更突出的特征比如邊緣、紋理對光照變化和微小位移有一定魯棒性。考試常問池化層有參數(shù)嗎答案是沒有池化層只有一個池化窗口大小和步長不需要學(xué)習(xí)參數(shù)。還有一個高頻考點(diǎn)是感受野。感受野指輸出特征圖上的一個像素點(diǎn)對應(yīng)輸入圖像上的區(qū)域大小。卷積層堆疊得越深高層特征的感受野越大所以淺層網(wǎng)絡(luò)提取的是邊緣、紋理等低級特征深層網(wǎng)絡(luò)提取的是部件、物體等高級語義特征。這個理解在回答“為什么CNN需要多層堆疊”時非常有用。如果頭歌實(shí)驗(yàn)里用到了PyTorch你還會接觸到nn.Conv2d、nn.MaxPool2d這些接口。有一點(diǎn)要注意PyTorch默認(rèn)的數(shù)據(jù)格式是[batch, channel, height, width]卷積層輸入要求四維張量。很多同學(xué)第一次寫CNN時在這里報錯就是因?yàn)橥洶研螤顝腫batch, height, width, channel]轉(zhuǎn)換成PyTorch要求的格式或者在全連接層前忘了把特征圖展平。6. 動手環(huán)節(jié)環(huán)境配置、數(shù)據(jù)集與實(shí)驗(yàn)思路6.1 Python機(jī)器學(xué)習(xí)環(huán)境配置環(huán)境配置是很多人入門時被勸退的第一個坎。熱搜詞里“機(jī)器學(xué)習(xí)python環(huán)境配置”和那個“安裝程序無法與下載服務(wù)器聯(lián)系”的報錯都在提醒我們環(huán)境問題大多是網(wǎng)絡(luò)和版本問題。我推薦的方式是安裝Anaconda然后用conda創(chuàng)建獨(dú)立的虛擬環(huán)境這樣pandas、numpy、scikit-learn這些包可以一次性裝好不需要一個個去pip。創(chuàng)建環(huán)境的命令是conda create -n ml python3.9 conda activate ml conda install numpy pandas scikit-learn matplotlib jupyter為什么要單獨(dú)建虛擬環(huán)境因?yàn)闄C(jī)器學(xué)習(xí)項(xiàng)目之間依賴經(jīng)常沖突一個項(xiàng)目要用TensorFlow 2.x另一個要用PyTorch 1.x如果裝在同一個環(huán)境里很容易出現(xiàn)包版本互相覆蓋導(dǎo)致運(yùn)行報錯。虛擬環(huán)境相當(dāng)于給每個項(xiàng)目一個獨(dú)立的“房間”互不干擾。如果conda或pip下載包時速度慢或報錯先不要懷疑是包本身有問題大概率是默認(rèn)源的問題。解決辦法是換用國內(nèi)鏡像源比如清華源或阿里源。conda換源的方式是修改.condarc文件pip換源則是在安裝時加上-i參數(shù)pip install pandas -i https://pypi.tuna.tsinghua.edu.cn/simple還有一個常見坑是機(jī)器學(xué)習(xí)包對Python版本有要求。比如某些老版本的TensorFlow在Python 3.10以上裝不上某些科學(xué)計(jì)算包需要64位Python。遇到“安裝程序無法與下載服務(wù)器聯(lián)系”這類報錯時先檢查網(wǎng)絡(luò)再檢查版本最后檢查鏡像源通常三步就能解決問題。6.2 免費(fèi)公開數(shù)據(jù)集去哪找做實(shí)驗(yàn)和期末項(xiàng)目數(shù)據(jù)集是剛需。我把常用的公開數(shù)據(jù)集渠道整理成一個速查表方便你按需取用數(shù)據(jù)集/平臺內(nèi)容特點(diǎn)適用場景Scikit-learn內(nèi)置數(shù)據(jù)集波士頓房價、鳶尾花、手寫數(shù)字、乳腺癌課程實(shí)驗(yàn)、算法練習(xí)最簡單UCI Machine Learning Repository門類豐富各領(lǐng)域經(jīng)典數(shù)據(jù)期末作業(yè)、論文復(fù)現(xiàn)Kaggle Datasets真實(shí)比賽數(shù)據(jù)規(guī)模大、質(zhì)量高競賽、項(xiàng)目實(shí)戰(zhàn)入門天池國內(nèi)平臺中文文檔友好中文場景、入門比賽波士頓房價數(shù)據(jù)集是Scikit-learn里的經(jīng)典內(nèi)置數(shù)據(jù)別的不說光是“用13個特征預(yù)測房價”這一句話就足夠拿來練手線性回歸了。加載方式很簡單from sklearn.datasets import load_boston # 新版sklearn中該數(shù)據(jù)集已移除可用fetch_openml替代 from sklearn.datasets import fetch_openml boston fetch_openml(nameboston, as_frameTrue)這里要提醒一個細(xì)節(jié)新版sklearn已經(jīng)移除了load_boston改用fetch_openml。如果你在別人的代碼里看到load_boston報錯不用慌換成都對應(yīng)的接口就行。寫作業(yè)時如果用fetch_openml記得把數(shù)據(jù)和Series的列名處理一下不然后面建模會報類型錯誤。6.3 頭歌平臺實(shí)驗(yàn)的刷題思路熱搜詞里關(guān)于“頭歌機(jī)器學(xué)習(xí)××”的詞條特別多這說明不少高校的機(jī)器學(xué)習(xí)課程都在用頭歌這個實(shí)訓(xùn)平臺。頭歌實(shí)驗(yàn)的形式通常是給你一個任務(wù)描述和代碼骨架你補(bǔ)全關(guān)鍵的幾行代碼平臺會自動判分。頭歌實(shí)驗(yàn)容易踩的坑有三個。第一個是代碼風(fēng)格問題有些實(shí)驗(yàn)要求你在給定函數(shù)里補(bǔ)全禁止修改函數(shù)簽名也不要打印多余內(nèi)容否則判分程序可能因?yàn)檩敵龈袷讲粚Χ鴪箦e。第二個是庫版本問題平臺預(yù)裝的sklearn版本可能和你本地不一樣個別接口的行為有差異實(shí)驗(yàn)時盡量只依賴平臺已安裝的庫。第三個是數(shù)據(jù)路徑問題平臺通常已經(jīng)把數(shù)據(jù)文件放在工作目錄里直接按照提示讀取文件名即可別自作聰明填絕對路徑。刷頭歌實(shí)驗(yàn)的最佳順序是先看題目要求和函數(shù)簽名明確輸入輸出再動手寫核心邏輯。寫完本地跑通后先處理邊界情況比如空數(shù)組、全零數(shù)據(jù)、樣本數(shù)小于類別的異常場景再提交平臺判分。如果某次提交不過別急著亂改先輸出中間變量的形狀和值定位問題在哪一步。還有一個容易被忽略的操作頭歌平臺支持多線程并行測試不同代碼。如果時間緊可以先提交一個能跑通的版本拿基礎(chǔ)分再逐步優(yōu)化算法效果爭取拿滿數(shù)據(jù)增強(qiáng)或可視化部分的附加分。7. 常見問題與排查技巧實(shí)錄期末復(fù)習(xí)和做實(shí)驗(yàn)時有一些問題幾乎每個人都遇到過。我把它們整理成速查表方便你隨時排查。問題可能原因解決思路梯度下降損失不下降學(xué)習(xí)率過大或過小嘗試不同量級的學(xué)習(xí)率0.1到0.00001觀察損失曲線訓(xùn)練集準(zhǔn)確率高、測試集準(zhǔn)確率低過擬合增加正則化、做交叉驗(yàn)證、增加數(shù)據(jù)量、使用集成方法特征尺度差異大導(dǎo)致收斂慢未做標(biāo)準(zhǔn)化用StandardScaler對特征做標(biāo)準(zhǔn)化聚類結(jié)果全是同一個簇k選擇過大或特征分布異常先歸一化特征再用肘部法則重新選k決策樹過深導(dǎo)致過擬合未剪枝設(shè)置max_depth或min_samples_leaf限制樹復(fù)雜度混淆矩陣?yán)锞_率極高但召回率極低閾值設(shè)置偏高降低分類閾值或改用F1作為優(yōu)化目標(biāo)代碼報錯“ValueError: Expected 2D array”輸入的樣本是一維數(shù)組用reshape(-1, 1)或reshape(1, -1)改變形狀裝包報錯“找不到安裝文件”網(wǎng)絡(luò)或鏡像源問題換成國內(nèi)鏡像源并確認(rèn)Python版本兼容這些坑里最常見的還是前三條。特別是梯度不下降這個問題很多同學(xué)第一個想到的是改模型結(jié)構(gòu)其實(shí)90%的情況是學(xué)習(xí)率設(shè)置得不合理。我個人的調(diào)試習(xí)慣是先用一個非常小的學(xué)習(xí)率跑幾十輪確認(rèn)損失確實(shí)在下降再逐步調(diào)大學(xué)習(xí)率。這樣能快速判斷當(dāng)前問題是出在梯度計(jì)算還是出在學(xué)習(xí)率設(shè)置上。還有一個特別實(shí)用的排查技巧當(dāng)你的模型效果不好時先做一個最小化測試。也就是用一小部分?jǐn)?shù)據(jù)比如100條樣本訓(xùn)練模型如果能逼近100%的準(zhǔn)確率說明模型有足夠的表達(dá)能力問題出在數(shù)據(jù)或調(diào)參上如果連小數(shù)據(jù)都學(xué)不動說明模型或者特征處理本身有問題先解決這個再說。寫在最后個人經(jīng)驗(yàn)是機(jī)器學(xué)習(xí)期末復(fù)習(xí)最忌諱的就是只讀不寫。公式看著懂了跟親手推一遍完全是兩回事算法流程看著懂了跟用代碼實(shí)現(xiàn)一遍也完全是兩回事。我當(dāng)年復(fù)習(xí)SVM看得頭暈后來自己動手寫了一個簡化版的SMO才真正理解了支持向量和間隔到底是怎么回事。推薦一個“三天復(fù)習(xí)法”第一天搭框架畫出六大數(shù)據(jù)塊的知識點(diǎn)思維導(dǎo)圖第二天集中攻關(guān)高頻考點(diǎn)把線性回歸、決策樹、SVM、聚類這四個重點(diǎn)算法的手算過程各練三遍第三天刷錯題和實(shí)驗(yàn)代碼把之前頭歌平臺上做過的實(shí)驗(yàn)重新跑一遍加深對算法流程的肌肉記憶。最后再提醒一個容易被忽視的小技巧復(fù)習(xí)時把每個算法的“三個一”寫下來——一句話講清核心思想、一張圖畫出算法流程、一個例子說明輸入輸出。能寫出來才是真的懂了。祝復(fù)習(xí)順利考試穩(wěn)穩(wěn)過關(guān)。