M1.4 15 分鐘閱讀 2026年9月

M1.4 去噪就是取 Posterior Mean(Tweedie)

本篇重用M1.1從鞋子猜身高:Conditional Expectation·M1.3快篩陽性:Bayes 與 Posterior·M0.3漂流的溫度計:全導數、微分穿過積分與 JVP

起點:讀數是 72.3

全班量體重。用的體重計雜訊已知:每次讀數是真實體重加上一個標準差 1 kg 的 Gaussian 抖動,沒有系統偏差。全班的體重分佈也已知——老師去年量過,大致是平均 62 kg、標準差 8 kg 的鐘形。

某位同學站上去,讀數 72.3 kg

你對他真實體重的最佳猜測是幾公斤?

多數人會說「72.3,還能是什麼?雜訊是對稱的,往上往下機率一樣。」寫下你的答案與確定程度。

這一篇會算出:最佳猜測是 72.14,比讀數低一點。差得不多——但這個「一點」有一條精確的公式,而且當體重計更差時(雜訊 ±3 kg),最佳猜測會變成 71.0,差超過一公斤。直覺「雜訊對稱所以不用修正」漏掉了一件事,而那件事正是前面幾篇準備好的工具要處理的。

課堂提問Q1

把情境翻成數學:隨機變數是什麼?「最佳猜測」的標準是什麼?「全班分佈已知」在這個問題裡扮演什麼角色?

先想一想,再展開看整理後的答案

最直覺的答案是「猜 72.3,因為雜訊平均是零」。這句話對了一半:它正確描述了 YY 給定 XX 的分佈,卻回答錯了問題。

兩個隨機變數。 這位同學是從全班隨機挑出來的一個人,他的真實體重 XX 因此是隨機的,分佈 pXp_X 就是全班的分佈(這是 prior)。讀數 Y=X+σεY=X+\sigma\varepsilonεN(0,1)\varepsilon\sim\mathcal N(0,1)σ=1\sigma=1——這是 likelihood:已知 X=xX=x,讀數落在 yy 的密度是 φσ(yx)\varphi_\sigma(y-x),一個以 xx 為中心的鐘形。

最佳猜測的標準。 用平方誤差計分,M1.2 說最佳猜測是 E[XY=y]\mathbb E[X\mid Y=y]已知讀數是 yy,真實體重的桶內平均。注意方向:直覺說的「雜訊平均是零」是 E[YX]=X\mathbb E[Y\mid X]=X——已知真實值,讀數的平均;我們要的是反過來,E[XY]\mathbb E[X\mid Y]。這兩個條件方向相反,正是 M1.3 那個「有病的人裡多少陽性」與「陽性的人裡多少有病」的差別。

全班分佈的角色。 反過來的條件需要 prior。「讀到 72.3」的人,有的是 71 kg 的人加了 +1.3+1.3 的雜訊,有的是 74 kg 的人加了 1.7-1.7——而全班裡 71 kg 的人比 74 kg 的人(62 是中心,離得越遠越少),所以「讀到 72.3」的人裡偏輕的佔多數。桶內平均因此略低於 72.3。問題變成:這個修正量到底是多少、有沒有一條不必逐一算 posterior 的公式?

站在密度的斜坡上

想像全班的體重密度是一座山,山頂在 62。讀數 72.3 落在山的右坡上——往左(更輕)人比較多,往右(更重)人比較少。

雜訊把每個人的真實體重往左右隨機推 1 kg 左右。站在 72.3 這個位置往回看:從左邊被推過來的人(本來更輕)比從右邊被推過來的人(本來更重)多,因為左邊本來就人多。所以「讀到 72.3」這一群人的真實體重,重心在 72.3 的左邊——往山頂方向。

這就是修正的方向:往密度高的方向修正。修正多少取決於兩件事:坡有多斜(斜坡越陡,左右兩邊的人數差越大),以及雜訊推得多遠(推得越遠,越多遠處的人混進來)。山頂上坡度為零,讀數不用修;山腳下坡很陡、修得多。

三個工具接起來:Tweedie 公式

把「讀數」的密度寫出來。Y=X+σεY=X+\sigma\varepsilon,所以

pY(y)=pX(x)φσ(yx)dx,φσ(u)=12πσeu2/(2σ2).p_Y(y)=\int p_X(x)\,\varphi_\sigma(y-x)\,dx,\qquad \varphi_\sigma(u)=\frac{1}{\sqrt{2\pi}\sigma}e^{-u^2/(2\sigma^2)} .

現在對 yy 微分,三步。

