共分散行列を含む多次元のガウス関数の微分

目的:ガウス関数微分

共分散行列 \mathbf{\Sigma} (バンド幅行列) を用いて表された多次元 (多変量) で異方性のガウス関数 (多変量正規分布)微分 (勾配) を考えます。微分したいガウス関数の形は

\displaystyle{
\mathcal{N}(\mathbf{x}; {\boldsymbol \mu}, \mathbf{\Sigma}) = \frac{1}{(2\pi)^{\frac{n}{2}}|\mathbf{\Sigma}|^{\frac{1}{2}}}\exp\left( - \frac{1}{2} (\mathbf{x - {\boldsymbol \mu}})^T \mathbf{\Sigma}^{-1} (\mathbf{x - {\boldsymbol \mu}})\right)
}

だとします。ただし \mathbf{\Sigma} \in \mathbb{R}^{n \times n} は正値対称な共分散行列 (バンド幅行列) で、\mathbf{x}, {\boldsymbol \mu} \in \mathbb{R}^n です。これはPRMLなどの機械学習の参考書でも見られるガウス分布の表し方です。

共分散行列を \mathbf{\Sigma}、中心を {\boldsymbol \mu} とするような多次元のガウス関数 \mathcal{N}(\mathbf{x}; {\boldsymbol \mu}, \mathbf{\Sigma}) のイメージ。

ちなみにバンド幅が \sigma \in \mathbb{R} によって表された \mu \in \mathbb{R} を中心とする 1 次元のガウス関数

\displaystyle{
\mathcal{N}(x; \mu, \sigma) = \frac{1}{\sqrt{2\pi}\sigma} \exp\left(- \frac{(x - \mu)^2}{2\sigma^2} \right)
}

微分

などでも紹介されている通り、

\displaystyle{
\frac{d}{dx}\mathcal{N}(x; \mu, \sigma) = - \frac{x - \mu}{\sqrt{2\pi}\sigma^3} \exp\left(- \frac{(x - \mu)^2}{2\sigma^2} \right)
}

となります。今回はこれの n 次元への拡張、さらにバンド幅が等方性ではなく異方性のものを微分します。

準備:指数部にベクトル・行列が含まれるときのベクトルによる微分

\mathbf{x}n \times 1 ベクトル、\mathbf{A}n \times n 対称行列とするとき、

\displaystyle{
\frac{\partial}{\partial \mathbf{x}} \left( \mathbf{x}^T \mathbf{A} \mathbf{x} \right) = 2 \mathbf{A} \mathbf{x}
}

が成り立ちます。この公式自体は様々な記事やウェブサイトで紹介されているので、ウェブ検索をかけるとすぐに見つかります。

この公式と合成関数の微分の公式 (Chain Rule) を用いることで、

\displaystyle{
\frac{\partial}{\partial \mathbf{x}} \left\{ \exp \left( - \frac{1}{2}\mathbf{x}^T \mathbf{A}\mathbf{x} \right) \right\} \\
= \frac{\partial y}{\partial \mathbf{x}} \cdot \frac{\partial}{\partial y} \exp(y) \:\:\: \left( y := - \frac{1}{2}\mathbf{x}^T\mathbf{A}\mathbf{x} \right) \\
= - \frac{1}{2} \cdot \frac{\partial}{\partial \mathbf{x}} \left( \mathbf{x}^T\mathbf{A}\mathbf{x} \right) \cdot \exp(y) \\
= - \frac{1}{2} \cdot 2 \mathbf{A} \mathbf{x} \cdot \exp \left( - \frac{1}{2}\mathbf{x}^T\mathbf{A}\mathbf{x} \right) \\
= - \exp \left( - \frac{1}{2} \mathbf{x}^T \mathbf{A} \mathbf{x} \right) \mathbf{A} \mathbf{x}
}

という関係式を導くことができます。この式は

では公式として紹介されています。ちなみにベクトルによる微分の Chain Rule は

で証明が紹介されています。

導出:式変形と結果

上記で導いた関係式と再び合成関数の微分の公式 (Chain Rule) を用いると

\displaystyle{
\frac{\partial}{\partial \mathbf{x}} \mathcal{N}(\mathbf{x}; {\boldsymbol \mu}, \mathbf{\Sigma}) \\
= \frac{1}{(2\pi)^{\frac{n}{2}}|\mathbf{\Sigma}|^{\frac{1}{2}}} \cdot \frac{\partial}{\partial \mathbf{x}} \exp\left( - \frac{1}{2} (\mathbf{x - {\boldsymbol \mu}})^T \mathbf{\Sigma}^{-1} (\mathbf{x - {\boldsymbol \mu}})\right) \\
= \frac{1}{(2\pi)^{\frac{n}{2}}|\mathbf{\Sigma}|^{\frac{1}{2}}} \cdot \frac{\partial \mathbf{z}}{\partial \mathbf{x}} \cdot \frac{\partial}{\partial \mathbf{z}} \exp\left( - \frac{1}{2} \mathbf{z}^T \mathbf{\Sigma}^{-1} \mathbf{z} \right) \:\:\: \left( \mathbf{z} := \mathbf{x} - {\boldsymbol \mu} \right) \\
= \frac{1}{(2\pi)^{\frac{n}{2}}|\mathbf{\Sigma}|^{\frac{1}{2}}} \cdot \mathbf{I} \cdot \left\{ - \exp\left( - \frac{1}{2} \mathbf{z}^T \mathbf{\Sigma}^{-1} \mathbf{z} \right) \mathbf{\Sigma}^{-1} \mathbf{z} \right\} \\
= - \frac{1}{(2\pi)^{\frac{n}{2}}|\mathbf{\Sigma}|^{\frac{1}{2}}} \exp\left( - \frac{1}{2} (\mathbf{x} - {\boldsymbol \mu})^T \mathbf{\Sigma}^{-1} (\mathbf{x} - {\boldsymbol \mu}) \right) \mathbf{\Sigma}^{-1} (\mathbf{x} - {\boldsymbol \mu}) \\
= - \mathcal{N}(\mathbf{x}; {\boldsymbol \mu}, \mathbf{\Sigma}) \mathbf{\Sigma}^{-1} (\mathbf{x} - {\boldsymbol \mu})
}

