多変量正規密度の導関数を取得する方法は?


35

多変量正規密度があるとします。二次(部分)微分wrtを取得したい。行列の微分をどのように取るかわからない。N(μ,Σ)μ

ウィキによると、マトリックス内の要素ごとに派生要素を取得します。

ラプラス近似で作業してい モードはです。θ = μ

log⁡PN(θ)=log⁡PN−12(θ−θ^)TΣ−1(θ−θ^).

θ^=μ

Iは、与えられたこれどのようにして生じたのですか?

Σ−1=−∂2∂θ2log⁡p(θ^|y),

私がしたこと:

log⁡P(θ|y)=−k2log⁡2π−12log⁡|Σ|−12(θ−θ^)TΣ−1(θ−θ^)

だから、私はへの微分wrtをとります。まず、転置があり、次に行列です。だから、私は立ち往生しています。θ

注:私の教授がこれに遭遇した場合、私は講義に言及しています。


1
問題の一部は、対数尤度の式にエラーがあることかもしれません-あなたはを持っています あなたが持っているべきところ。また、多分?ログ(| Σ |)Σ - 1 = - ∂ 2|Σ|log⁡(|Σ|)Σ−1=−∂2∂θ2log⁡p(θ|y)
— マクロ

はい、あなたは正しい、ごめんなさい。偏微分の前にマイナス記号があるのはなぜですか?
— user1061210

負の二次導関数は観測された漁師情報であり、通常は興味深いため、負の記号について明確にしました。また、私自身の計算で、∂2∂θ2log⁡p(θ|y)=−Σ−1
— マクロ

それでは、離散/連続関数の一般的な手順は何ですか?ログを取り、テイラー展開形式で記述し、wrt 2回微分します。フィッシャーの情報は、一般的に他のほとんどの密度には当てはまりませんよね?θ
— user1061210

3
@user先ほど指摘したように、対数の2次導関数は非正の固有値を持たなければなりません。はい、最大尤度推定の理論、フィッシャー情報などが明らかにするように、分散と負の二次偏導関数の間にはリンクがあります-マクロはこれらのコメントの前半でそれを参照しています。
— whuber

回答:


66

Matrix Cookbookの第2章には、多変量ガウス尤度を区別するためのルールを含む、確率と統計を行う際に遭遇する問題に役立つ多くの有用なアイデンティティを提供するマトリックス計算の素晴らしいレビューがあります。

平均ベクトルおよび共分散行列多変量正規のランダムベクトルがある場合、行列クックブックで方程式(86)を使用して、に関する対数尤度はμ Σ L μyμΣLμ

∂L∂μ=−12(∂(y−μ)′Σ−1(y−μ)∂μ)=−12(−2Σ−1(y−μ))=Σ−1(y−μ)

これを再度区別し、になる答えを見つけるためにあなたに任せます。−Σ−1

「余分なクレジット」として、式(57)および(61)を使用して、に関する勾配がΣ

∂L∂Σ=−12(∂log⁡(|Σ|)∂Σ+∂(y−μ)′Σ−1(y−μ)∂Σ)=−12(Σ−1−Σ−1(y−μ)(y−μ)′Σ−1)

多くの手順を省略しましたが、マトリックスクックブックにあるIDのみを使用してこの派生を行ったので、ギャップを埋めるためにそれをあなたに任せます。

私はこれらのスコア方程式を最尤推定に使用しているので、正しいことはわかっています:)


4
素晴らしいリファレンス-自分でそれをお勧めしていました。しかし、行列代数を知らない人にとっては良い教育的参照ではありません。実際の課題は、実際に使用することです。本当の痛み。Σ
— 確率論的

3
マトリックス計算のもう1つの優れた情報源は、magnus&Neudecker、amazon.com
— StasK

2
方程式の参照番号が変更されました(新しいエディションが原因の可能性があります)。新しい参照式は86です。
— goelakash

