18.8. Các Phân phối Xác suất

Lúc này ta đã hiểu cách làm việc với xác suất cho biến ngẫu nhiên rời rạc và liên tục, hãy làm quen với một số phân phối xác suất thường gặp. Tùy thuộc vào lĩnh vực học máy, ta có thể phải làm quen với nhiều phân phối hơn, hoặc đối với một số lĩnh vực trong học sâu thì có khả năng sẽ không gặp. Tuy nhiên, ta vẫn nên biết các phân phối cơ bản. Đầu tiên hãy nhập một số thư viện phổ biến.

%matplotlib inline
from d2l import mxnet as d2l
from IPython import display
from math import erf, factorial
import numpy as np

18.8.1. Phân phối Bernoulli

Đây là phân phối thường gặp đơn giản nhất. Giả sử khi tung một đồng xu, biến ngẫu nhiên \(X\) tuân theo phân phối này lấy giá trị mặt ngửa \(1\) với xác suất \(p\) và mặt sấp \(0\) với xác suất \(1-p\). Ta viết:

(18.8.1)\[X \sim \mathrm{Bernoulli}(p).\]

Hàm phân phối tích lũy là:

(18.8.2)\[\begin{split}F(x) = \begin{cases} 0 & x < 0, \\ 1-p & 0 \le x < 1, \\ 1 & x >= 1 . \end{cases}\end{split}\]

Hàm khối xác suất (probability mass function) được minh họa dưới đây:

p = 0.3

d2l.set_figsize()
d2l.plt.stem([0, 1], [1 - p, p], use_line_collection=True)
d2l.plt.xlabel('x')
d2l.plt.ylabel('p.m.f.')
d2l.plt.show()
../_images/output_distributions_vn_9596cb_3_0.svg

Bây giờ, hãy vẽ đồ thị cho hàm phân phối tích lũy (18.8.2).

x = np.arange(-1, 2, 0.01)

def F(x):
    return 0 if x < 0 else 1 if x > 1 else 1 - p

d2l.plot(x, np.array([F(y) for y in x]), 'x', 'c.d.f.')
../_images/output_distributions_vn_9596cb_5_0.svg

Nếu \(X \sim \mathrm{Bernoulli}(p)\), thì:

  • \(\mu_X = p\),
  • \(\sigma_X^2 = p(1-p)\).

Ta có thể lấy mẫu một mảng có kích thước tùy ý từ một biến ngẫu nhiên Bernoulli như sau:

1*(np.random.rand(10, 10) < p)
array([[0, 1, 1, 0, 0, 1, 1, 0, 0, 1],
       [1, 0, 0, 0, 0, 0, 0, 1, 1, 1],
       [0, 0, 0, 0, 0, 0, 0, 0, 1, 0],
       [0, 0, 0, 1, 0, 1, 0, 1, 1, 0],
       [0, 0, 0, 0, 1, 0, 0, 0, 0, 1],
       [0, 1, 0, 0, 0, 0, 0, 0, 0, 1],
       [0, 0, 1, 0, 0, 0, 0, 0, 0, 0],
       [1, 1, 1, 0, 0, 0, 0, 1, 1, 0],
       [0, 1, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 1, 0, 0, 0, 0, 1, 1, 0]])

18.8.2. Phân phối Đều Rời rạc

Biến ngẫu nhiên thường gặp tiếp theo là biến phân phối đều rời rạc. Ta giả sử biến này được phân phối trên tập các số nguyên \(\{1, 2, \ldots, n\}\), tuy nhiên, có thể chọn bất kỳ tập giá trị nào khác. Ý nghĩa của từ đều trong ngữ cảnh này là mọi giá trị đều có thể xảy ra với khả năng như nhau. Xác suất cho mỗi giá trị \(i \in \{1, 2, 3, \ldots, n\}\)\(p_i = \frac{1}{n}\). Ta ký hiệu một biến ngẫu nhiên \(X\) tuân theo phân phối này là:

(18.8.3)\[X \sim U(n).\]

Hàm phân phối tích lũy là:

(18.8.4)\[\begin{split}F(x) = \begin{cases} 0 & x < 1, \\ \frac{k}{n} & k \le x < k+1 \text{ with } 1 \le k < n, \\ 1 & x >= n . \end{cases}\end{split}\]

Trước hết ta hãy vẽ đồ thị hàm khối xác suất:

n = 5

d2l.plt.stem([i+1 for i in range(n)], n*[1 / n], use_line_collection=True)
d2l.plt.xlabel('x')
d2l.plt.ylabel('p.m.f.')
d2l.plt.show()
../_images/output_distributions_vn_9596cb_9_0.svg

