ブログ

共役勾配法(Conjugate Gradient Method)の原理と具体的な計算例

勾配に基づく最適化はよく行われる一方で、楕円に対して勾配法を適用する際に収束がなかなか進まない場合があります。このような場合に役立つ手法が共役勾配法(Conjugate Gradient Method)です。当記事では共役勾配法の原理や具体例について取りまとめました。

https://ja.wikipedia.org/wiki/共役勾配法

前提の確認

問題設定

オーソドックスな勾配降下(Gradient Descent)法は最適化にあたって有効である場合が多いが、上記のように同心楕円の等高線を持つ関数を取り扱う場合、初期値によっては楕円の等高線の法線ベクトルや勾配が楕円の中心を向かないことで収束がなかなか進まない。

一方で上記のような同心円の等高線を持つ関数を取り扱う場合は同心円の等高線の法線ベクトルや勾配が円の中心を向くので、最適解をスムーズに得ることができる。

次節では同心楕円における最適化を行うにあたって、共役勾配法(Conjugate Gradient Method)のアルゴリズムの確認を行う。

二次形式を用いた立式

$$
\large
\begin{align}
f(\mathbf{x}) &= \frac{1}{2} \mathbf{x}^{\mathrm{T}} A \mathbf{x} – \mathbf{b}^{\mathrm{T}} \mathbf{x} + c \quad (1.1) \\
\mathbf{x} & \in \mathbb{R}^{2}, \, A \in \mathbb{R}^{2 \times 2}, \, A^{\mathrm{T}}=A, \, \mathbf{b} \in \mathbb{R}^{2}, \, c \in \mathbb{R}
\end{align}
$$

上記のような二次形式$f(\mathbf{x})$の最小化問題を定義する。当項では簡易化にあたって$\mathbf{x}$は$2$次元のベクトルを定義したが、$3$次元以上も同様に取り扱うことができる。

$(1.1)$式は下記のように平方完成を行うことができる。
$$
\large
\begin{align}
f(\mathbf{x}) &= \frac{1}{2} \mathbf{x}^{\mathrm{T}} A \mathbf{x} – \mathbf{b}^{\mathrm{T}} \mathbf{x} + c \quad (1.1) \\
&= \frac{1}{2} \left( \mathbf{x}^{\mathrm{T}} A \mathbf{x} – 2 \mathbf{b}^{\mathrm{T}} \right) + c \\
&= \frac{1}{2} \left( \mathbf{x} – A^{-1} \mathbf{b} \right)^{\mathrm{T}} A \left( \mathbf{x} – A^{-1} \mathbf{b} \right) + c’ \quad (1.2)
\end{align}
$$

上記より、$f(\mathbf{x})$は$A^{-1} b$を中心とする同心楕円を描くことが確認できる。よって基本的には$\mathbf{x}^{\mathrm{T}} A \mathbf{x}$の最適化を取り扱えれば$(1.1)$式も単に平行移動で取り扱うことができる。

二次形式の平方完成については下記で詳しく取り扱った。

二次形式の式と楕円

前項の「二次形式を用いた立式」では$f(\mathbf{x})$と定義したが、関数の等高線の形状を取り扱うにあたっては関数の平行移動である$g(\mathbf{x}) = \mathbf{x}^{\mathrm{T}} A \mathbf{x}$のみを確認すれば十分である。よって以下では$g(\mathbf{x})$の等高線を確認する。

$2$次対称行列$A$の固有値を$\lambda_1, \lambda_2(\lambda_1 \neq \lambda_2)$、長さ$1$に正規化された固有ベクトルを$\mathbf{e}_{1}, \mathbf{e}_{2}$と定義するとき、任意のベクトル$\mathbf{x}$は係数$a_1, a_2$を用いて下記のように表せる。
$$
\large
\begin{align}
\mathbf{x} = a_1 \mathbf{e}_{1} + a_2 \mathbf{e}_{2}
\end{align}
$$

このとき、$g(\mathbf{x})$は下記のように表せる。
$$
\large
\begin{align}
g(\mathbf{x}) &= (a_1 \mathbf{e}_{1} + a_2 \mathbf{e}_{2})^{\mathrm{T}} A (a_1 \mathbf{e}_{1} + a_2 \mathbf{e}_{2}) \\
&= (a_1 \mathbf{e}_{1} + a_2 \mathbf{e}_{2})^{\mathrm{T}} (\lambda_1 a_1 \mathbf{e}_{1} + \lambda_2 a_2 \mathbf{e}_{2}) \\
&= \lambda_{1} a_1^{2} + \lambda_{2} a_2^{2} \quad (1.3)
\end{align}
$$

上記の計算にあたっては対称行列$A$の固有ベクトルが直交することを用いた。詳しい導出は下記で取り扱った。

ここで等高線$g(\mathbf{x})=C$の方程式は下記のように変形できる。
$$
\large
\begin{align}
g(\mathbf{x}) &= \lambda_{1} a_1^{2} + \lambda_{2} a_2^{2} = C \quad (1.4) \\
\frac{a_1^2}{\sqrt{C/\lambda_{1}}^{2}} + \frac{a_2^2}{\sqrt{C/\lambda_{2}}^{2}} &= 1 \quad (1.5)
\end{align}
$$

上記は$a_1, a_2$に関する楕円の方程式を表すが、ここで$\mathbf{x} = a_1 \mathbf{e}_{1} + a_2 \mathbf{e}_{2}$であることより、$\displaystyle \frac{\sqrt{\mathbf{e}_{1}}}{\lambda_{1}}$と$\displaystyle \frac{\sqrt{\mathbf{e}_{2}}}{\lambda_{2}}$を基底に持つ楕円が式に対応することが確認できる。

対称行列Aに関する直交・共役

$$
\large
\begin{align}
\mathbf{u}^{\mathrm{T}} A \mathbf{v} &= 0 \quad (1.6) \\
\mathbf{u} \in \mathbb{R}^{2}, \, & \mathbf{v} \in \mathbb{R}^{2}, \, A \in \mathbb{R}^{2 \times 2}
\end{align}
$$

上記が成立するとき、ベクトル$\mathbf{u}, \, \mathbf{v}$は対称行列$A$に対して「共役である」または「直交する」という。ここで対称行列$A$が$A = P^{\mathrm{T}} P$のように分解できるとき、$(1.6)$式は下記のように変形できる。
$$
\large
\begin{align}
\mathbf{u}^{\mathrm{T}} A \mathbf{v} &= 0 \quad (1.6) \\
\mathbf{u}^{\mathrm{T}} P^{\mathrm{T}} P \mathbf{v} &= 0 \\
(P \mathbf{u})^{\mathrm{T}} (P \mathbf{v}) &= 0
\end{align}
$$

上記の$P$を用いて$\hat{\mathbf{x}} = P \mathbf{x}$のような変換を行うと、$\hat{\mathbf{x}}$の空間では同心楕円の等高線が同心円の等高線に変換される。ここで$(P \mathbf{u})^{\mathrm{T}} (P \mathbf{v}) = 0$は、二次形式の等高線が同心円で表される空間で$(P \mathbf{u})^{\mathrm{T}} \perp (P \mathbf{v})$が成立することを表す。よって、$\mathbf{x}$の空間では等高線の接点からのベクトルが同心楕円の中心の方向に一致する。

共役勾配法は上記に基づいて、「等高線が同心楕円で表される関数の最適化における収束の効率化」を行う手法である。

グラム・シュミットの正規直交化

グラム・シュミットの正規直交化法は、上図のように線型独立である$\vec{a}_{1}, \vec{a}_{2}$が与えられた際に正規直交基底の$\vec{e}_{1}, \vec{e}_{2}$を得る手法である。以下、簡単に手順の確認を行う。

1) $\vec{a}_{1}$に平行な単位ベクトルを$\vec{e}_{1}$とおく。
2) $\vec{e}_{1}$に垂直なベクトル$\vec{u}_{2}$を$\vec{u}_{2}=\vec{a}_{2}-\vec{x}$を計算することで得る。ここで$\vec{x}$は$\vec{a}_{2}$から$\vec{a}_{1}$への正射影を計算することで得られる。
3) $\vec{u}_{2}$と平行な単位ベクトルを$\vec{e}_{2}$とおく。

