อะไรคือความหมายและความแปรปรวนของตัวแปรหลายตัวแปรที่ถูกตัด 0


9

ให้จะอยู่ใน d เมทริกซ์ความแปรปรวนร่วมและความแปรปรวนร่วมของ (ด้วย elementwise ที่คำนวณได้สูงสุด) คืออะไรZN(μ,Σ)RdZ+=max(0,Z)

สิ่งนี้เกิดขึ้นเช่นเพราะถ้าเราใช้ฟังก์ชั่นการเปิดใช้งาน ReLU ภายในเครือข่ายที่ลึกและสมมติว่าผ่าน CLT ที่อินพุตไปยังเลเยอร์ที่กำหนดนั้นเป็นปกติประมาณนี่คือการแจกแจงของเอาท์พุต

(ฉันแน่ใจว่ามีคนจำนวนมากคำนวณไว้ก่อนหน้านี้ แต่ฉันไม่พบผลลัพธ์ที่ปรากฏในที่ใด ๆ ในวิธีที่อ่านได้อย่างสมเหตุสมผล)


มันจะทำให้คำตอบของคุณง่ายขึ้น - อย่างมาก - เพื่อสังเกตว่าคุณสามารถขอรับได้โดยรวมผลลัพธ์ของคำถามสองข้อแยกกัน: (1) ช่วงเวลาของการแจกแจงแบบปกติที่ถูกตัดทอนและ (2) ช่วงเวลาของการผสม ? สิ่งหลังคือตรงไปตรงมาและสิ่งที่คุณต้องทำคืออ้างถึงผลลัพธ์สำหรับอดีต
whuber

@whuber อืม แม้ว่าฉันจะไม่ได้พูดอย่างชัดเจน แต่นั่นก็เป็นสิ่งที่ฉันทำในคำตอบของฉันยกเว้นว่าฉันไม่พบผลลัพธ์สำหรับการแจกแจงไบวาเรียต์ที่ถูกตัดทอนด้วยค่าเฉลี่ยและความแปรปรวนทั่วไปดังนั้นจึงต้องทำการปรับและขยับ มีวิธีใดบ้างที่จะได้รับเช่นความแปรปรวนร่วมโดยไม่ทำปริมาณพีชคณิตที่ฉันต้องทำหรือไม่? ฉันไม่ได้อ้างอย่างแน่นอนว่าสิ่งใดในคำตอบนี้เป็นนวนิยายเพียงว่าพีชคณิตน่าเบื่อและผิดพลาดได้ง่ายและบางทีคนอื่นอาจหาวิธีแก้ปัญหาที่มีประโยชน์
Dougal

ถูกต้อง: ฉันแน่ใจว่าพีชคณิตของคุณเท่ากับสิ่งที่ฉันอธิบายดังนั้นดูเหมือนว่าเราจะแบ่งปันความชื่นชมในการทำให้พีชคณิตเป็นไปได้ง่ายขึ้น วิธีง่าย ๆ ในการลดพีชคณิตคือการทำให้องค์ประกอบในแนวทแยงของเป็นเอกภาพเพราะสิ่งที่ทำคือการสร้างหน่วยการวัดสำหรับแต่ละตัวแปร ณ จุดนั้นคุณสามารถเสียบผลลัพธ์ของ Rosenbaum ลงในนิพจน์ (ง่ายชัดเจน) สำหรับช่วงเวลาของการผสม ไม่ว่าจะเป็นเรื่องของพีชคณิตที่มีค่าแม้แต่อาจเป็นเรื่องของรสนิยม: หากไม่มีการทำให้เข้าใจง่ายก็จะนำไปสู่โปรแกรมคอมพิวเตอร์แบบโมดูลาร์ที่ใช้งานง่าย Σ
whuber

1
ฉันคิดว่าหนึ่งสามารถเขียนโปรแกรมที่คำนวณช่วงเวลาโดยตรงกับผลลัพธ์ของ Rosenbaum และการผสมอย่างเหมาะสมจากนั้นเลื่อนและย่อขนาดพวกมันกลับสู่อวกาศเดิม นั่นอาจจะเร็วกว่าที่ฉันทำ
Dougal

คำตอบ:


7

ก่อนอื่นเราสามารถลดสิ่งนี้ขึ้นอยู่กับช่วงเวลาที่แน่นอนของ univariate / bivariate ที่ถูกตัดทอนการแจกแจงปกติ: โปรดทราบว่า