Tiếp theo hãy vẽ đồ thị hàm phân phối tích luỹ (18.8.4).

x = np.arange(-1, 6, 0.01)

def F(x):
    return 0 if x < 1 else 1 if x > n else np.floor(x) / n

d2l.plot(x, np.array([F(y) for y in x]), 'x', 'c.d.f.')
../_images/output_distributions_vn_9596cb_11_0.svg

Nếu \(X \sim U(n)\), thì:

  • \(\mu_X = \frac{1+n}{2}\),
  • \(\sigma_X^2 = \frac{n^2-1}{12}\).

Ta có thể lấy mẫu một mảng có kích thước tùy ý từ một biến ngẫu nhiên rời rạc tuân theo phân phối đều như sau:

np.random.randint(1, n, size=(10, 10))
array([[3, 1, 3, 2, 1, 3, 2, 3, 1, 2],
       [4, 2, 1, 2, 1, 2, 3, 3, 2, 2],
       [1, 4, 4, 2, 4, 4, 3, 3, 1, 4],
       [2, 4, 3, 1, 3, 1, 1, 4, 2, 1],
       [3, 3, 4, 2, 1, 1, 3, 4, 2, 4],
       [4, 2, 3, 2, 2, 1, 4, 2, 4, 4],
       [4, 3, 4, 3, 2, 4, 2, 3, 3, 2],
       [1, 4, 3, 3, 2, 4, 2, 3, 3, 3],
       [4, 2, 3, 3, 1, 4, 1, 1, 2, 3],
       [4, 2, 1, 2, 1, 4, 1, 3, 2, 1]])

18.8.3. Phân phối Đều Liên tục

Tiếp theo, hãy thảo luận về phân phối đều liên tục. Ý tưởng phía sau là nếu ta tăng \(n\) trong phân phối đều rời rạc, rồi biến đổi tỷ lệ để nó nằm trong đoạn \([a, b]\), ta sẽ tiến đến một biến ngẫu nhiên liên tục mà mọi điểm bất kỳ trong \([a, b]\) đều có xác suất bằng nhau. Ta sẽ ký hiệu phân phối này bằng

(18.8.5)\[X \sim U(a, b).\]

Hàm mật độ xác suất là:

(18.8.6)\[\begin{split}p(x) = \begin{cases} \frac{1}{b-a} & x \in [a, b], \\ 0 & x \not\in [a, b].\end{cases}\end{split}\]

Hàm phân phối tích lũy là:

(18.8.7)\[\begin{split}F(x) = \begin{cases} 0 & x < a, \\ \frac{x-a}{b-a} & x \in [a, b], \\ 1 & x >= b . \end{cases}\end{split}\]

Trước hết hãy vẽ hàm mật độ xác suất (18.8.6).

a, b = 1, 3

x = np.arange(0, 4, 0.01)
p = (x > a)*(x < b)/(b - a)

d2l.plot(x, p, 'x', 'p.d.f.')
../_images/output_distributions_vn_9596cb_15_0.svg

Giờ hãy vẽ hàm phân phối tích lũy (18.8.7).

def F(x):
    return 0 if x < a else 1 if x > b else (x - a) / (b - a)

d2l.plot(x, np.array([F(y) for y in x]), 'x', 'c.d.f.')
../_images/output_distributions_vn_9596cb_17_0.svg

Nếu \(X \sim U(a, b)\), thì:

  • \(\mu_X = \frac{a+b}{2}\),
  • \(\sigma_X^2 = \frac{(b-a)^2}{12}\).

Ta có thể lấy mẫu một mảng với kích thước bất kỳ từ một biến ngẫu nhiên liên tục tuân theo phân phối đều như sau. Chú ý rằng theo mặc định việc lấy mẫu là từ \(U(0,1)\), nên nếu lấy mẫu trên miền giá trị khác, ta cần phải biến đổi tỷ lệ.