上記に基づいて、$\vec{e}_{1}, \vec{e}_{2}$はそれぞれ下記のように計算できる。
$$
\large
\begin{align}
\vec{e}_{1} &= \frac{\vec{a}_{1}}{|\vec{a}_{1}|} \\
\vec{u}_{2} &= \vec{a}_{2} – \vec{x} = \vec{a}_{2} – \frac{\vec{a}_{1} \cdot \vec{a}_{2}}{|\vec{a}_{1}|^2} \vec{a}_{1} \\
\vec{e}_{2} &= \frac{\vec{u}_{2}}{|\vec{u}_{2}|}
\end{align}
$$

グラム・シュミットの正規直交化について詳しくは下記で取り扱った。

共役勾配法

共役勾配法の原理

「共役勾配法」は「グラム・シュミットの正規直交化」における「直交」を「対称行列$A$に関する共役・直交」に基づいて取り扱った手法である。以下、線型独立である$\mathbf{v}_{1}, \mathbf{v}_{2}$を元に対称行列$A$に互いに共役であるベクトル$\mathbf{d}_1, \mathbf{d}_2$をグラム・シュミットの直交化に基づいて生成を行う。$\displaystyle \mathbf{d}_1 = \mathbf{v}_{1}$とおくと、$\mathbf{d}_{2}$は下記のように得られる。
$$
\large
\begin{align}
\mathbf{d}_{2} = \mathbf{v}_{2} – \frac{\mathbf{v}_{1}^{\mathrm{T}} A \mathbf{v}_{2}}{\mathbf{v}_{1}^{\mathrm{T}} A \mathbf{v}_{1}} \mathbf{v}_{1} \quad (2.1)
\end{align}
$$

上記の式は正規化を行わなかったので、前節の式とやや異なることに注意が必要である。$\mathbf{d}_1$の楕円の等高線との接点から$\mathbf{d}_{2}$の方向にline searchなどを用いることで関数の最小点である楕円の中心を得ることができる。また、最小点$\mathbf{x}^{*}$について下記が成立する。
$$
\large
\begin{align}
\nabla f(\mathbf{x}) &= A \mathbf{x} – \mathbf{b} \quad (1.1)’ \\
A \mathbf{x}^{*} – \mathbf{b} &= \mathbf{0} \\
A \mathbf{x}^{*} &= \mathbf{b} \quad (2.2)
\end{align}
$$

$(2.2)$式より、ここで得られた最小点$\mathbf{x}^{*}$は$A \mathbf{x} = \mathbf{b}$の解に一致することも確認できる。

また、$(2.1)$式を一般化することで、線型独立である$\mathbf{v}_{1}, \cdots , \mathbf{v}_{p}$を元に対称行列$A$に互いに共役であるベクトル$\mathbf{d}_{j}, \, (i=2, \cdots, p)$を下記のように得ることができる。
$$
\large
\begin{align}
\mathbf{d}_{j} = \mathbf{v}_{j} – \sum_{i=1}^{j-1} \frac{\mathbf{v}_{i}^{\mathrm{T}} A \mathbf{v}_{j}}{\mathbf{v}_{i}^{\mathrm{T}} A \mathbf{v}_{i}} \mathbf{v}_{i}
\end{align}
$$

共役勾配法の計算例

$$
\large
\begin{align}
f(\mathbf{x}) &= \frac{1}{2} \mathbf{x}^{\mathrm{T}} A \mathbf{x} – \mathbf{b}^{\mathrm{T}} \mathbf{x} + c \quad (2.3) \\
A &= 2 \left(\begin{array}{cc} 2 & 1 \\ 1 & 2 \end{array} \right) \\
\mathbf{b} &= \left(\begin{array}{c} 0 \\ 0 \end{array} \right), \, c=0
\end{align}
$$

以下、上記のように定義した二次形式$f(\mathbf{x})$の最適化を共役勾配法を用いて行う。$f(\mathbf{x})$は下記のように表すことができる。
$$
\large
\begin{align}
f(\mathbf{x}) &= \left(\begin{array}{cc} x_1 & x_2 \end{array} \right) \left(\begin{array}{cc} 2 & 1 \\ 1 & 2 \end{array} \right) \left(\begin{array}{c} x_1 \\ x_2 \end{array} \right) \quad (2.3)’ \\
A’ &= \left(\begin{array}{cc} 2 & 1 \\ 1 & 2 \end{array} \right)
\end{align}
$$

ここで行列$A’$の固有値は$\lambda_1=3, \lambda_2=1$、$\lambda_1=3, \lambda_2=1$、固有ベクトルは$\displaystyle \mathbf{u}_{1} = \left(\begin{array}{c} 1 \\ 1 \end{array} \right), \, \mathbf{u}_{2} = \left(\begin{array}{c} -1 \\ 1 \end{array} \right)$が得られる。導出過程はオーソドックスな固有値・固有ベクトルの計算なので省略するが、この固有値と固有ベクトルがそれぞれ適切であることは下記の等式が成立することからそれぞれ確認できる。
$$
\large
\begin{align}
\left(\begin{array}{cc} 2 & 1 \\ 1 & 2 \end{array} \right) \left(\begin{array}{c} 1 \\ 1 \end{array} \right) &= 3 \left(\begin{array}{c} 1 \\ 1 \end{array} \right) \\
\left(\begin{array}{cc} 2 & 1 \\ 1 & 2 \end{array} \right) \left(\begin{array}{c} -1 \\ 1 \end{array} \right) &= \left(\begin{array}{c} -1 \\ 1 \end{array} \right)
\end{align}
$$

上記に基づいて、二次形式$f(\mathbf{x})$の等高線は下図のように表される。

ここで楕円上の点における勾配は楕円の法線ベクトルに一致するが、勾配ベクトルは下図のように楕円の中心を向かない。

上図では勾配ベクトルが楕円の中心を向かないので、$A’$について共役な方向を計算する必要がある。前項の共役勾配法を用いることで下記のような結果を得ることができる。

共役勾配法のプログラムについては下記で詳しく取り扱った。

対称行列の対角化とスペクトル分解(spectral decomposition)

統計学や機械学習で出てくる行列は対称行列(symmetric matrix)が多いですが、対称行列の取り扱いはやや特殊なので抑えておくと良いです。当記事では対称行列の対角化とスペクトル分解(spectral decomposition)について取りまとめました。
「統計学のための数学入門$30$講」の$23$章の「対称行列の固有値と固有ベクトル」を参考に作成を行いました。

・用語/公式解説
https://www.hello-statisticians.com/explain-terms

対称行列の対角化とスペクトル分解

$p$次の対称行列$A$に関して下記がそれぞれ成立する。

$1)$
$p$次の対称行列$A$は直交行列$U$を用いて下記のように対角化が可能である。
$$
\large
\begin{align}
U^{\mathrm{T}} A U &= \Lambda = \left( \begin{array}{ccccc} \lambda_1 & 0 & 0 & \cdots & 0 \\ 0 & \lambda_2 & 0 & \cdots & 0 \\ 0 & 0 & \lambda_3 & \cdots & 0 \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & 0 & \cdots & \lambda_{p} \end{array} \right) \quad (1) \\
U &= \left( \begin{array}{ccccc} \mathbf{u}_{1} & \mathbf{u}_{2} & \mathbf{u}_{3} & \cdots & \mathbf{u}_{p} \end{array} \right) \\
U^{\mathrm{T}} &= \left( \begin{array}{c} \mathbf{u}_{1}^{\mathrm{T}} \\ \mathbf{u}_{2}^{\mathrm{T}} \\ \mathbf{u}_{3}^{\mathrm{T}} \\ \vdots \\ \mathbf{u}_{p}^{\mathrm{T}} \end{array} \right) \\
\mathbf{u}_{i}^{\mathrm{T}} \mathbf{u}_{i} &= 1 \\
\mathbf{u}_{i}^{\mathrm{T}} \mathbf{u}_{j} &= 0, \quad (i \neq j) \\
\mathbf{u}_{i} & \in \mathbb{R}^{p}
\end{align}
$$

