提出背景與靈感起源
馬爾可夫鏈由俄國數學家安德雷·馬爾可夫于1906年提出,最初是為了挑戰當時概率論中“獨立性假設”的局限性。他希望通過研究相依變量序列,證明即使隨機變量之間存在依賴關系,大數定律和中心極限定理仍然成立。
靈感來源:馬爾可夫在1913年分析了普希金的長詩《葉甫蓋尼·奧涅金》,統計了元音和輔音字母的交替規律。他發現字母序列的統計特性可以用一種“當前狀態僅依賴前一步”的模型描述,這成為馬爾可夫鏈的雛形。這種將語言結構與概率結合的方法,揭示了隨機過程中的有序性。
數學定義與公式推導
1. 馬爾可夫性質
核心定義: 若隨機過程滿足 P ( X t + 1 = x ∣ X 0 , X 1 , . . . , X t ) = P ( X t + 1 = x ∣ X t ) P(X_{t+1}=x | X_0, X_1, ..., X_t) = P(X_{t+1}=x | X_t) P(Xt+1?=x∣X0?,X1?,...,Xt?)=P(Xt+1?=x∣Xt?) 則稱其具有馬爾可夫性質,即“未來僅取決于現在,與過去無關”。只依賴于當前狀態,這種特性被稱為 “無記憶性” 或 “馬爾科夫性”。
2. 轉移概率矩陣
假設狀態空間為 S = { s 1 , s 2 , . . . , s n } S = \{s_1, s_2, ..., s_n\} S={s1?,s2?,...,sn?},定義單步轉移概率:
P i j = P ( X t + 1 = s j ∣ X t = s i ) P_{ij} = P(X_{t+1}=s_j | X_t = s_i) Pij?=P(Xt+1?=sj?∣Xt?=si?)
則轉移矩陣為:
P = [ P 11 P 12 ? P 1 n P 21 P 22 ? P 2 n ? ? ? ? P n 1 P n 2 ? P n n ] P = \begin{bmatrix}P_{11} & P_{12} & \cdots & P_{1n} \\P_{21} & P_{22} & \cdots & P_{2n} \\\vdots & \vdots & \ddots & \vdots \\P_{n1} & P_{n2} & \cdots & P_{nn}\end{bmatrix} P= ?P11?P21??Pn1??P12?P22??Pn2???????P1n?P2n??Pnn?? ?
矩陣每行元素和為1,即 ∑ j = 1 n P i j = 1 \sum_{j=1}^n P_{ij} = 1 ∑j=1n?Pij?=1。
3. 平穩分布
若存在概率分布 π \pi π 滿足: π P = π \pi P = \pi πP=π 則稱 π \pi π 為平穩分布。通過求解線性方程組可得到長期狀態下的穩定概率。
4.公式推導
用轉移概率矩陣 P = ( p i j ) P=(p_{ij}) P=(pij?)來描述狀態之間的轉移,其中 p i j = P ( X n + 1 = j ∣ X n = i ) p_{ij}=P(X _{n+1}=j∣X_n=i) pij?=P(Xn+1?=j∣Xn?=i),表示從狀態i轉移到狀
j的一步轉移概率,且滿足 ∑ j ∈ S p i j = 1 \sum\limits_{j∈S}p_{ij}=1 j∈S∑?pij?=1,因為從狀態i出發,下一步必然轉移到狀態空間S中的某個狀態。
對于n步轉移概率,記為 p i j ( n ) = P ( X n + m = j ∣ X m = i ) p_{ij}^{(n)}=P(X_{n+m} =j∣X_m=i) pij(n)?=P(Xn+m?=j∣Xm?=i),它滿足切普曼 - 柯爾莫哥洛夫方程: p i j ( n + m ) = ∑ k ∈ S p i k ( n ) p k j ( m ) p_{ij}^{(n+m)} =\sum\limits_{k∈S} p_{ik}^{(n)}p_{kj}^{(m)} pij(n+m)?=k∈S∑?pik(n)?pkj(m)?
推導過程如下:
p i j ( n + m ) = P ( X n + m = j ∣ X 0 = i ) = ∑ k ∈ S P ( X n + m = j , X n = k ∣ X 0 = i ) ( 全概率公式 ) = ∑ k ∈ S P ( X n + m = j ∣ X n = k , X 0 = i ) ? P ( X n = k ∣ X 0 = i ) ( 條件概率公式 ) = ∑ k ∈ S P ( X n + m = j ∣ X n = k ) ? P ( X n = k ∣ X 0 = i ) = ∑ k ∈ S ?? = p k j ( m ) p i k ( n ) ( 馬爾科夫性 ) p_{ij}^{(n+m)}=P(X_{n+m}=j∣X_0=i) \\ \ = \sum\limits_{k∈S}P(X_{n+m}=j,X_n=k∣X_0=i) \ {(全概率公式) }\\ \ = \sum\limits_{k∈S}P(X_{n+m}=j∣X_n=k,X_0=i)?P(X_n=k∣X_0=i) \ {(條件概率公式)}\\ \ =\sum\limits_{k∈S}P(X_{n+m}=j∣X_n=k)?P(X_n=k∣X_0=i) \\ \ = \sum\limits_{k∈S} ?\ = p_{kj}^{(m)}p_{ik}^{(n)} (馬爾科夫性) pij(n+m)?=P(Xn+m?=j∣X0?=i)?=k∈S∑?P(Xn+m?=j,Xn?=k∣X0?=i)?(全概率公式)?=k∈S∑?P(Xn+m?=j∣Xn?=k,X0?=i)?P(Xn?=k∣X0?=i)?(條件概率公式)?=k∈S∑?P(Xn+m?=j∣Xn?=k)?P(Xn?=k∣X0?=i)?=k∈S∑???=pkj(m)?pik(n)?(馬爾科夫性)
該方程表明,從狀態i經過n+m步轉移到狀態j的概率,可以通過從狀態i先經過n步轉移到中間狀態k,再從狀態k經過m步轉移到狀態j,然后對所有可能的中間狀態k求和得到。
這為計算多步轉移概率提供了遞歸的方法,也使得我們能夠通過一步轉移概率矩陣的冪運算來計算任意步的轉移概率。
通俗示例
例1:早餐選擇
早餐選擇模型假設小明每天早餐在A(包子)和B(煎餅)之間選擇,規則如下:
- 若今天選A,明天選A的概率40%,選B的概率60%
- 若今天選B,明天選A和B的概率各50%
轉移矩陣:
P = [ 0.4 0.6 0.5 0.5 ] P = \begin{bmatrix}0.4 & 0.6 \\0.5 & 0.5\end{bmatrix} P=[0.40.5?0.60.5?]
轉移矩陣對應轉移狀態示意圖
代碼模擬10天早餐序列:
import numpy as np
# 定義轉移矩陣和初始狀態
P = [[0.4, 0.6], [0.5, 0.5]]
current_state = 0 # 初始狀態為A
states = ['A', 'B'] # 模擬狀態轉移
np.random.seed(42)
for _ in range(10): print(f"Day {_+1}: {states[current_state]}") current_state = np.random.choice([0,1], p=P[current_state])
輸出結果:
Day 1: A
Day 2: B
Day 3: A
Day 4: B
Day 5: A
Day 6: B
Day 7: B
Day 8: A
Day 9: B
Day 10: A
例2:地點選擇
假設你在玩一個簡單的游戲,游戲中有三個地點:公園(A)、圖書館(B)和咖啡館(C)。每天你都會在這三個地點之一度過,并且第二天去的地點只取決于當天所在的地點。
- 如果你今天在公園(A),明天有 0.4 的概率還在公園,有 0.3 的概率去圖書館,有 0.3 的概率去咖啡館。
- 若今天在圖書館(B),明天有 0.2 的概率在公園,有 0.5 的概率還在圖書館,有 0.3 的概率去咖啡館。
- 要是今天在咖啡館(C),明天有 0.1 的概率在公園,有 0.3 的概率在圖書館,有 0.6 的概率還在咖啡館。
我們可以將這些轉移概率整理成轉移概率矩陣P:
P = ( 0.4 0.3 0.3 0.2 0.5 0.3 0.1 0.3 0.6 ) P = \begin{pmatrix} 0.4 & 0.3 & 0.3 \\ 0.2 & 0.5 & 0.3 \\ 0.1 & 0.3 & 0.6 \end{pmatrix} P= ?0.40.20.1?0.30.50.3?0.30.30.6? ?
公式推導在例子中的應用假設初始時你在公園(即初始狀態概率向量 π 0 = [ 1 , 0 , 0 ] \pi_0 = [1, 0, 0] π0?=[1,0,0],我們想知道兩天后你在圖書館的概率。根據切普曼 - 柯爾莫哥洛夫方程,兩天后的狀態概率向量 π 2 \pi_2 π2?可以通過 π 2 = π 0 ? P 2 \pi_2 = \pi_0 \cdot P^2 π2?=π0??P2計算。首先計算 P 2 P^2 P2:
P 2 = ( 0.4 0.3 0.3 0.2 0.5 0.3 0.1 0.3 0.6 ) ? ( 0.4 0.3 0.3 0.2 0.5 0.3 0.1 0.3 0.6 ) = ( 0.4 × 0.4 + 0.3 × 0.2 + 0.3 × 0.1 0.4 × 0.3 + 0.3 × 0.5 + 0.3 × 0.3 0.4 × 0.3 + 0.3 × 0.3 + 0.3 × 0.6 0.2 × 0.4 + 0.5 × 0.2 + 0.3 × 0.1 0.2 × 0.3 + 0.5 × 0.5 + 0.3 × 0.3 0.2 × 0.3 + 0.5 × 0.3 + 0.3 × 0.6 0.1 × 0.4 + 0.3 × 0.2 + 0.6 × 0.1 0.1 × 0.3 + 0.3 × 0.5 + 0.6 × 0.3 0.1 × 0.3 + 0.3 × 0.3 + 0.6 × 0.6 ) = ( 0.25 0.36 0.39 0.19 0.38 0.43 0.16 0.36 0.48 ) P^2 = \begin{pmatrix} 0.4 & 0.3 & 0.3 \\ 0.2 & 0.5 & 0.3 \\ 0.1 & 0.3 & 0.6 \end{pmatrix} \cdot \begin{pmatrix} 0.4 & 0.3 & 0.3 \\ 0.2 & 0.5 & 0.3 \\ 0.1 & 0.3 & 0.6 \end{pmatrix}\\= \begin{pmatrix} 0.4\times0.4 + 0.3\times0.2 + 0.3\times0.1 & 0.4\times0.3 + 0.3\times0.5 + 0.3\times0.3 & 0.4\times0.3 + 0.3\times0.3 + 0.3\times0.6 \\ 0.2\times0.4 + 0.5\times0.2 + 0.3\times0.1 & 0.2\times0.3 + 0.5\times0.5 + 0.3\times0.3 & 0.2\times0.3 + 0.5\times0.3 + 0.3\times0.6 \\ 0.1\times0.4 + 0.3\times0.2 + 0.6\times0.1 & 0.1\times0.3 + 0.3\times0.5 + 0.6\times0.3 & 0.1\times0.3 + 0.3\times0.3 + 0.6\times0.6 \end{pmatrix}\\= \begin{pmatrix} 0.25 & 0.36 & 0.39 \\ 0.19 & 0.38 & 0.43 \\ 0.16 & 0.36 & 0.48 \end{pmatrix} P2= ?0.40.20.1?0.30.50.3?0.30.30.6? ?? ?0.40.20.1?0.30.50.3?0.30.30.6? ?= ?0.4×0.4+0.3×0.2+0.3×0.10.2×0.4+0.5×0.2+0.3×0.10.1×0.4+0.3×0.2+0.6×0.1?0.4×0.3+0.3×0.5+0.3×0.30.2×0.3+0.5×0.5+0.3×0.30.1×0.3+0.3×0.5+0.6×0.3?0.4×0.3+0.3×0.3+0.3×0.60.2×0.3+0.5×0.3+0.3×0.60.1×0.3+0.3×0.3+0.6×0.6? ?= ?0.250.190.16?0.360.380.36?0.390.430.48? ?
然后計算 π 2 \pi_2 π2?:
p i 2 = π 0 ? P 2 = [ 1 , 0 , 0 ] ? ( 0.25 0.36 0.39 0.19 0.38 0.43 0.16 0.36 0.48 ) = [ 0.25 , 0.36 , 0.39 ] pi_2 = \pi_0 \cdot P^2\\= [1, 0, 0] \cdot \begin{pmatrix} 0.25 & 0.36 & 0.39 \\ 0.19 & 0.38 & 0.43 \\ 0.16 & 0.36 & 0.48 \end{pmatrix}\\= [0.25, 0.36, 0.39] pi2?=π0??P2=[1,0,0]? ?0.250.190.16?0.360.380.36?0.390.430.48? ?=[0.25,0.36,0.39]
所以,兩天后你在圖書館的概率是 0.36。
例3:網頁瀏覽預測
在互聯網中,用戶瀏覽網頁的行為可以近似看作一個馬爾科夫鏈。每個網頁是一個狀態,用戶從一個網頁跳轉到另一個網頁的概率構成轉移概率矩陣。假設我們有一個包含三個網頁(網頁 1、網頁 2、網頁 3)的小型網站。通過分析用戶行為數據,得到轉移概率矩陣P:
P = ( 0.5 0.3 0.2 0.1 0.7 0.2 0.3 0.4 0.3 ) P = \begin{pmatrix} 0.5 & 0.3 & 0.2 \\ 0.1 & 0.7 & 0.2 \\ 0.3 & 0.4 & 0.3 \end{pmatrix} P= ?0.50.10.3?0.30.70.4?0.20.20.3? ?
若初始時用戶在網頁 1(初始狀態概率向量 π 0 = [ 1 , 0 , 0 ] \pi_0 = [1, 0, 0] π0?=[1,0,0]),我們想計算 3 次跳轉后用戶在網頁 2 的概率。首先,根據切普曼 - 柯爾莫哥洛夫方程,n步后的狀態概率向量 π n = π 0 ? P n \pi_n = \pi_0 \cdot P^n πn?=π0??Pn。計算 P 3 P^3 P3:
import numpy as npP = np.array([[0.5, 0.3, 0.2],[0.1, 0.7, 0.2],[0.3, 0.4, 0.3]
])P_3 = np.linalg.matrix_power(P, 3)
print(P_3)
通過上述代碼計算得到 P 3 P^3 P3后,再計算 π 3 \pi_3 π3?:
pi_0 = np.array([1, 0, 0])
pi_3 = pi_0.dot(P_3)
print(pi_3)
pi_3向量中第二個元素即為 3 次跳轉后用戶在網頁 2 的概率。
例4:天氣預測簡化模型
假設天氣只有晴天、多云、雨天三種狀態。通過對歷史天氣數據的分析,我們得到轉移概率矩陣P:
P = ( 0.7 0.2 0.1 0.3 0.5 0.2 0.2 0.4 0.4 ) P = \begin{pmatrix} 0.7 & 0.2 & 0.1 \\ 0.3 & 0.5 & 0.2 \\ 0.2 & 0.4 & 0.4 \end{pmatrix} P= ?0.70.30.2?0.20.50.4?0.10.20.4? ?
如果今天是晴天(初始狀態概率向量 π 0 = [ 1 , 0 , 0 ] \pi_0 = [1, 0, 0] π0?=[1,0,0]),計算 4 天后是雨天的概率。同樣,先計算 P 4 P^4 P4:
P = np.array([[0.7, 0.2, 0.1],[0.3, 0.5, 0.2],[0.2, 0.4, 0.4]
])P_4 = np.linalg.matrix_power(P, 4)
print(P_4)
然后計算 π 4 \pi_4 π4?:
pi_0 = np.array([1, 0, 0])
pi_4 = pi_0.dot(P_4)
print(pi_4)
pi_4向量中第三個元素就是 4 天后是雨天的概率。雖然實際的天氣預測要復雜得多,但馬爾科夫鏈為這種時間序列的狀態預測提供了一個簡單而有效的基礎模型框架。
四、實際應用案例
1. 自然語言處理(NLP)
隱馬爾可夫模型(HMM)用于詞性標注和語音識別。例如,通過觀察單詞序列推測隱藏的詞性標記。
2. 金融市場分析預測
股票市場的牛市/熊市狀態轉換。假設轉移矩陣為:
P = [ 0.9 0.1 0.2 0.8 ] P = \begin{bmatrix}0.9 & 0.1 \\0.2 & 0.8\end{bmatrix} P=[0.90.2?0.10.8?]
表示牛市有90%概率保持,10%概率轉熊市;熊市有20%概率轉牛市。
3. 蒙特卡洛模擬(MCMC)
Metropolis-Hastings算法通過構建馬爾可夫鏈,對復雜分布進行采樣,廣泛應用于貝葉斯統計。
總結
從分析詩歌韻律到驅動AlphaGo的決策過程,馬爾可夫鏈展現了數學工具的跨學科魅力。其核心思想——用簡單的概率規則描述復雜系統的演化——使其成為人工智能、金融、物理等領域的基礎工具。理解馬爾可夫鏈,就是掌握了一把打開隨機世界之門的鑰匙。