(b - a) * np.random.rand(10, 10) + a
array([[2.69057975, 2.29690089, 1.50863864, 1.6343662 , 1.88538755,
        2.77304872, 1.3649084 , 1.31180089, 2.40505407, 1.24139511],
       [2.15299209, 2.55721279, 1.18634969, 2.10162235, 2.43895021,
        2.09316829, 1.94466588, 2.8578004 , 2.53009842, 2.75041885],
       [1.37840926, 2.1666867 , 2.56482327, 2.98477868, 2.02588574,
        1.71842979, 1.01852972, 1.06072152, 2.50127805, 2.09318544],
       [2.99853678, 1.25134433, 1.57059949, 1.04546376, 1.03073306,
        1.45960725, 1.81771119, 1.07829288, 1.35959324, 2.12460743],
       [1.19599128, 1.23302249, 1.09473705, 1.53522627, 1.65225586,
        1.0978017 , 2.01576246, 2.03040818, 1.45980927, 2.08867867],
       [1.05928233, 1.55143864, 1.28093637, 2.94528546, 1.37913065,
        1.09141046, 2.46408584, 1.35821491, 2.92074037, 2.83196815],
       [2.249139  , 2.04845964, 2.7267775 , 2.4802625 , 1.0888408 ,
        1.40759851, 2.43916163, 1.07247824, 2.14481375, 1.51968138],
       [2.47335302, 2.99643275, 2.64752494, 1.27123227, 2.80993433,
        1.13978233, 2.89729352, 1.12339001, 2.4632283 , 1.52516024],
       [2.81143795, 1.02502167, 2.82248089, 2.61512926, 2.32013184,
        2.08291516, 2.12004269, 1.52414066, 1.89313726, 2.10573931],
       [1.90694126, 1.48359657, 2.43981393, 1.88938097, 1.88726055,
        1.24278983, 1.61357543, 1.71761149, 2.25460371, 2.48881168]])

18.8.4. Phân phối Nhị thức

Biến ngẫu nhiên nhị thức thì phức tạp hơn một chút. Biến ngẫu nhiên này bắt nguồn từ việc thực hiện liên tiếp \(n\) thí nghiệm độc lập, mỗi thí nghiệm có xác suất thành công \(p\), và hỏi xem số lần thành công kỳ vọng là bao nhiêu.

Hãy biểu diễn dưới dạng toán học. Mỗi thí nghiệm là một biến ngẫu nhiên độc lập \(X_i\) với \(1\) có nghĩa là thành công, \(0\) có nghĩa là thất bại. Vì mỗi thí nghiệm là một lần tung đồng xu độc lập với xác suất thành công \(p\), ta có thể nói \(X_i \sim \mathrm{Bernoulli}(p)\). Biến ngẫu nhiên nhị thức là:

(18.8.8)\[X = \sum_{i=1}^n X_i.\]

Trong trường hợp này, ta viết:

(18.8.9)\[X \sim \mathrm{Binomial}(n, p).\]

Để lấy hàm phân phối tích lũy, ta cần chú ý rằng \(k\) lần thành công có thể xảy ra theo \(\binom{n}{k} = \frac{n!}{k!(n-k)!}\) cách, với mỗi cách có xác suất xảy ra \(p^k(1-p)^{n-k}\). Do đó, hàm phân phối tích lũy là:

(18.8.10)\[\begin{split}F(x) = \begin{cases} 0 & x < 0, \\ \sum_{m \le k} \binom{n}{m} p^m(1-p)^{n-m} & k \le x < k+1 \text{ với } 0 \le k < n, \\ 1 & x >= n . \end{cases}\end{split}\]

Trước hết hãy vẽ hàm khối xác suất.

n, p = 10, 0.2

# Compute binomial coefficient
def binom(n, k):
    comb = 1
    for i in range(min(k, n - k)):
        comb = comb * (n - i) // (i + 1)
    return comb

pmf = np.array([p**i * (1-p)**(n - i) * binom(n, i) for i in range(n + 1)])

d2l.plt.stem([i for i in range(n + 1)], pmf, use_line_collection=True)
d2l.plt.xlabel('x')
d2l.plt.ylabel('p.m.f.')
d2l.plt.show()
../_images/output_distributions_vn_9596cb_21_0.svg

Giờ hãy vẽ hàm phân phối tích lũy (18.8.10).

x = np.arange(-1, 11, 0.01)
cmf = np.cumsum(pmf)

def F(x):
    return 0 if x < 0 else 1 if x > n else cmf[int(x)]

d2l.plot(x, np.array([F(y) for y in x.tolist()]), 'x', 'c.d.f.')
../_images/output_distributions_vn_9596cb_23_0.svg

Dù không dễ để suy ra công thức, kỳ vọng và phương sai của phân phối được tính như sau:

  • \(\mu_X = np\),
  • \(\sigma_X^2 = np(1-p)\).

Ta có thể lấy mẫu từ phân phối này theo cách bên dưới.

