[Mathe] Wichtigkeitsbeispielableitung [mit Python-Implementierung]

[Mathe] Wichtigkeitsbeispielableitung [mit Python-Implementierung]

笔者在学习强化学习的过程中,经常遇到重要性采样的问题,这里简要记录一下推导过程方便以后查看。

1. Warum ist ein Wichtigkeitsbeispiel erforderlich?

Warum ist eine Wichtigkeitsstichprobe erforderlich? Angenommen, wir haben derzeit eine Zufallsvariable X ∼ XX\sim \mathcal{X}XX , und die Zufallsvariable gehorcht der Wahrscheinlichkeitsverteilungp 0 ( X ) p_0(X)P0( X ) , unser Ziel ist es, den ErwartungswertEX ∼ p 0 [EX S0[ X ] , wir kennen auch die ZufallsvariableXXEine weitereleicht zugänglicheWahrscheinlichkeitsverteilungp 1 ( X ) p_1(X) für XP1( X ) , wie berechnen wir die Wahrscheinlichkeitsverteilungp 0 (P0Erwartung EX ∼ p 0 [ X ] unter ( X ) \mathbb{E}_{X\sim p_0}[X]EX S0Was ist mit [ X ] ? Diese Technik wird Importance Sample genannt.

2. Ableitung der diskreten Verteilung

Nehmen Sie an, dass die Zufallsvariable XXX ist eine diskrete Wahrscheinlichkeitsverteilung und wir haben die Wahrscheinlichkeitsverteilungp 1 (X) p_1(X)P1Unter ( X ) gibt es identisch verteilte Stichproben{ xi } i = 1 n \{x_i\}^n_{i=1}{ Xich}ich = 1n. In der Wahrscheinlichkeitsverteilung p 0 (X) p_0(X)P0Erwartung EX ∼ p 0 [ X ] unter ( X ) \mathbb{E}_{X\sim p_0}[X]EX S0[ X ] kann durch die folgende Formel ausgedrückt werden

EX ∼ p 0 [ X ] = ∑ x ∈ X p 0 ( x ) x = ∑ x ∈ f ( X ) ] EX ∼ p 0 [ X ] = EX ∼ p 1 [ f ( 1 ( xi ) ⏟ Wichtigkeitsgewicht xi \mathbb{E}_{X\sim p_0}[X] = \sum_{x\in\mathcal{X}}p_0(x)x = \sum_{x\in\mathcal {X}}p_1(x)\underbrace{\frac{p_0(x)}{p_1(x)}x}_{f(x)} = \mathbb{E}_{X\sim p_1}[f( X)] \\ \mathbb{E}_{X\sim p_0}[X] = \mathbb{E}_{X\sim p_1}[f(X)] \ approbiert 1}{n} \sum^n_{i=1}f(x_i) = \frac{1}{n} \sum^n_{i=1} \underbrace{\frac{p_0(x_i)}{p_1( x_i)}}_{\text{Wichtigkeitsgewicht}}x_iEX S0[ X ]=x XP0( x ) x=x XP1( X )f ( x ) P1( X )P0( x )x=EX S1[ f ( X )]EX S0[ X ]=EX S1[ f ( X )]Fˉ=N1ich = 1nf ( xich)=N1ich = 1nWichtigkeit Gewicht P1( Xich)P0( Xich)Xich

其中, p 0 ( xi ) p 1 ( xi ) \frac{p_0(x_i)}{p_1(x_i)}P1( Xich)P0( Xich)wird als Wichtigkeitsgewicht bezeichnet. Mithilfe dieses Wichtigkeitsgewichts können wir die Wahrscheinlichkeitsverteilung p 1 (X) p_1(X) berechnen.P1Stichprobe { xi } i = 1 n \ {x_i\}^n_{i=1}{ Xich}ich = 1n, um das erwartete EX ∼ p 0 [ X ] \mathbb{E}_{X\sim p_0}[X] zu berechnenEX S0[ X ] ist weg.

3. Ableitung der kontinuierlichen Verteilung

Nehmen wir in ähnlicher Weise die Zufallsvariable XX anX ist eine kontinuierliche Wahrscheinlichkeitsverteilung und wir haben die Wahrscheinlichkeitsdichtefunktionp 1 ( x ) p_1(x)P1( x ) , es gibt identisch verteilte Stichproben{ xi } i = 1 n \{x_i\}^n_{i=1}{ Xich}ich = 1n. In der Wahrscheinlichkeitsfunktion p 0 ( x ) p_0(x)P0Erwartung EXunter ( x ) ∼ p 0 [ X ] \mathbb{E}_{X\sim p_0}[X]EX S0[ X ] kann durch die folgende Formel ausgedrückt werden

EX ∼ p 0 [ EX ∼ p 1 [ f ( X ) ] \mathbb{E}_{X\sim p_0}[X] = \int_{-\infty}^\infty x \times p_0(x) dx = \int_{-\ infty}^\infty p_1(x) \times \underbrace{\frac{p_0(x)}{p_1(x)}\times x}_{f(x)} dx = \mathbb{E}_{X\ sim p_1}[f(X)] \\EX S0[ X ]=X×P0( x ) d x=P1( X )×f ( x ) P1( X )P0( x )×xd x=EX S1[ f ( X )]
Anschließend verwenden wir eine große Anzahl diskreter Stichproben, um die kontinuierliche Erwartung
EX ∼ p 0 [ 1 np 0 ( xi ) p 1 ( xi ) ⏟ Wichtigkeitsgewicht xi \mathbb{E}_{X\sim p_0}[X] = zu schätzen \mathbb{E}_{X\sim p_1}[f(X)] \ approx \bar{f} = \frac{1}{n} \sum^n_{i=1}f(x_i) = \frac {1}{n} \sum^n_{i=1} \underbrace{\ frac{p_0(x_i)}{p_1(x_i)}}_{\text{Wichtigkeitsgewicht}}x_iEX S0[ X ]=EX S1[ f ( X )]Fˉ=N1ich = 1nf ( xich)=N1ich = 1nWichtigkeit Gewicht P1( Xich)P0( Xich)Xich

3. Ein Beispiel

Angenommen, X ∈ X = + 1 , − 1 X\in\mathcal{X}={+1,-1}XX=+ 1 ,1 , Wahrscheinlichkeitsverteilungp 0 ( X ) p_0(X)P0( X ) erfüllt

p 0 ( X = + 1 ) = 0,5 , p 0 (P0( X=+ 1 )=0,5 ,P0( X=1 )=0,5

Dann ist in der Wahrscheinlichkeitsverteilung p 0 p_0P0Die folgenden Erwartungen sind:

EX ∼ p 0 [ ) \times 0,5 = 0EX S0[ X ]=( + 1 )×0,5+( 1 )×0,5=0

Angenommen, eine andere Wahrscheinlichkeitsverteilung p 1 (X) p_1(X)P1( X ) erfüllt

p 0 ( X = + 1 ) = 0,8 , p 0 (P0( X=+ 1 )=0,8 ,P0( X=1 )=0,2

Dann ist die Wahrscheinlichkeitsverteilung p 1 p_1P1Die folgenden Erwartungen sind:

EX ∼ p 1 [ X ] = ( + 1 ) × 0,8 + ( − 1 ) × 0,2 = 0,6 ) \times 0,2 = 0,6EX S1[ X ]=( + 1 )×0,8+( 1 )×0,2=0,6

Durch Wichtigkeitsstichprobe können wir die Wahrscheinlichkeitsverteilung p 1 (X) p_1(X) übergeben.P1( X ) zur Berechnung der Wahrscheinlichkeitsverteilungp 0 (X) p_0(X)P0Der erwartete Wert unter ( X ) ist

EX ∼ p 0 [ sum_{i=1}^n \frac{p_0(x_i)}{p_1(x_i)}x_iEX S0[ X ]=N1ich = 1nP1( Xich)P0( Xich)Xich

Der Implementierungscode lautet wie folgt:

import numpy as np
import matplotlib.pyplot as plt
# reproducible
np.random.seed(0)

# 定义元素和对应的概率
elements = [1, -1]
probs1 = [0.5, 0.5]
probs2 = [0.8, 0.2]

# 重要性采样 importance sample
sample_times = 300
sample_list = []
i_sample_list = []
average_list = []
importance_list = []
for i in range(sample_times):
    sample = np.random.choice(elements, p=probs2)
    sample_list.append(sample)
    average_list.append(np.mean(sample_list))
    if sample == elements[0]:
        i_sample_list.append(probs1[0] / probs2[0] * sample)
    elif sample == elements[1]:
        i_sample_list.append(probs1[1] / probs2[1] * sample)
    importance_list.append(np.mean(i_sample_list))



plt.plot(range(len(sample_list)), sample_list, 'o', markerfacecolor='none', label='sample data')
plt.plot(range(len(average_list)), average_list, 'b--', label='average')
plt.plot(range(len(importance_list)), importance_list, 'g--', label='importance sampling')
plt.axhline(y=0.6, color='r', linestyle='--')
plt.axhline(y=0, color='r', linestyle='--')
plt.ylim(-1.5, 2.5) # 限制y轴显示范围
plt.xlim(0,sample_times) # 限制x轴显示范围
plt.legend(loc='upper right')
plt.show()

Die Ergebnisse sind wie folgt. Es ist ersichtlich, dass unter Verwendung von p 1 (X) p_1(X)P1( _ _ __EX S1[ _ _ __EX S0[ X ]=0

Bild

Ich denke du magst

Origin blog.csdn.net/qq_44940689/article/details/135345343
Empfohlen
Rangfolge