2020年6月8日 星期一

Kernel Density Estimation 核密度估計簡介

在之前簡介機率的文章時我們一直在利用最大似然估計 Maximum Likelihood Estimation 來找出機率分布的參數。而本篇文章要介紹的是 Kernel Density Estimation 核密度估計法,目的是從給定的樣本中找出隨機變數的機率密度函數。本篇文章的方法是由 Rosenblatt 和 Parzen 提出,又稱為 Parzen window。

先備知識

首先假設我們要估計的機率密度函數為 p(x) ,並假設樣本在一塊很小的區域 R 中的機率為 P,也就是: \[ P = \int_{R} p(x) dx \] 此外我們也假設總共有 N 個樣本,並且有 K 個樣本落在 R 之中,因此可以寫出: \[ K \simeq NP \] 如果 R 夠小,則 p(x) 在其區域附近為常數,因此我們可以用此式子表示 P 與 p(x) 的關係: \[ P \simeq p(x) V \] 上式中 V 為區域 R 的體積。假如 p(x) 是一維的話 V 是 \(\Delta x\),而假如 p(x) 是二維(以 u 與 v 表示)的話 V 就是 \(\Delta u \Delta v\)。從上式中可以得到以下關係式: \[ p(x) = \frac{K}{NV} \]

Kernel Density Estimation 推導

現在想像一個函數 \( k(\frac{x - x_i}{h})\),意思是如果一個點 x 落在由 \(x_i\) 為中心,邊長為 h 的,維度為 D 的 hypercube 中(如果二維是正方形,三維是正方體),則其值為 1,否則為 0。

下一步就是把到目前所有的假設都串起來!我們把上面所講的 hypercube 當作是先備知識中的 R ,則我們可以用函數 k 來代換先備知識中的式子: \[ K = \sum_{i=1}^{N}k(\frac{x - x_i}{h}) \\ p(x) = \frac{1}{N}\sum_{i=1}^{N}\frac{1}{V}k(\frac{x - x_i}{h}) = \frac{1}{N}\sum_{i=1}^{N}\frac{1}{h^D}k(\frac{x - x_i}{h}) \] 跟其他有關機率的問題一樣,我們想要用 Gaussian distribution 來估計隨機變數的機率密度函數。因此我們可以用 Gaussian distribution 的機率密度函數來代換上面的 k: \[ p(x) = \frac{1}{N} \sum_{i=1}^{N} \frac{1}{(2\pi h^2)^{1/2}}exp(-\frac{\parallel x - x_n \parallel^2}{2h^2}) \] 從直觀的意義來解釋,就是把 N 個 Gaussian distribution 湊在一起來估計 p(x)。其中第 i 個 Gaussian distribution 中心位於 \(x_i\) ,而 sigma 是參數 h。實務上不同的 h 會造成不同的效果:當 h 越大時 p(x) 會越平滑。下圖 取自於維基百科 Kernel Density Estimation 的頁面 [1]:

Kernel Density Estimation Example

可以看出當 h 為 0.3 時估計出的 p(x) 比 h 為 0.1 及 0.05 時光滑許多。

Kernel Density Estimation 的應用

在生成對抗網路 Generative Adversarial Network(請參考前文)中,我們想要知道生成出來的資料與原本的資料的機率分布長得像不像,因此可以用 Kernel Density Estimation 從生成出來的資料中估計生成資料的機率分布 \(p_g(x)\),接著就可以計算 log-likelihood 來判斷與原本資料的機率分布 \(p_{data}(x)\) 像不像了。 Ian Goodfellow 的 Generative Adversarial Nets [2] 中便是用這種方法。

參考資料

[2] Generative Adversarial Nets, Ian J. Goodfellow, Jean Pouget-Abadie, Mehdi Mirza, Bing Xu, David Warde-Farley, Sherjil Ozair, Aaron Courville, Yoshua Bengio

沒有留言:

張貼留言