E[Z+]=[E[(Zi)+]]iCov(Z+)=[Cov((Zi)+,(Zj)+)]ij,
และเนื่องจากเราทำการแปลงพิกัดมิติที่แน่นอนของการแจกแจงแบบปกติเราเท่านั้น จำเป็นต้องกังวลเกี่ยวกับค่าเฉลี่ยและความแปรปรวนของการเซ็นเซอร์แบบปกติ 1d และความแปรปรวนร่วมของสองบรรทัดฐานที่ถูกเซ็นเซอร์ 1d

เราจะใช้ผลลัพธ์บางส่วนจาก

S Rosenbaum (1961) ช่วงเวลาของการจัดจำหน่ายที่ถูกตัดทอนทวิปกติ JRSS B, เล่ม 23 หน้า 405-408 ( jstor )

Rosenbaum พิจารณา และคิดว่าการตัดกับเหตุการณ์\}

[X~Y~]N([00],[1ρρ1]),
V={X~aX,Y~aY}

เราจะใช้ผลลัพธ์สามรายการต่อไปนี้คือ (1), (3) และ (5) ก่อนอื่นให้คำจำกัดความต่อไปนี้:

qx=ϕ(ax)qy=ϕ(ay)Qx=Φ(ax)Qy=Φ(ay)Rxy=Φ(ρaxay1ρ2)Ryx=Φ(ρayax1ρ2)rxy=1ρ22πϕ(h22ρhk+k21ρ2)

ตอนนี้ Rosenbaum แสดงให้เห็นว่า:

(1)Pr(V)E[X~V]=qxRxy+ρqyRyx(3)Pr(V)E[X~2V]=Pr(V)+axqxRxy+ρ2ayqyRyx+ρrxy(5)Pr(V)E[X~Y~V]=ρPr(V)+ρaxqxRxy+ρayqyRyx+rxy.

มันจะมีประโยชน์ในการพิจารณากรณีพิเศษของ (1) และ (3) ด้วยเช่นการตัด 1d: ay=

(*)Pr(V)E[X~V]=qx(**)Pr(V)E[X~2V]=Pr(V)=Qx.

ตอนนี้เราต้องการพิจารณา

[XY]=[μxμy]+[σx00σy][X~Y~]N([μXμY],[σx2ρσxσyρσxσyσy2])=N(μ,Σ).

เราจะใช้ ซึ่งเป็นค่าของและเมื่อ , .

ax=μxσxay=μyσy,
X~Y~X=0Y=0

ตอนนี้การใช้ (*) เราได้รับ และใช้ทั้ง (*) และ (**) อัตราผลตอบแทน ดังนั้น

E[X+]=Pr(X+>0)E[XX>0]+Pr(X+=0)0=Pr(X>0)(μx+σxE[X~X~ax])=Qxμx+qxσx,
E[X+2]=Pr(X+>0)E[X2X>0]+Pr(X+=0)0=Pr(X~ax)E[(μx+σxX~)2X~ax]=Pr(X~ax)E[μx2+μxσxX~+σx2X~2X~ax]=Qxμx2+qxμxσx+Qxσx2
Var[X+]=E[X+2]E[X+]2=Qxμx2+qxμxσx+Qxσx2Qx2μx2qx2σx22qxQxμxσx=Qx(1Qx)μx2+(12Qx)qxμxσx+(Qxqx2)σx2.

หากต้องการค้นหาเราจะต้อง Cov(X+,Y+)

E[X+Y+]=Pr(V)E[XYV]+Pr(¬V)0=Pr(V)E[(μx+σxX~)(μy+σyY~)V]=μxμyPr(V)+μyσxPr(V)E[X~V]+μxσyPr(V)E[Y~V]+σxσyPr(V)E[X~Y~V]=μxμyPr(V)+μyσx(qxRxy+ρqyRyx)+μxσy(ρqxRxy+qyRyx)+σxσy(ρPr(V)ρμxqxRxy/σxρμyqyRyx/σy+rxy)=(μxμy+σxσyρ)Pr(V)+(μyσx+μxσyρρμxσy)qxRxy+(μyσxρ+μxσyρμyσx)qyRyx+σxσyrxy=(μxμy+Σxy)Pr(V)+μyσxqxRxy+μxσyqyRyx+σxσyrxy,
จากนั้นลบเราได้รับ E[X+]E[Y+]
Cov(X+,Y+)=(μxμy+Σxy)Pr(V)+μyσxqxRxy+μxσyqyRyx+σxσyrxy(Qxμx+qxσx)(Qyμy+qyσy).