$2)$
$p$次の対称行列$A$は固有値$\lambda_1, \cdots , \lambda_{p}$とそれぞれの固有値に対応する長さ$1$の固有ベクトル$\mathbf{u}_{1}, \cdots , \mathbf{u}_{p}$を用いて次のように表せる。
$$
\large
\begin{align}
A &= U \Lambda U^{\mathrm{T}} \quad (2) \\
&= \left(\begin{array}{ccccc} \mathbf{u}_{1} & \mathbf{u}_{2} & \mathbf{u}_{3} & \cdots & \mathbf{u}_{p} \end{array} \right) \left(\begin{array}{ccccc} \lambda_1 & 0 & 0 & \cdots & 0 \\ 0 & \lambda_2 & 0 & \cdots & 0 \\ 0 & 0 & \lambda_3 & \cdots & 0 \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & 0 & \cdots & \lambda_{p} \end{array} \right) \left(\begin{array}{c} \mathbf{u}_{1}^{\mathrm{T}} \\ \mathbf{u}_{2}^{\mathrm{T}} \\ \mathbf{u}_{3}^{\mathrm{T}} \\ \vdots \\ \mathbf{u}_{p}^{\mathrm{T}} \end{array} \right) \\
&= \left(\begin{array}{ccccc} \lambda_{1} \mathbf{u}_{1} & \lambda_{2} \mathbf{u}_{2} & \lambda_{3} \mathbf{u}_{3} & \cdots & \lambda_{p} \mathbf{u}_{p} \end{array} \right) \left(\begin{array}{c} \mathbf{u}_{1}^{\mathrm{T}} \\ \mathbf{u}_{2}^{\mathrm{T}} \\ \mathbf{u}_{3}^{\mathrm{T}} \\ \vdots \\ \mathbf{u}_{p}^{\mathrm{T}} \end{array} \right) \\
&= \lambda_{1} \mathbf{u}_{1} \mathbf{u}_{1}^{\mathrm{T}} + \lambda_{2} \mathbf{u}_{2} \mathbf{u}_{2}^{\mathrm{T}} + \lambda_{3} \mathbf{u}_{3} \mathbf{u}_{3}^{\mathrm{T}} + \cdots + \lambda_{p} \mathbf{u}_{p} \mathbf{u}_{p}^{\mathrm{T}} \\
&= \sum_{i=1}^{p} \lambda_{i} \mathbf{u}_{i} \mathbf{u}_{i}^{\mathrm{T}}
\end{align}
$$

上記の変形をスペクトル分解という。

導出

$p$個の固有値が全て異なる$p$次対称行列$A$の固有値を$\lambda_1, \cdots , \lambda_{p}$、それぞれの固有値に対応する長さ$1$の固有ベクトルを$\mathbf{u}_{1}, \cdots , \mathbf{u}_{p}$とおくと、下記のような式が成立する。
$$
\large
\begin{align}
A \mathbf{u}_{i} = \lambda_{i} \mathbf{u}_{i}, \quad i=1, 2, 3, \cdots , p
\end{align}
$$

上記より、下記が成立する。
$$
\large
\begin{align}
A U &= U \Lambda \quad (3) \\
\Lambda &= \left(\begin{array}{ccccc} \lambda_1 & 0 & 0 & \cdots & 0 \\ 0 & \lambda_2 & 0 & \cdots & 0 \\ 0 & 0 & \lambda_3 & \cdots & 0 \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & 0 & \cdots & \lambda_{p} \end{array} \right) \\
U &= \left(\begin{array}{ccccc} \mathbf{u}_{1} & \mathbf{u}_{2} & \mathbf{u}_{3} & \cdots & \mathbf{u}_{p} \end{array} \right)
\end{align}
$$

対称行列の相異なる固有値に対応する固有ベクトルが直交するので、$U$は直交行列である。よって$U^{-1}=U^{\mathrm{T}}$が成立する。したがって$(3)$式の変形に基づいて下記のように$(1), (2)$式の導出を行える。

・$(1)$式の導出
$$
\large
\begin{align}
A U &= U \Lambda \quad (3) \\
U^{-1} A U &= U^{-1} U \Lambda \\
U^{\mathrm{T}} A U &= \Lambda \quad (1)
\end{align}
$$

・$(2)$式の導出
$$
\large
\begin{align}
A U &= U \Lambda \quad (3) \\
A U U^{-1} &= U \Lambda U^{-1} \\
A &= U \Lambda U^{\mathrm{T}} \quad (2)
\end{align}
$$

対称行列(symmetric matrix)の固有値と固有ベクトルの性質とその導出

統計学や機械学習で出てくる行列は対称行列(symmetric matrix)である場合が多いですが、対称行列の取り扱いはやや特殊なので抑えておくと良いです。当記事では対称行列の固有値と固有ベクトルの性質とその導出について取りまとめました。
「統計学のための数学入門$30$講」の$23$章の「対称行列の固有値と固有ベクトル」を参考に作成を行いました。

・用語/公式解説
https://www.hello-statisticians.com/explain-terms

対称行列の固有値・固有ベクトルの性質

対称行列の固有値・固有ベクトルでは下記の性質がそれぞれ成立する。

$1. \,$ 対称行列の固有値は全て実数である。
$2. \,$ 対称行列の相異なる固有値に対応する固有ベクトルは直交する

導出

対称行列の固有値は全て実数

対称行列$A$の固有値を$\lambda$、固有値に対応する固有ベクトルを$\mathbf{x}$とおく。このとき、$\lambda$の共役複素数を$\bar{\lambda}$、$\mathbf{x}$の成分の共役複素数を成分に持つベクトルを$\bar{\mathbf{x}}$と定義する。

上記の定義は下記のような数式で表すことができる。
$$
\large
\begin{align}
A \mathbf{x} &= \lambda \mathbf{x} \quad (1) \\
A \bar{\mathbf{x}} &= \bar{\lambda} \bar{\mathbf{x}} \quad (2)
\end{align}
$$

$(1)$式に関して以下の変形が成立する。
$$
\large
\begin{align}
A \mathbf{x} &= \lambda \mathbf{x} \quad (1) \\
\bar{\mathbf{x}}^{\mathrm{T}} A \mathbf{x} &= \bar{\mathbf{x}}^{\mathrm{T}} (\lambda \mathbf{x}) \\
\bar{\mathbf{x}}^{\mathrm{T}} A \mathbf{x} &= \lambda \bar{\mathbf{x}}^{\mathrm{T}} \mathbf{x} \\
(\bar{\mathbf{x}}^{\mathrm{T}} A \mathbf{x})^{\mathrm{T}} &= (\lambda \bar{\mathbf{x}}^{\mathrm{T}} \mathbf{x})^{\mathrm{T}} \\
\mathbf{x}^{\mathrm{T}} A \bar{\mathbf{x}} &= \lambda \mathbf{x}^{\mathrm{T}} \bar{\mathbf{x}} \quad (3)
\end{align}
$$

途中の式変形にあたっては$A^{\mathrm{T}}=A$であることを用いた。

同様に$(2)$式に関して以下の変形が成立する。
$$
\large
\begin{align}
A \bar{\mathbf{x}} &= \bar{\lambda} \bar{\mathbf{x}} \quad (2) \\
\mathbf{x}^{\mathrm{T}} A \bar{\mathbf{x}} &= \mathbf{x}^{\mathrm{T}} (\bar{\lambda} \bar{\mathbf{x}}) \\
\mathbf{x}^{\mathrm{T}} A \bar{\mathbf{x}} &= \bar{\lambda} \mathbf{x}^{\mathrm{T}} \bar{\mathbf{x}} \quad (4)
\end{align}
$$

$(3), (4)$式より下記が成立する。
$$
\large
\begin{align}
\lambda \mathbf{x}^{\mathrm{T}} \bar{\mathbf{x}} &= \bar{\lambda} \mathbf{x}^{\mathrm{T}} \bar{\mathbf{x}} \\
(\lambda – \bar{\lambda}) \mathbf{x}^{\mathrm{T}} \bar{\mathbf{x}} &= 0
\end{align}
$$

ここで$\mathbf{x}^{\mathrm{T}} \bar{\mathbf{x}} > 0$より、$\lambda=\bar{\lambda}$が成立するので$\lambda$は実数である。

対称行列の固有ベクトルが直交

対称行列$A$の相異なる$2$つの固有値を$\lambda_1, \lambda_2$、それぞれの固有値に対応する固有ベクトルを$\mathbf{x}_{1}, \mathbf{x}_{2}$とおく。

上記は下記のような式で表せる。
$$
\large
\begin{align}
A \mathbf{x}_{1} &= \lambda_1 \mathbf{x}_{1} \quad (5) \\
A \mathbf{x}_{2} &= \lambda_2 \mathbf{x}_{2} \quad (6)
\end{align}
$$