が得られます。また、冒頭で紹介した 1 次元のガウス関数微分の関係式
\displaystyle{
\frac{d}{dx}\mathcal{N}(x; \mu, \sigma) = - \frac{x - \mu}{\sqrt{2\pi}\sigma^3} \exp\left(- \frac{(x - \mu)^2}{2\sigma^2} \right)
}

も、得られた式において \mathbf{\Sigma}\sigma^2 で置き換え n=1 とすることで、確かに成り立っていることが分かります。

おまけ:二階微分(ヘッセ行列)

上記で得られた結果をさらに用いて、ガウス関数ヘッセ行列 (Hessian Matrix) を求めます。

ベクトル \mathbf{x} を引数とするスカラー関数 f(\mathbf{x}) のヘッセ行列 \mathbf{H}

で説明されている通り、

\displaystyle{
\mathbf{H} = \frac{\partial^2}{\partial \mathbf{x} \partial \mathbf{x}^T} f(\mathbf{x}) = \frac{\partial}{\partial \mathbf{x}} \left( \frac{\partial}{\partial \mathbf{x}} f(\mathbf{x}) \right)^T
}

で計算されます。したがって、ガウス関数のヘッセ行列は
\displaystyle{
\mathbf{H} = \frac{\partial^2}{\partial \mathbf{x} \partial \mathbf{x}^T} \mathcal{N}(\mathbf{x}; {\boldsymbol \mu}, \mathbf{\Sigma}) \\
= \frac{\partial}{\partial \mathbf{x}} \left\{ \frac{\partial}{\partial \mathbf{x}} \mathcal{N}(\mathbf{x}; {\boldsymbol \mu}, \mathbf{\Sigma}) \right\}^T \\
= \frac{\partial}{\partial \mathbf{x}} \left\{ - \mathcal{N}(\mathbf{x}; {\boldsymbol \mu}, \mathbf{\Sigma}) \mathbf{\Sigma}^{-1} (\mathbf{x} - {\boldsymbol \mu}) \right\}^T \\
= - \left\{ \frac{\partial}{\partial \mathbf{x}} \mathcal{N}(\mathbf{x}; {\boldsymbol \mu}, \mathbf{\Sigma}) \right\} \left( \mathbf{\Sigma}^{-1} (\mathbf{x} - {\boldsymbol \mu}) \right)^T - \mathcal{N}(\mathbf{x}; {\boldsymbol \mu}, \mathbf{\Sigma}) \left\{ \frac{\partial}{\partial \mathbf{x}} \left( \mathbf{\Sigma}^{-1} (\mathbf{x} - {\boldsymbol \mu}) \right)^T \right\} \\
= - \left( - \mathcal{N}(\mathbf{x}; {\boldsymbol \mu}, \mathbf{\Sigma}) \mathbf{\Sigma}^{-1} (\mathbf{x} - {\boldsymbol \mu}) \right) \left( \mathbf{\Sigma}^{-1} (\mathbf{x} - {\boldsymbol \mu}) \right)^T - \mathcal{N}(\mathbf{x}; {\boldsymbol \mu}, \mathbf{\Sigma}) \mathbf{\Sigma}^{-1} \\
= \mathcal{N}(\mathbf{x}; {\boldsymbol \mu}, \mathbf{\Sigma}) \left\{ \mathbf{\Sigma}^{-1} (\mathbf{x} - {\boldsymbol \mu}) (\mathbf{x} - {\boldsymbol \mu})^T \mathbf{\Sigma}^{-1} - \mathbf{\Sigma}^{-1} \right\} 
}

となります。途中、(\mathbf{\Sigma}^{-1})^T = \mathbf{\Sigma}^{-1} が成り立つことと、ベクトルによる微分に関する積の微分の関係式を用いました。一階微分を計算したときと同様に、\mathbf{\Sigma}\sigma^2 で置き換え n=1 とすることで

で示されている結果などと矛盾しないことが分かります。

最後に

この記事には間違いがある可能性があります。ここに書かれている数式を用いる場合には必ず自身で再計算して確認してからにしてください。また、もし間違いを見つけた場合には教えてください。