นี่คือบางส่วนของรหัสไพ ธ อนเพื่อคำนวณช่วงเวลา:

import numpy as np
from scipy import stats

def relu_mvn_mean_cov(mu, Sigma):
    mu = np.asarray(mu, dtype=float)
    Sigma = np.asarray(Sigma, dtype=float)
    d, = mu.shape
    assert Sigma.shape == (d, d)

    x = (slice(None), np.newaxis)
    y = (np.newaxis, slice(None))

    sigma2s = np.diagonal(Sigma)
    sigmas = np.sqrt(sigma2s)
    rhos = Sigma / sigmas[x] / sigmas[y]

    prob = np.empty((d, d))  # prob[i, j] = Pr(X_i > 0, X_j > 0)
    zero = np.zeros(d)
    for i in range(d):
        prob[i, i] = np.nan
        for j in range(i + 1, d):
            # Pr(X > 0) = Pr(-X < 0); X ~ N(mu, S) => -X ~ N(-mu, S)
            s = [i, j]
            prob[i, j] = prob[j, i] = stats.multivariate_normal.cdf(
                zero[s], mean=-mu[s], cov=Sigma[np.ix_(s, s)])

    mu_sigs = mu / sigmas

    Q = stats.norm.cdf(mu_sigs)
    q = stats.norm.pdf(mu_sigs)
    mean = Q * mu + q * sigmas

    # rho_cs is sqrt(1 - rhos**2); but don't calculate diagonal, because
    # it'll just be zero and we're dividing by it (but not using result)
    # use inf instead of nan; stats.norm.cdf doesn't like nan inputs
    rho_cs = 1 - rhos**2
    np.fill_diagonal(rho_cs, np.inf)
    np.sqrt(rho_cs, out=rho_cs)

    R = stats.norm.cdf((mu_sigs[y] - rhos * mu_sigs[x]) / rho_cs)

    mu_sigs_sq = mu_sigs ** 2
    r_num = mu_sigs_sq[x] + mu_sigs_sq[y] - 2 * rhos * mu_sigs[x] * mu_sigs[y]
    np.fill_diagonal(r_num, 1)  # don't want slightly negative numerator here
    r = rho_cs / np.sqrt(2 * np.pi) * stats.norm.pdf(np.sqrt(r_num) / rho_cs)

    bit = mu[y] * sigmas[x] * q[x] * R
    cov = (
        (mu[x] * mu[y] + Sigma) * prob
        + bit + bit.T
        + sigmas[x] * sigmas[y] * r
        - mean[x] * mean[y])

    cov[range(d), range(d)] = (
        Q * (1 - Q) * mu**2 + (1 - 2 * Q) * q * mu * sigmas
        + (Q - q**2) * sigma2s)

    return mean, cov

และการทดสอบ Monte Carlo ที่ใช้งานได้:

np.random.seed(12)
d = 4
mu = np.random.randn(d)
L = np.random.randn(d, d)
Sigma = L.T.dot(L)
dist = stats.multivariate_normal(mu, Sigma)

mn, cov = relu_mvn_mean_cov(mu, Sigma)

samps = dist.rvs(10**7)
mn_est = samps.mean(axis=0)
cov_est = np.cov(samps, rowvar=False)
print(np.max(np.abs(mn - mn_est)), np.max(np.abs(cov - cov_est)))

ซึ่งให้ซึ่ง0.000572145310512 0.00298692620286ระบุว่าความคาดหวังและความแปรปรวนร่วมที่อ้างสิทธิ์ Monte Monte Carlo ประมาณการ (จากตัวอย่าง)10,000,000


คุณสามารถสรุปว่าค่าสุดท้ายคืออะไร? พวกเขาประมาณค่าพารามิเตอร์ mu และ L ที่คุณสร้างขึ้นหรือไม่? อาจพิมพ์ค่าเป้าหมายเหล่านั้นหรือไม่
AdamO

ไม่ค่าส่งคืนคือและ ; สิ่งที่ฉันพิมพ์คือระยะทางระหว่างตัวประมาณค่า Monte Carlo ของปริมาณเหล่านั้นกับค่าที่คำนวณได้ คุณอาจจะกลับคำเหล่านี้เพื่อให้ได้ตัวประมาณโมเมนต์สำหรับและ - Rosenbaum ทำตามนั้นในส่วนที่ 3 ของเขาในกรณีที่ถูกตัดทอน - แต่นั่นไม่ใช่สิ่งที่ฉันต้องการที่นี่ \E(Z+)\Cov(Z+)LμΣ
Dougal
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.