MLE全攻略:從數(shù)學(xué)原理到工程實(shí)踐)
1. 先從一次“猜箱子”說起最大似然估計(jì)到底在做什么我賭你第一次接觸最大似然估計(jì)的時(shí)候跟我一樣盯著教材上那一串連乘公式發(fā)呆——L(θ)∏P(x?|θ)看著看著就困了。后來我換了個(gè)角度理解它一下就通了最大似然估計(jì)的整個(gè)邏輯其實(shí)就藏在一個(gè)“猜箱子”的游戲里。假設(shè)你面前有兩個(gè)箱子A箱里有90個(gè)白球10個(gè)黑球B箱里有10個(gè)白球90個(gè)黑球。你閉著眼睛摸了一次摸出來一個(gè)白球。現(xiàn)在問題來了你更傾向于認(rèn)為這個(gè)白球是從哪個(gè)箱子里摸出來的答案是A箱因?yàn)锳箱摸出白球的概率是0.9B箱只有0.1。如果我再讓你摸一次又摸出一個(gè)白球你幾乎可以拍胸脯說就是A箱——兩次都摸出白球的概率A箱是0.81B箱是0.01差距已經(jīng)非常懸殊了。這個(gè)樸素得不能再樸素的推理過程就是最大似然估計(jì)的核心思想選定一組參數(shù)使得“當(dāng)前已經(jīng)觀測(cè)到的數(shù)據(jù)”出現(xiàn)的概率最大。哪個(gè)參數(shù)讓數(shù)據(jù)出現(xiàn)的概率最高我就信哪個(gè)參數(shù)。就這么簡(jiǎn)單。往專業(yè)了說最大似然估計(jì)Maximum Likelihood Estimation縮寫MLE是一種參數(shù)估計(jì)方法。我們?cè)谧鼋y(tǒng)計(jì)建模時(shí)往往會(huì)假設(shè)數(shù)據(jù)服從某個(gè)已知形式的分布比如正態(tài)分布、泊松分布、指數(shù)分布但分布里的參數(shù)是未知的。MLE的任務(wù)就是根據(jù)手里已有的樣本觀測(cè)值反過來推斷最合理的參數(shù)取值是多少。這個(gè)“反過來推斷”的過程在統(tǒng)計(jì)學(xué)里叫“逆概率”問題而MLE就是解決這類問題最經(jīng)典、最主流的工具之一。我剛工作那會(huì)兒第一次在真實(shí)項(xiàng)目里用MLE是做用戶行為數(shù)據(jù)的時(shí)長(zhǎng)分布擬合。當(dāng)時(shí)需要估計(jì)一個(gè)指數(shù)分布的速率參數(shù)λ用來預(yù)測(cè)用戶在某頁(yè)面停留時(shí)間的概率分布。一開始我真是硬套公式把似然函數(shù)寫出來、取對(duì)數(shù)、求導(dǎo)、令導(dǎo)數(shù)為零、解出參數(shù)步驟全對(duì)但心里始終沒底——為什么要取對(duì)數(shù)為什么導(dǎo)數(shù)為零就能找到最大值后來把這些“為什么”一個(gè)個(gè)想透了才算是真正會(huì)用了。這篇文章把我的理解整理出來希望能幫你少走我當(dāng)年走過的彎路。這篇文章適合這幾類人看正在學(xué)概率統(tǒng)計(jì)或機(jī)器學(xué)習(xí)的同學(xué)面試前需要快速搞懂MLE原理的求職者以及在實(shí)際工作中需要用MLE做參數(shù)估計(jì)、但不想只停留在“調(diào)包”層面的從業(yè)者。我會(huì)從數(shù)學(xué)原理講到實(shí)際計(jì)算再講到我踩過的坑盡量做到既能讓新手聽懂也讓老手有收獲。2. 為什么偏偏是“最大似然”而不是“矩估計(jì)”或“貝葉斯估計(jì)”學(xué)MLE的時(shí)候很多人會(huì)有一個(gè)困惑參數(shù)估計(jì)方法有好幾種為什么最大似然估計(jì)能成為最主流的選擇它到底比其他方法強(qiáng)在哪里要回答這個(gè)問題得先看看它的競(jìng)爭(zhēng)對(duì)手們。先說矩估計(jì)。矩估計(jì)的思路是“樣本矩等于總體矩”比如說正態(tài)分布有兩個(gè)參數(shù)μ和σ2那我就用樣本均值去估計(jì)μ用樣本方差去估計(jì)σ2因?yàn)闃颖揪档钠谕褪铅虡颖痉讲畹钠谕褪铅?。這個(gè)方法的優(yōu)點(diǎn)是計(jì)算簡(jiǎn)單甚至不用知道分布的具體形式只要知道一階矩和二階矩就夠了。但缺點(diǎn)也很明顯它只用了樣本的一階矩和二階矩信息樣本里的其他信息全被浪費(fèi)了。而且當(dāng)分布比較復(fù)雜時(shí)矩估計(jì)的結(jié)果往往不是最精確的。舉個(gè)極端例子如果數(shù)據(jù)里有幾個(gè)異常大的離群值樣本均值會(huì)被拉得很偏矩估計(jì)的參數(shù)也跟著失真。再說貝葉斯估計(jì)。貝葉斯估計(jì)的思路完全不同它在MLE的基礎(chǔ)上引入了“先驗(yàn)分布”把參數(shù)也當(dāng)作隨機(jī)變量結(jié)合先驗(yàn)信息和觀測(cè)數(shù)據(jù)得到“后驗(yàn)分布”。這個(gè)方法在理論上非常優(yōu)雅當(dāng)先驗(yàn)信息可靠時(shí)估計(jì)結(jié)果通常會(huì)比MLE更好尤其是在小樣本場(chǎng)景下先驗(yàn)可以起到“正則化”的作用防止參數(shù)跑到不合理的范圍里去。但問題在于先驗(yàn)怎么選選了不同的先驗(yàn)結(jié)果可能差很多。如果你對(duì)問題領(lǐng)域不熟瞎選先驗(yàn)還不如不選先驗(yàn)。此外貝葉斯估計(jì)通常需要計(jì)算后驗(yàn)分布很多情況下沒有解析解得靠MCMC之類的數(shù)值采樣方法計(jì)算成本比MLE高一個(gè)量級(jí)。MLE正好站在兩者之間。它不引入先驗(yàn)完全“讓數(shù)據(jù)說話”避免了主觀性它又比矩估計(jì)更充分地利用了數(shù)據(jù)信息——它基于的是整個(gè)樣本的聯(lián)合概率分布而不是僅僅一階矩二階矩。在樣本量足夠大的情況下MLE有一系列非常漂亮的統(tǒng)計(jì)性質(zhì)一致性樣本量越大估計(jì)值越接近真實(shí)值、漸近正態(tài)性大樣本下估計(jì)量的分布近似正態(tài)、漸近有效性在所有一致估計(jì)量中它的漸近方差最小。這些性質(zhì)讓MLE成為統(tǒng)計(jì)推斷的“默認(rèn)選擇”。拿一個(gè)我實(shí)際處理過的案例來說明。我之前做過一個(gè)電商場(chǎng)景的客單價(jià)分布擬合數(shù)據(jù)明顯右偏用對(duì)數(shù)正態(tài)分布建模比較合適。這時(shí)候用矩估計(jì)我只需要算樣本的均值和方差然后反推對(duì)數(shù)正態(tài)的兩個(gè)參數(shù)μ和σ計(jì)算確實(shí)快。但問題來了數(shù)據(jù)里有幾個(gè)大促期間的極端高客單價(jià)記錄直接導(dǎo)致樣本均值虛高矩估計(jì)的μ和σ出現(xiàn)了明顯偏差擬合出來的分布和實(shí)際數(shù)據(jù)形態(tài)差得很遠(yuǎn)。換成MLE重新估計(jì)之后雖然在計(jì)算上多花了一點(diǎn)時(shí)間但對(duì)數(shù)似然函數(shù)對(duì)這些離群值的懲罰機(jī)制是自然的不會(huì)因?yàn)樯贁?shù)極端值就產(chǎn)生破壞性影響擬合效果肉眼可見地好了。當(dāng)然MLE也有自己的短板。它依賴你對(duì)分布形式的假設(shè)如果你假設(shè)錯(cuò)了比如明明是雙峰分布你偏假設(shè)成單峰正態(tài)MLE照樣給你一個(gè)“在錯(cuò)誤假設(shè)下最優(yōu)”的結(jié)果這就是所謂的“模型錯(cuò)誤設(shè)定”風(fēng)險(xiǎn)。另外在小樣本場(chǎng)景下MLE容易過擬合估計(jì)結(jié)果可能偏激。這些限制我們?cè)趯?shí)際使用的時(shí)候要心里有數(shù)。3. 似然函數(shù)與對(duì)數(shù)似然為什么必須取對(duì)數(shù)以及“負(fù)號(hào)”的來歷MLE的數(shù)學(xué)過程看起來很簡(jiǎn)單寫出似然函數(shù)對(duì)參數(shù)求導(dǎo)令導(dǎo)數(shù)為零解出參數(shù)。但每一步背后都有講究我把關(guān)鍵環(huán)節(jié)拆開講。3.1 似然函數(shù)和概率函數(shù)到底差在哪教科書上常說“似然函數(shù)和概率函數(shù)在形式上是一樣的但視角不同”。這句話當(dāng)年讓我迷糊了很久因?yàn)閺墓缴峡碢(x|θ)就是P(x|θ)能有什么區(qū)別區(qū)別在于概率函數(shù)是已知參數(shù)θ描述數(shù)據(jù)x出現(xiàn)的可能性似然函數(shù)是已知數(shù)據(jù)x評(píng)估不同參數(shù)θ下這組數(shù)據(jù)出現(xiàn)的可能性。打個(gè)比方概率函數(shù)是“我已經(jīng)知道硬幣的偏斜程度問投出正面的概率是多少”似然函數(shù)是“我已經(jīng)看到投了10次出了8次正面問這枚硬幣偏斜到何種程度才最可能產(chǎn)生這個(gè)結(jié)果”。同一個(gè)數(shù)學(xué)表達(dá)式一個(gè)把θ當(dāng)已知一個(gè)把x當(dāng)已知這就是視角的轉(zhuǎn)換。寫公式的時(shí)候更準(zhǔn)確地說似然函數(shù)通常寫作L(θ|x)強(qiáng)調(diào)θ是變量x是給定的觀測(cè)值。3.2 為什么要把連乘變成連加假設(shè)我們有n個(gè)獨(dú)立同分布的樣本x?, x?, ..., x?它們來自某個(gè)概率密度函數(shù)f(x|θ)那么這組樣本的聯(lián)合密度就是每個(gè)樣本密度的乘積L(θ) ∏???? f(x?|θ)理論上我們直接最大化這個(gè)乘積就行。但實(shí)際計(jì)算中會(huì)碰到兩個(gè)大問題第一個(gè)問題是數(shù)值下溢。n稍微大一點(diǎn)比如幾百個(gè)樣本每個(gè)f(x?|θ)都在0到1之間幾百個(gè)小于1的數(shù)相乘結(jié)果會(huì)以指數(shù)級(jí)縮小。在計(jì)算機(jī)浮點(diǎn)數(shù)體系里這個(gè)乘積很快就變成0了連個(gè)影都留不下。第二個(gè)問題是求導(dǎo)不便。乘積的導(dǎo)數(shù)要用乘法法則n個(gè)函數(shù)相乘的導(dǎo)數(shù)展開之后是n項(xiàng)相加每一項(xiàng)都是一長(zhǎng)串乘積式子復(fù)雜到?jīng)]法看手工推導(dǎo)幾乎不可能。對(duì)數(shù)函數(shù)是單調(diào)遞增函數(shù)所以log(L(θ))和L(θ)在同一個(gè)θ處取得最大值——這是整個(gè)取對(duì)數(shù)操作的理論基石。取完對(duì)數(shù)之后乘法變成加法log L(θ) Σ???? log f(x?|θ)數(shù)值下溢問題解決了加法不會(huì)讓結(jié)果小到溢出求導(dǎo)問題也簡(jiǎn)單了對(duì)數(shù)函數(shù)求導(dǎo)比乘積求導(dǎo)友好太多一舉兩得。這就是為什么所有MLE的實(shí)際計(jì)算都在對(duì)數(shù)空間進(jìn)行。3.3 “負(fù)對(duì)數(shù)似然”的來歷最小化與最大化的等價(jià)做機(jī)器學(xué)習(xí)的朋友應(yīng)該對(duì)“負(fù)對(duì)數(shù)似然”這個(gè)詞不陌生PyTorch里的CrossEntropyLoss本質(zhì)上就是在最小化負(fù)對(duì)數(shù)似然。為什么要把最大化問題變成最小化問題純粹是工程習(xí)慣。絕大多數(shù)優(yōu)化算法梯度下降、L-BFGS等都是為“最小化”設(shè)計(jì)的你讓它們?nèi)フ易钚≈当日易畲笾等菀椎枚?。既然min(-log L(θ))和max(log L(θ))等價(jià)那干脆加個(gè)負(fù)號(hào)把問題統(tǒng)一成最小化。我早期寫代碼時(shí)一直不理解為什么損失函數(shù)前面帶個(gè)負(fù)號(hào)還以為是數(shù)學(xué)上有什么特別的講究后來才明白沒有玄學(xué)就是懶為了讓優(yōu)化器好干活。3.4 從求導(dǎo)到求解以正態(tài)分布為例手推一遍理論說了半天不如親手推一遍印象深刻。我以最常用的正態(tài)分布為例假設(shè)樣本x?, x?, ..., x?獨(dú)立同分布于N(μ, σ2)我們要估計(jì)μ和σ2。正態(tài)分布的概率密度函數(shù)是f(x|μ, σ2) (1 / √(2πσ2)) · exp(-(x-μ)2 / (2σ2))寫出對(duì)數(shù)似然函數(shù)log L(μ, σ2) Σ???? [-1/2 · log(2πσ2) - (x?-μ)2 / (2σ2)]展開一下log L(μ, σ2) -n/2 · log(2π) - n/2 · log(σ2) - (1/(2σ2)) · Σ???? (x?-μ)2先對(duì)μ求偏導(dǎo)令其為零?logL/?μ (1/σ2) · Σ???? (x?-μ) 0解得μ? (1/n) · Σ???? x? x?也就是說正態(tài)分布均值參數(shù)μ的極大似然估計(jì)就是樣本均值。這個(gè)結(jié)果很直觀數(shù)據(jù)聚類中心在哪μ就在哪。再對(duì)σ2求偏導(dǎo)令其為零。這里我提醒一下對(duì)σ2求導(dǎo)時(shí)要把它看成一個(gè)整體變量不要分步去求否則容易亂。過程如下?logL/?σ2 -n/(2σ2) (1/(2σ?)) · Σ???? (x?-μ)2 0整理得σ?2 (1/n) · Σ???? (x?-μ?)2注意這里的分母是n不是n-1。這意味著MLE給出的方差估計(jì)是有偏的——它用的是n做分母而經(jīng)典的無(wú)偏估計(jì)量用的是n-1。樣本量小的時(shí)候MLE的方差估計(jì)會(huì)系統(tǒng)性地低估真實(shí)方差。這一點(diǎn)在實(shí)際使用中要特別注意。好在樣本量一大n和n-1的差別可以忽略不計(jì)但在小樣本場(chǎng)景下如果你需要用方差做推斷建議把MLE的結(jié)果修正一下乘以n/(n-1)。4. 從解析解到數(shù)值解真實(shí)世界里的MLE是怎么計(jì)算出來的手動(dòng)推導(dǎo)正態(tài)分布的MLE很爽因?yàn)槟芮蟪鼋馕鼋庖粋€(gè)公式直接算出來。但真實(shí)世界里的分布大多沒有這么溫柔。比如邏輯回歸的似然函數(shù)或者更復(fù)雜的混合模型求導(dǎo)之后得到的方程組往往沒有閉式解必須靠數(shù)值優(yōu)化的方法迭代求解。這塊內(nèi)容很多教程不太講但實(shí)際工程里避不開我單獨(dú)開一節(jié)說說。4.1 什么時(shí)候能寫出解析解什么時(shí)候必須走數(shù)值優(yōu)化簡(jiǎn)單的判斷標(biāo)準(zhǔn)是如果對(duì)數(shù)似然函數(shù)關(guān)于參數(shù)是二次形式比如正態(tài)分布對(duì)μ求導(dǎo)之后是線性方程那就能直接解出參數(shù)。反過來如果對(duì)數(shù)似然函數(shù)是參數(shù)的復(fù)雜非線性函數(shù)比如邏輯回歸里的sigmoid函數(shù)套在參數(shù)里求導(dǎo)之后是超越方程沒有解析解只能迭代。我整理一個(gè)常見分布MLE求解方式的對(duì)照表供你快速參考分布待估參數(shù)求解方式說明正態(tài)分布μ, σ2解析解μ?樣本均值σ?2(1/n)Σ(x?-μ?)2泊松分布λ解析解λ?樣本均值因?yàn)椴此煞植计谕褪铅酥笖?shù)分布λ解析解λ?1/樣本均值注意是倒數(shù)關(guān)系伯努利分布p解析解p?樣本中事件發(fā)生的頻率邏輯回歸回歸系數(shù)β數(shù)值解梯度下降/牛頓法迭代正態(tài)混合模型各組μ, σ, 權(quán)重?cái)?shù)值解通常用EM算法直接迭代容易陷入局部最優(yōu)Weibull分布形狀參數(shù)k, 尺度參數(shù)λ數(shù)值解形狀參數(shù)k的方程是超越方程只能數(shù)值求解我在實(shí)際項(xiàng)目中最常遇到的兩類情況一類是數(shù)據(jù)服從已知的簡(jiǎn)單分布直接用解析解套公式快得很另一類是邏輯回歸或神經(jīng)網(wǎng)絡(luò)這類模型似然函數(shù)沒有解析解必須走優(yōu)化算法。后者的計(jì)算過程里有一個(gè)我在實(shí)戰(zhàn)中反復(fù)踩坑的細(xì)節(jié)梯度的計(jì)算一定要自己驗(yàn)證一下不要盲信推導(dǎo)結(jié)果。4.2 牛頓法和梯度下降法在MLE里的實(shí)際應(yīng)用數(shù)值求解MLE最樸素的方法是梯度上升既然我們要最大化對(duì)數(shù)似然。每一步讓參數(shù)沿著梯度方向走一小步θ_new θ_old η · ?logL(θ)這里η是學(xué)習(xí)率也叫步長(zhǎng)。步長(zhǎng)太小收斂慢步長(zhǎng)太大容易震蕩甚至發(fā)散。我剛開始調(diào)參時(shí)吃過步長(zhǎng)太大的虧——損失函數(shù)一路狂飆直接溢出成NaN。后來經(jīng)驗(yàn)是先設(shè)一個(gè)比較小的步長(zhǎng)觀察幾次迭代的損失變化趨勢(shì)如果每一步都在下降對(duì)于負(fù)對(duì)數(shù)似然來說可以嘗試逐漸加大步長(zhǎng)加快收斂。如果追求更快的收斂速度牛頓法是個(gè)好選擇。牛頓法不僅用一階導(dǎo)梯度還用二階導(dǎo)Hessian矩陣相當(dāng)于考慮了損失函數(shù)曲率信息在接近最優(yōu)解時(shí)收斂非常快。它的迭代公式是θ_new θ_old - H?1 · ?logL(θ)其中H是Hessian矩陣。但牛頓法的代價(jià)也很明顯Hessian矩陣的計(jì)算和求逆在參數(shù)維度高的時(shí)候開銷巨大n×n的矩陣求逆是O(n3)復(fù)雜度參數(shù)一多就扛不住。所以實(shí)際工程里大家更常用的是擬牛頓法比如L-BFGS它用梯度的歷史信息近似Hessian既保留了牛頓法收斂快的優(yōu)點(diǎn)又避開了顯式計(jì)算Hessian的高昂成本。我個(gè)人的建議是如果你的問題是中小規(guī)模參數(shù)不超過幾千直接上L-BFGS如果是深度模型這種大規(guī)模問題用SGD或Adam。在統(tǒng)計(jì)推斷場(chǎng)景下L-BFGS往往比SGD更適合——它不需要調(diào)學(xué)習(xí)率收斂穩(wěn)定而且能直接給出比較精確的最優(yōu)解。我自己在R里做glm擬合時(shí)底層用的就是IRLS迭代加權(quán)最小二乘本質(zhì)上也和牛頓法同源。4.3 一個(gè)完整的小例子手寫邏輯回歸的MLE求解我拿邏輯回歸舉個(gè)例子幫你串一遍數(shù)值求解MLE的完整流程。邏輯回歸假設(shè)P(y1|x) 1 / (1 exp(-w?x))我們的目標(biāo)是找到一組權(quán)重w使得訓(xùn)練數(shù)據(jù)的對(duì)數(shù)似然最大。單個(gè)樣本的對(duì)數(shù)似然貢獻(xiàn)是log P(y?|x?, w) y? · log σ(w?x?) (1-y?) · log(1-σ(w?x?))整個(gè)訓(xùn)練集的對(duì)數(shù)似然就是每個(gè)樣本貢獻(xiàn)之和。接下來求梯度?logL(w) Σ? (y? - σ(w?x?)) · x?這個(gè)式子太漂亮了——誤差項(xiàng)真實(shí)值減預(yù)測(cè)概率乘以特征向量然后求和。這種形式在廣義線性模型里很常見背后有深刻的統(tǒng)計(jì)原理但這里不展開。有了梯度就可以用梯度上升迭代求解。我在實(shí)際寫代碼時(shí)會(huì)在每個(gè)epoch打印一次負(fù)對(duì)數(shù)似然值確認(rèn)它是在單調(diào)下降的。有一回我發(fā)現(xiàn)損失在迭代到第50輪左右突然不再下降卡住了怎么調(diào)學(xué)習(xí)率都過不去。后來檢查發(fā)現(xiàn)是某個(gè)特征沒有做標(biāo)準(zhǔn)化取值量級(jí)比其他特征大好幾個(gè)數(shù)量級(jí)導(dǎo)致梯度方向嚴(yán)重偏向那個(gè)特征優(yōu)化過程變得極其緩慢。把所有特征標(biāo)準(zhǔn)化減去均值、除以標(biāo)準(zhǔn)差之后同樣的迭代設(shè)置損失在20輪內(nèi)就收斂了。這種“看起來玄學(xué)”的問題根源就是特征量綱不統(tǒng)一血的教訓(xùn)。5. 四個(gè)坑與一個(gè)彩蛋我的MLE實(shí)戰(zhàn)經(jīng)驗(yàn)總結(jié)這幾節(jié)重點(diǎn)說說我實(shí)際使用MLE時(shí)踩過的坑以及我是怎么排查解決的。這些東西教科書上不寫但真的能救命。5.1 坑一數(shù)值下溢你的“似然”直接歸零前面提到過連乘會(huì)導(dǎo)致數(shù)值下溢取對(duì)數(shù)能解決這個(gè)問題。但有些場(chǎng)景下即使取了對(duì)數(shù)還是會(huì)撞上下溢。比如一個(gè)數(shù)據(jù)的概率密度極其小log之后是一個(gè)非常大的負(fù)數(shù)比如-10000幾個(gè)加起來負(fù)對(duì)數(shù)似然直接爆掉。我遇到過一次最極端的情況是在擬合一個(gè)高維正態(tài)分布時(shí)涉及協(xié)方差矩陣的行列式計(jì)算。行列式值小到浮點(diǎn)數(shù)精度之外導(dǎo)致整個(gè)似然函數(shù)變成非法值。排查了半天最后用Log-Determinant技巧直接在對(duì)數(shù)域計(jì)算行列式的對(duì)數(shù)才解決。經(jīng)驗(yàn)總結(jié)在涉及MLE的代碼里盡量全程在對(duì)數(shù)域操作中間過程如果必須回到原始概率空間一定要檢查結(jié)果是否有下溢風(fēng)險(xiǎn)。在Python里可以用scipy.special.logsumexp這個(gè)函數(shù)專門解決對(duì)數(shù)域加法問題數(shù)值穩(wěn)定性比直接exp之后再加要好得多。5.2 坑二多峰似然函數(shù)你找到的“最大”可能不是真的最大很多似然函數(shù)不是單峰的尤其是混合模型或者包含隱變量的模型。梯度上升從不同的初始點(diǎn)出發(fā)可能收斂到不同的局部最優(yōu)值。我調(diào)試高斯混合模型時(shí)用K-means的結(jié)果初始化參數(shù)通常能得到不錯(cuò)的解但如果隨機(jī)初始化偶爾會(huì)收斂到一個(gè)很差的局部最優(yōu)。經(jīng)驗(yàn)總結(jié)多跑幾次不同的初始值選負(fù)對(duì)數(shù)似然最小的那組參數(shù)。這也是為什么scikit-learn里的GaussianMixture模型有個(gè)n_init參數(shù)默認(rèn)就是10意思是跑10次不同的初始化保留最優(yōu)結(jié)果。不是老外閑得慌是真的有必要。還有一個(gè)實(shí)戰(zhàn)技巧檢查Hessian矩陣是否正定。在最優(yōu)解附近Hessian應(yīng)該是正定的所有特征值為正如果不是說明你可能根本沒收斂到極大值點(diǎn)而是卡在了鞍點(diǎn)上。不過手算Hessian太費(fèi)勁我現(xiàn)在基本靠一個(gè)經(jīng)驗(yàn)判斷查看迭代結(jié)束時(shí)梯度范數(shù)是否足夠小比如小于1e-6如果梯度還很大那一定沒收斂好換個(gè)初始點(diǎn)再跑。5.3 坑三分布假設(shè)錯(cuò)了MLE再努力也是白搭這是MLE最隱蔽的一個(gè)坑。MLE只會(huì)幫你找到“在你假設(shè)的分布族內(nèi)最合適的參數(shù)”它不會(huì)告訴你“你假設(shè)的分布族本身就不對(duì)”。如果你拿單峰正態(tài)去擬合一個(gè)雙峰數(shù)據(jù)MLE給出的μ和σ2雖然能讓正態(tài)分布的似然最大但這個(gè)正態(tài)分布和真實(shí)數(shù)據(jù)的形態(tài)差了十萬(wàn)八千里。怎么規(guī)避我通常的做法是先用可視化工具粗略看一下數(shù)據(jù)分布形態(tài)。畫個(gè)直方圖看一眼是單峰還是多峰是左偏還是右偏心里大概有個(gè)譜再?zèng)Q定用哪個(gè)分布族。有時(shí)候我也會(huì)同時(shí)擬合兩三個(gè)候選分布然后用AIC或BIC做比較——這兩個(gè)指標(biāo)都在似然值的基礎(chǔ)上加了參數(shù)數(shù)量的懲罰項(xiàng)能在不同模型之間做公平比較。選AIC或BIC最小的那個(gè)模型。這一套流程走下來基本能避免“假設(shè)錯(cuò)誤”這個(gè)坑。5.4 坑四小樣本場(chǎng)景下MLE的過擬合與有偏性問題我前面提到過MLE在樣本量小的時(shí)候方差估計(jì)會(huì)有偏分母n導(dǎo)致的低估而且整個(gè)估計(jì)結(jié)果容易過擬合。比如你用10個(gè)樣本估計(jì)一個(gè)10參數(shù)的模型MLE可以完美擬合所有樣本點(diǎn)但這這個(gè)結(jié)果毫無(wú)泛化能力。這條經(jīng)驗(yàn)的實(shí)操含義是如果樣本量相對(duì)于參數(shù)數(shù)量不夠充裕考慮加正則化相當(dāng)于貝葉斯先驗(yàn)或者換用其他估計(jì)方法。我處理小樣本問題時(shí)的經(jīng)驗(yàn)是如果樣本量小于參數(shù)數(shù)量的10倍MLE結(jié)果就要打問號(hào)了至少要結(jié)合交叉驗(yàn)證來評(píng)估穩(wěn)定性。5.5 彩蛋把MLE和損失函數(shù)家族聯(lián)系起來最后一個(gè)經(jīng)驗(yàn)也是我認(rèn)為最有價(jià)值的認(rèn)知升級(jí)MLE其實(shí)是一整個(gè)損失函數(shù)家族的源頭?;貧w問題里用平方損失MSE對(duì)應(yīng)的是假設(shè)誤差服從正態(tài)分布時(shí)的MLE分類問題里用交叉熵?fù)p失對(duì)應(yīng)的是假設(shè)輸出服從伯努利分布多分類就是多項(xiàng)分布時(shí)的MLE計(jì)數(shù)問題里可能用到Poisson損失對(duì)應(yīng)的是假設(shè)數(shù)據(jù)服從泊松分布的MLE。所以你會(huì)發(fā)現(xiàn)深度學(xué)習(xí)里很多看似“設(shè)計(jì)出來”的損失函數(shù)其實(shí)都是從概率假設(shè)出發(fā)、用MLE框架自然推導(dǎo)出來的。理解了這層關(guān)系下次你在面試或?qū)嶋H項(xiàng)目中被人問到“為什么分類用交叉熵、回歸用均方誤差”你可以從MLE的視角給出一個(gè)特別有說服力的解釋因?yàn)樗鼈冊(cè)诟髯缘母怕始僭O(shè)下是“最大似然”的天然產(chǎn)物。我個(gè)人在實(shí)際操作中的體會(huì)是MLE真正難的地方不在數(shù)學(xué)推導(dǎo)而在于建模時(shí)的每個(gè)選擇——選什么分布、怎么處理數(shù)值問題、怎么判斷收斂——這些都需要實(shí)際踩坑才能積累感覺。建議你找個(gè)真實(shí)數(shù)據(jù)集哪怕是自己造的數(shù)據(jù)把邏輯回歸的MLE從零手寫一遍不用任何機(jī)器學(xué)習(xí)庫(kù)就用梯度上升迭代硬解。跑通了之后你對(duì)MLE的理解會(huì)有一個(gè)質(zhì)的飛躍。這個(gè)練習(xí)我到現(xiàn)在還給團(tuán)隊(duì)里的新同學(xué)布置反饋都說收獲比讀十遍教材都大。