2
私はここでオフベースになる可能性がありますが、この式は正しいとは思いません。私はこれを実際の例で使用し、それらの有限の違いを見てきました。のための式と思わ対角エントリの正しい値を与えます。ただし、非対角エントリは本来の半分です。∂L∂Σ
— jjet

5

で繰り返される要素を適切に処理することを確認する必要があります。そうしないと、導関数が正しくなくなります。たとえば、(141)Matrix Cookbookは対称に次の導関数を与えますΣΣΣ

∂log⁡|Σ|∂Σ=2Σ−1−(Σ−1∘I)

そして、共分散行列の関数の微分の(14)は

∂trace(Σ−1xx⊤)∂Σ=−2Σ−1xx⊤Σ−1+(Σ−1xx⊤Σ−1∘I)

ここで、はHadmard製品を示し、便宜上、を定義しています。X:= Y - μ∘x:=y−μ

特に、これは対称性が課されていない場合と同じではないことに注意してください。その結果、Σ

∂L∂Σ=−∂∂Σ12(Dlog⁡|2π|+log⁡|Σ|+x⊤Σ−1x))=−∂∂Σ12(log⁡|Σ|+trace(Σ−1xx⊤))=−12(2Σ−1−(Σ−1∘I)−2Σ−1xx⊤Σ−1+(Σ−1xx⊤Σ−1∘I))

ここで、は、およびの、および導関数を示し0xはyのμの Dのログを| 2個のπ |DxyμDlog⁡|2π|

これは保証の要素に対応。∂ Li,jth ∂L∂L∂Σ∂L∂Σij


0

@Macroの答えを計算で検証しようとしましたが、共分散ソリューションの小さなエラーと思われるものが見つかりました。彼が得 ただし、正しい解は実際には 次のRスクリプトは、各要素について有限差分が計算される簡単な例を提供します。これは、ことを示しているB=2A-DIAG(A)ΣAB

∂L∂Σ=−12(Σ−1−Σ−1(y−μ)(y−μ)′Σ−1)=A
B=2A−diag(A)
ΣAはすべてのエントリに対して正しいが、対角要素に対してのみ正しい答えを提供します。B
library(mvtnorm)

set.seed(1)

# Generate some parameters
p <- 4
mu <- rnorm(p)
Sigma <- rWishart(1, p, diag(p))[, , 1]

# Generate an observation from the distribution as a reference point
x <- rmvnorm(1, mu, Sigma)[1, ]

# Calculate the density at x
f <- dmvnorm(x, mu, Sigma)

# Choose a sufficiently small step-size
h <- .00001

# Calculate the density at x at each shifted Sigma_ij
f.shift <- matrix(NA, p, p)
for(i in 1:p) {
  for(j in 1:p) {
    zero.one.mat <- matrix(0, p, p)
    zero.one.mat[i, j] <- 1
    zero.one.mat[j, i] <- 1

    Sigma.shift <- Sigma + h * zero.one.mat
    f.shift[i, j] <- dmvnorm(x, mu, Sigma.shift)
  }
}

# Caluclate the finite difference at each shifted Sigma_ij
fin.diff <- (f.shift - f) / h

# Calculate the solution proposed by @Macro and the true solution
A <- -1/2 * (solve(Sigma) - solve(Sigma) %*% (x - mu) %*% t(x - mu) %*% solve(Sigma))
B <- 2 * A - diag(diag(A))

# Verify that the true solution is approximately equal to the finite difference
fin.diff
A * f
B * f

ご意見ありがとうございます。の一致する非対角要素のペアを同時に変更し、それによって変更の効果を2倍にするので、他の人とは異なる表記法を解釈すると思います。実際には、方向微分の倍数を計算しています。転置が行われるべきである限り、マクロのソリューションには小さな問題があるように見えますが、それはアプリケーションで対称行列に何も変更しません。Σ
— whuber
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.