在之前的博客中,我們為了理解廣義線性模型引入了指數族分布,不過我們並沒有理解指數族分布是怎么來的。這篇博客我們就來簡單介紹指數族分布的推導與應用。
為什么需要指數族分布
機器學習經常要做這樣一件事:給定一組訓練數據 D,我們希望通過 D 得到我們研究的空間的概率分布。這樣,給出一個測試數據,我們就可以找出條件概率中概率最大的那個點,將其作為答案輸出。
但是在沒有任何假設的情況下,直接學習概率分布是不現實的。直接學習概率分布最簡單的方法,就是把空間分成很多很多小的單元,然后統計樣本落在每個單元的頻率,作為每個單元的概率分布。但是這種方法會面臨着數據不足、有噪音、存儲能力受限等問題。單元分隔得越細,學習到得概率分布就越准確,但是我們就需要越多的數據來訓練,也需要越多的存儲空間來存儲(一維的時候存儲 $n$ 個單元,二維就要 $n^2$,三維就要 $n^3$...),這樣的方法對於高維數據來說是絕對不可行的。
所以在大多數情況下,我們都會人為指定某種概率分布的形式(例如指定為高斯分布或伯努利分布等)。這樣,對概率函數的學習就轉化為了函數參數的學習,減小了學習的難度;我們也只需要存儲我們感興趣的統計量(例如對於高斯分布,我們只需要存儲均值和方差;對於伯努利分布,我們只需要存儲取正類的概率),減小了對存儲空間的需求。當然,由於人為限定了概率分布形式,我們就需要根據不同的問題選擇不同的分布,就像對不同問題選擇不同的機器學習模型一樣。
指數族分布就是一類常用的分布模型,它有很多優良的性質。接下來我們介紹指數族分布的推導和性質。
指數族分布的推導
我們用離散模型介紹指數族分布的推導,連續模型的推導也類似。
設 $X^{(i)}$ 表示第 $i$ 條訓練數據,$\phi(X^{(i)})$ 表示從第 $i$ 條訓練數據中我們感興趣的統計量(是一個向量,這樣我們就可以表示兩個或者更多我們感興趣的統計量)。我們希望我們的概率模型 $p$ 能滿足以下性質 $$\mathbb{E}_p[\phi(X)] = \hat{\mu}$$ 其中 $$\hat{\mu} = \frac{1}{n}\sum_{i=1}^m\phi(X^{(i)})$$ 簡單來說,就是概率模型的期望等於所有訓練數據的均值,這個希望應該是非常合理的。
但滿足這個條件的概率模型有很多種,我們再加一條限制:這個概率模型要有最大的信息熵,也就是有最大的不確定性。我們認為這樣的概率模型能夠涵蓋更多的可能性。
根據信息熵的定義,我們寫出以下式子 $$p^*(x) = \mathop{\text{argmax}}\limits_{p(x)} \quad -\sum_x p(x)\log p(x) \\ \begin{matrix} \text{s.t.} & \sum\limits_x \phi(x)p(x) = \hat{\mu} \\ & \sum\limits_x p(x) = 1 \end{matrix}$$ 這是一個有等式限制的優化問題,用拉格朗日乘子法改寫為 $$L = -\sum_x p(x)\log p(x) + \theta^T(\sum_x \phi(x)p(x) - \hat{\mu}) + \lambda(\sum_x p(x) - 1) \\ = \sum_x (-p(x)\log p(x) + \theta^T\phi(x)p(x) + \lambda p(x)) - \theta^T\hat{\mu} - \lambda$$ 對 $x$ 取每一個特定值時的 $p(x)$ 分別求導,我們有 $$-1-\log p(x) + \theta^T\phi(x) + \lambda = 0$$ 移項后有 $$p(x) = \exp(\theta^T\phi(x) + \lambda - 1) = \exp(\theta^T\phi(x) - A)$$ 式子兩邊關於 $x$ 求和有 $$\sum_x p(x) = 1 = \sum_x \exp(\theta^T\phi(x) - A)$$ 移項后就有 $$A(\theta) = \log\sum_x \exp(\theta^T\phi(x))$$ 要注意的是,$A$ 是一個關於 $\theta$ 的函數,和 $x$ 的取值無關。
使用指數族分布
根據上面的推導,我們就得到了指數族分布的模型:$p(x) = \exp(\theta^T\phi(x) - A(\theta))$。這個模型雖然看起來和之前的博客中介紹的指數族模型($p(x) = b(x)\exp(\theta^T\phi(x) - A(\theta))$)不太一樣,但我們可以讓 $\theta'^T = \begin{bmatrix} \theta^T & 1 \end{bmatrix}$ 以及 $\phi'(x) = \begin{bmatrix} \phi(x) & \log b(x) \end{bmatrix}^T$ 將它變化為這篇博客中介紹的形式,只不過有的時候把 $b(x)$ 單獨提出來更方便。
我們看到的大部分分布都能滿足指數族分布的形式。比如令 $\theta^T = \begin{bmatrix} \log\phi & \log(1-\phi) \end{bmatrix}$,$\phi(x) = \begin{bmatrix} x & 1-x \end{bmatrix}^T$,$A(\theta) = 0$ 就有伯努利分布 $p(x) = \phi^x(1-\phi)^{1-x}$;比如令 $b(x) = 1 / \sqrt{(2\pi)^k|\Sigma|}$,$\theta^T = \begin{bmatrix} -\frac{1}{2}\mu^T\Sigma^{-1} & \Sigma^{-1} \end{bmatrix}$,$\phi(x) = \begin{bmatrix} x & xx^T \end{bmatrix}^T$,$A(\theta) = 0$ 就有多維高斯分布(這時候把 $b(x)$ 單獨提出來就比較方便)。
我們還有 $\theta$ 的值沒有確定。理論上,我們應該根據拉格朗日乘子法求出 $\theta$ 的值,但這樣求是比較困難的。就像之前的博客寫的一樣,我們可以通過極大似然估計法計算 $\theta$ 的值。而且我們可以證明,用極大似然估計法算出的 $\theta$,可以滿足 $\mathbb{E}_p[\phi(X)] = \hat{\mu}$ 的要求。
對訓練數據集 D 使用極大似然估計法,其實就是解如下優化問題 $$\mathop{\text{argmax}}\limits_{\theta} \quad L \\ = \mathop{\text{argmax}}\limits_{\theta} \quad p(D|\theta) \\ = \mathop{\text{argmax}}\limits_{\theta} \quad \sum_{i=1}^m (\theta^T\phi(X^{(i)}) - A(\theta))$$ $L$ 關於 $\theta$ 求偏導有 $$\frac{\partial L}{\partial \theta} = \sum_{i=1}^m \phi(X^{(i)}) - n\frac{\partial A(\theta)}{\partial \theta} = 0 $$ 求得 $$\frac{\partial A(\theta)}{\partial \theta} = \hat{\mu}$$ 根據之前的推導我們有 $$A(\theta) = \log\sum_x\exp(\theta^T\phi(x))$$ 所以 $$\frac{\partial A(\theta)}{\partial \theta} = \frac{\sum\limits_x \exp(\theta^T\phi(x))\phi(x)}{\sum\limits_x \exp(\theta^T \phi(x))} = \frac{\sum\limits_x \exp(\theta^T\phi(x))\phi(x)}{\exp A(\theta)} \\ = \sum_x \exp(\theta^T\phi(x) - A(\theta))\phi(x) = \mathbb{E}_p[\phi(x)]$$ 所以 $\mathbb{E}_p[\phi(X)] = \hat{\mu}$ 的條件是滿足的。
指數族分布與貝葉斯學派
我們知道,機器學習可以分為頻率學派和貝葉斯學派。頻率學派認為概率分布的 $\theta$ 是一個已知的確定值(只是我們還不知道),嘗試通過各種方法直接建立概率分布模型並優化 $\theta$ 的值;而貝葉斯學派認為,$\theta$ 的值並不是固定的,而是和“人”的認知是有關的。
貝葉斯學派認為 $\theta$ 也是隨機變量,一個人一開始對 $\theta$ 分布的認知就是先驗概率分布,在他觀察過訓練數據之后,他對 $\theta$ 的認知會發生改變,這時的概率分布就是后驗概率分布。
貝葉斯學派最重要的公式之一就是貝葉斯公式 $$p(\theta|D) = \frac{p(\theta)p(D|\theta)}{p(D)}$$ 其中 $p(\theta)$ 就是觀察訓練數據之前對 $\theta$ 原始的認知,就是先驗概率;而 $p(\theta|D)$ 則是觀察訓練數據之后對 $\theta$ 的認知,就是后驗概率。而 $p(D|\theta)$ 和 $p(D)$ 就是訓練數據帶給“人”的信息。式子兩邊取對數,公式可以變化為 $$\log p(\theta|D) = \log p(\theta) + \log p(D|\theta) + \text{const}$$ 常數的大小無關緊要,因為最后我們只需要選擇讓 $p(\theta|D)$ 最大的 $\theta$ 即可,而對於所有 $\theta$ 來說,這個常數是一樣大的,不影響比較。這個公式告訴我們,后驗知識 = 先驗知識 + 數據認識,也可以說,數據幫助“人”修正認知。
如果假設測試數據服從和 $\theta$ 有關的指數族分布,那么我們有 $$\log p(D|\theta) = \theta^T\sum_{i=1}^m\phi(X^{(i)}) - A(\theta)$$ 可是先驗概率分布是怎么樣的呢?現在貝葉斯學派的研究,大多都會構造一個先驗概率分布。這個構造的分布在復雜情況下主要用於消除 $\log p(D|\theta)$ 中一些比較麻煩的項。的確,應該要按問題的性質構造先驗概率分布比較合理,但是這樣概率分布的式子可能會變得很復雜,無法在有限時間內計算。這種不按問題性質而構造先驗概率分布的方法也是當前貝葉斯學派比較受詬病的一點。
既然數據認識是一個指數族分布,我們也構造一個指數族分布的先驗概率分布,便於計算。我們構造 $\log p(\theta) = \eta^T \begin{bmatrix} \theta & A(\theta) \end{bmatrix}^T + \text{const}$,將 $\log p(\theta)$ 與 $\log p(D|\theta)$ 代入式子后,我們有 $\log p(\theta|D) = \eta'^T \begin{bmatrix} \theta & A(\theta) \end{bmatrix}^T + \text{const}$,其中 $\eta' = \eta + \begin{bmatrix} \sum_{i=1}^m \phi(X^{(i)}) & -1 \end{bmatrix}^T$。也就是說,我們關注的統計量是 $\theta$ 和 $A(\theta)$,而每看到一組訓練樣本,我們只要更新 $\eta$ 就能將先驗分布改為后驗分布。這是我們先驗分布選擇了一個方便計算的形式的結果。
來舉一個例子:現在有一枚硬幣,投擲了若干次,其中 $g$ 次正面朝上,$h$ 次反面朝上。希望擬合出一個參數為 $\theta$ 的伯努利分布,作為投硬幣的概率模型。
根據之前的推導,我們有 $\log p(D|\theta) = \sum_{i=1}^m(X^{(i)}\log\theta + (1-X^{(i)})\log(1-\theta))$。現在我們想獲得的是 $\theta$ 的概率分布,所以我們關注的統計量應該是 $\begin{bmatrix} \log\theta & \log(1-\theta) \end{bmatrix}^T$,那么構造先驗分布 $\log p(\theta) = \begin{bmatrix} a & b \end{bmatrix}\begin{bmatrix} \log\theta & \log(1-\theta) \end{bmatrix}^T + \text{const}$(因為 $A(\theta) = 0$ 所以我們這里就省略了這一維)。這樣,先驗分布就是 $p(\theta) = C\theta^a(1-\theta)^b$,后驗分布就是 $p(\theta|D) = C\theta^{a+g}(1-\theta)^{b+h}$,是兩個 beta 分布。
非常恰好的是,這兩個分布具有很高的可解釋性。我們畫出幾個 beta 分布的圖像。
beta(0, 0) 可以看作訓練最開始的先驗概率,沒有見過任何訓練數據,所以認為所有的 $\theta$ 都是等概率的;beta(7, 3) 和 beta(3, 7) 可以看作拋硬幣 10 次后的后驗概率,可以看到 beta 分布的峰值分別出現在 0.7 和 0.3 處,但是方差較大,沒有那么肯定;beta(70, 30) 可以看作拋硬幣 100 次后的后驗概率,可以看到 beta 分布的峰值出現在 0.7 處,而且方法很小,說明此時我們非常肯定 $\theta = 0.7$ 是最佳的參數。
當然,這種可解釋性是非常湊巧的。在比較復雜的問題中,這種構造出來的先驗分布基本是沒有解釋性的。而且如果訓練數據量太小,最后的后驗概率受先驗概率的影響會很大,可能會出現變形的結果。一個又符合問題特征,又便於計算的先驗分布是非常難獲得的,所以現在的貝葉斯學派只能暫時以可計算性為重。