np.random.binomial(n, p, size=(10, 10))
array([[1, 3, 2, 5, 4, 5, 3, 0, 2, 2],
       [2, 2, 2, 1, 1, 4, 3, 1, 2, 1],
       [2, 2, 5, 2, 3, 2, 0, 2, 4, 1],
       [1, 1, 4, 2, 2, 2, 2, 1, 3, 1],
       [2, 2, 4, 2, 2, 3, 4, 2, 3, 2],
       [2, 0, 2, 2, 3, 2, 1, 1, 3, 2],
       [1, 0, 1, 2, 3, 1, 1, 3, 2, 1],
       [2, 2, 1, 1, 2, 1, 1, 5, 1, 0],
       [1, 2, 3, 2, 2, 3, 2, 1, 3, 1],
       [2, 0, 1, 1, 0, 4, 2, 3, 0, 1]])

18.8.5. Phân phối Poisson

Hãy cùng thực hiện một thí nghiệm tưởng tượng. Ta đang đứng ở một trạm xe buýt và muốn biết có bao nhiêu chiếc xe buýt sẽ đi qua trong phút tiếp theo. Hãy bắt đầu bằng việc coi \(X^{(1)} \sim \mathrm{Bernoulli}(p)\) đơn giản là xác suất một chiếc xe buýt sẽ đến trong khoảng một phút tiếp theo. Với những trạm xe buýt xa trung tâm thành phố, đây có thể là một xấp xỉ rất tốt vì ta hầu như sẽ không bao giờ thấy nhiều hơn một chiếc xe buýt trong một phút.

Tuy nhiên, trong một khu vực đông đúc, ta có thể và thậm chí khả năng cao sẽ thấy hai chiếc xe buýt đi qua. Ta có thể mô hình hóa điều này bằng cách chia nhỏ biến độc lập của ta thành hai phần với khoảng thời gian 30 giây. Trong trường hợp này ta có thể viết:

(18.8.11)\[X^{(2)} \sim X^{(2)}_1 + X^{(2)}_2,\]

với \(X^{(2)}\) là tổng toàn phần, và \(X^{(2)}_i \sim \mathrm{Bernoulli}(p/2)\). Toàn bộ phân phối vì thế sẽ là \(X^{(2)} \sim \mathrm{Binomial}(2, p/2)\).

Hãy tiếp tục chia nhỏ một phút này thành \(n\) phần. Lập luận tương tự như trên, ta có:

(18.8.12)\[X^{(n)} \sim \mathrm{Binomial}(n, p/n).\]

Hãy xem xét các biến ngẫu nhiên này. Ở mục trước, ta đã biết (18.8.12) có kỳ vọng \(\mu_{X^{(n)}} = n(p/n) = p\), và phương sai \(\sigma_{X^{(n)}}^2 = n(p/n)(1-(p/n)) = p(1-p/n)\). Nếu cho \(n \rightarrow \infty\), ta có thể thấy rằng hai giá trị này dần tiến về \(\mu_{X^{(\infty)}} = p\), và phương sai \(\sigma_{X^{(\infty)}}^2 = p\). Điều này gợi ý rằng ta có thể định nghĩa thêm một biến ngẫu nhiên nào đó trong trường hợp việc chia nhỏ này tiến ra vô cùng.

Điều này không có gì ngạc nhiên, trong thực tế ta có thể chỉ cần đếm số lần xe buýt đến, tuy nhiên sẽ tốt hơn nếu định nghĩa một mô hình toán học hoàn chỉnh, được biết đến là định luật của biến cố hiếm - law of rare events.

Bám sát chuỗi lập luận một cách cẩn thận, ta có thể suy ra một mô hình như sau. Ta nói \(X \sim \mathrm{Poisson}(\lambda)\) nếu nó là một biến ngẫu nhiên nhận các giá trị \(\{0,1,2, \ldots\}\) với xác suất:

(18.8.13)\[p_k = \frac{\lambda^ke^{-\lambda}}{k!}.\]

Giá trị \(\lambda > 0\) được gọi là tốc độ (hoặc tham số hình dạng), tượng trưng cho số lần xuất hiện trung bình trong một đơn vị thời gian.

Ta có thể lấy tổng hàm khối xác suất này để có được hàm phân phối tích lũy.

(18.8.14)\[\begin{split}F(x) = \begin{cases} 0 & x < 0, \\ e^{-\lambda}\sum_{m = 0}^k \frac{\lambda^m}{m!} & k \le x < k+1 \text{ với } 0 \le k. \end{cases}\end{split}\]

Trước hết hãy vẽ hàm khối xác suất (18.8.13).

lam = 5.0

xs = [i for i in range(20)]
pmf = np.array([np.exp(-lam) * lam**k / factorial(k) for k in xs])

d2l.plt.stem(xs, pmf, use_line_collection=True)
d2l.plt.xlabel('x')
d2l.plt.ylabel('p.m.f.')
d2l.plt.show()
../_images/output_distributions_vn_9596cb_27_0.svg