このとき$A^{\mathrm{T}}=A$であることに基づいて$(5)$式について下記の変形が成立する。
$$
\large
\begin{align}
A \mathbf{x}_{1} &= \lambda_1 \mathbf{x}_{1} \quad (5) \\
\mathbf{x}_{2}^{\mathrm{T}} A \mathbf{x}_{1} &= \mathbf{x}_{2}^{\mathrm{T}} (\lambda_1 \mathbf{x}_{1}) \\
\mathbf{x}_{2}^{\mathrm{T}} A \mathbf{x}_{1} &= \lambda_1 \mathbf{x}_{2}^{\mathrm{T}} \mathbf{x}_{1} \\
(\mathbf{x}_{2}^{\mathrm{T}} A \mathbf{x}_{1})^{\mathrm{T}} &= (\lambda_1 \mathbf{x}_{2}^{\mathrm{T}} \mathbf{x}_{1})^{\mathrm{T}} \\
\mathbf{x}_{1}^{\mathrm{T}} A \mathbf{x}_{2} &= \lambda_1 \mathbf{x}_{1}^{\mathrm{T}} \mathbf{x}_{2} \quad (7)
\end{align}
$$

また、$(6)$式について下記が成立する。
$$
\large
\begin{align}
A \mathbf{x}_{2} &= \lambda_2 \mathbf{x}_{2} \quad (6) \\
\mathbf{x}_{1}^{\mathrm{T}} A \mathbf{x}_{2} &= \mathbf{x}_{1}^{\mathrm{T}} (\lambda_2 \mathbf{x}_{2}) \\
\mathbf{x}_{1}^{\mathrm{T}} A \mathbf{x}_{2} &= \lambda_2 \mathbf{x}_{1}^{\mathrm{T}} \mathbf{x}_{2} \quad (8)
\end{align}
$$

$(7), (8)$式より下記が成立する。
$$
\large
\begin{align}
\lambda_1 \mathbf{x}_{1}^{\mathrm{T}} \mathbf{x}_{2} &= \lambda_2 \mathbf{x}_{1}^{\mathrm{T}} \mathbf{x}_{2} \\
(\lambda_1 \, – \, \lambda_2) \mathbf{x}_{1}^{\mathrm{T}} \mathbf{x}_{2} &= 0 \quad (9)
\end{align}
$$

ここで$\lambda_1 \neq \lambda_2$を仮定したので、$(9)$式より$\mathbf{x}_{1}^{\mathrm{T}} \mathbf{x}_{2}=0$が成立するが、$\mathbf{x}_{1}, \mathbf{x}_{2}$はどちらも零ベクトルではないので、$\mathbf{x}_{1} \perp \mathbf{x}_{2}$が成立する。

上記を用いることで、「$n \times n$対称行列が$n$個の相異なる固有値を持つとき、大きさ$1$の固有ベクトルを並べた行列は直交行列になる」ということも示すことができる。

統計検定準1級 問題解説 ~2016年6月実施 選択問題及び部分記述問題 問8~

過去問

過去問題は統計検定公式が問題と解答例を公開しています。こちらを参照してください。

[1] 解答

$\boxed{\mathsf{9}}$ : $④$

$S(T) = P(T>t)$ が生存関数なので,累積分布関数 $F(t) = P(T \leq t)$ は,
$$
\begin{equation}
F(t) = P(T\leq t)= 1-S(t)=\begin{cases}
1-\exp(-\lambda t) & \text{($t>0$)} \\
0 & \text{($t<0$)} \ \end{cases} \end{equation} $$ 従って,確率密度関数 $f(t)$ は, $$ \begin{equation} f(t) = F'(T)= \begin{cases} \lambda\exp(-\lambda t) & \text{($t>0$)} \\
0 & \text{($t<0$)}
\end{cases}
\end{equation}
$$
となる.

[2] 解答

$\boxed{\mathsf{10}}$ : $⑤$

平均は,

$$
\begin{align} E[X] &= \int_0^\infty tf(t) dt = \int _0 ^ \infty t\lambda \exp(-\lambda t)dt = \lambda \int_0 ^ \infty t\exp(-\lambda t) dt \\ &= \lambda \left( -\dfrac{1}{\lambda}[ t\exp(-\lambda t)]_0^\infty + \dfrac{1}{\lambda}\int_0 ^\infty \exp(-\lambda t)dt \right) \\ &=\lambda \left( 0 + \dfrac{1}{\lambda}\left[ \dfrac{1}{\lambda}\exp(-\lambda t)\right]_0^\infty \right) \\ &= \dfrac{1}{\lambda} \end{align}
$$


である.


中央値は $1-S(t) = 1/2$ を満たす $t$ である.つまり,$S(t)= 1/2$ を解けばよい.
$S(t)=\exp(-\lambda t) = 1/2$ より,$t = \log 2 /\lambda$ である.

(補足)[1]から確率変数 $T$ の従う分布がパラメータ $\lambda$ の指数分布であることがわかるので,そのことから平均が $1/\lambda$ としてもよい.

[3] 解答

$\boxed{\mathsf{11}}$ : $②$
[2]から平均が $1/\lambda$ がわかっているので,$1/\lambda = 1/2$ より,中央値は $\log2/\lambda = 2\log2 \approx 1.4$ である.

重点サンプリング(Importance Sampling)の数式表記とPythonを用いた計算例

特定の確率分布の期待値を別の確率分布からサンプリングした値に基づいて計算する手法を重点サンプリング(Importance Sampling)といいます。当記事では重点サンプリングの数式表記とPythonを用いた計算例の確認をそれぞれ行いました。
「ゼロから作るDeep Learning④ー強化学習編」の$5.5.2$「重点サンプリング」〜$5.5.3$節「分散を小さくするには」の内容などを参考に当記事の作成を行いました。

・用語/公式解説
https://www.hello-statisticians.com/explain-terms

重点サンプリングの基本事項

サンプリングによる期待値の近似

離散確率分布$\pi(x)$に基づいて得られる確率変数$x$の期待値を$E_{\pi}[x]$とおくと、期待値は下記のように定義される。
$$
\large
\begin{align}
\mathbb{E}_{\pi}[x] = \sum x \pi(x)
\end{align}
$$

このとき、確率分布が具体的に判明しなくても確率分布からのサンプリングが行うことができる場合は、確率分布に基づいて得られたサンプルから下記のように期待値$E_{\pi}[x]$を近似することができる。
$$
\large
\begin{align}
& \mathrm{sampling} : \, x^{(i)} \sim \pi \quad i=1,2,\cdots,n \\
& E_{\pi}[x] \simeq \frac{1}{n} \sum_{i=1}^{n} x^{(i)}
\end{align}
$$

ここで上記のインデックス$i$は確率分布$\pi(x)$から得られた$i$番目のサンプルを表すことを抑えておくと良い。

重点サンプリングの仕組み

通常のサンプリングによる近似では前項の『サンプリングによる期待値の近似』のように近似を行う。一方で重点サンプリングは確率分布$\pi(x)$の期待値を別の確率分布$b(x)$から得られたサンプルを元に計算する手法であり、下記のような変形に基づく。
$$
\large
\begin{align}
\mathbb{E}_{\pi}[x] &= \sum x \pi(x) \\
&= \sum x \frac{b(x)}{b(x)} \pi(x) \\
&= \sum x \frac{\pi(x)}{b(x)} b(x) = \mathbb{E}_{b} \left[ \frac{\pi(x)}{b(x)} x \right]
\end{align}
$$

上記より、$\displaystyle \mathbb{E}_{\pi}[x] = \mathbb{E}_{b} \left[ \frac{\pi(x)}{b(x)} x \right]$が成立するので、確率分布$b(x)$に基づいて得られたサンプルを元に確率分布$\pi(x)$の期待値を計算することができる。

Pythonを用いた計算例

確率分布$\pi$に基づくサンプリング

確率分布$\pi(x)$からのサンプリングに基づく期待値$E_{\pi}[x]$の近似値は下記のように計算することができる。

import numpy as np

x = np.array([1, 2, 3])
pi = np.array([0.1, 0.1, 0.8])

# 期待値
e = np.sum(x * pi)
print("E_pi[x]: {}".format(e))

