一、介紹
Gumbel分佈是極值分佈的一種,適用於描述極端事件的概率分佈。它也被稱為極大值分佈(more extreme value distribution)或者Frechet分佈。
Gumbel分佈是由瑞士數學家Emil Gumbel於1954年提出的,在現代科學工程學中得到了廣泛的應用,比如用於建築工程中極端風及地震引起的破壞力的分析、水文學中洪水的頻率分析等。在機器學習中,Gumbel分佈被用來進行採樣和近似梯度計算。
二、概率密度函數
一個隨機變量X服從Gumbel分佈,它的概率密度函數為:
f(x) = \frac{1}{\beta}e^{-(z+e^{-z})} z = \frac{x - \mu}{\beta}
其中,$\mu$是位置參數,$\beta$是尺度參數,注意當$\beta=1$時,z可以簡寫成(x-$\mu$)。
以下是Python代碼示例:
import numpy as np import matplotlib.pyplot as plt def gumbel(x, mu, beta): z = (x-mu)/beta return np.exp(-(z + np.exp(-z))) / beta x = np.linspace(0, 10, 100) y = gumbel(x, 5, 1) plt.plot(x, y) plt.xlabel("X") plt.ylabel("Probability density") plt.title("Gumbel distribution, mu=5, beta=1") plt.show()
三、分佈特性
1. 期望和方差
Gumbel分佈的期望和方差分別為:
E(X) = \mu + \beta \gamma Var(X) = \frac{\pi^2}{6} \beta^2
其中,$\gamma$是歐拉常數(0.5772…),也就是:
import scipy.special as sp sp.euler_gamma # 0.5772156649015329
2. 生成隨機數
可以使用numpy的gumbel()函數生成Gumbel分佈的隨機數,基本用法如下:
import numpy as np mu = 5 beta = 1 sample = np.random.gumbel(mu, beta, 1000)
其中,mu和beta分別是位置參數和尺度參數,1000是生成的隨機數個數。
3. 模擬採樣
使用Gumbel分佈進行採樣的方法通常稱為Gumbel-softmax trick,可以用於生成離散空間中的採樣,比如深度學習中的softmax採樣。
基本思路是先從Gumbel分佈中採樣出兩個隨機數,然後將採樣概率分佈取exponential()值,最後做歸一化,即可得到softmax分佈中的採樣。
以下是Python代碼示例:
def gumbel_sample(logits, temperature): noise = np.random.gumbel(size=logits.shape) y = (logits + noise) / temperature return np.exp(y) / np.sum(np.exp(y), axis=-1, keepdims=True) logits = np.array([2.0, 1.0, 0.5]) t = 1.0 samples = gumbel_sample(logits, t) print(samples) # [0.535, 0.272, 0.193]
四、小結
本文介紹了Gumbel分佈的概念、概率密度函數、期望和方差、隨機數生成方法以及在模擬採樣中的應用。Gumbel分佈作為極值分佈的一種,有着廣泛的應用場景,特別是在科學工程學和機器學習中。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/240794.html