Bây giờ, ta hãy vẽ hàm phân phối tích lũy (18.8.14).

x = np.arange(-1, 21, 0.01)
cmf = np.cumsum(pmf)
def F(x):
    return 0 if x < 0 else 1 if x > n else cmf[int(x)]

d2l.plot(x, np.array([F(y) for y in x.tolist()]), 'x', 'c.d.f.')
../_images/output_distributions_vn_9596cb_29_0.svg

Như ta thấy ở trên, kỳ vọng và phương sai của phân phối này đặc biệt súc tích. Nếu \(X \sim \mathrm{Poisson}(\lambda)\):

  • \(\mu_X = \lambda\),
  • \(\sigma_X^2 = \lambda\).

Ta có thể lấy mẫu từ phân phối này như sau.

np.random.poisson(lam, size=(10, 10))
array([[ 2,  6,  5,  5,  3,  5,  4,  7,  1,  4],
       [ 3,  5,  4,  4, 14,  5,  9,  5,  4,  3],
       [ 1,  2,  3,  5,  6,  9,  1,  7,  3,  4],
       [ 4,  3,  5,  7,  6,  5,  7,  6,  8,  9],
       [ 3,  4,  7,  3,  5,  5,  5,  5,  5,  3],
       [ 6,  9,  7,  5,  3,  6,  4,  5,  5,  8],
       [ 4,  4,  7,  3,  2,  8,  6,  8,  3,  5],
       [ 5,  4,  5,  2,  5,  5,  6,  4,  3,  5],
       [ 7,  4,  2,  5,  3,  5,  5,  7,  3,  3],
       [ 2,  5,  1,  3,  6,  3,  3,  7,  7,  3]])

18.8.6. Phân phối Gauss

Bây giờ ta hãy thử một thí nghiệm khác có liên quan. Giả sử ta lại thực hiện \(n\) phép đo \(\mathrm{Bernoulli}(p)\) độc lập \(X_i\). Tổng của chúng có phân phối là \(X^{(n)} \sim \mathrm{Binomial}(n, p)\). Thay vì lấy giới hạn khi \(n\) tăng và \(p\) giảm, hãy cố định \(p\), rồi cho \(n \rightarrow \infty\). Trong trường hợp này \(\mu_{X^{(n)}} = np \rightarrow \infty\)\(\sigma_{X ^{(n)}}^2 = np (1-p) \rightarrow \infty\), vì vậy giới hạn này không thể xác định được.

Tuy nhiên, vẫn có cách giải quyết khác! Có thể làm kỳ vọng và phương sai xác định bằng cách định nghĩa:

(18.8.15)\[Y^{(n)} = \frac{X^{(n)} - \mu_{X^{(n)}}}{\sigma_{X^{(n)}}}.\]

Biến này được coi là có kỳ vọng bằng không và phương sai bằng một, và do đó là hợp lý để tin rằng nó sẽ hội tụ đến một phân phối giới hạn nào đó. Nếu minh hoạ phân phối này, ta có thể kiểm chứng giả thuyết trên.

p = 0.2
ns = [1, 10, 100, 1000]
d2l.plt.figure(figsize=(10, 3))
for i in range(4):
    n = ns[i]
    pmf = np.array([p**i * (1-p)**(n-i) * binom(n, i) for i in range(n + 1)])
    d2l.plt.subplot(1, 4, i + 1)
    d2l.plt.stem([(i - n*p)/np.sqrt(n*p*(1 - p)) for i in range(n + 1)], pmf,
                 use_line_collection=True)
    d2l.plt.xlim([-4, 4])
    d2l.plt.xlabel('x')
    d2l.plt.ylabel('p.m.f.')
    d2l.plt.title("n = {}".format(n))
d2l.plt.show()
../_images/output_distributions_vn_9596cb_33_0.svg

Một điều cần lưu ý: so với phân phối Poisson, ta đang chia cho độ lệch chuẩn, có nghĩa là ta đang ép các kết quả có thể xảy ra vào các vùng ngày càng nhỏ hơn. Đây là một dấu hiệu cho thấy giới hạn này sẽ không còn rời rạc mà trở nên liên tục.

Trình bày đầy đủ cách suy ra kết quả cuối cùng nằm ngoài phạm vi của tài liệu này, nhưng định lý giới hạn trung tâm - central limit theorem phát biểu rằng khi \(n \rightarrow \infty\), giới hạn này sẽ tiến tới Phân phối Gauss (hoặc tên khác là phân phối chuẩn). Tường minh hơn, với bất kỳ \(a, b\) nào:

(18.8.16)\[\lim_{n \rightarrow \infty} P(Y^{(n)} \in [a, b]) = P(\mathcal{N}(0,1) \in [a, b]),\]

trong đó, một biến ngẫu nhiên \(X\) tuân theo phân phối chuẩn với kỳ vọng \(\mu\) và phương sai \(\sigma^2\), ký hiệu \(X \sim \mathcal{N}(\mu, \sigma^2)\) nếu nó có mật độ:

(18.8.17)\[p_X(x) = \frac{1}{\sqrt{2\pi\sigma^2}}e^{-\frac{(x-\mu)^2}{2\sigma^2}}.\]

Đầu tiên hãy vẽ đồ thị của hàm mật độ xác suất (18.8.17).

mu, sigma = 0, 1

x = np.arange(-3, 3, 0.01)
p = 1 / np.sqrt(2 * np.pi * sigma**2) * np.exp(-(x - mu)**2 / (2 * sigma**2))

d2l.plot(x, p, 'x', 'p.d.f.')
../_images/output_distributions_vn_9596cb_35_0.svg

Giờ hãy vẽ đồ thị hàm phân phối tích luỹ. Tuy nằm ngoài phạm vi của phụ lục này nhưng hàm phân phối tích lũy của phân phối Gauss không có công thức dạng đóng dựa trên các hàm số sơ cấp. Ta sẽ sử dụng erf để tính toán xấp xỉ tích phân này.

def phi(x):
    return (1.0 + erf((x - mu) / (sigma * np.sqrt(2)))) / 2.0

d2l.plot(x, np.array([phi(y) for y in x.tolist()]), 'x', 'c.d.f.')
../_images/output_distributions_vn_9596cb_37_0.svg

Những bạn đọc tinh ý sẽ nhận ra một vài số hạng ở đây. Quả thực, ta đã gặp tích phân này trong Section 18.5. Và ta cần chính phép tính này để xem liệu \(p_X(x)\) có tổng diện tích bằng một và do đó là một hàm mật độ hợp lệ.

Không có một lý do cơ sở nào để ta chọn mô tả bài toán bằng việc tung đồng xu ngoài việc nó giúp quá trình tính toán ngắn hơn. Thật vậy, nếu lấy bất kỳ tập các biến ngẫu nhiên độc lập có cùng phân phối \(X_i\) nào, và gọi:

(18.8.18)\[X^{(N)} = \sum_{i=1}^N X_i.\]

Thì

(18.8.19)\[\frac{X^{(N)} - \mu_{X^{(N)}}}{\sigma_{X^{(N)}}}\]

sẽ xấp xỉ phân phối Gauss. Ta sẽ cần thêm vài điều kiện bổ sung, phổ biến nhất là \(E[X^4] < \infty\), nhưng ý tưởng cốt lõi đã rõ ràng.

Định lý giới hạn trung tâm là lý do mà phân phối Gauss là nền tảng của xác suất, thống kê, và học máy. Mỗi khi ta có thể nói rằng thứ gì đó ta đo được là tổng của nhiều phần nhỏ độc lập, ta có thể giả sử rằng thứ được đo sẽ gần với phân phối Gauss.

Có rất nhiều tính chất hấp dẫn khác của phân phối Gauss, và chúng tôi muốn thảo luận thêm một tính chất nữa ở đây. Phân phối Gauss được biết tới là phân phối entropy cực đại. Ta sẽ phân tích entropy sâu hơn trong Section 18.11, tuy nhiên lúc này chỉ cần biết nó là một phép đo sự ngẫu nhiên. Theo nghĩa toán học một cách chặt chẽ, ta có thể hiểu phân phối Gauss là cách chọn ngẫu nhiên nhất với kỳ vọng và phương sai cố định. Do đó, nếu ta biết biến ngẫu nhiên có kỳ vọng và phương sai nào đó, về trực giác phân phối Gauss là lựa chọn an toàn nhất trong những phân phối mà ta có thể chọn.

Để kết lại phần này, hãy nhớ lại rằng nếu \(X \sim \mathcal{N}(\mu, \sigma^2)\), thì:

  • \(\mu_X = \mu\),
  • \(\sigma_X^2 = \sigma^2\).

Ta có thể lấy mẫu từ phân phối Gauss (chuẩn tắc) như mô tả dưới.