np.random.seed(100)

# モンテカルロ法
n = 100
samples = []
for i in range(n):
    s = np.random.choice(x, p=pi)
    samples.append(s)
    
print("mean: {:.2f}, var: {:.2f}".format(np.mean(samples), np.var(samples)))

・実行結果

E_pi[x]: 2.7
mean: 2.71, var: 0.39

確率分布$b$に基づく重点サンプリング

確率分布$b(x)$からのサンプリングに基づく$\displaystyle \mathbb{E}_{b} \left[ \frac{\pi(x)}{b(x)} x \right]$の近似値は下記のように計算することができる。

np.random.seed(25)

b = np.array([1/3, 1/3, 1/3])
n = 100
samples = []

for i in range(n):
    idx = np.arange(len(b))
    i = np.random.choice(idx, p=b)
    s = x[i]
    rho = pi[i] / b[i]
    samples.append(rho * s)
    
print("mean: {:.2f}, var: {:.2f}".format(np.mean(samples), np.var(samples)))

・実行結果

mean: 2.56, var: 9.70

上記より、重点サンプリングによる近似値はある程度妥当である一方で分散が大きいことが確認できる。次節ではこの分散が大きくなる原因とその対応について確認を行う。

重点サンプリングと分散

分散が大きくなる原因

重点サンプリングを用いた際に分散が大きくなるのは確率分布$\pi(x)$と$b(x)$の差が大きい場合に$\displaystyle \mathbb{E}_{b} \left[ \frac{\pi(x)}{b(x)} x \right]$の$\displaystyle \frac{\pi(x)}{b(x)}$が$1$から大きく離れた値になり、$\displaystyle \frac{\pi(x)}{b(x)} x$の値が安定しないことに起因する。

前節の例では$\pi: (0.1,0.1,0.8)$に対し、$\displaystyle b: \left( \frac{1}{3},\frac{1}{3},\frac{1}{3} \right)$を用いたが、$\displaystyle \frac{\pi(x)}{b(x)}$はそれぞれ下記のように計算される。

・$x=1,2$の場合
$$
\large
\begin{align}
\frac{\pi(x)}{b(x)} &= \frac{0.1}{1/3} \\
&= 0.3
\end{align}
$$

・$x=3$の場合
$$
\large
\begin{align}
\frac{\pi(x)}{b(x)} &= \frac{0.8}{1/3} \\
&= 2.4
\end{align}
$$

上記より、$x=1,2$が得られた場合$\displaystyle \frac{\pi(x)}{b(x)} x$がそれぞれ$0.3, 0.6$であるのに対し、$x=3$が得られた場合$\displaystyle \frac{\pi(x)}{b(x)} x$が$7.2$の値を取る。このように$\displaystyle \frac{\pi(x)}{b(x)}$が$1$から大きく離れた値になることで、$\displaystyle \frac{\pi(x)}{b(x)} x$の値のばらつきが大きくなる。

この解決にあたっては、$\displaystyle \frac{\pi(x)}{b(x)}$を$1$に近づければ良いので、$\pi(x)$に類似の$b(x)$を用いればよい。

また、$\displaystyle \frac{\pi(x)}{b(x)}$を下記のように何らかの文字で表す場合もあるので、下記のような表記も抑えておくと良い。
$$
\large
\begin{align}
\rho(x) = \frac{\pi(x)}{b(x)}
\end{align}
$$

Pythonを用いた計算例

以下では$b:(0.2,0.2,0.6)$を用いて前節と同様に$\displaystyle \mathbb{E}_{b} \left[ \frac{\pi(x)}{b(x)} x \right]$の近似値と分散の計算を行った。

np.random.seed(25)

b = np.array([0.2, 0.2, 0.6])
n = 100
samples = []

for i in range(n):
    idx = np.arange(len(b))
    i = np.random.choice(idx, p=b)
    s = x[i]
    rho = pi[i] / b[i]
    samples.append(rho * s)
    
print("mean: {:.2f}, var: {:.2f}".format(np.mean(samples), np.var(samples)))

・実行結果

mean: 2.82, var: 2.50

実行結果より分散が前節の重点サンプリングの結果より小さくなったことが確認できる。

方策勾配法のアルゴリズムまとめ 〜REINFORCE・ベースライン・Actor-Critic〜

方策勾配法(Policy Gradient Method)を改善させたアルゴリズムには、REINFORCE・ベースライン・Actor-Criticなどのアルゴリズムがあります。当記事ではこれらの$3$つのアルゴリズムについて取りまとめを行いました。
「ゼロから作るDeep Learning④ー強化学習編」の第$9$章の「方策勾配法」や付録Dの「方策勾配法の証明」の内容を参考に当記事の作成を行いました。

・用語/公式解説
https://www.hello-statisticians.com/explain-terms

前提知識

方策勾配法の目的関数と勾配の式

詳しくは上記で取り扱ったが、方策勾配法の目的関数と目的関数の勾配の式はそれぞれ下記のように表される。

・目的関数
$$
\large
\begin{align}
J(\theta) &= \mathbb{E}_{\tau \sim \pi_{\theta}}[G(\tau)] \quad (1.1) \\
G(\tau) &= R_0 + \gamma R_1 + \gamma^{2} R_2 + \cdots + \gamma^{T} R_{T} \quad (1.2)
\end{align}
$$

・目的関数の勾配
$$
\large
\begin{align}
\nabla_{\theta} J(\theta) = \mathbb{E}_{\tau \sim \pi_{\theta}} \left[ \sum_{t=0}^{T} G(\tau) \nabla_{\theta} \log{\pi_{\theta}(A_t|S_t)} \right] \quad (1.3)
\end{align}
$$

方策の学習にあたって

方策の学習にあたっては下記のような勾配上昇法を用いることで行える。
$$
\large
\begin{align}
\theta \leftarrow \theta + \alpha \nabla_{\theta} J(\theta) \quad (1.4)
\end{align}
$$

上記はオーソドックスな勾配法の式であり、$\alpha$は学習率を表す。また、実際に$(1.2)$式を用いて学習を行うにあたっては、下記のように実際に方策$\pi_{\theta}$に基づいて軌道$\tau^{(i)}$をサンプリングし、その平均を取れば勾配の近似値が計算できる。
$$
\large
\begin{align}
\tau^{(i)} & \sim \pi_{\theta}, \qquad i=1,2,\cdots,n, \quad \mathrm{i.i.d.} \quad (1.5) \\
j^{(i)} &= \sum_{t=0}^{T} G \left( \tau^{(i)} \right) \nabla_{\theta} \log{ \pi_{\theta} \left( A_t^{(i)} \middle| S_t^{(i)} \right) } \quad (1.6) \\
\nabla_{\theta} J(\theta) &= \mathbb{E}_{\tau \sim \pi_{\theta}} \left[ \sum_{t=0}^{T} G(\tau) \nabla_{\theta} \log{\pi_{\theta}(A_t|S_t)} \right] \simeq \frac{1}{n} \sum_{i=1}^{n} j^{(i)} \quad (1.7)
\end{align}
$$

$(1.7)$式が勾配の近似値を表す。上記の$(1.6)$式の$i$は方策$\pi_{\theta}$に基づいて生成された軌道$\tau^{(i)}$のインデックス、$t$は軌道$\tau^{(i)}$における系列$\displaystyle \left(S_0^{(i)},A_{0}^{(i)}, \cdots , S_t^{(i)},A_{t}^{(i)}, \cdots, S_{T+1}^{(i)} \right)$のインデックスを表すことに注意しておくと良い。

$i$番目の軌道$\tau^{(i)}$における収益は$\displaystyle G \left( \tau^{(i)} \right)$によって表されるが、$(1.6)$式はこの$\displaystyle G \left( \tau^{(i)} \right)$による重み付け和であると解釈することができる。

ここで$\displaystyle \nabla_{\theta} \log{ \pi_{\theta} \left( A_t^{(i)} \middle| S_t^{(i)} \right) }$はインデックス$t$を用いて表される一方で、重みが$\displaystyle G \left( \tau^{(i)} \right)$ではこれまでに得た報酬も取り扱うので方策の評価を行う観点では適切ではない。よって、$(1.5)$式の$\displaystyle G \left( \tau^{(i)} \right)$に改善の余地が生じる。次節ではこの改善の余地の視点から方策勾配法の改善の手法についてそれぞれ取り扱う。

