ここでは、2つのガウス分布 \(p_1(x)\) と \(p_2(x)\) の間のクロスエントロピー \(H(p_1, p_2)\) を閉形式で導出します。1次元の場合の導出に続いて多変量ガウスへの一般化を行い、KLダイバージェンスとの関係を明らかにしたうえで、実装による数値検証(モンテカルロ推定との比較)まで一貫して扱います。
準備
ガウス分布 (正規分布)
平均 \(\mu\) 、分散 \(\sigma^2\) のガウス分布の確率密度関数は次の通りです。
\[ p(x | \mu, \sigma^2) = \frac{1}{\sqrt{2\pi\sigma^2}} \exp\lbrace-\frac{(x-\mu)^2}{2\sigma^2}\rbrace \]期待値と分散の性質
確率変数 \(X\) がガウス分布に従うとき、
- 期待値: \(\mathbb{E}[X] = \mu\)
- 分散: \(\mathbb{V}[X] = \mathbb{E}[X^2] - (\mathbb{E}[X])^2 = \sigma^2\)
- したがって、\(\mathbb{E}[X^2] = \mu^2 + \sigma^2\)
1次元の場合のクロスエントロピー導出
2つのガウス分布 \(p_1(x) = \mathcal{N}(x | \mu_1, \sigma_1^2)\) と \(p_2(x) = \mathcal{N}(x | \mu_2, \sigma_2^2)\) の間のクロスエントロピー \(H(p_1, p_2)\) は、以下のように定義されます。
\[ H(p_1, p_2) = -\int_{-\infty}^{\infty} p_1(x) \log p_2(x) dx = -\mathbb{E}_{p_1}[\log p_2(x)] \]ここで、\(\log p_2(x)\) は以下のようになります。
\[ \log p_2(x) = \log \left(\frac{1}{\sqrt{2\pi\sigma_2^2}} \exp\lbrace-\frac{(x-\mu_2)^2}{2\sigma_2^2}\rbrace\right) \]\[ = -\frac{1}{2} \log(2\pi\sigma_2^2) - \frac{(x-\mu_2)^2}{2\sigma_2^2} \]これを期待値の式に代入します。
\[ H(p_1, p_2) = -\mathbb{E}_{p_1}\left[-\frac{1}{2} \log(2\pi\sigma_2^2) - \frac{(x-\mu_2)^2}{2\sigma_2^2}\right] \] \[ = \frac{1}{2} \log(2\pi\sigma_2^2) + \frac{1}{2\sigma_2^2} \mathbb{E}_{p_1}[(x-\mu_2)^2] \]ここで、\(\mathbb{E}_{p_1}[(x-\mu_2)^2]\) を展開します。
\[ \mathbb{E}_{p_1}[(x-\mu_2)^2] = \mathbb{E}_{p_1}[x^2 - 2x\mu_2 + \mu_2^2] \] \[ = \mathbb{E}_{p_1}[x^2] - 2\mu_2 \mathbb{E}_{p_1}[x] + \mu_2^2 \]\(p_1(x)\) は平均 \(\mu_1\) 、分散 \(\sigma_1^2\) のガウス分布なので、\(\mathbb{E}_{p_1}[x] = \mu_1\) および \(\mathbb{E}_{p_1}[x^2] = \mu_1^2 + \sigma_1^2\) を代入します。
\[ \mathbb{E}_{p_1}[(x-\mu_2)^2] = (\mu_1^2 + \sigma_1^2) - 2\mu_2 \mu_1 + \mu_2^2 \] \[ = (\mu_1 - \mu_2)^2 + \sigma_1^2 \]これを元のクロスエントロピーの式に代入すると、
\[ H(p_1, p_2) = \frac{1}{2} \log(2\pi\sigma_2^2) + \frac{(\mu_1 - \mu_2)^2 + \sigma_1^2}{2\sigma_2^2} \tag{1}\]これが、2つのガウス分布間のクロスエントロピーの閉形式表現です。\(\mu_1 = \mu_2\) 、\(\sigma_1 = \sigma_2\) (すなわち \(p_1 = p_2\) )のとき、式(1)は \(\frac{1}{2}(1 + \log(2\pi\sigma_1^2))\) に一致し、これはガウス分布の(自己)微分エントロピーそのものです。この整合性は後述のKLダイバージェンスとの関係の節で改めて確認します。
多変量ガウスへの一般化
以下では、\(d\) 次元の確率変数 \(\boldsymbol{x} \in \mathbb{R}^d\) に対する多変量ガウス分布 \(p = \mathcal{N}(\boldsymbol{\mu}_1, \Sigma_1)\) 、\(q = \mathcal{N}(\boldsymbol{\mu}_2, \Sigma_2)\) の間のクロスエントロピー \(H(p, q)\) を導出します。1次元の結果は \(d=1\) の特殊ケースとして再現されることを確認します。
多変量ガウス分布の対数密度
\[ q(\boldsymbol{x}) = \frac{1}{(2\pi)^{d/2} |\Sigma_2|^{1/2}} \exp\left\lbrace -\frac{1}{2} (\boldsymbol{x}-\boldsymbol{\mu}_2)^\top \Sigma_2^{-1} (\boldsymbol{x}-\boldsymbol{\mu}_2) \right\rbrace \]対数をとると、
\[ \log q(\boldsymbol{x}) = -\frac{d}{2}\log(2\pi) - \frac{1}{2}\log|\Sigma_2| - \frac{1}{2}(\boldsymbol{x}-\boldsymbol{\mu}_2)^\top \Sigma_2^{-1} (\boldsymbol{x}-\boldsymbol{\mu}_2) \]クロスエントロピーの定義 \(H(p,q) = -\mathbb{E}_{p}[\log q(\boldsymbol{x})]\) に代入すると、
\[ H(p,q) = \frac{d}{2}\log(2\pi) + \frac{1}{2}\log|\Sigma_2| + \frac{1}{2}\mathbb{E}_{p}\left[(\boldsymbol{x}-\boldsymbol{\mu}_2)^\top \Sigma_2^{-1} (\boldsymbol{x}-\boldsymbol{\mu}_2)\right] \tag{2} \]残るは二次形式の期待値 \(\mathbb{E}_{p}\left[(\boldsymbol{x}-\boldsymbol{\mu}_2)^\top \Sigma_2^{-1} (\boldsymbol{x}-\boldsymbol{\mu}_2)\right]\) の計算です。
トレーストリックによる二次形式の期待値
一般に、確率変数 \(\boldsymbol{x}\) (平均 \(\mathbb{E}[\boldsymbol{x}]\) 、共分散 \(\mathrm{Cov}(\boldsymbol{x})\) )と任意の対称行列 \(A\) に対して、次の関係が成り立ちます。
\[ \mathbb{E}[\boldsymbol{x}^\top A \boldsymbol{x}] = \mathrm{tr}(A\, \mathrm{Cov}(\boldsymbol{x})) + \mathbb{E}[\boldsymbol{x}]^\top A\, \mathbb{E}[\boldsymbol{x}] \]これは「トレーストリック」と呼ばれ、スカラー \(\boldsymbol{x}^\top A \boldsymbol{x} = \mathrm{tr}(\boldsymbol{x}^\top A \boldsymbol{x}) = \mathrm{tr}(A \boldsymbol{x}\boldsymbol{x}^\top)\) (トレースの巡回性)と期待値の線形性 \(\mathbb{E}[\mathrm{tr}(A\boldsymbol{x}\boldsymbol{x}^\top)] = \mathrm{tr}(A\,\mathbb{E}[\boldsymbol{x}\boldsymbol{x}^\top])\) 、および \(\mathrm{Cov}(\boldsymbol{x}) = \mathbb{E}[\boldsymbol{x}\boldsymbol{x}^\top] - \mathbb{E}[\boldsymbol{x}]\mathbb{E}[\boldsymbol{x}]^\top\) から従います。
いま \(\boldsymbol{y} = \boldsymbol{x} - \boldsymbol{\mu}_2\) とおくと、\(\boldsymbol{x} \sim p = \mathcal{N}(\boldsymbol{\mu}_1, \Sigma_1)\) より
- \(\mathbb{E}_p[\boldsymbol{y}] = \boldsymbol{\mu}_1 - \boldsymbol{\mu}_2\)
- \(\mathrm{Cov}_p(\boldsymbol{y}) = \mathrm{Cov}_p(\boldsymbol{x}) = \Sigma_1\) (定数シフトは共分散を変えない)
したがって \(A = \Sigma_2^{-1}\) としてトレーストリックを適用すると、
\[ \mathbb{E}_{p}\left[\boldsymbol{y}^\top \Sigma_2^{-1} \boldsymbol{y}\right] = \mathrm{tr}(\Sigma_2^{-1}\Sigma_1) + (\boldsymbol{\mu}_1-\boldsymbol{\mu}_2)^\top \Sigma_2^{-1} (\boldsymbol{\mu}_1-\boldsymbol{\mu}_2) \tag{3} \]閉形式表現
式(3)を式(2)に代入すると、多変量ガウス間のクロスエントロピーの閉形式が得られます。
\[ \boxed{H(p,q) = \frac{1}{2}\left[ d\ln(2\pi) + \ln|\Sigma_2| + \mathrm{tr}(\Sigma_2^{-1}\Sigma_1) + (\boldsymbol{\mu}_1-\boldsymbol{\mu}_2)^\top \Sigma_2^{-1}(\boldsymbol{\mu}_1-\boldsymbol{\mu}_2) \right]} \tag{4}\]\(d=1\) での整合性確認: \(d=1\) のとき \(\Sigma_1 = \sigma_1^2\) 、\(\Sigma_2 = \sigma_2^2\) (スカラー)なので、\(\mathrm{tr}(\Sigma_2^{-1}\Sigma_1) = \sigma_1^2/\sigma_2^2\) 、\((\mu_1-\mu_2)^\top \Sigma_2^{-1}(\mu_1-\mu_2) = (\mu_1-\mu_2)^2/\sigma_2^2\) となり、
\[ H(p,q) = \frac{1}{2}\left[\ln(2\pi) + \ln\sigma_2^2 + \frac{\sigma_1^2}{\sigma_2^2} + \frac{(\mu_1-\mu_2)^2}{\sigma_2^2}\right] = \frac{1}{2}\log(2\pi\sigma_2^2) + \frac{(\mu_1-\mu_2)^2 + \sigma_1^2}{2\sigma_2^2} \]これは式(1)と完全に一致します。多変量の式(4)は1次元の結果の正しい一般化になっています。
KLダイバージェンスとの関係
クロスエントロピー \(H(p,q)\) と(自己)微分エントロピー \(H(p) \equiv H(p,p)\) の差として、KLダイバージェンスが定義されます。
\[ D_{KL}(p \| q) = \int p(\boldsymbol{x}) \log\frac{p(\boldsymbol{x})}{q(\boldsymbol{x})} d\boldsymbol{x} = \mathbb{E}_p[\log p(\boldsymbol{x})] - \mathbb{E}_p[\log q(\boldsymbol{x})] = H(p,q) - H(p) \tag{5} \]情報理論の基礎的な定義(エントロピー・微分エントロピー・KLダイバージェンスの導出)は 情報理論の基礎(エントロピーから相互情報量まで, PRML 1.6) で扱っているので、そちらも参照してください。
多変量ガウスの自己エントロピー
式(4)で \(q = p\) (\(\boldsymbol{\mu}_2 = \boldsymbol{\mu}_1\) 、\(\Sigma_2 = \Sigma_1\) )とおくと、\(\mathrm{tr}(\Sigma_1^{-1}\Sigma_1) = \mathrm{tr}(I_d) = d\) 、二次形式の項は \(0\) になるので、
\[ H(p) = \frac{1}{2}\left[d\ln(2\pi) + \ln|\Sigma_1| + d\right] = \frac{1}{2}\ln\left((2\pi e)^d |\Sigma_1|\right) \tag{6}\]これは多変量ガウス分布の微分エントロピーの標準的な式です。
KLダイバージェンスの閉形式への帰着
式(4)と式(6)を式(5)に代入します。
\[ D_{KL}(p\|q) = \frac{1}{2}\left[d\ln(2\pi) + \ln|\Sigma_2| + \mathrm{tr}(\Sigma_2^{-1}\Sigma_1) + (\boldsymbol{\mu}_1-\boldsymbol{\mu}_2)^\top \Sigma_2^{-1}(\boldsymbol{\mu}_1-\boldsymbol{\mu}_2)\right] - \frac{1}{2}\left[d\ln(2\pi) + \ln|\Sigma_1| + d\right] \]\(d\ln(2\pi)\) の項が打ち消し合い、整理すると、
\[ D_{KL}(p\|q) = \frac{1}{2}\left[ \mathrm{tr}(\Sigma_2^{-1}\Sigma_1) + (\boldsymbol{\mu}_1-\boldsymbol{\mu}_2)^\top \Sigma_2^{-1}(\boldsymbol{\mu}_1-\boldsymbol{\mu}_2) - d + \ln\frac{|\Sigma_2|}{|\Sigma_1|} \right] \tag{7} \]これは、多変量ガウス分布間のKLダイバージェンスとして広く知られる標準公式そのものです。つまり、クロスエントロピーの閉形式(4)から出発して、自己エントロピー(6)を引くだけで、KLダイバージェンスの公式(7)を独立に導出し直す必要なく機械的に得られることがわかります。逆に、クロスエントロピーは「KLダイバージェンス + 真の分布の自己エントロピー」という分解(\(H(p,q) = D_{KL}(p\|q) + H(p)\) )を持つため、\(p\) (真の分布、あるいは学習データ)が固定されているタスクでは、クロスエントロピーの最小化とKLダイバージェンスの最小化は等価になります。これは後述するように、深層学習で「なぜKLダイバージェンスではなくクロスエントロピーを損失関数として使うのか」という問いへの答えの核心部分です。
なぜガウス分布間のクロスエントロピーを計算するのか
ここまでは純粋に数学的な導出でしたが、この量が実務で登場する具体的な場面を挙げます。
ヘテロスケダスティック回帰
回帰モデルが入力 \(x\) に応じて出力の平均だけでなく分散も予測する場合(ヘテロスケダスティック回帰、例えば「予測の不確実性」を扱うベイズ的なニューラルネットワーク回帰)、モデルは各サンプルについて \(q(y|x) = \mathcal{N}(y | \hat\mu(x), \hat\sigma^2(x))\) を出力します。真のデータ生成分布を \(p\) (あるいは観測値 \(y\) を退化分布とみなす)とすると、負の対数尤度損失
\[ \mathcal{L} = -\log q(y|x) = \frac{1}{2}\log(2\pi\hat\sigma^2(x)) + \frac{(y-\hat\mu(x))^2}{2\hat\sigma^2(x)} \]は、まさに式(1)で \(p_1\) を観測値 \(y\) に退化した分布(\(\sigma_1^2 \to 0\) )としたときのクロスエントロピーの一形態です。分散を固定 (\(\hat\sigma^2\) 一定) すれば二乗誤差損失に一致しますが、分散自体を予測させることで「自信のない予測」に対するペナルティを弱める(\(\hat\sigma^2\) を大きくして損失を下げる代わりに対数項でペナルティを課す)という設計が可能になります。
VAEの再構成項
変分オートエンコーダ(VAE)で、デコーダの出力分布がガウス分布 \(q_\theta(\boldsymbol{x}|\boldsymbol{z}) = \mathcal{N}(\boldsymbol{x} | \hat{\boldsymbol{\mu}}(\boldsymbol{z}), \sigma^2 I)\) としてモデル化される場合、再構成損失(ELBOの第1項)は
\[ -\mathbb{E}_{q_\phi(\boldsymbol{z}|\boldsymbol{x})}\left[\log q_\theta(\boldsymbol{x}|\boldsymbol{z})\right] \]であり、これは式(4)の多変量ガウス間クロスエントロピーの形をしています(\(\Sigma\) が \(\sigma^2 I\) に固定されていれば二乗誤差に単純化されますが、一般には分散も学習対象になり得ます)。このように、クロスエントロピーはただの分類問題の損失関数(ソフトマックス+クロスエントロピー)にとどまらず、連続値・多変量の出力をガウス分布としてモデル化するあらゆる生成モデル・確率的回帰モデルの損失関数の基礎になっています。
数値検証
閉形式の導出が正しいことを、実装によるモンテカルロ推定と突き合わせて確認します。モンテカルロ推定は
\[ H(p,q) \approx -\frac{1}{N}\sum_{i=1}^{N} \log q(\boldsymbol{x}_i), \qquad \boldsymbol{x}_i \sim p \]で行い、\(N\)
を増やすにつれて閉形式の値へ収束すること(相対誤差が縮小すること)を確認します。多変量の場合は scipy.stats.multivariate_normal の logpdf を独立な実装として用いてクロスチェックします。
1次元の場合
\(p = \mathcal{N}(0, 1)\) 、\(q = \mathcal{N}(1, 2)\) とします。
import numpy as np
from scipy.stats import norm
rng = np.random.default_rng(42)
mu1, sigma1_sq = 0.0, 1.0
mu2, sigma2_sq = 1.0, 2.0
# 閉形式 (式1)
H_closed = 0.5 * np.log(2 * np.pi * sigma2_sq) + ((mu1 - mu2) ** 2 + sigma1_sq) / (2 * sigma2_sq)
print(f"closed form: {H_closed:.6f}")
sigma1, sigma2 = np.sqrt(sigma1_sq), np.sqrt(sigma2_sq)
for N in [10_000, 100_000, 1_000_000, 10_000_000]:
x = rng.normal(mu1, sigma1, size=N)
H_mc = -np.mean(norm.logpdf(x, loc=mu2, scale=sigma2))
rel_err = abs(H_mc - H_closed) / abs(H_closed)
print(f"N={N:>10}: MC={H_mc:.6f} rel_err={rel_err:.3e}")
実行結果:
closed form: 1.765512
N= 10000: MC=1.773816 rel_err=4.703e-03
N= 100000: MC=1.769089 rel_err=2.026e-03
N= 1000000: MC=1.765015 rel_err=2.814e-04
N= 10000000: MC=1.765362 rel_err=8.501e-05
\(N=10^7\) まで増やすと相対誤差は \(8.5\times 10^{-5}\) まで縮小し、閉形式(1)の値 \(H(p,q)=1.765512\) に収束することが確認できます。
多変量(2次元)の場合
\(p = \mathcal{N}(\boldsymbol{\mu}_1, \Sigma_1)\) 、\(q = \mathcal{N}(\boldsymbol{\mu}_2, \Sigma_2)\) を次のように設定します。
import numpy as np
from scipy.stats import multivariate_normal
rng = np.random.default_rng(42)
mu1 = np.array([0.0, 0.0])
Sigma1 = np.array([[1.0, 0.3], [0.3, 1.0]])
mu2 = np.array([1.0, -1.0])
Sigma2 = np.array([[2.0, 0.5], [0.5, 1.5]])
d = 2
Sigma2_inv = np.linalg.inv(Sigma2)
diff = mu1 - mu2
# 閉形式 (式4)
H_closed = 0.5 * (
d * np.log(2 * np.pi)
+ np.log(np.linalg.det(Sigma2))
+ np.trace(Sigma2_inv @ Sigma1)
+ diff @ Sigma2_inv @ diff
)
print(f"closed form: {H_closed:.6f}")
p = multivariate_normal(mean=mu1, cov=Sigma1)
q = multivariate_normal(mean=mu2, cov=Sigma2) # 独立実装(scipy)によるクロスチェック
for N in [10_000, 100_000, 1_000_000, 10_000_000]:
x = p.rvs(size=N, random_state=rng)
H_mc = -np.mean(q.logpdf(x))
rel_err = abs(H_mc - H_closed) / abs(H_closed)
print(f"N={N:>10}: MC={H_mc:.6f} rel_err={rel_err:.3e}")
実行結果:
closed form: 3.743678
N= 10000: MC=3.747151 rel_err=9.279e-04
N= 100000: MC=3.739399 rel_err=1.143e-03
N= 1000000: MC=3.743999 rel_err=8.594e-05
N= 10000000: MC=3.743508 rel_err=4.515e-05
さらに乱数シードを変えて独立に \(N=2\times10^6\)
サンプルで再実行した場合も MC=3.743115(相対誤差 \(1.50\times10^{-4}\)
)となり、特定の乱数列に依存した偶然の一致でないことを確認しました。3次元(\(\boldsymbol{\mu}_1=[0,1,-1]\)
、非対角成分を持つ \(\Sigma_1, \Sigma_2\)
)でも同様に検証し、閉形式 \(H(p,q)=5.040413\)
に対し \(N=10^7\)
で相対誤差 \(1.35\times10^{-5}\)
まで収束することを確認済みです。
KLダイバージェンスの数値検証
式(5)〜(7)の関係も実装で確認しました。1次元の例(\(p=\mathcal{N}(0,1)\) 、\(q=\mathcal{N}(1,2)\) )では、
\[ H(p) = \frac{1}{2}(1+\log(2\pi\cdot 1)) = 1.418939, \qquad D_{KL}(p\|q) = H(p,q) - H(p) = 1.765512 - 1.418939 = 0.346574 \]これを式(7)の標準公式で直接計算した値と比較すると、両者は完全に一致します(差は倍精度浮動小数点の丸め誤差 \(< 10^{-15}\) のみ)。2次元の例でも同様に \(H(p,q)-H(p) = 0.952956\) と式(7)の直接計算値が誤差 \(3.3\times10^{-16}\) で一致することを確認しました。つまり式(5)〜(7)の代数変形(\(d\ln(2\pi)\) の相殺)は数値的にも正しく成立しています。
収束の可視化
\(p(x)\) 、\(q(x)\) の2つのガウス分布と、そのクロスエントロピーの値を可視化したものが次の図です(1次元の例、\(H(p,q)=1.7655\) )。