np.random.normal(mu, sigma, size=(10, 10))
array([[-4.70073572e-01,  1.53740330e-02, -1.25708405e+00,
         3.93032822e-01,  1.26170220e+00, -1.07841950e-01,
         8.14249971e-01,  5.33059547e-01, -5.37575777e-01,
        -1.39088319e+00],
       [-2.13897397e+00,  1.85436907e-01, -4.67020502e-01,
         3.95948161e-01,  3.82780791e-01,  8.52570730e-02,
         7.62757679e-01,  1.50908643e-01,  1.51440474e+00,
         1.23058716e+00],
       [ 5.88099577e-02,  2.59987625e+00,  8.25207214e-01,
         5.79111086e-01, -8.75180632e-01, -3.98806916e-03,
        -6.46533260e-01, -5.62996271e-01,  1.67630658e-01,
        -2.86060108e-01],
       [-2.16287890e+00, -1.74374740e+00,  4.93586519e-01,
         1.58769300e+00,  2.34537913e+00, -8.92978615e-01,
         8.21263763e-01,  7.55799486e-01, -1.63660331e-01,
         1.20444663e+00],
       [ 1.29949143e+00,  1.82309481e+00,  1.92677610e+00,
        -1.14405268e+00, -2.15467805e+00,  8.01106346e-01,
        -1.54416553e+00, -1.27111963e+00,  3.51530694e-01,
         1.03928776e+00],
       [-1.02241933e+00,  1.59877436e+00, -7.85346861e-01,
        -5.47695717e-01,  1.63452678e-03, -7.00418413e-01,
        -9.20152917e-02,  1.96000701e-01,  3.48288675e-01,
         9.79944049e-01],
       [ 1.22130815e+00,  1.80495024e-01,  2.27069952e+00,
         7.72245447e-01, -1.23556208e+00, -9.92150936e-02,
         3.10177852e-01, -2.60076054e-01, -1.36973192e-01,
         8.99212867e-01],
       [-9.05487820e-01,  4.96714082e-01, -7.98568789e-01,
        -5.70583495e-01,  1.04523284e+00,  6.79362108e-01,
        -4.44150812e-03,  1.12181808e+00,  1.14770056e+00,
        -8.75516294e-01],
       [-5.39966074e-01,  1.67431358e+00, -8.78798025e-01,
        -5.38699655e-01,  8.00758385e-01, -1.01580356e+00,
        -1.30615795e-01,  2.91012408e+00,  1.69557646e+00,
         2.14090220e-01],
       [ 6.29097502e-01, -1.17999245e-01,  1.59981036e-01,
         2.02849683e+00,  6.17987179e-02, -4.04266375e-01,
         1.39027385e+00, -8.50843221e-01,  1.68852330e-01,
         2.61518476e-01]])

18.8.7. Họ hàm Mũ

Một tính chất chung của tất cả các phân phối liệt kê ở trên là chúng đều thuộc họ được gọi là họ hàm mũ (exponential family). Họ hàm mũ là tập các phân phối có mật độ được biểu diễn dưới dạng sau:

(18.8.20)\[p(\mathbf{x} | \mathbf{\eta}) = h(\mathbf{x}) \cdot \mathrm{exp} \big{(} \eta^{\top} \cdot T\mathbf(x) - A(\mathbf{\eta}) \big{)}\]

Định nghĩa này có vài điểm khá tinh tế nên hãy cùng xem xét kĩ lưỡng hơn.

Đầu tiên, \(h(\mathbf{x})\) được gọi là phép đo cơ bản (underlying measure) hay phép đo cơ sở (base measure). Đây có thể được coi là thang đo ban đầu mà chúng ta đang biến đổi khi điều chỉnh trọng số mũ.

Thứ hai, ta có vector \(\mathbf{\eta} = (\eta_1, \eta_2, ..., \eta_l) \in \mathbb{R}^l\) được gọi là tham số tự nhiên (natural parameters) hay tham số chính tắc (canonical parameters). Các vector này xác định phép đo cơ sở sẽ được điều chỉnh thế nào. Ta tiến hành phép đo mới bằng cách tính tích vô hướng của các tham số tự nhiên với hàm \(T(\cdot)\) nào đó của \(\mathbf{x}= (x_1, x_2, ..., x_n) \in \mathbb{R}^n\) và lấy luỹ thừa. \(T(\mathbf{x})= (T_1(\mathbf{x}), T_2(\mathbf{x}), ..., T_l(\mathbf{x}))\) được gọi là thống kê đầy đủ (sufficient statistics) của \(\eta\), do thông tin biểu diễn bởi \(T(\mathbf{x})\) là đủ để tính mật độ xác suất và không cần thêm bất cứ thông tin nào khác từ mẫu \(\mathbf{x}\).

