Giá trị trung bình và phương sai của đa biến 0 kiểm duyệt bình thường là gì?


9

Đặt ở trong . Ma trận trung bình và hiệp phương sai của (với phần tử tính toán tối đa) là gì?ZN(μ,Σ)RdZ+=max(0,Z)

Điều này xuất hiện, ví dụ bởi vì, nếu chúng ta sử dụng chức năng kích hoạt ReLU bên trong một mạng sâu và giả sử thông qua CLT rằng các đầu vào cho một lớp nhất định là xấp xỉ bình thường, thì đây là phân phối đầu ra.

(Tôi chắc chắn nhiều người đã tính toán điều này trước đây, nhưng tôi không thể tìm thấy kết quả được liệt kê ở bất cứ đâu theo cách dễ đọc.)


Nó sẽ đơn giản hóa câu trả lời của bạn - có lẽ rất nhiều - để quan sát rằng bạn có thể có được nó bằng cách kết hợp các kết quả của hai câu hỏi riêng biệt: (1) các khoảnh khắc của phân phối Bình thường bị cắt cụt và (2) các khoảnh khắc của hỗn hợp là gì ? Điều thứ hai là đơn giản và tất cả những gì bạn cần làm là trích dẫn kết quả cho cái trước.
whuber

@whuber Hmm. Mặc dù tôi đã không nói rõ ràng, nhưng về cơ bản, đó là những gì tôi làm trong câu trả lời của mình, ngoại trừ việc tôi không tìm thấy kết quả cho phân phối bivariate bị cắt ngắn với trung bình và phương sai chung và do đó phải thực hiện một số thay đổi và thay đổi. Có cách nào để rút ra, ví dụ hiệp phương sai mà không thực hiện số lượng đại số tôi phải làm không? Tôi chắc chắn không khẳng định rằng bất cứ điều gì trong câu trả lời này là tiểu thuyết, chỉ là đại số là tẻ nhạt và dễ bị lỗi, và có lẽ ai đó sẽ tìm thấy giải pháp hữu ích.
Dougal

Phải: Tôi chắc chắn đại số của bạn tương đương với những gì tôi mô tả, vì vậy có vẻ như chúng tôi chia sẻ sự đánh giá cao để đơn giản hóa đại số là có thể. Một cách dễ dàng để giảm đại số là chuẩn hóa các phần tử đường chéo của để thống nhất, bởi vì tất cả những gì cần làm là thiết lập một đơn vị đo lường cho mỗi biến. Tại thời điểm đó, bạn có thể trực tiếp cắm kết quả của Rosenbaum vào các biểu thức (đơn giản, rõ ràng) cho các khoảnh khắc của hỗn hợp. Cho dù điều đó thậm chí có giá trị đơn giản hóa đại số có thể là một vấn đề của hương vị: không đơn giản hóa, nó dẫn đến một chương trình máy tính đơn giản, mô-đun. Σ
whuber

1
Tôi cho rằng người ta có thể viết một chương trình tính toán các khoảnh khắc trực tiếp với kết quả của Rosenbaum và trộn một cách thích hợp, sau đó dịch chuyển và thu nhỏ chúng trở lại không gian ban đầu. Điều đó có lẽ sẽ nhanh hơn cách tôi đã làm.
Dougal

Câu trả lời:


7

Trước tiên chúng ta có thể giảm điều này để chỉ phụ thuộc vào một số thời điểm nhất định của các bản phân phối bình thường / bivariate bị cắt bớt: lưu ý tất nhiên là

E[Z+]=[E[(Zi)+]]iCov(Z+)=[Cov((Zi)+,(Zj)+)]ij,
và vì chúng tôi thực hiện các phép biến đổi phối hợp theo các chiều nhất định của phân phối bình thường, chúng tôi chỉ cần phải lo lắng về giá trị trung bình và phương sai của 1d kiểm duyệt bình thường và hiệp phương sai của hai quy tắc kiểm duyệt 1d.

Chúng tôi sẽ sử dụng một số kết quả từ

S Rosenbaum (1961). Khoảnh khắc của một phân phối bình thường cắt ngắn Bivariate . JRSS B, tập 23 trang 405-408. ( jstor )

Rosenbaum xem xét và xem xét cắt ngắn cho sự kiện .

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

Cụ thể, chúng tôi sẽ sử dụng ba kết quả sau đây, (1), (3) và (5). Trước tiên, hãy xác định các mục sau:

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

Bây giờ, Rosenbaum cho thấy:

(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.

Sẽ rất hữu ích khi xem xét trường hợp đặc biệt của (1) và (3) với , tức là cắt ngắn 1d: Pr ( V ) E [ ~ X | V ]ay=

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

Bây giờ chúng tôi muốn xem xét

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

Chúng tôi sẽ sử dụng đó là các giá trị của và khi , .

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

Bây giờ, bằng cách sử dụng (*), chúng tôi thu được và sử dụng cả hai (*) và (**) mang lại sao cho

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.

Để tìm , chúng tôi sẽ cần 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,
và sau đó trừ chúng tôi nhận được 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).

Đây là một số mã Python để tính toán các khoảnh khắc:

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

và một bài kiểm tra Monte Carlo mà nó hoạt động:

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)))

đưa ra 0.000572145310512 0.00298692620286, chỉ ra rằng kỳ vọng được tuyên bố và hiệp phương sai phù hợp với ước tính của Monte Carlo (dựa trên mẫu).10,000,000


bạn có thể tóm tắt những giá trị cuối cùng là gì? Họ có ước tính các tham số mu và L bạn tạo ra không? Có thể in những giá trị mục tiêu?
AdamO

Không, các giá trị trả về là và ; những gì tôi đã in là khoảng cách giữa các công cụ ước tính Monte Carlo của các đại lượng đó và giá trị được tính toán. Bạn có thể đảo ngược các biểu thức này để có được một công cụ ước tính khớp thời điểm cho và - Rosenbaum thực sự làm điều đó trong phần 3 của anh ấy trong trường hợp cắt ngắn - nhưng đó không phải là điều tôi muốn ở đây. \ CoV ( Z + ) L L Σ\E(Z+)\Cov(Z+)LμΣ
Dougal
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.