方策勾配法の改善

基本方針

前節で取り扱った$(1.3)$式に基づいて勾配は下記のように表される。
$$
\large
\begin{align}
\nabla_{\theta} J(\theta) = \mathbb{E}_{\tau \sim \pi_{\theta}} \left[ \sum_{t=0}^{T} G(\tau) \nabla_{\theta} \log{\pi_{\theta}(A_t|S_t)} \right] \quad (1.3)
\end{align}
$$

上記の$G(\tau)$を$\Phi_{t}$に置き換えると下記が得られる。
$$
\large
\begin{align}
\nabla_{\theta} J(\theta) = \mathbb{E}_{\tau \sim \pi_{\theta}} \left[ \sum_{t=0}^{T} \Phi_{t} \nabla_{\theta} \log{\pi_{\theta}(A_t|S_t)} \right] \quad (2.1)
\end{align}
$$

以下では$\Phi_{t}$に様々な指標を用いることで方策勾配法の改善について取り扱う。

REINFORCE

REINFORCE(REward Increment $=$ Nonnegative Factor $\times$ Offset Reinforcement $\times$ Characteristic Eligibility)は下記のように$\Phi_{t}$を定義する。
$$
\large
\begin{align}
\nabla_{\theta} J(\theta) &= \mathbb{E}_{\tau \sim \pi_{\theta}} \left[ \sum_{t=0}^{T} \Phi_{t} \nabla_{\theta} \log{\pi_{\theta}(A_t|S_t)} \right] \quad (2.1)’ \\
\Phi_{t} &= G_{t} \quad (2.2) \\
G_{t} &= R_t + \gamma R_{t+1} + \gamma^{2} R_{t+2} + \cdots + \gamma^{T-t} R_{T} \quad (2.3)
\end{align}
$$

このようにREINFORCEでは$\displaystyle \nabla_{\theta} \log{\pi_{\theta}(A_t|S_t)}$にかかる重みを$S_t$以後に得られる収益$G_t$を用いて表す。

ベースライン付きREINFORCE

ベースライン付きREINFORCEはベースライン$b(S_t)$を導入することで$\Phi_{t}$の分散を小さくする手法であり、下記のように$\Phi_{t}$を定義する。
$$
\large
\begin{align}
\nabla_{\theta} J(\theta) &= \mathbb{E}_{\tau \sim \pi_{\theta}} \left[ \sum_{t=0}^{T} \Phi_{t} \nabla_{\theta} \log{\pi_{\theta}(A_t|S_t)} \right] \quad (2.1)’ \\
\Phi_{t} &= G_{t} – b(S_t) \quad (2.4)
\end{align}
$$

ここで上記の収益$G_t$にQ関数、ベースライン$b(S_t)$に価値関数を用いると$\Phi_{t}$はアドバンテージ関数に一致する。詳しくは『ベースラインとアドバンテージ関数』で取り扱う。

Actor-Critic

Actor-Criticでは下記のように$\Phi_{t}$を定義する。
$$
\large
\begin{align}
\nabla_{\theta} J(\theta) &= \mathbb{E}_{\tau \sim \pi_{\theta}} \left[ \sum_{t=0}^{T} \Phi_{t} \nabla_{\theta} \log{\pi_{\theta}(A_t|S_t)} \right] \quad (2.1)’ \\
\Phi_{t} &= R_{t} + \gamma V(S_t) – V(S_t) \quad (2.5)
\end{align}
$$

Actor-CriticはTD法と対応させて理解すると良い。

ベースラインとアドバンテージ関数

ベースライン付きREINFORCE』では$\Phi_{t} = G_{t} – b(S_t)$のようにベースライン$b(S_t)$を導入したが、収益$G_t$にQ関数、ベースライン$b(S_t)$に価値関数を用いると$\Phi_{t}$は下記のように表せる。
$$
\large
\begin{align}
\Phi_{t} &= Q(S_t,A_t) – V(S_t) \\
&= A(S_t,A_t) \quad (2.6)
\end{align}
$$

上記の$A(S_t,A_t)$はアドバンテージ関数であり、PPOのように論文によっては収益ではなくアドバンテージを元に式が表される場合があるので$(2.6)$式は抑えておくと良い。

・PPO論文

方策勾配法(Policy Gradient Method)の目的関数の定義と勾配の式の導出

方策勾配法(Policy Gradient Method)は強化学習の際に定義される方策をニューラルネットワークで定義し、勾配を用いることで方策の最適化を行う手法です。当記事では方策勾配法における目的関数の定義と勾配の式の導出について取り扱いました。
「ゼロから作るDeep Learning④ー強化学習編」の第$9$章の「方策勾配法」や付録Dの「方策勾配法の証明」の内容を参考に当記事の作成を行いました。

・用語/公式解説
https://www.hello-statisticians.com/explain-terms

前提知識

問題設定

強化学習にあたって得られるエピソードにおける一連の「状態、行動、報酬」からなる系列をtrajectory(軌道)という。ここでtrajectoryを$\tau$とおくと、$\tau$は下記のように表すことができる。
$$
\large
\begin{align}
\tau = (S_0, A_0, R_0, S_1, A_1, R_1, \cdots , S_{T+1})
\end{align}
$$

ここで$\tau$の収益を$G(\tau)$とおくと、$G(\tau)$は下記のように表せる。
$$
\large
\begin{align}
G(\tau) = R_0 + \gamma R_1 + \gamma^{2} R_2 + \cdots + \gamma^{T} R_{T}
\end{align}
$$

以下、$G(\tau)$を最大にするように状態$S_t$から行動$A_t$を選択する方策$\pi_{\theta}(A_t|S_t)$の最適化について取り扱う。

方策勾配法の目的関数の定義

$G(\tau)$を最大にするような方策$\pi_{\theta}(A_t|S_t)$を得るにあたっては、下記の目的関数を$\theta$について最大化すればよい。
$$
\large
\begin{align}
J(\theta) = \mathbb{E}_{\tau \sim \pi_{\theta}}[G(\tau)]
\end{align}
$$

上記の式は『$\tau$が方策$\pi_{\theta}$に基づいて得られるときの収益$G(\tau)$の期待値』と解釈すればよい。要するになるべく多い収益$G(\tau)$が得られると期待できるような方策を最適化によって取得すると理解すればよい。

Log-Derivative Trick

対数関数の微分の公式に基づいて下記のような数式が成立する。
$$
\large
\begin{align}
\nabla_{\theta} \log{P(\tau|\theta)} = \frac{\nabla_{\theta} P(\tau|\theta)}{P(\tau|\theta)}
\end{align}
$$

上記の変形はLog-Derivative Trick(log勾配のトリック)といわれ、よく知られている。

勾配の式の導出

$\displaystyle \nabla_{\theta} J(\theta) = \mathbb{E}_{\tau \sim \pi_{\theta}} \left[ G(\tau) \nabla_{\theta} \log{P(\tau|\theta)} \right]$の導出

$$
\large
\begin{align}
\nabla_{\theta} J(\theta) &= \nabla_{\theta} \mathbb{E}_{\tau \sim \pi_{\theta}}[G(\tau)] \quad (2.1) \\
&= \nabla_{\theta} \sum_{\tau} P(\tau|\theta) G(\tau) \\
&= \sum_{\tau} \nabla_{\theta} \left( P(\tau|\theta) G(\tau) \right) \\
&= \sum_{\tau} \left( G(\tau) \nabla_{\theta} P(\tau|\theta) + P(\tau|\theta) \nabla_{\theta} G(\tau) \right) \\
&= \sum_{\tau} G(\tau) \nabla_{\theta} P(\tau|\theta) \quad (2.2)
\end{align}
$$

上記の式展開にあたっては$\nabla_{\theta} G(\tau)=\mathbf{0}$を用いた。$(2.1)$式はさらに下記のように変形することができる。
$$
\large
\begin{align}
\nabla_{\theta} J(\theta) &= \sum_{\tau} G(\tau) \nabla_{\theta} P(\tau|\theta) \quad (2.2) \\
&= \sum_{\tau} G(\tau) P(\tau|\theta) \frac{\nabla_{\theta} P(\tau|\theta)}{P(\tau|\theta)} \\
&= \sum_{\tau} G(\tau) P(\tau|\theta) \nabla_{\theta} \log{P(\tau|\theta)} \\
&= \mathbb{E}_{\tau \sim \pi_{\theta}} \left[ G(\tau) \nabla_{\theta} \log{P(\tau|\theta)} \right] \quad (2.3)
\end{align}
$$