Thứ ba, ta có \(A(\mathbf{\eta})\), được gọi là hàm tích luỹ (cumulant function), hàm này đảm bảo phân phối trên (18.8.20) có tích phân bằng 1, và có dạng:

(18.8.21)\[ A(\mathbf{\eta}) = \log \left[\int h(\mathbf{x}) \cdot \mathrm{exp} \big{(}\eta^{\top} \cdot T\mathbf(x) \big{)} dx \right].\]

Để ngắn gọn, ta xét phân phối Gauss. Giả sử \(\mathbf{x}\) là đơn biến (univariate variable) và có mật độ là:

(18.8.22)\[\begin{split}\begin{aligned} p(x | \mu, \sigma) &= \frac{1}{\sqrt{2 \pi \sigma^2}} \mathrm{exp} \Big{\{} \frac{-(x-\mu)^2}{2 \sigma^2} \Big{\}} \\ &= \frac{1}{\sqrt{2 \pi}} \cdot \mathrm{exp} \Big{\{} \frac{\mu}{\sigma^2}x - \frac{1}{2 \sigma^2} x^2 - \big{(} \frac{1}{2 \sigma^2} \mu^2 + \log(\sigma) \big{)} \Big{\}} . \end{aligned}\end{split}\]

Hàm này phù hợp với định nghĩa của họ hàm mũ với:

  • phép đo cơ sở: \(h(x) = \frac{1}{\sqrt{2 \pi}}\),
  • tham số tự nhiên: \(\eta = \begin{bmatrix} \eta_1 \\ \eta_2 \end{bmatrix} = \begin{bmatrix} \frac{\mu}{\sigma^2} \\ \frac{1}{2 \sigma^2} \end{bmatrix}\),
  • thống kê đầy đủ: \(T(x) = \begin{bmatrix}x\\-x^2\end{bmatrix}\), và
  • hàm tích luỹ: \(A(\eta) = \frac{1}{2 \sigma^2} \mu^2 + \log(\sigma) = \frac{\eta_1^2}{4 \eta_2} - \frac{1}{2}\log(2 \eta_2)\).

Đáng chú ý rằng việc lựa chọn chính xác từng số hạng trên hơi có phần tuỳ ý. Quả thật, đặc trưng quan trọng nhất chính là việc phân phối có thể được biểu diễn ở dạng này, chứ không cần bất kỳ dạng chính xác nào.

Như đề cập trong subsec_softmax_and_derivatives, một kỹ thuật hay dùng là giả sử kết quả cuối cùng \(\mathbf{y}\) tuân theo họ phân phối mũ. Họ hàm mũ là một họ phân phối phổ biến và mạnh mẽ, bắt gặp thường xuyên trong học máy.

18.8.8. Tóm tắt

  • Phân phối Bernoulli có thể mô hình hóa sự kiện có kết quả có/không.
  • Phân phối đều rời rạc chọn từ một tập hữu hạn các khả năng.
  • Phân phối đều liên tục chọn từ một khoảng liên tục.
  • Phân phối nhị thức mô hình hóa một chuỗi các biến Bernoulli ngẫu nhiên, và đếm số kết quả.
  • Phân phối Poisson mô hình hóa các sự kiện hiếm khi xuất hiện.
  • Phân phối Gauss mô hình hóa kết quả của việc tính tổng một lượng lớn các biến ngẫu nhiên độc lập.
  • Tất cả các phân phối trên đều thuộc họ hàm mũ.

18.8.9. Bài tập

  1. Tính độ lệch chuẩn của một biến ngẫu nhiên mô tả hiệu \(X-Y\) của hai biến ngẫu nhiên nhị thức độc lập \(X, Y \sim \mathrm{Binomial}(16, 1/2)\).
  2. Nếu ta lấy một biến ngẫu nhiên Poisson \(X \sim \mathrm{Poisson}(\lambda)\) và xét \((X - \lambda)/\sqrt{\lambda}\) với \(\lambda \rightarrow \infty\), ta có thể chỉ ra rằng phân phối này xấp xỉ phân phối Gauss. Tại sao điều này lại hợp lý?
  3. Hàm khối xác suất của tổng của hai biến ngẫu nhiên rời rạc theo phân phối đều trên \(n\) phần tử là gì?

18.8.10. Thảo luận

18.8.11. Những người thực hiện

Bản dịch trong trang này được thực hiện bởi:

  • Đoàn Võ Duy Thanh
  • Nguyễn Mai Hoàng Long
  • Lê Khắc Hồng Phúc
  • Phạm Minh Đức
  • Phạm Hồng Vinh
  • Đỗ Trường Giang
  • Nguyễn Văn Cường