第一步(微分穿過積分,M0.3)。 積分變數是 xx、微分變數是 yy,Leibniz 法則讓 ddy\frac{d}{dy} 直接進到被積函數:

pY(y)=pX(x)yφσ(yx)dx.p_Y'(y)=\int p_X(x)\,\partial_y\varphi_\sigma(y-x)\,dx .

第二步(Gaussian 的 log\nabla\logM0.0)。 yφσ(yx)=yxσ2φσ(yx)\partial_y\varphi_\sigma(y-x)=-\dfrac{y-x}{\sigma^2}\,\varphi_\sigma(y-x)。代入並把 yy 提出:

σ2pY(y)=(xy)pX(x)φσ(yx)dx=xpX(x)φσ(yx)dx    ypY(y).\sigma^2\,p_Y'(y)=\int(x-y)\,p_X(x)\varphi_\sigma(y-x)\,dx=\int x\,p_X(x)\varphi_\sigma(y-x)\,dx\;-\;y\,p_Y(y).

第三步(Bayes,M1.3)。 posterior 是 p(xy)=pX(x)φσ(yx)pY(y)p(x\mid y)=\dfrac{p_X(x)\varphi_\sigma(y-x)}{p_Y(y)}。兩邊除以 pY(y)p_Y(y),第一項就變成用 posterior 加權的平均:

σ2pY(y)pY(y)=xp(xy)dxy=E[XY=y]y.\sigma^2\,\frac{p_Y'(y)}{p_Y(y)}=\int x\,p(x\mid y)\,dx-y=\mathbb E[X\mid Y=y]-y .

整理,就是 Tweedie 公式

 E[XY=y]=y+σ2ddylogpY(y) \boxed{\ \mathbb E[X\mid Y=y]=y+\sigma^2\,\frac{d}{dy}\log p_Y(y)\ }

多維時一字不改,ddy\frac{d}{dy} 換成 gradient:E[XY=y]=y+σ2ylogpY(y)\mathbb E[X\mid Y=y]=y+\sigma^2\nabla_y\log p_Y(y)

讀法:最佳猜測=讀數+(雜訊的 variance)×(讀數密度的相對斜率)。 「往密度高處修正」是 logpY\nabla\log p_Y 的方向;「坡越陡修越多」是它的大小;「雜訊越大修越多」是前面的 σ2\sigma^2。三個直覺各對應公式的一個因子。

展開細節兩件值得多看一眼的事:只需要 p_Y;以及 ∇log 不在乎正規化

只需要讀數的分佈。 公式右邊出現的是 pYp_Y——讀數的密度——而不是 pXp_X。這表示你其實不需要老師去年量的那張表:只要有夠多的讀數(帶雜訊的那種),畫出它們的 histogram、估出斜率,就能算出每個讀數該修多少。Robbins [1] 把這個想法叫 empirical Bayes:prior 不用假設,從資料的邊際分佈裡「借」出來。Efron [2] 在這篇文章裡把它正式命名為 Tweedie’s formula,並用它解釋為什麼「被選出來的最大值」通常高估(selection bias)——被選中的讀數多半站在密度稀疏的坡上,該往回修。

log\nabla\log 不在乎正規化。 M0.0 說過 log(cf)=logf\nabla\log(cf)=\nabla\log f。所以估 pYp_Y 時不需要它的積分等於 1,只要形狀對就夠——這在實務上省掉了一個最難算的量。

回到情境:72.14,還是 71.0

代數字。 全班 XN(62,82)X\sim\mathcal N(62,8^2)、雜訊 σ=1\sigma=1。讀數 Y=X+εY=X+\varepsilon 是兩個獨立 Gaussian 的和,由 M1.0YN(62,64+1)Y\sim\mathcal N(62,\,64+1)。它的 ddylogpY(y)=y6265\frac{d}{dy}\log p_Y(y)=-\dfrac{y-62}{65}。代 y=72.3y=72.3

E[XY=72.3]=72.31×10.365=72.30.16=72.14 kg.\mathbb E[X\mid Y=72.3]=72.3-1\times\frac{10.3}{65}=72.3-0.16=72.14\ \text{kg}.

換一台雜訊 σ=3\sigma=3 的體重計:YN(62,73)Y\sim\mathcal N(62,73),修正 =9×10.373=1.27=-9\times\dfrac{10.3}{73}=-1.27,最佳猜測 71.03 kg

對照直覺。 「72.3 就是最佳猜測」隱含的假設是 pXp_X 是平的——全班每個體重的人一樣多,斜率為零,修正為零。真實的班級不是這樣。在 σ=1\sigma=1 時直覺只差 0.16 kg,因為雜訊小、σ2\sigma^2 這個因子壓住了修正;換到 σ=3\sigma=3σ2\sigma^2 變九倍,直覺就差了一公斤以上。直覺什麼時候夠好:雜訊的 variance 相對於 prior 的寬度很小的時候。 什麼時候不夠好:體重計差、或這位同學的讀數落在全班分佈很稀疏的尾端。

這個結論依賴什麼。 第一,雜訊是 Gaussian——第二步用了 Gaussian 的 log\nabla\log 是線性的;換別種雜訊,公式的形狀會變。第二,σ\sigma 要對——修正乘的是 σ2\sigma^2,所以 σ\sigma 估成一半,修正只剩四分之一。第三,prior 要是這個人所屬的母體——如果站上去的是來訪的老師,全班的分佈就不是他的 prior,公式會把他往學生的體重拉。第四,這是平方誤差下的最佳猜測;換計分方式,答案不再是 posterior mean(M1.2)。

回到情境:模擬全班兩百萬次

import numpy as np
rng = np.random.default_rng(4); n = 2_000_000
def run(noise, sigma=1.0, ys=(66.0, 72.3, 78.0)):
    X = rng.normal(62, 8, n)                                          # 全班體重(prior)
    if noise == "gauss": eps = rng.normal(0, 1, n)
    else: eps = np.where(rng.random(n) < 0.95, rng.normal(0, 1, n), rng.normal(0, 10, n))  # 5% 機率跳格
    Y = X + sigma*eps
    emp = [X[np.abs(Y - y) < 0.1].mean() for y in ys]                 # 標準答案:讀數≈y 的人的平均真實體重
    hist, edges = np.histogram(Y, bins=350, range=(30, 100), density=True)
    c = 0.5*(edges[1:] + edges[:-1]); dlogp = np.gradient(np.log(hist + 1e-12), c)
    tweedie = np.array(ys) + sigma**2*np.interp(ys, c, dlogp)         # Tweedie:只用讀數的 histogram
    print(f"{noise:6s} σ={sigma}: 分桶平均 {np.round(emp, 2)}  Tweedie {np.round(tweedie, 2)}")
run("gauss", 1.0); run("gauss", 3.0); run("glitch", 1.0)

第一行:讀數 72.3 的分桶平均約 72.14、Tweedie 也給 72.14——公式在沒看過 pXp_X 的情況下,只靠讀數的 histogram 就算出了正確的修正;讀數 78 修得更多(0.25-0.25),66 修得少(0.06-0.06),「坡越陡修越多」兌現。第二行 σ=3\sigma=3:72.3 修到約 71.0。第三行是刻意違反「雜訊是 Gaussian」:體重計有 5% 的機率跳出 ±10\pm10 kg 的離譜值。這時分桶平均(標準答案)與 Tweedie 分岔——讀數 78 的人有相當比例其實是跳格的普通同學,標準答案把他們大幅往回拉,而 Tweedie 用 σ2=1\sigma^2=1 只修一點點。公式沒有錯,是它的前提沒了。

先消化一下

想一想

一個線上遊戲用玩家最近 20 場的平均分數當「實力估計」。排行榜前十名的玩家,下一個月的平均分數幾乎都會下降。用本篇的工具,最好的解釋是:

想一想

Tweedie 公式的推導裡,哪一步必須用到「雜訊是 Gaussian」?

想一想

承起點的例子(全班 N(62,82)\mathcal N(62,8^2)σ=1\sigma=1)。若站上體重計的是一位讀數 72.3 的來訪老師,而你仍用全班分佈套公式,會發生什麼事?

參考文獻

  1. Robbins, H. An Empirical Bayes Approach to Statistics. Proceedings of the Third Berkeley Symposium on Mathematical Statistics and Probability, Vol. 1, 1956.(公式的出處之一;Robbins 將其歸功於 M. C. K. Tweedie 的私人通訊。全文在 Project Euclid 的 Berkeley Symposium 專輯裡,這裡不附連結——那個站的網址結構常變。)
  2. Efron, B. Tweedie’s Formula and Selection Bias. Journal of the American Statistical Association 2011.(正式命名「Tweedie’s formula」、empirical Bayes 的估法、以及 selection bias 的解釋。)
  3. Stein, C. M. Estimation of the Mean of a Multivariate Normal Distribution. Annals of Statistics 1981.(Stein’s lemma——Gaussian 下「微分穿過期望」的同一個代數——與多維的收縮估計。)