$\displaystyle \nabla_{\theta} J(\theta) = \mathbb{E}_{\tau \sim \pi_{\theta}} \left[ \sum_{t=0}^{T} G(\tau) \nabla_{\theta} \log{\pi_{\theta}(A_t|S_t)} \right]$の導出

$P(\tau|\theta)$は下記のように表すことができる。
$$
\large
\begin{align}
P(\tau|\theta) &= p(S_0) \pi_{\theta}(A_0|S_0) p(S_1|S_0,A_0) \cdots \pi_{\theta}(A_T|S_T) p(S_{T+1}|S_{T},A_{T}) \\
&= p(S_0) \prod_{t=0}^{T} \pi_{\theta}(A_t|S_t) p(S_{t+1}|S_{t},A_{t})
\end{align}
$$

$(2.4)$式の両辺の対数を取ることで下記が得られる。
$$
\large
\begin{align}
\log{P(\tau|\theta)} &= \log{ \left[ p(S_0) \prod_{t=0}^{T} \pi_{\theta}(A_t|S_t) p(S_{t+1}|S_{t},A_{t}) \right] } \quad (2.4)’ \\
&= \log{p(S_0)} + \sum_{t=0}^{T} \log{p(S_{t+1}|S_t,A_t)} + \sum_{t=0}^{T} \log{\pi_{\theta}(A_t|S_t)} \quad (2.5)
\end{align}
$$

$(2.5)$式を元に$\theta$に関する勾配$\nabla_{\theta} \log{P(\tau|\theta)}$は下記のように得られる。
$$
\large
\begin{align}
\nabla_{\theta} \log{P(\tau|\theta)} &= \nabla_{\theta} \left[ \log{p(S_0)} + \sum_{t=0}^{T} \log{p(S_{t+1}|S_t,A_t)} + \sum_{t=0}^{T} \log{\pi_{\theta}(A_t|S_t)} \right] \quad (2.5)’ \\
&= \nabla_{\theta} \sum_{t=0}^{T} \log{\pi_{\theta}(A_t|S_t)} \\
&= \sum_{t=0}^{T} \nabla_{\theta} \log{\pi_{\theta}(A_t|S_t)} \quad (2.6)
\end{align}
$$

上記の変形では$\displaystyle \nabla_{\theta} \log{p(S_0)} = \mathbf{0}$、$\displaystyle \nabla_{\theta} \sum_{t=0}^{T} \log{p(S_{t+1}|S_t,A_t)} = \mathbf{0}$であることを用いた。$(2.6)$式を$(2.3)$式に代入することで下記が得られる。
$$
\large
\begin{align}
\nabla_{\theta} J(\theta) &= \mathbb{E}_{\tau \sim \pi_{\theta}} \left[ G(\tau) \nabla_{\theta} \log{P(\tau|\theta)} \right] \quad (2.3) \\
&= \mathbb{E}_{\tau \sim \pi_{\theta}} \left[ \sum_{t=0}^{T} G(\tau) \nabla_{\theta} \log{\pi_{\theta}(A_t|S_t)} \right] \quad (2.7)
\end{align}
$$

回転行列(rotation matrix)が直交行列であることの確認

三角関数を用いて定義される回転行列(rotation matrix)は主に$2$次元のベクトルを原点の周りに回転させるベクトルを表しますが、回転行列は直交行列(orthogonal matrix)の一つです。当記事では回転行列が直交行列であることの確認を行いました。
作成にあたっては「チャート式シリーズ 大学教養 線形代数」の第$7$章「内積」を主に参考にしました。

・数学まとめ
https://www.hello-statisticians.com/math_basic

定義と概要の確認

$2$次の回転行列

$2$次の正方行列で表される回転行列は回転する角$\theta$を元に下記のように表される。
$$
\large
\begin{align}
R(\theta) = \left( \begin{array}{cc} \cos{\theta} & -\sin{\theta} \\ \sin{\theta} & \sin{\theta} \end{array} \right)
\end{align}
$$

たとえばベクトル$\displaystyle \mathbf{x} = \left( \begin{array}{c} 2 \\ 0 \end{array} \right)$に回転行列$\displaystyle R(\theta) = R \left( \frac{\pi}{6} \right)$を作用させると下記が得られる。
$$
\large
\begin{align}
R \left( \frac{\pi}{6} \right) \mathbf{x} &= \left( \begin{array}{cc} \displaystyle \cos{\frac{\pi}{6}} & \displaystyle -\sin{\frac{\pi}{6}} \\ \displaystyle \sin{\frac{\pi}{6}} & \displaystyle \cos{\frac{\pi}{6}} \end{array} \right) \left( \begin{array}{c} 2 \\ 0 \end{array} \right) \\
&= \left( \begin{array}{cc} \displaystyle \frac{\sqrt{3}}{2} & -\displaystyle \frac{1}{2} \\ \displaystyle \frac{1}{2} & \displaystyle \frac{\sqrt{3}}{2} \end{array} \right) \left( \begin{array}{c} 2 \\ 0 \end{array} \right) \\
&= \frac{1}{2} \left( \begin{array}{cc} \sqrt{3} & -1 \\ 1 & \sqrt{3} \end{array} \right) \left( \begin{array}{c} 2 \\ 0 \end{array} \right) \\
&= \frac{1}{2} \left( \begin{array}{c} 2 \sqrt{3} \\ 2 \end{array} \right) \\
&= \left( \begin{array}{c} \sqrt{3} \\ 1 \end{array} \right)
\end{align}
$$

上記の結果はベクトル$\displaystyle \mathbf{x} = \left( \begin{array}{c} 2 \\ 0 \end{array} \right)$を原点の周りに$30^{\circ}$回転させ、$\displaystyle \left( \begin{array}{c} \sqrt{3} \\ 1 \end{array} \right)$が得られたと解釈することができる。

直交行列

下記のような式が成立する正方行列$X$を直交行列という。
$$
\large
\begin{align}
X^{\mathrm{T}} X = X X^{\mathrm{T}} = I
\end{align}
$$

回転行列が直交行列であることの確認

以下、「チャート式シリーズ 大学教養 線形代数」の例題の確認を行う。

基本例題$148$

$$
\large
\begin{align}
X = \left( \begin{array}{cc} \cos{\theta} & -\sin{\theta} \\ \sin{\theta} & \cos{\theta} \end{array} \right)
\end{align}
$$

上記のように$X$を定義するとき、$X X^{\mathrm{T}}$は下記のように変形できる。
$$
\large
\begin{align}
X X^{\mathrm{T}} &= \left( \begin{array}{cc} \cos{\theta} & -\sin{\theta} \\ \sin{\theta} & \cos{\theta} \end{array} \right) \left( \begin{array}{cc} \cos{\theta} & -\sin{\theta} \\ \sin{\theta} & \cos{\theta} \end{array} \right)^{\mathrm{T}} \\
&= \left( \begin{array}{cc} \cos{\theta} & -\sin{\theta} \\ \sin{\theta} & \cos{\theta} \end{array} \right) \left( \begin{array}{cc} \cos{\theta} & \sin{\theta} \\ -\sin{\theta} & \cos{\theta} \end{array} \right) \\
&= \left( \begin{array}{cc} \cos^{2}{\theta}+(-\sin{\theta})^{2} & \sin{\theta}\cos{\theta}-\sin{\theta}\cos{\theta} \\ \sin{\theta}\cos{\theta}-\sin{\theta}\cos{\theta} & \cos^{2}{\theta}+\sin^{2}{\theta} \end{array} \right) \\
&= \left( \begin{array}{cc} \cos^{2}{\theta}+\sin^{2}{\theta} & 0 \\ 0 & \cos^{2}{\theta}+\sin^{2}{\theta} \end{array} \right) \\
&= \left( \begin{array}{cc} 1 & 0 \\ 0 & 1 \end{array} \right) = I
\end{align}
$$

上記より$X$は直交行列である。

統計検定準1級 問題解説 ~2016年6月実施 選択問題及び部分記述問題 問7~

過去問

過去問題は統計検定公式が問題と解答例を公開しています。こちらを参照してください。

解答

$\boxed{\mathsf{8}}$ : $③$