1次元・2次元それぞれについて、サンプル数 \(N\) を \(10^2\) から \(10^7\) まで対数的に増やしたときの相対誤差の推移を示します(各 \(N\) で8回試行した中央値)。モンテカルロ推定に典型的な \(O(N^{-1/2})\) の収束レート(傾き \(-1/2\) の破線)にほぼ沿って誤差が減少しており、\(N=10^7\) では相対誤差が \(10^{-4}\) を下回ります。

まとめ
- 1次元ガウス分布間のクロスエントロピー \(H(p_1,p_2) = \frac{1}{2}\log(2\pi\sigma_2^2) + \frac{(\mu_1-\mu_2)^2+\sigma_1^2}{2\sigma_2^2}\) を、多変量ガウス分布間の閉形式 \(H(p,q) = \frac{1}{2}[d\ln(2\pi)+\ln|\Sigma_2|+\mathrm{tr}(\Sigma_2^{-1}\Sigma_1)+(\boldsymbol{\mu}_1-\boldsymbol{\mu}_2)^\top\Sigma_2^{-1}(\boldsymbol{\mu}_1-\boldsymbol{\mu}_2)]\) に一般化し、トレーストリック \(\mathbb{E}[\boldsymbol{x}^\top A\boldsymbol{x}]=\mathrm{tr}(A\,\mathrm{Cov}(\boldsymbol{x}))+\mathbb{E}[\boldsymbol{x}]^\top A\,\mathbb{E}[\boldsymbol{x}]\) を使って導出した。
- \(D_{KL}(p\|q) = H(p,q) - H(p)\) の関係から、多変量ガウス間のKLダイバージェンスの標準公式を、既知の自己エントロピー \(H(p)=\frac{1}{2}\ln((2\pi e)^d|\Sigma_1|)\) を差し引くだけで機械的に導出できることを示した。
- ヘテロスケダスティック回帰やVAEの再構成項など、連続値をガウス分布としてモデル化する損失関数の設計はすべてこのクロスエントロピーの形に帰着する。
- 1次元・2次元・3次元それぞれで閉形式とモンテカルロ推定を突き合わせ、\(N=10^7\) で相対誤差 \(10^{-4}\) 台まで収束すること、およびKLダイバージェンスへの分解が数値的にも成立することを確認した。
参考
- C.M. ビショップ, パターン認識と機械学習 上 , 丸善出版 (2012)