フィッシャーの三原則とは「反復」,「無作為化」,「局所管理」である.
$①$:「反復」する場合には,同じ肥料を与えなければならない.誤り.
$②$:系統誤差をなくすためには「無作為化」を行う必要がある.与える肥料をランダムに割り付けることが必要である.誤り.
$③$:正しい.
$④$:肥料をランダムに植えると,肥料(A,B)によって差があるかどうかがわからない.誤り.
$⑤$:水はけの系統誤差を偶然誤差にするためには,無作為化を行う必要がある.苗を水はけのよい場所と悪い場所にランダムに植え付ければよい.誤り.

直和の定義・部分空間の和が直和かどうかの判定・部分空間の直和分解

ベクトル空間を部分空間(subspace)に分解するにあたっては直和(direct sum)かどうかに着目する必要があります。当記事では直和の定義・部分空間の和が直和かどうかの判定・部分空間の直和分解についてそれぞれ取りまとめを行いました。
作成にあたっては「チャート式シリーズ 大学教養 線形代数」の第$5.1$節「ベクトル空間と部分空間」を主に参考にしました。

・数学まとめ
https://www.hello-statisticians.com/math_basic

直和

直和の定義

ベクトル空間$V$の部分空間$U, W$に対し、$U \cap W = {0}$が成立する場合、$U$と$W$の和を$U$と$W$の直和といい、$U \oplus W$のように表す。

直和かどうかの判定

ベクトル空間$V$の部分空間$U, W$に対し、下記の$[1], [2]$は同値であるのでどちらかが成立するかを確認すれば良い。
$[1] \,$ $U \cap W = {0}$が成立
$[2] \,$ $U + W$の各要素が$\mathbf{u}+\mathbf{w} \, (\mathbf{u} \in U, \mathbf{w} \in W)$の形に一意に表せる

直和分解

$V = W_1 \oplus \cdots \oplus W_s$を直和分解という。

具体例の確認

以下、「チャート式シリーズ 大学教養 線形代数」の例題の確認を行う。

基本例題$082$

$[1]$
$$
\large
\begin{align}
U &= \left\{ \left[\begin{array}{c} x \\ y \\ z \end{array} \right] \middle| 2x+y+4z=0, \, x+2y-z=0 \right\} \\
W &= \left\{ \left[\begin{array}{c} x \\ y \\ z \end{array} \right] \middle| -x+2y-6z=0 \right\}
\end{align}
$$

上記に基づいて下記のような連立方程式を得る。
$$
\large
\begin{align}
2x+y+4z &= 0 \\
x+2y-z &= 0 \\
-x+2y-6z &= 0
\end{align}
$$

上記の解は$x=y=z=0$であるので、$U \cap W = \{\mathbf{0}\}$が成立する。よって$U+W$は直和である。

$[2]$
$$
\large
\begin{align}
U &= \left\{ \left[\begin{array}{c} x \\ y \\ z \end{array} \right] \middle| x+z=0 \right\} \\
W &= \left\{ \left[\begin{array}{c} x \\ y \\ z \end{array} \right] \middle| 2x+y+6z=0 \right\}
\end{align}
$$

上記に基づいて下記のような連立方程式を得る。
$$
\large
\begin{align}
x+z &= 0 \\
2x+y+6z &= 0
\end{align}
$$

上記の解の$1$つに$x=1, y=4, z=-1$が得られるので、$U \cap W \neq \{\mathbf{0}\}$が成立する。よって$U+W$は直和ではない。

$[3]$
$$
\large
\begin{align}
U &= \left\{ \left[\begin{array}{c} x \\ y \\ z \end{array} \right] \middle| x-y-z=0 \right\} \\
W &= \left\{ \left[\begin{array}{c} x \\ y \\ z \end{array} \right] \middle| -x+2y+4z=0, \, 2x-y+z=0 \right\}
\end{align}
$$

上記に基づいて下記のような連立方程式を得る。
$$
\large
\begin{align}
x-y-z &= 0 \\
-x+2y+4z &= 0 \\
2x-y+z &= 0
\end{align}
$$

上記の解の$1$つに$x=-2, y=-3, z=1$が得られるので、$U \cap W \neq \{\mathbf{0}\}$が成立する。よって$U+W$は直和ではない。

結果の考察

$[1]$の$U$は$2x+y+4z=0, \, x+2y-z=0$が同時に成立するので、下記のベクトルに基づく直線を表す。
$$
\large
\begin{align}
\mathbf{u} = k \left[\begin{array}{c} -3 \\ 2 \\ 1 \end{array} \right] \in U, \, k \in \mathbb{R}
\end{align}
$$

また、$W$は下記に基づく平面を表す。
$$
\large
\begin{align}
\mathbf{w} = s \left[\begin{array}{c} 6 \\ 0 \\ 1 \end{array} \right] + t \left[\begin{array}{c} 0 \\ 3 \\ 1 \end{array} \right] \in W, \, s,t \in \mathbb{R}
\end{align}
$$

ここで$\mathbf{u} = \mathbf{w}$が成立する実数$k,s,t$は$k=s=t=0$のみであるので、$U+W$が直和である。解答では方程式を元に解いたが、このように方程式を元に直線や平面を表すベクトルを得ることで直和かどうか調べることができる。

$[2]$では$U$と$V$がどちらも平面を表すので、$\mathbb{R}^{3}$である以上、二つの平面がベクトルを共有するので直和ではない。

$[1]$と同様に$[3]$の$U$は下記に基づく平面を表す。
$$
\large
\begin{align}
\mathbf{u} = s \left[\begin{array}{c} 1 \\ 1 \\ 0 \end{array} \right] + t \left[\begin{array}{c} 1 \\ 0 \\ 1 \end{array} \right] \in W, \, s,t \in \mathbb{R}
\end{align}
$$

また、$W$は下記に基づく直線を表す。
$$
\large
\begin{align}
\mathbf{w} = k \left[\begin{array}{c} -2 \\ -3 \\ 1 \end{array} \right] \in U, \, k \in \mathbb{R}
\end{align}
$$

ここで$s=-3,t=1,k=1$のとき、$\mathbf{u}$と$\mathbf{w}$について下記が成立する。
$$
\large
\begin{align}
\mathbf{u} &= s \left[\begin{array}{c} 1 \\ 1 \\ 0 \end{array} \right] + t \left[\begin{array}{c} 1 \\ 0 \\ 1 \end{array} \right] \\
&= -3 \left[\begin{array}{c} 1 \\ 1 \\ 0 \end{array} \right] + \left[\begin{array}{c} 1 \\ 0 \\ 1 \end{array} \right] \\
&= \left[\begin{array}{c} -2 \\ -3 \\ 1 \end{array} \right] = \mathbf{w}
\end{align}
$$

上記より$U$が表す直線は$W$が表す平面に含まれることが確認できる。よって$U+W$は直和ではない。

基本例題$083$

$$
\large
\begin{align}
W_1 = \left\{ \left[\begin{array}{c} x \\ 0 \\ 0 \end{array} \right] \middle| x \in \mathbb{R} \right\}, \, W_2 = \left\{ \left[\begin{array}{c} 0 \\ y \\ 0 \end{array} \right] \middle| y \in \mathbb{R} \right\}, \, W_3 = \left\{ \left[\begin{array}{c} 0 \\ 0 \\ z \end{array} \right] \middle| z \in \mathbb{R} \right\}
\end{align}
$$

$\displaystyle \mathbf{e}_{1} = \left[\begin{array}{c} 1 \\ 0 \\ 0 \end{array} \right], \, \mathbf{e}_{2} = \left[\begin{array}{c} 0 \\ 1 \\ 0 \end{array} \right], \, \mathbf{e}_{3} = \left[\begin{array}{c} 0 \\ 0 \\ 1 \end{array} \right]$のようにおくと、任意の$\displaystyle \mathbf{v} = \left[\begin{array}{c} x \\ y \\ z \end{array} \right] \in \mathbb{R}^{3}$は下記のように表せる。
$$
\large
\begin{align}
\mathbf{v} = \left[\begin{array}{c} x \\ y \\ z \end{array} \right] = x \mathbf{e}_{1} + y \mathbf{e}_{2} + z \mathbf{e}_{3}
\end{align}
$$

上記は一意的に表せるので、$W_1+W_2+W_3$は直和である。