ブログ

正則行列(regular matrix)の定義・特徴と基本行列の逆行列

逆行列を持つ行列を正則行列(regular matrix)といいます。正則行列はランクが行列の次数に一致し、有限個の基本行列の積に対応します。当記事では正則行列の定義・特徴と基本行列(elementary matrix)の逆行列について取り扱いました。
作成にあたっては「チャート式シリーズ 大学教養 線形代数」の第$3.2$節「正則行列」を主に参考にしました。

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

正則行列と基本行列の逆行列

正則行列の定義・特徴

単位行列を$I$で定義する。行列$A$が正則であるとき、$XA=AX=I$が成立する$X$が存在する。よって正則行列の定義は「行列が逆行列を持つ」と理解すれば良い。行列$A$の逆行列は$A^{-1}$のように表すことが多い。

$A$が$n$次正則行列であるとき、「$\mathrm{rank} A = n$が成立」し、「行列$A$は有限個の基本行列の積に一致」する。

基本行列の逆行列

上記で定義した$3$つの基本行列$P_{ij}, P_{i}(c), P_{ij}(a)$の逆行列はそれぞれ下記のように表すことができる。
$$
\large
\begin{align}
(P_{ij})^{-1} &= P_{ij} \quad (1) \\
(P_{i}(c))^{-1} &= P_{i} \left( \frac{1}{c} \right) \quad (2) \\
P_{ij}(a) &= P_{ij}(-a) \quad (3)
\end{align}
$$

$(3)$式が成立することは下記に基づいて示すことができる。
$$
\large
\begin{align}
P_{ij}(a)P_{ij}(-a) &= \left(\begin{array}{ccccccc} 1 & & & & & & \\ & \ddots & & & & & \\ & & 1 & \cdots & a & & \\ & & & \ddots & \vdots & & \\ & & & & 1 & & \\ & & & & & \ddots & \\ & & & & & & 1 \end{array} \right) \left(\begin{array}{ccccccc} 1 & & & & & & \\ & \ddots & & & & & \\ & & 1 & \cdots & -a & & \\ & & & \ddots & \vdots & & \\ & & & & 1 & & \\ & & & & & \ddots & \\ & & & & & & 1 \end{array} \right) \\
&= \left(\begin{array}{ccccccc} 1 & & & & & & \\ & \ddots & & & & & \\ & & 1 & \cdots & a-a & & \\ & & & \ddots & \vdots & & \\ & & & & 1 & & \\ & & & & & \ddots & \\ & & & & & & 1 \end{array} \right) \\
&= \left(\begin{array}{ccccccc} 1 & & & & & & \\ & \ddots & & & & & \\ & & 1 & \cdots & 0 & & \\ & & & \ddots & \vdots & & \\ & & & & 1 & & \\ & & & & & \ddots & \\ & & & & & & 1 \end{array} \right) = I_{n}
\end{align}
$$

$(1), (2)$式が成立することは「チャート式シリーズ 大学教養 線形代数」の基本例題$045$で取り扱われているので次節で確認を行う。

具体例の確認

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

基本例題$045$

・$(1)$の導出
$$
\begin{align}
& P_{ij}P_{ij} \\
&= \left(\begin{array}{ccccccccccc} 1 & & & & & & & & & & \\ & \ddots & & & & & & & & & \\ & & 1 & & & & & & & & \\ & & & 0 & \cdots & \cdots & \cdots & 1 & & & \\ & & & \vdots & 1 & & & \vdots & & & \\ & & & \vdots & & \ddots & & \vdots & & & \\ & & & \vdots & & & 1 & \vdots & & & \\ & & & 1 & \cdots & \cdots & \cdots & 0 & & & \\ & & & & & & & & 1 & & \\ & & & & & & & & & \ddots & \\ & & & & & & & & & & 1 \end{array} \right) \left(\begin{array}{ccccccccccc} 1 & & & & & & & & & & \\ & \ddots & & & & & & & & & \\ & & 1 & & & & & & & & \\ & & & 0 & \cdots & \cdots & \cdots & 1 & & & \\ & & & \vdots & 1 & & & \vdots & & & \\ & & & \vdots & & \ddots & & \vdots & & & \\ & & & \vdots & & & 1 & \vdots & & & \\ & & & 1 & \cdots & \cdots & \cdots & 0 & & & \\ & & & & & & & & 1 & & \\ & & & & & & & & & \ddots & \\ & & & & & & & & & & 1 \end{array} \right) \\
&= \left(\begin{array}{ccccccccccc} 1 & & & & & & & & & & \\ & \ddots & & & & & & & & & \\ & & 1 & & & & & & & & \\ & & & 0 & \cdots & \cdots & \cdots & 0 \cdot 1 + 1 \cdot 0 & & & \\ & & & \vdots & 1 & & & \vdots & & & \\ & & & \vdots & & \ddots & & \vdots & & & \\ & & & \vdots & & & 1 & \vdots & & & \\ & & & 1 \cdot 0 + 0 \cdot 1 & \cdots & \cdots & \cdots & 0 & & & \\ & & & & & & & & 1 & & \\ & & & & & & & & & \ddots & \\ & & & & & & & & & & 1 \end{array} \right) \\
&= \left(\begin{array}{ccccccccccc} 1 & & & & & & & & & & \\ & \ddots & & & & & & & & & \\ & & 1 & & & & & & & & \\ & & & 0 & \cdots & \cdots & \cdots & 0 & & & \\ & & & \vdots & 1 & & & \vdots & & & \\ & & & \vdots & & \ddots & & \vdots & & & \\ & & & \vdots & & & 1 & \vdots & & & \\ & & & 0 & \cdots & \cdots & \cdots & 0 & & & \\ & & & & & & & & 1 & & \\ & & & & & & & & & \ddots & \\ & & & & & & & & & & 1 \end{array} \right) = I_{n}
\end{align}
$$

・$(2)$の導出
$$
\large
\begin{align}
P_{i}(c) P_{i} \left( \frac{1}{c} \right) &= \left(\begin{array}{ccccccc} 1 & & & & & & \\ & \ddots & & & & & \\ & & 1 & & & & \\ & & & c & & & \\ & & & & 1 & & \\ & & & & & \ddots & \\ & & & & & & 1 \end{array} \right) \left(\begin{array}{ccccccc} 1 & & & & & & \\ & \ddots & & & & & \\ & & 1 & & & & \\ & & & \displaystyle \frac{1}{c} & & & \\ & & & & 1 & & \\ & & & & & \ddots & \\ & & & & & & 1 \end{array} \right) \\
&= \left(\begin{array}{ccccccc} 1 & & & & & & \\ & \ddots & & & & & \\ & & 1 & & & & \\ & & & \displaystyle c \cdot \frac{1}{c} & & & \\ & & & & 1 & & \\ & & & & & \ddots & \\ & & & & & & 1 \end{array} \right) \\
&= \left(\begin{array}{ccccccc} 1 & & & & & & \\ & \ddots & & & & & \\ & & 1 & & & & \\ & & & 1 & & & \\ & & & & 1 & & \\ & & & & & \ddots & \\ & & & & & & 1 \end{array} \right) = I_{n}
\end{align}
$$

基本例題$049$

基本行列を用いた行基本変形に基づく逆行列(Inverse Matrix)の計算法

$3$次以上の正則行列の逆行列の計算にあたっては$2$次の正則行列のように公式がない一方で、行基本変形を左からの基本行列の作用と考えることで逆行列(Inverse Matrix)を得ることができます。当記事では計算の一連の流れと演習に基づく計算例の確認を行いました。
作成にあたっては「チャート式シリーズ 大学教養 線形代数」の第$3.3$節「逆行列」を主に参考にしました。

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

逆行列の計算法

基本行列と行基本変形

「行基本変形/行基本操作」は「基本行列」を右から掛ける演算に対応する。

逆行列の計算法

正則行列$A$について行列$A$から単位行列$I$を作る行基本変形を単位行列$I$に作用させることで行列$A$の逆行列$A^{-1}$を得ることができる。この手順は行基本変形$X$を用いて$XA=I$が得られるとき、$X=A^{-1}$が成立すると解釈すると理解しやすい。

具体例の確認

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

基本例題$051$

・$(1)$

$$
\large
\begin{align}
\left( A \, \middle| \, I \right) = \left( \begin{array}{ccc} 1 & 1 & 1 \\ 2 & 1 & 1 \\ 4 & 3 & 2 \end{array} \, \middle| \, \begin{array}{ccc} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{array} \right)
\end{align}
$$

上記に対し、掃き出し法を用いると下記が得られる。
$$
\large
\begin{align}
\left( \begin{array}{ccc} 1 & 1 & 1 \\ 2 & 1 & 1 \\ 4 & 3 & 2 \end{array} \, \middle| \, \begin{array}{ccc} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{array} \right) & \longrightarrow \left( \begin{array}{ccc} 1 & 1 & 1 \\ 0 & -1 & -1 \\ 0 & -1 & -2 \end{array} \, \middle| \, \begin{array}{ccc} 1 & 0 & 0 \\ -2 & 1 & 0 \\ -4 & 0 & 1 \end{array} \right) \\
& \longrightarrow \left( \begin{array}{ccc} 1 & 1 & 1 \\ 0 & 1 & 1 \\ 0 & 1 & 2 \end{array} \, \middle| \, \begin{array}{ccc} 1 & 0 & 0 \\ 2 & -1 & 0 \\ 4 & 0 & -1 \end{array} \right) \\
& \longrightarrow \left( \begin{array}{ccc} 1 & 0 & 0 \\ 0 & 1 & 1 \\ 0 & 0 & 1 \end{array} \, \middle| \, \begin{array}{ccc} -1 & 1 & 0 \\ 2 & -1 & 0 \\ 2 & 1 & -1 \end{array} \right) \\
& \longrightarrow \left( \begin{array}{ccc} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{array} \, \middle| \, \begin{array}{ccc} -1 & 1 & 0 \\ 0 & -2 & 1 \\ 2 & 1 & -1 \end{array} \right) \\
&= \left( I \, \middle| \, A^{-1} \right)
\end{align}
$$

上記では$A$に行基本変形を行うことで$I$が導出できたので$\mathrm{rank} A = 3$であり、行列$A$が正則であることも同時に示される。

重要例題$021$

【上級】データサイエンス 数学ストラテジスト 公式問題集 解答例まとめ Q.31〜40

「データサイエンス 数学ストラテジスト 上級」はデータサイエンスの基盤である、確率・統計、線形代数、微積分、機械学習、プログラミングなどを取り扱う資格試験です。当記事では「日本数学検定協会」作成の「公式問題集」の演習問題$31$〜$40$の解答例を取り扱いました。

・数学検定まとめ
https://www.hello-statisticians.com/math_certificate

演習問題

Q.31

$4$点が同じ平面上にあるとき、実数$s, t$について下記のような式が成立する。
$$
\large
\begin{align}
\overrightarrow{OC} &= s \overrightarrow{OA} + t \overrightarrow{OB} \\
\left( \begin{array}{c} -3 \\ 5 \\ k \end{array} \right) &= s \left( \begin{array}{c} -2 \\ 2 \\ 2 \end{array} \right) + t \left( \begin{array}{c} 1 \\ -3 \\ 4 \end{array} \right) \\
\left( \begin{array}{c} -3 \\ 5 \\ k \end{array} \right) &= \left( \begin{array}{c} -2s + t \\ 2s-3t \\ 2s+4t \end{array} \right) \quad [1]
\end{align}
$$

$[1]$式の$1$行目と$2$行目より$s=1, t=-1$が得られ、$3$行目に代入すると$k=-2$が得られる。よって$(4)$が正しい。

Q.32

定積分$\displaystyle \int_{2}^{3} \log{(x-1)} dx$は部分積分に基づいて下記のように計算を行うことができる。
$$
\large
\begin{align}
\int_{2}^{3} \log{(x-1)} dx &= \left[ (x-1) \log{(x-1)} \right]_{2}^{3} – \int_{2}^{3} (\cancel{x-1}) \cdot \frac{1}{\cancel{x-1}} \\
&= (3-1) \log{(3-1)} – (2-1) \log{(2-1)} – \left[ x \right]_{2}^{3} \\
&= 2 \log{2} – 1
\end{align}
$$

よって$(3)$が正しい。

Q.33

$f(x)=x^4-4x^3+10x^2+3x-1$とおくと、$f'(x), \, f^{”}(x)$は下記のように得られる。
$$
\large
\begin{align}
f'(x) &= 4x^3 – 12x^2 + 20x + 3 \\
f^{”}(x) &= 12x^2 – 24x + 20 \\
&= 12(x-1)^{2} + 8 > 0
\end{align}
$$

$f^{”}(x)>0$であるので$f(x)$が下に凸の関数である。ここで$f(0)=-1<0$、$\displaystyle \lim_{x \to \pm \infty} f(x) = \infty$であるので$f(x)=0$は$2$個の実数解を持つ。よって$(3)$が正しい。

Q.34

$$
\large
\begin{align}
\int_{0}^{x} f(t) \cos{t} dt = f(x) – \sin{x}, \quad x \geq 0 \quad [1]
\end{align}
$$

$[1]$式の両辺を$x$について微分すると下記が得られる。
$$
\large
\begin{align}
\frac{d}{dx} \int_{0}^{x} f(t) \cos{t} dt &= \frac{d}{dx}[f(x) – \sin{x}] \\
f(x) \cos{x} &= f'(x) – \cos{x}
\end{align}
$$

ここで$\displaystyle y=f(x), f'(x)=\frac{dy}{dx}$とおくと下記が得られる。
$$
\large
\begin{align}
f(x) \cos{x} &= f'(x) – \cos{x} \\
(y+1) \cos{x} &= \frac{dy}{dx} \\
\int \frac{1}{y+1} dy &= \int \cos{x} dx \\
\log{|y+1|} &= \sin{x} + C \\
|y+1| &= e^{\sin{x} + C} \\
y+1 &= \pm e^{C} \cdot e^{\sin{x}} \\
f(x) &= -1 + A e^{\sin{x}} \quad [2], \quad (A=\pm e^{C})
\end{align}
$$

上記に対し、$[1]$式に$x=0$を代入すると下記が得られる。
$$
\large
\begin{align}
\int_{0}^{0} f(t) \cos{t} dt &= f(0) – \sin{0} \\
0 &= f(0) – 0 \\
f(0) &= 0 \quad [3]
\end{align}
$$

$[2]$式に$[3]$式を代入すると下記が得られる。
$$
\large
\begin{align}
f(0) &= -1 + A e^{\sin{0}} \\
0 &= -1 + A \cdot 1 \\
A &= 1
\end{align}
$$

$[2]$式に$A=1$を代入することで下記が得られる。
$$
\large
\begin{align}
f(x) &= -1 + e^{\sin{x}} \\
&= e^{\sin{x}} – 1
\end{align}
$$

よって$(3)$が正しい。

Q.35

$$
\large
\begin{align}
f(x,y) = e^{-(x^2+y^2)}
\end{align}
$$

$f(x,y)$の$x$に関する偏微分を$f_{x}$、$y$に関する偏微分を$f_{y}$とおくと、それぞれ下記のように計算できる。
$$
\large
\begin{align}
f_{x} &= \frac{\partial f}{\partial x} = e^{-(x^2+y^2)} \cdot (-2x) \\
&= -2x e^{-(x^2+y^2)} \\
f_{y} &= \frac{\partial f}{\partial y} = -2y e^{-(x^2+y^2)}
\end{align}
$$

同様に$f_{xx}, f_{yy}$は下記のように計算できる。
$$
\large
\begin{align}
f_{xx} &= \frac{\partial^2 f}{\partial x^2} = -2x e^{-(x^2+y^2)} – -2x e^{-(x^2+y^2)} \cdot (-2x) \\
&= (4x^2-2) e^{-(x^2+y^2)} \\
f_{yy} &= \frac{\partial^2 f}{\partial y^2} = (4y^2-2) e^{-(x^2+y^2)}
\end{align}
$$

よって$f_{xx}+f_{yy}$は下記のように得られる。
$$
\large
\begin{align}
f_{xx}+f_{yy} &= (4x^2-2) e^{-(x^2+y^2)} + (4y^2-2) e^{-(x^2+y^2)} \\
&= 4 e^{-(x^2+y^2)} (x^2+y^2-1)
\end{align}
$$

上記より$(3)$が正しい。

Q.36

$$
\large
\begin{align}
\lim_{x \to 0} \frac{x^{2} \sin{\beta x}}{\alpha x – \sin{x}} \quad (1)
\end{align}
$$

$\sin{x}$のマクローリン展開は下記のように行える。
$$
\large
\begin{align}
\sin{x} = x – \frac{1}{3!} x^{3} + o(x)
\end{align}
$$

上記より$(1)$式は下記のように変形できる。
$$
\large
\begin{align}
\lim_{x \to 0} \frac{x^{2} \sin{\beta x}}{\alpha x – \sin{x}} &= \lim_{x \to 0} \frac{\displaystyle x^{2} \left( \beta x – \frac{1}{3!} (\beta x)^{3} + o(x^{3}) \right)}{\displaystyle \alpha x – \left( x – \frac{1}{3!} x^{3} + o(x^{3}) \right)} \\
&= \lim_{x \to 0} \frac{\displaystyle \beta x^{3} + o(x^{3})}{\displaystyle (\alpha-1) x + \frac{1}{3!} x^{3} + o(x^{3})} \quad (2) \\
\end{align}
$$

$(2)$式が極限値$3$を持つので$\alpha=1$が得られる。また、$\alpha=1$を$(2)$式に代入すると下記が得られる。
$$
\large
\begin{align}
\lim_{x \to 0} \frac{\displaystyle \beta x^{3} + o(x^{3})}{\displaystyle \frac{1}{3!} x^{3} + o(x^{3})} &= 3 \\
6 \beta &= 3 \\
\beta &= \frac{1}{2}
\end{align}
$$

よって$\displaystyle \alpha=1, \beta=\frac{1}{2}$より$6 \alpha \beta=3$であるので$(2)$が正しい。

・解説
漸近展開(asymptotic expansion)を用いた極限値の計算については下記で詳しく取り扱いました。

Q.37

$$
\large
\begin{align}
f(x) = \sqrt{1-x+2x^{2}} = (1-x+2x^{2})^{\frac{1}{2}}
\end{align}
$$

以下、$f(x)$の$4$次導関数である$f^{(4)}(x)$を求める。
$$
\large
\begin{align}
f'(x) &= \frac{1}{2}(1-x+2x^{2})^{-\frac{1}{2}} \cdot (4x-1) \\
&= \frac{1}{2}(4x-1)(1-x+2x^{2})^{-\frac{1}{2}} \\
f^{”}(x) &= \frac{1}{2} \cdot 4(1-x+2x^{2})^{-\frac{1}{2}} + \frac{1}{2}(4x-1) \cdot -\frac{1}{2}(1-x+2x^{2})^{-\frac{3}{2}} \cdot (4x-1) \\
&= \frac{1}{4} (1-x+2x^{2})^{-\frac{3}{2}} \left( 8(1-x+2x^{2}) – (4x-1)^{2} \right) \\
&= \frac{7}{4} (1-x+2x^{2})^{-\frac{3}{2}} \\
f^{(3)}(x) &= \frac{7}{4} \cdot -\frac{3}{2} (1-x+2x^{2})^{-\frac{5}{2}} \cdot (4x-1) \\
&= -\frac{21}{8} (4x-1) (1-x+2x^{2})^{-\frac{5}{2}} \\
f^{(4)}(x) &= -\frac{21}{8} \cdot 4(1-x+2x^{2})^{-\frac{5}{2}} – \frac{21}{8} (4x-1) \cdot -\frac{5}{2}(1-x+2x^{2})^{-\frac{7}{2}} (4x-1)
\end{align}
$$

上記より$f^{(4)}(0)$は下記のように得られる。
$$
\large
\begin{align}
f^{(4)}(0) &= -\frac{21}{8} \cdot 4 + \frac{21}{8} \cdot (0-1) \cdot \frac{5}{2} \cdot (0-1) \\
&= \frac{21}{16}(-8+5) \\
&= -\frac{63}{16}
\end{align}
$$

ここで$f(x)$のマクローリン展開における$x^{4}$の係数は$\displaystyle \frac{f^{(4)}(0)}{4!}$であるので、係数は下記のように計算できる。
$$
\large
\begin{align}
\frac{f^{(4)}(0)}{4!} &= -\frac{63}{16} \cdot \frac{1}{4 \cdot 3 \cdot 2} \\
&= -\frac{21}{16 \cdot 8} = -\frac{21}{128}
\end{align}
$$

公式問題集の第$1$版第$1$刷の解答は日本数学検定協会公式の正誤表で訂正されていることに注意が必要である。

Q.38

$$
\large
\begin{align}
f &: \, A = \left( \begin{array}{cc} 2 & -1 \\ 5 & -3 \end{array} \right) \\
g &: \, B \\
g \circ f &: \, \left( \begin{array}{cc} 18 & -10 \\ -1 & 0 \end{array} \right)
\end{align}
$$

上記より行列$B$は下記のように得られる。
$$
\large
\begin{align}
B &= \left( \begin{array}{cc} 18 & -10 \\ -1 & 0 \end{array} \right) A^{-1} \\
&= \left( \begin{array}{cc} 18 & -10 \\ -1 & 0 \end{array} \right) \left( \begin{array}{cc} 2 & -1 \\ 5 & -3 \end{array} \right)^{-1} \\
&= \frac{1}{2 \cdot (-3) – (-1) \cdot 5} \left( \begin{array}{cc} 18 & -10 \\ -1 & 0 \end{array} \right) \left( \begin{array}{cc} -3 & 1 \\ -5 & 2 \end{array} \right) \\
&= -\left( \begin{array}{cc} -4 & -2 \\ 3 & -1 \end{array} \right) \\
&= \left( \begin{array}{cc} 4 & 2 \\ -3 & 1 \end{array} \right)
\end{align}
$$

よって$(1)$が正しい。

Q.39

行列$\displaystyle \left( \begin{array}{ccc} 1 & 0 & -2 \\ 2 & 3 & 1 \\ 2 & 1 & -2 \end{array} \right)$の逆行列は掃き出し法に基づいて下記のように得ることができる。
$$
\large
\begin{align}
\left( \begin{array}{ccc} 1 & 0 & -2 \\ 2 & 3 & 1 \\ 2 & 1 & -2 \end{array} \, \middle| \, \begin{array}{ccc} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{array} \right) & \longrightarrow \left( \begin{array}{ccc} 1 & 0 & -2 \\ 0 & 3 & 5 \\ 0 & 1 & 2 \end{array} \, \middle| \, \begin{array}{ccc} 1 & 0 & 0 \\ -2 & 1 & 0 \\ -2 & 0 & 1 \end{array} \right) \\
& \longrightarrow \left( \begin{array}{ccc} 1 & 0 & -2 \\ 0 & 0 & -1 \\ 0 & 1 & 2 \end{array} \, \middle| \, \begin{array}{ccc} 1 & 0 & 0 \\ 4 & 1 & -3 \\ -2 & 0 & 1 \end{array} \right) \\
& \longrightarrow \left( \begin{array}{ccc} 1 & 0 & 0 \\ 0 & 0 & -1 \\ 0 & 1 & 0 \end{array} \, \middle| \, \begin{array}{ccc} -7 & -2 & 6 \\ 4 & 1 & -3 \\ 6 & 2 & -5 \end{array} \right) \\
& \longrightarrow \left( \begin{array}{ccc} 1 & 0 & 0 \\ 0 & 0 & 1 \\ 0 & 1 & 0 \end{array} \, \middle| \, \begin{array}{ccc} -7 & -2 & 6 \\ -4 & -1 & 3 \\ 6 & 2 & -5 \end{array} \right) \\
& \longrightarrow \left( \begin{array}{ccc} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{array} \, \middle| \, \begin{array}{ccc} -7 & -2 & 6 \\ 6 & 2 & -5 \\ -4 & -1 & 3 \end{array} \right)
\end{align}
$$

上記より逆行列は$\displaystyle \left( \begin{array}{ccc} -7 & -2 & 6 \\ 6 & 2 & -5 \\ -4 & -1 & 3 \end{array} \right)$であるので$(5)$が正しい。

・解説
掃き出し法による逆行列の計算法については下記などで詳しく取り扱いました。

Q.40

$$
\large
\begin{align}
A &= \left( \begin{array}{ccc} 1 & \alpha & \alpha^{2} \\ \alpha & 1 & \alpha \\ \alpha^{2} & \alpha & 1 \end{array} \right) \\
A\left( \begin{array}{c} x \\ y \\ z \end{array} \right) &= \left( \begin{array}{c} 1 \\ -1 \\ 1 \end{array} \right)
\end{align}
$$

上記が無限個の解を持つには「$\det{A}=0$が必要条件」となる。$\det{A}=0$は下記のように解くことができる。
$$
\large
\begin{align}
\det{A} &= 0 \\
\left| \begin{array}{ccc} 1 & \alpha & \alpha^{2} \\ \alpha & 1 & \alpha \\ \alpha^{2} & \alpha & 1 \end{array} \right| &= 0 \\
\left| \begin{array}{ccc} 1 & \alpha & \alpha^{2} \\ 0 & 1-\alpha^{2} & \alpha(1-\alpha^{2}) \\ 0 & \alpha(1-\alpha^{2}) & 1-\alpha^{4} \end{array} \right| &= 0 \\
(-1)^{1+1} \left| \begin{array}{cc} 1-\alpha^{2} & \alpha(1-\alpha^{2}) \\ \alpha(1-\alpha^{2}) & (1+\alpha^{2})(1-\alpha^{2}) \end{array} \right| &= 0 \\
(1-\alpha^{2})^{2}(1+\alpha^{2}) – \alpha^{2}(1-\alpha^{2})^{2} &= 0 \\
(1-\alpha^{2})^{2}(1+\cancel{\alpha^{2}}-\cancel{\alpha^{2}}) &= 0 \\
(1-\alpha^{2})^{2} &= 0 \\
\alpha^{2} &= 1 \\
\alpha &= \pm 1
\end{align}
$$

ここで$\alpha=1$のとき解が定まらないので、無限個の解を持つのは$\alpha=-1$のときである。よって$(3)$が正しい。

SPMDのメモリ制約とMesh-TensorFlowを用いたModel-Parallel処理の実装

DeepLearningにおける分散処理ではSPMDに基づいてバッチ分割を行うことが多い一方で、大規模モデルを取り扱うにあたってはメモリの制約などの課題があります。当記事では上記の解決にあたって用いられるModel-Parallel処理の原理やMesh-TensorFlowライブラリの概要について取り扱いました。
Mesh-TensorFlowの論文である”Mesh-TensorFlow: Deep Learning for Supercomputers”やSwitch Transformer論文などを参考に取りまとめを行いました。

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

・Mesh-TensorFlow論文
・Switch Transformer論文

Mesh-TensorFlowの概要

DeepLearningとSPMD

SPMD(Single-Program-Multiple-Data)は分散処理を行う際の基本的な方針であり、「同じプログラムを複数のデータに作用させる」ということを意味する。DeepLearningではミニバッチを分割し複数のGPUやTPUで処理することに対応する。

このようなGPU/TPUを用いた分散処理を用いることで学習の高速化が可能になる。ResNetなどに基づく画像処理ではFoward処理とBackProp処理を分散して行い、勾配を用いたパラメータのUpdateをまとめて行うことで高速化を実現できる。

このようにDeepLearningではSPMD(Single-Program-Multiple-Data)に基づいて複数のGPU/TPUを用いて分散処理を行うことで学習の高速化を行うことができる。

Mesh-TensorFlowの概要

Mesh-TensorFlowはSPMDに基づくバッチ分割(batch splitting)以外の分散処理も行えるように実装されたライブラリである。詳しくは次節の「Mesh-TensorFlowの設定と活用」で取り扱った。

Mesh-TensorFlowの使用例:2層MLP

入力層に対応する行列$x \in \mathbb{R}^{b \times d_{io}}$、中間層に対応する行列$h \in \mathbb{R}^{b \times d_{h}}$、出力層に対応する行列$y \in \mathbb{R}^{b \times d_{io}}$を元に下記のように$2$層MLPを定義する。
$$
\large
\begin{align}
y &= \mathrm{ReLU}(xw + \mathrm{bias}) v \quad (1) \\
w & \in \mathbb{R}^{d_{io} \times d_{h}}, \, v \in \mathbb{R}^{d_{h} \times d_{io}}, \, \mathrm{bias} \in \mathbb{R}^{b \times d_{h}}
\end{align}
$$

上記の$b$はバッチサイズ、$d_{io}$は$2$層MLPの入力層と出力層のベクトルの要素数、$d_{h}$は$2$層MLPの隠れ層のベクトルの要素数に対応する。このとき$(1)$式の演算をMesh-TensorFlowでは下記のように表現する。

batch = mtf.Dimension("batch", b)
io = mtf.Dimension("io", d_io)
hidden = mtf.Dimension("hidden", d_h)
# x.shape == [batch, io]
w = mtf.get_variable("w", shape=[io, hidden])
bias = mtf.get_variable("bias", shape=[hidden])
v = mtf.get_variable("v", shape=[hidden, io])
h = mtf.relu(mtf.einsum(x, w, output_shape=[batch, hidden]) + bias)
y = mtf.einsum(h, v, output_shape=[batch, io])

8行目と9行目で隠れ層の計算、出力層の計算がそれぞれ行われることに注意して上記は確認すると良い。

Mesh-TensorFlowの設定と活用

Data-Parallel Layout

Data-Parallel LayoutはMesh-TensorFlowでSPMD(Single-Program-Multiple-Data)処理を行う際のLayoutに対応する。Mesh-TensorFlowでは下記のような表記でData-Parallel Layoutを表す。

mesh_shape = [("all", n)]
computation_layout = [("batch", "all")]

Mesh-TensorFlowでは上記のcomputation_layoutbatchを指定することでData-Parallel処理を表す。

Model-Parallel Layout

Mesh-TensorFlowはバッチ分割ではなく、MLP(Multi Layer Perceptron)の演算の分割も行うことができる。前節で取り扱った$2$層MLPの例では入力層の$x$と出力層の$y$を全てのGPU/TPUに載せ、隠れ層の演算のみを分割すると分散処理が行える。

たとえば入力層・出力層の次元を$50$、隠れ層の次元を$100$に設定し、$5$つの演算ノードで分散処理を行う場合、通常では$50 \times 100$と$100 \times 50$の行列を用いて行列演算を行うが、$50 \times 20$と$20 \times 50$の行列演算を$5$つ行うことで全体の演算を実現できる。

このような処理を行うことで、MLP処理における隠れ層の次元が大きい場合も分割して処理を行うことができ、大規模モデルの構築も無理なく行うことができる。たとえば近年注目を集めるGPT$3$やPaLMなどのLLMでは$10{,}000$次元以上が用いられることがあるので、このような演算は有効な手段になり得る。

mesh_shape = [("all", n)]
computation_layout = [("hidden", "all")]

Mesh-TensorFlowでは上記のcomputation_layouthiddenを指定することでData-Parallel処理を表す。

前項のbatchと当項hiddenの対応に注意しておくと良い。

Data-Parallel, Model-Parallel Layouts

DataとModelの方向にそれぞれ対応する$r \times c$の$2$次元でメッシュ化を行う場合、Mesh-TensorFlowでは下記のように処理を表現する。

mesh_shape = [("rows", r), ("cols", c)]
computation_layout = [("batch", "rows"), ("hidden", "cols")]

上記はmesh_shaperowsrcolscを設定し、computation_layoutでそれぞれ辞書オブジェクトのように指定すると理解すればよい。

Mesh-TensorFlowとTransformer

Mesh-TensorFlowはTransformerにも活用することができる。

mesh_shape = [("all", n)]
computation_layout = [
  ("vocab", "all"), ("d_ff", "all"), ("heads", "all")]

上記はTransformerにModel-Parallel Layoutsを用いる際の表記である。n個のメッシュを用意し、語彙のサイズ$d_{model}$、隠れ層のサイズ$d_{ff}$、Attention_Headsの数にnを対応させる。

Model-Parallel LayoutsだけでなくData-Parallel Layoutも用いる場合は、下記のように$r \times c$個のメッシュを設定する。

mesh_shape = [("rows", r), ("cols", c")]
computation_layout = [("batch", "rows"), ("vocab", "cols"),
                      ("d_ff", "cols"), ("heads", "cols")]

Mesh-TensorFlowの活用①:Switch Transformer

Switch Transformerでは、Mesh-TensorFlowを用いる際の項を下記のように定義する。

Switch Transformer論文 Section.$5$より

Mesh-TensorFlowの活用②:Pathways・PaLM

デノイジングスコアマッチング(DSM; Denoising Score Matching)

スコアを用いる生成モデルであるスコアベースモデル(SBM; Score Based Model)ではスコアの学習にあたってスコアマッチング(Score Matching)を行います。当記事ではデノイジングスコアマッチング(DSM; Denoising Score Matching)について取りまとめを行いました。
「拡散モデル ーデータ生成技術の数理(岩波書店)」の$1$章の「生成モデル」を参考に作成を行いました。

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

前提知識

多次元正規分布

多次元正規分布の直感的な理解については下記で取り扱った。

多次元正規分布・ベイズの定理・周辺確率

$$
\large
\begin{align}
p(\mathbf{x}) &= \mathcal{N}(\mathbf{x}|\mathbf{\mu},\mathbf{\Lambda}^{-1}) \\
p(\mathbf{y}|\mathbf{x}) &= \mathcal{N}(\mathbf{y}|\mathbf{A}\mathbf{x}+\mathbf{b},\mathbf{L}^{-1})
\end{align}
$$

上記のような確率分布$p(\mathbf{x})$と条件付き確率分布$p(\mathbf{y}|\mathbf{x})$を定義するとき、周辺分布$p(\mathbf{y})$は下記のように得られる。
$$
\large
\begin{align}
p(\mathbf{y}) = \mathcal{N}(\mathbf{x}|\mathbf{A}\mathbf{\mu} + \mathbf{b},\mathbf{L}^{-1}+\mathbf{A}\mathbf{\Lambda}^{-1}\mathbf{A}^{\mathrm{T}}) \quad (1.1)
\end{align}
$$

上記の詳しい導出は下記で取り扱った。

デノイジングスコアマッチング(DSM)

摂動後分布

サンプルに対応するベクトル$\mathbf{x}$に正規分布からのノイズベクトル$\epsilon \sim \mathcal{N}(\mathbf{0},\sigma^{2}I)$を加えた変数$\tilde{\mathbf{x}}$を下記のように定義する。
$$
\large
\begin{align}
\tilde{\mathbf{x}} = \mathbf{x} + \epsilon, \quad \epsilon \sim \mathcal{N}(\mathbf{0}, \sigma^{2}I) \quad (2.1)
\end{align}
$$

上記のノイズベクトル$\epsilon$を摂動、$\sigma$をノイズのスケールという。ここで条件付き確率$p_{\sigma}(\tilde{\mathbf{x}}|\mathbf{x})$を下記のように定義する。
$$
\large
\begin{align}
p_{\sigma}(\tilde{\mathbf{x}}|\mathbf{x}) = \mathcal{N}(\tilde{\mathbf{x}};\mathbf{x},\sigma^{2}I) = \frac{1}{(2 \pi \sigma^{2})^{d/2}} \exp{ \left[ -\frac{1}{2 \sigma^{2}}||\tilde{\mathbf{x}}-\mathbf{x}||^{2} \right] } \quad (2.2)
\end{align}
$$

さらに摂動後分布$p_{\sigma}(\bar{\mathbf{x}}$を周辺分布の式に基づいて下記のように定義する。
$$
\large
\begin{align}
p_{\sigma}(\tilde{\mathbf{x}}) = \int_{\mathbf{x} \in \mathbb{R}^{d}} p_{\sigma}(\tilde{\mathbf{x}}|\mathbf{x}) p(\mathbf{x}) d \mathbf{x}
\end{align}
$$

上記の摂動後分布$p_{\sigma}(\tilde{\mathbf{x}})$は元の分布$p(\mathbf{x})$をぼかした分布になる。直感的には画像に平均フィルタを適用してぼかすのと同様に理解するとわかりやすい。

摂動後分布の解釈:$p(\mathbf{x})$が正規分布の場合

前項の解釈にあたって、$p(\mathbf{x})=\mathcal{N}(\mu,\Sigma)$を仮定する。このとき$(1.1)$式を用いて摂動後分布$p_{\sigma}(\tilde{\mathbf{x}})$は下記のように得られる。
$$
\large
\begin{align}
p_{\sigma}(\tilde{\mathbf{x}}) = \mathcal{N}(\mathbf{x}|\mu,\sigma^{2}I+\Sigma)
\end{align}
$$

上記より摂動後分布$p_{\sigma}(\tilde{\mathbf{x}})$は元の分布$p(\mathbf{x})$をぼかした分布であることが確認できる。

DSMの目的関数

デノイジングスコアマッチング(DSM; Denoising Score Matching)では下記のように定義する目的関数$J_{DSM_{p_{\sigma}}}(\theta)$を用いて学習を行う。
$$
\large
\begin{align}
J_{DSM_{p_{\sigma}}}(\theta) = \frac{1}{2} \mathbb{E}_{p_{\sigma}(\tilde{\mathbf{x}}|\mathbf{x}) p(\mathbf{x})} \left[ || \nabla_{\tilde{\mathbf{x}}} \log{p_{\sigma}(\tilde{\mathbf{x}}|\mathbf{x})} – s_{\theta}(\tilde{\mathbf{x}},\sigma)||^{2} \right] \quad (2.3)
\end{align}
$$

ここで$(2.2)$式より、$\nabla_{\tilde{\mathbf{x}}} \log{p_{\sigma}(\tilde{\mathbf{x}}|\mathbf{x})}$は下記のように計算できる。
$$
\large
\begin{align}
\nabla_{\tilde{\mathbf{x}}} \log{p_{\sigma}(\tilde{\mathbf{x}}|\mathbf{x})} &= \nabla_{\tilde{\mathbf{x}}} \log{ \left( \frac{1}{(2 \pi \sigma^{2})^{d/2}} \exp{ \left[ -\frac{1}{2 \sigma^{2}}||\tilde{\mathbf{x}}-\mathbf{x}||^{2} \right] } \right) } \\
&= \nabla_{\tilde{\mathbf{x}}} \left( \log{ \frac{1}{(2 \pi \sigma^{2})^{d/2}} } – \nabla_{\tilde{\mathbf{x}}} \left[ \frac{1}{2 \sigma^{2}}||\tilde{\mathbf{x}}-\mathbf{x}||^{2} \right] \right) \\
&= 0 – \frac{1}{\sigma^{2}} (\tilde{\mathbf{x}}-\mathbf{x}) = -\frac{1}{\sigma^{2}} \epsilon \quad (2.4)
\end{align}
$$

$(2.1), \, (2.4)$式などを元に、$(2.3)$式は下記のように書き換えることができる。
$$
\large
\begin{align}
J_{DSM_{p_{\sigma}}}(\theta) = \frac{1}{2} \mathbb{E}_{\epsilon \sim \mathcal{N}(\mathbf{0},\sigma^{2}I), \, \mathbf{x} \sim p(\mathbf{x})} \left[ \left|\middle| -\frac{1}{\sigma^{2}} – s_{\theta}(\tilde{\mathbf{x}},\sigma) \middle|\right|^{2} \right] \quad (2.5)
\end{align}
$$

上記のように定義した$J_{DSM_{p_{\sigma}}}(\theta)$について下記が成立する。
$$
\large
\begin{align}
J_{ESM_{p_{\sigma}}}(\theta) = J_{DSM_{p_{\sigma}}}(\theta) + C \quad (2.6)
\end{align}
$$

$(2.6)$式の導出は当記事では省略しますが、「拡散モデル ーデータ生成技術の数理(岩波書店)」が詳しいので下記を参照ください。

スコアベースモデルと暗黙的スコアマッチング(Implicit Score Matching)

スコアを用いる生成モデルであるスコアベースモデル(SBM)ではスコアの学習にあたってスコアマッチング(Score Matching)を行います。当記事ではシンプルなスコアマッチングの手法である明示的スコアマッチングと暗黙的スコアマッチングについて取りまとめを行いました。
「拡散モデル ーデータ生成技術の数理(岩波書店)」の$1$章の「生成モデル」を参考に作成を行いました。

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

概要

スコアベースモデル(SBM)

確率分布のスコアが得られるとき、ランジュバン・モンテカルロ法(Langevin Monte Carlo)法を用いることで確率分布からのサンプリングを行うことができる。

このように学習した確率分布のスコアを用いて実現される生成モデルをスコアベースモデル(SBM; Score Based Model)という。よって、SBMを用いるにあたってはスコアの値を得る必要があり、このスコアを得るプロセスをスコアマッチング(Score Matching)という。

明示的スコアマッチング

明示的スコアマッチング(ESM; Explicit Score Matching)はスコアマッチングの手法の一つである。ニューラルネットワークのようなパラメータ$\theta$に基づくスコア関数を$s_{\theta}(\mathbf{x}):\mathbb{R}^{d} \longrightarrow \mathbb{R}^{d}$で近似を行うにあたって、明示的スコアマッチングでは下記のように目的関数の$J_{ESM_{p}}(\theta)$を目標分布$p(\mathbf{x})$の期待値の形式で定義する。
$$
\large
\begin{align}
J_{ESM_{p}}(\theta) = \frac{1}{2} \mathbb{E}_{p(\mathbf{x})} \left[ || \nabla_{\mathbf{x}} \log{p(\mathbf{x})} – s_{\theta}(\mathbf{x}) ||^{2} \right] \quad (1)
\end{align}
$$

上記のように定義される$J_{ESM_{p}}(\theta)$は二乗和誤差関数の最小化と同様に解釈できる一方で、多くの生成モデルではスコアの$\nabla_{\mathbf{x}} \log{p(x)}$が未知であり、式をそのまま用いることができない。

このような場合の解決策の$1$つが暗黙的スコアマッチング(ISM; Implicit Score Matching)であり、次項で取り扱う。

暗黙的スコアマッチング

暗黙的スコアマッチング(ISM; Implicit Score Matching)ではスコア関数$s_{\theta}(\mathbf{x})$の学習にあたっての目的関数に下記を用いる。
$$
\large
\begin{align}
J_{ISM_{p}}(\theta) = \mathbb{E}_{p(\mathbf{x})} \left[ \frac{1}{2} ||s_{\theta}(\mathbf{x})||^{2} + \mathrm{tr}(\nabla_{\mathbf{x}} s_{\theta}(\mathbf{x})) \right] \quad (2)
\end{align}
$$

暗黙的スコアマッチングの式理解

数式の解釈

$$
\large
\begin{align}
J_{ISM_{p}}(\theta) = \mathbb{E}_{p(\mathbf{x})} \left[ \frac{1}{2} ||s_{\theta}(\mathbf{x})||^{2} + \mathrm{tr}(\nabla_{\mathbf{x}} s_{\theta}(\mathbf{x})) \right] \quad (2)
\end{align}
$$

$(2)$式は目標分布の$p(\mathbf{x})$を用いて期待値が定義されるが、実際の生成問題では$p(\mathbf{x})$は未知である代わりに訓練データ$D={ \mathbf{x}^{(1)}, \cdots , \mathbf{x}^{(N)} }$を元に下記のように近似する。
$$
\large
\begin{align}
J_{ISM_{p}}(\theta) \simeq \frac{1}{N} \sum_{i=1}^{N} \left[ \frac{1}{2} ||s_{\theta}(\mathbf{x}^{(i)})||^{2} + \mathrm{tr}(\nabla_{\mathbf{x}} s_{\theta}(\mathbf{x}^{(i)})) \right]
\end{align}
$$

上記の第$1$項の$\displaystyle ||s_{\theta}(\mathbf{x}^{(i)})||^{2}$は「訓練データ$\mathbf{x}^{(i)}$の位置におけるスコアの絶対値」に対応し、この値が$\mathbf{0}$になれば対数尤度が$\mathbf{x}^{(i)}$で停留点(極小値・鞍点・極大値)を持つ。

第$2$項は入力ベクトルの各成分の$2$次微分に対応し、この値が最小(負の値)であれば$1$次微分が単調減少であり、対数尤度の停留点が極大値を持つ。

$J_{ESM_{p}}(\theta) = J_{ISM_{p}}(\theta)+C_1$の導出

$(1)$式で定義した明示的スコアマッチングの目的関数$J_{ESM_{p}}(\theta)$と$(2)$式で定義した暗黙的スコアマッチングの目的関数$J_{ISM_{p}}(\theta)$間にはパラメータ$\theta$に関係ない項の$C_1$を用いて下記のような式が成立する。
$$
\large
\begin{align}
J_{ESM_{p}}(\theta) = J_{ISM_{p}}(\theta)+C_1 \quad (3)
\end{align}
$$

以下、$(3)$式の導出を行う。導出にあたっては下記の$4$つの仮定をおく。
仮定$1. \,$ $p(\mathbf{x})$が微分可能
仮定$2. \,$ $\mathbb{E}_{p(\mathbf{x})}[||\nabla_{\mathbf{x}} \log{p(\mathbf{x})}||^{2}]$が有限
仮定$3. \,$ 任意の$\theta$について$\mathbb{E}_{p(\mathbf{x})}[||s_{\theta}(\mathbf{x})]$が有限
仮定$4. \,$ $\displaystyle \lim_{||\mathbf{x}|| \to \infty} [p(\mathbf{x})s_{\theta}(\mathbf{x})]=0$

まず、$(1)$式は下記のように変形できる。
$$
\large
\begin{align}
J_{ESM_{p}}(\theta) &= \frac{1}{2} \mathbb{E}_{p(\mathbf{x})} \left[ || \nabla_{\mathbf{x}} \log{p(\mathbf{x})} – s_{\theta}(\mathbf{x}) ||^{2} \right] \quad (1) \\
&= \mathbb{E}_{p(\mathbf{x})} \left[ \frac{1}{2}||\nabla_{\mathbf{x}} \log{p(\mathbf{x})}||^{2} + \frac{1}{2}||s_{\theta}(\mathbf{x})||^{2} – \nabla_{\mathbf{x}} \log{p(\mathbf{x})}^{\mathrm{T}} s_{\theta}(\mathbf{x}) \right] \\
&= \mathbb{E}_{p(\mathbf{x})} \left[ \frac{1}{2}||s_{\theta}(\mathbf{x})||^{2} – \nabla_{\mathbf{x}} \log{p(\mathbf{x})}^{\mathrm{T}} s_{\theta}(\mathbf{x}) \right] + C_1 \quad (4)
\end{align}
$$

上記の変形にあたっては仮定$2.$を用いた。ここで$(4)$式の第$1$項は$(2)$式の第$1$項と一致するので、以下では下記の$(5)$式が成立することを示す。
$$
\large
\begin{align}
\mathbb{E}_{p(\mathbf{x})} \left[ \mathrm{tr}(\nabla_{\mathbf{x}} s_{\theta}(\mathbf{x})) \right] = -\mathbb{E}_{p(\mathbf{x})} \left[ \nabla_{\mathbf{x}} \log{p(\mathbf{x})}^{\mathrm{T}} s_{\theta}(\mathbf{x}) \right] \quad (5)
\end{align}
$$

ここで$(5)$式の右辺は下記のように変形できる。
$$
\large
\begin{align}
-\mathbb{E}_{p(\mathbf{x})} \left[ \nabla_{\mathbf{x}} \log{p(\mathbf{x})}^{\mathrm{T}} s_{\theta}(\mathbf{x}) \right] &= -\int_{\mathbf{x} \in \mathbb{R}^{d}} p(\mathbf{x}) \left[ \nabla_{\mathbf{x}} \log{p(\mathbf{x})}^{\mathrm{T}} s_{\theta}(\mathbf{x}) \right] d \mathbf{x} \\
&= -\sum_{i=1}^{d} \int_{\mathbf{x} \in \mathbb{R}^{d}} p(\mathbf{x}) \left[ (\nabla_{\mathbf{x}} \log{p(\mathbf{x})})_{i} s_{\theta}(\mathbf{x})_{i} \right] d \mathbf{x} \quad (6)
\end{align}
$$

上記の$(\nabla_{\mathbf{x}} \log{p(\mathbf{x})})_{i}$、$s_{\theta}(\mathbf{x})_{i}$はそれぞれ$(\nabla_{\mathbf{x}} \log{p(\mathbf{x})})$と$s_{\theta}(\mathbf{x})$の$i$番目の成分に一致する。$(6)$式はさらに下記のように変形できる。
$$
\large
\begin{align}
& -\mathbb{E}_{p(\mathbf{x})} \left[ \nabla_{\mathbf{x}} \log{p(\mathbf{x})}^{\mathrm{T}} s_{\theta}(\mathbf{x}) \right] \\
&= -\sum_{i=1}^{d} \int_{\mathbf{x} \in \mathbb{R}^{d}} p(\mathbf{x}) \left[ (\nabla_{\mathbf{x}} \log{p(\mathbf{x})})_{i} s_{\theta}(\mathbf{x})_{i} \right] d \mathbf{x} \quad (6) \\
&= -\sum_{i=1}^{d} \int_{\mathbf{x} \in \mathbb{R}^{d}} p(\mathbf{x}) \left[ \frac{\partial \log{p(\mathbf{x})}}{\partial x_i} s_{\theta}(\mathbf{x})_{i} \right] d \mathbf{x} \\
&= -\sum_{i=1}^{d} \int_{\mathbf{x} \in \mathbb{R}^{d}} \frac{\cancel{p(\mathbf{x})}}{\cancel{p(\mathbf{x})}} \left[ \frac{\partial p(\mathbf{x})}{\partial x_i} s_{\theta}(\mathbf{x})_{i} \right] d \mathbf{x} \\
&= -\sum_{i=1}^{d} \int_{\mathbf{x} \in \mathbb{R}^{d}} \frac{\partial p(\mathbf{x})}{\partial x_i} s_{\theta}(\mathbf{x})_{i} d \mathbf{x} \quad (7)
\end{align}
$$

同様に$(5)$式の左辺は下記のように表せる。
$$
\large
\begin{align}
\mathbb{E}_{p(\mathbf{x})} \left[ \mathrm{tr}(\nabla_{\mathbf{x}} s_{\theta}(\mathbf{x})) \right] &= \int_{\mathbf{x} \in \mathbb{R}^{d}} p(\mathbf{x}) \mathrm{tr}(\nabla_{\mathbf{x}} s_{\theta}(\mathbf{x})) d \mathbf{x} \\
&= \sum_{i=1}^{d} \int_{\mathbf{x} \in \mathbb{R}^{d}} p(\mathbf{x}) \frac{\partial s_{\theta}(\mathbf{x})_{i}}{\partial x_i} d \mathbf{x} \quad (8)
\end{align}
$$

$(7)$式と$(8)$式より、下記の$(9)$式を示せば$(3)$式が成立することが示される。
$$
\large
\begin{align}
\int_{\mathbf{x} \in \mathbb{R}^{d}} \frac{\partial p(\mathbf{x})}{\partial x_i} s_{\theta}(\mathbf{x})_{i} d \mathbf{x} = \int_{\mathbf{x} \in \mathbb{R}^{d}} p(\mathbf{x}) \frac{\partial s_{\theta}(\mathbf{x})_{i}}{\partial x_i} d \mathbf{x} \quad (9)
\end{align}
$$

$(9)$式は部分積分の公式などを活用することによって示すことができる。

$(9)$式の詳細は当記事では省略しますが、「拡散モデル ーデータ生成技術の数理(岩波書店)」が詳しいので詳しくは下記を参照ください。

スコア関数の定義とランジュバン・モンテカルロ(Langevin Monte Carlo)法

ランジュバン・モンテカルロ(Langevin Monte Carlo)法は対数尤度の勾配であるスコア(score)を用いたサンプリング手法(MCMC)です。当記事ではスコア関数の定義とランジュバン・モンテカルロ法の数式について取りまとめを行いました。
「拡散モデル ーデータ生成技術の数理(岩波書店)」の$1$章やランジュバン・モンテカルロ法の論文などを参考に作成を行いました。

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

・ランジュバン・モンテカルロ法論文

前提の確認

最尤法と対数尤度

パラメータ$\theta$に基づく同時確率密度関数が$p_{\theta}(\mathbf{x}) = P(x_1, \cdots , x_n|\theta)$のように表される時、同時確率密度関数を$\theta$に着目した関数を尤度$L(\theta) = p_{\theta}(\mathbf{x})$のように定義する。

この時、対数尤度$\log{L(\theta)}$は下記のように表される。
$$
\large
\begin{align}
\log{L(\theta)} = \log{p_{\theta}(\mathbf{x})}
\end{align}
$$

最尤法では上記の対数尤度$\log{L(\theta)}$を最大にする$\theta$を元の確率分布のパラメータの推定値であるとみなす。詳しくは下記などでも取り扱った。

・Python実装を通して学ぶ、統計モデリング入門(筆者作成)

スコア関数の定義

対数尤度$\log{L(\theta)} = \log{p_{\theta}(\mathbf{x})}$の勾配をスコア(score)という。統計学では一般的に対数尤度の$\theta$に関する勾配をスコアと定義するが、拡散モデルなどでランジュバン・モンテカルロ法を取り扱う際は入力値$\mathbf{x}$についての勾配を計算する。

入力値$\mathbf{x}$に関するスコア関数を$s(\mathbf{x})$とおくと、$s(\mathbf{x})$は下記のように定義される。
$$
\large
\begin{align}
s(\mathbf{x}) & \equiv \nabla_{\mathbf{x}} \log{p_{\theta}(\mathbf{x})}: \mathbb{R}^{d} \longrightarrow \mathbb{R}^{d} \\
\nabla_{\mathbf{x}} &= \left( \begin{array}{c} \displaystyle \frac{\partial}{\partial x_1} \\ \vdots \\ \displaystyle \frac{\partial}{\partial x_d} \end{array} \right)
\end{align}
$$

また、対数関数の微分の公式に基づいてスコア関数について下記が成立する。
$$
\large
\begin{align}
s(\mathbf{x}) = \nabla_{\mathbf{x}} \log{p_{\theta}(\mathbf{x})} = \frac{\nabla_{\mathbf{x}} p_{\theta}(\mathbf{x})}{p_{\theta}(\mathbf{x})}
\end{align}
$$

上記より、スコア関数は「勾配ベクトルを確率で割ったベクトル」であることが確認できるので、「確率の小さい領域では大きくなり、確率の小さい点では小さくなる」という特徴を持つ。ランジュバン・モンテカルロ法ではこの特徴に基づいて、確率(尤度)の大きな領域を優先的に探索できる。

MCMC法の概要

下記などで詳しく取り扱った。

・Python実装を通して学ぶ、統計モデリング入門(筆者作成)

ランジュバン・モンテカルロ法

ランジュバン・モンテカルロ法の数式

ランジュバン・モンテカルロ法では正規乱数ベクトル$\mathbf{u}_{k} \sim \mathcal{N}(\mathbf{0},\mathbf{I})$を用いてベクトル$\mathbf{x}_{k}$を下記の漸化式に基づいてサンプリングを行う。
$$
\large
\begin{align}
\mathbf{x}_{k+1} &= \mathbf{x}_{k} + \alpha \nabla_{\mathbf{x}} \log{p(\mathbf{x}_{k})} + \sqrt{2 \alpha} \mathbf{u}_{k} \\
&= \mathbf{x}_{k} + \alpha s(\mathbf{x}) + \sqrt{2 \alpha} \mathbf{u}_{k} \\
&= \mathbf{x}_{k} + \alpha \frac{\nabla_{\mathbf{x}} p_{\theta}(\mathbf{x})}{p_{\theta}(\mathbf{x})} + \sqrt{2 \alpha} \mathbf{u}_{k}
\end{align}
$$

ランジュバン・モンテカルロ法の解釈

ランジュバン・モンテカルロ法の漸化式ではスコア関数の値に基づいてベクトル$\mathbf{x}_{k}$の値をUpdateし、サンプリングを行う。

上記に基づいてランジュバン・モンテカルロ法では確率の大きな領域を中心にサンプリングを行うことができる。

『仕組みから理解するChatGPT』サポートページ【印刷版】

『直感的に理解するTransformerの仕組み』の続編である『仕組みから理解するChatGPT』の印刷版のサポートページです。主に追加コンテンツや誤植が見つかった場合の正誤表の作成、カラー画像の確認が行えるように作成を行いました。誤植につきましては見つかり次第都度追加いたしますので、お気づきの方は気軽にご指摘ください。

・サポートページ:直感的に理解するTransformerの仕組み
・仕組みから理解するChatGPT

追加コンテンツ

$(\mathrm{o.xx})$形式の式番号は『仕組みから理解するChatGPT』の式番号に対応しますのでご注意ください。

Transformer decoder

『仕組みから理解するChatGPT』ではGPT$3$に用いられるTransformer decoderの詳細は取り扱わなかったので、以下では詳しく確認を行う。

ChatGPTのベースに用いられるGPT$3$の主要な処理はTransformerに基づく一方で、Encoder-Decoder形式のTransformerではなくDecoder-onlyのTransformerが用いられる。このようなDecoder-onlyのTransformerはTransformer decoder論文の処理に基づく。

Transformer decoder論文:Section.$4.2.3$

上記に出てくる$(m^{1}, \cdots , m^{n}) \mapsto (y^{1}, \cdots , y^{\eta})$は入力の$(m^{1}, \cdots , m^{n})$を出力の$(y^{1}, \cdots , y^{\eta})$に変換するタスクを表す。このタスクをそのまま取り扱うにはオーソドックスなTransformerのようにEncoder-Decoder形式のDeepLearningを用いる必要があるので、Transformer decoderの論文では$(m^{1}, \cdots , m^{n}) \mapsto (y^{1}, \cdots , y^{\eta})$を$(w^{1}, \cdots , w^{n+\eta+1}) = (m^{1}, \cdots , m^{n}, \delta , y^{1}, \cdots , y^{\eta})$のように置き換え、下記のように定義する同時確率の最大化のタスクの最大化に基づくパラメータの学習を行う。
$$
\large
\begin{align}
p(w^{1}, \cdots , w^{n+\eta+1}) = \prod_{j=1}^{n+\eta} p(w^{j+1}|w^{1}, \cdots , w^{j})
\end{align}
$$

上記に基づいてタスクの定義を行うことで、Encoderを省略し、Decoderのみを用いた処理が可能になる。このような処理を行うことで、必要なパラメータを半分にすることができる。

Decoder onlyのTransformerについては下記でも詳しく取り扱った。

モンテカルロ法と確率分布

InstructGPTで用いる方策勾配法では勾配の期待値の近似にあたってサンプリングに基づくモンテカルロ法を用いる。モンテカルロ法による期待値の近似については$(2.27)$式で簡単に取り扱った。
$$
\large
\begin{align}
\mu = \mathbb{E}[X] \simeq \frac{1}{n} \sum_{i=1}^{n} x_i \quad (2.27)
\end{align}
$$

上記のモンテカルロ法による近似計算は『仕組みから理解するChatGPT』では下記のようにサンプリングを行った結果に基づいて定義した。
$$
\large
\begin{align}
x_1, x_2, \cdots , x_n \sim \mathcal{N}(\mu, \sigma^{2}), \quad \mathrm{i.i.d.}
\end{align}
$$

ここで注意が必要なのが、「期待値計算で用いられる確率分布とサンプリングに用いる確率分布が一致する必要がある」ということである。$(2.27)$式の期待値$\mathbb{E}[X]$は正規分布$\mathcal{N}(\mu, \sigma^{2})$の確率密度関数$f(x)$を用いて下記のように定義される。
$$
\large
\begin{align}
\mathbb{E}[X] = \int_{-\infty}^{\infty} x f(x) dx \quad (1)
\end{align}
$$

上記の$(1)$式に用いる確率密度関数$f(x)$と$(2.27)$式に用いるサンプルの$x_1, x_2, \cdots , x_n$は同一の確率分布$\mathcal{N}(\mu, \sigma^{2})$に対応する。

「期待値計算で用いられる確率分布とサンプリングに用いる確率分布が一致する必要がある」ことを逆に考えると、「モンテカルロ法に基づく近似を行うにあたってはサンプリングを行う確率分布に基づく期待値の式を得る必要がある」と解釈できる。$3$-$2$-$3$節の「方策勾配法における勾配の計算」や$5$-$2$-$3$節の「Reinforcement learning」でLog-Derivative Trickを逆に用いて期待値の式を得るのは「サンプリングを行う分布の期待値の式を得ることでモンテカルロ法による近似を行う」というのが主な狙いである。

ここまでは「サンプリングに用いる確率分布」と「期待値の定義式に出てくる確率関数・確率密度関数に対応する確率分布」が一致する場合を確認したが、一致しない場合に用いられるのが重点サンプリング(Importance Sampling)である。重点サンプリングでは下記のような式が出てくる。
$$
\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}
$$

重点サンプリングは上記の式変形に基づいて「特定の確率分布の期待値を別の確率分布からサンプリングした値に基づいて計算する手法」である。式変形の解釈については詳しくは下記で取りまとめたので当項では省略する。

InstructGPTでは重点サンプリングは出てこないが、TRPOやPPOの論文では重点サンプリングが出てくる。たとえば『仕組みから理解するChatGPT』の$(3.28)$式には重点サンプリングの式が用いられる。
$$
\large
\begin{align}
L^{KLPEN}(\theta) = \mathbb{E}_{t} \left[ \frac{\pi_{\theta}(a_t|s_t)}{\pi_{\theta_{\mathrm{old}}}(a_t|s_t)} A_t – \mathrm{KL_term} \right] \quad (3.28)
\end{align}
$$

上記に出てくる$\displaystyle \frac{\pi_{\theta}(a_t|s_t)}{\pi_{\theta_{\mathrm{old}}}(a_t|s_t)}$は重点サンプリングに基づいて用いられる。「InstructGPTでは重点サンプリングが出てこないのに対してPPOでは重点サンプリングが用いられる」のは、InstructGPTでは$\pi_{\phi}^{RL}$を用いてサンプリングを行っているのに対し、PPOでは$\pi_{\theta_{\mathrm{old}}}$を用いてサンプリングを行うからである。

InstructGPTの強化学習における目的関数の式をPPOの式の形式を元に解釈するにあたっては、当項で取り扱ったように「サンプリングをどの確率分布に基づいて行ったか」の視点が重要である。

a per-token KL penaltyの勾配

$$
\large
\begin{align}
\mathbb{E}_{(x,y) \sim D_{\pi_{\phi}^{RL}}} \left[ \log{ \frac{\pi_{\phi}^{RL}(y_i|x,\mathbf{y}_{:i})}{\pi_{\phi}^{SFT}(y_i|x,\mathbf{y}_{:i})} } \right] = \sum_{y_i \in \mathcal{Y}} \pi_{\phi}^{RL}(y_i|x,\mathbf{y}_{:i}) \log{ \frac{\pi_{\phi}^{RL}(y_i|x,\mathbf{y}_{:i})}{\pi_{\phi}^{SFT}(y_i|x,\mathbf{y}_{:i})} } \quad (5.12)’
\end{align}
$$

上記は概ね参照元の$(5.12)$式に対応するが、$\displaystyle \sum$がわかりやすくなるように出力層に対応する語彙の集合$\mathcal{Y}$を用いて$\displaystyle \sum_{y_i \in \mathcal{Y}}$のように表した。

この$\displaystyle \sum_{y_i \in \mathcal{Y}}$の中の項の$\phi$に関する勾配は下記のように得られる。
$$
\begin{align}
\nabla_{\phi} \left[ \pi_{\phi}^{RL}(y_i|x,\mathbf{y}_{:i}) \log{ \frac{\pi_{\phi}^{RL}(y_i|x,\mathbf{y}_{:i})}{\pi_{\phi}^{SFT}(y_i|x,\mathbf{y}_{:i})} } \right] = \nabla_{\phi} \pi_{\phi}^{RL}(y_i|x,\mathbf{y}_{:i}) \left[ 1 + \log{ \frac{\pi_{\phi}^{RL}(y_i|x,\mathbf{y}_{:i})}{\pi_{\phi}^{SFT}(y_i|x,\mathbf{y}_{:i})} } \right] \quad (5.13)
\end{align}
$$

ここで$(5.13)$式にLog-Derivative Trickを用いると、$(5.12)$式の勾配は下記のように変形できる。
$$
\large
\begin{align}
& \nabla_{\phi} \mathbb{E}_{(x,y) \sim D_{\pi_{\phi}^{RL}}} \left[ \log{ \frac{\pi_{\phi}^{RL}(y_i|x,\mathbf{y}_{:i})}{\pi_{\phi}^{SFT}(y_i|x,\mathbf{y}_{:i})} } \right] \\
&= \nabla_{\phi} \sum_{y_i \in \mathcal{Y}} \pi_{\phi}^{RL}(y_i|x,\mathbf{y}_{:i}) \log{ \frac{\pi_{\phi}^{RL}(y_i|x,\mathbf{y}_{:i})}{\pi_{\phi}^{SFT}(y_i|x,\mathbf{y}_{:i})} } \quad (5.12)’ \\
&= \sum_{y_i \in \mathcal{Y}} \nabla_{\phi} \left[ \pi_{\phi}^{RL}(y_i|x,\mathbf{y}_{:i}) \log{ \frac{\pi_{\phi}^{RL}(y_i|x,\mathbf{y}_{:i})}{\pi_{\phi}^{SFT}(y_i|x,\mathbf{y}_{:i})} } \right] \\
&= \sum_{y_i \in \mathcal{Y}} \nabla_{\phi} \pi_{\phi}^{RL}(y_i|x,\mathbf{y}_{:i}) \left[ 1 + \log{ \frac{\pi_{\phi}^{RL}(y_i|x,\mathbf{y}_{:i})}{\pi_{\phi}^{SFT}(y_i|x,\mathbf{y}_{:i})} } \right] \quad (5.13) \\
&= \sum_{y_i \in \mathcal{Y}} \pi_{\phi}^{RL}(y_i|x,\mathbf{y}_{:i}) \frac{\nabla_{\phi} \pi_{\phi}^{RL}(y_i|x,\mathbf{y}_{:i})}{\pi_{\phi}^{RL}(y_i|x,\mathbf{y}_{:i})} \left[ 1 + \log{ \frac{\pi_{\phi}^{RL}(y_i|x,\mathbf{y}_{:i})}{\pi_{\phi}^{SFT}(y_i|x,\mathbf{y}_{:i})} } \right] \\
&= \mathbb{E}_{(x,y) \sim D_{\pi_{\phi}^{RL}}} \left[ \frac{\nabla_{\phi} \pi_{\phi}^{RL}(y_i|x,\mathbf{y}_{:i})}{\pi_{\phi}^{RL}(y_i|x,\mathbf{y}_{:i})} \left( 1 + \log{ \frac{\pi_{\phi}^{RL}(y_i|x,\mathbf{y}_{:i})}{\pi_{\phi}^{SFT}(y_i|x,\mathbf{y}_{:i})} } \right) \right] \\
&= \mathbb{E}_{(x,y) \sim D_{\pi_{\phi}^{RL}}} \left[ \nabla_{\phi} \log{[\pi_{\phi}^{RL}(y_i|x,\mathbf{y}_{:i})]} \left( 1 + \log{ \frac{\pi_{\phi}^{RL}(y_i|x,\mathbf{y}_{:i})}{\pi_{\phi}^{SFT}(y_i|x,\mathbf{y}_{:i})} } \right) \right] \quad (2)
\end{align}
$$

ここでさらに$(5.10)$式を用いることで、$(5.8)$式のKL penaltyに関する項の勾配は下記のように得ることができる。
$$
\large
\begin{align}
& \nabla_{\phi} \mathbb{E}_{(x,y) \sim D_{\pi_{\phi}^{RL}}} \left[ – \beta \log{ \frac{\pi_{\phi}^{RL}(y|x)}{\pi_{\phi}^{SFT}(y|x)} } \right] = -\beta \nabla_{\phi} \mathbb{E}_{(x,y) \sim D_{\pi_{\phi}^{RL}}} \left[ \log{ \frac{\pi_{\phi}^{RL}(y|x)}{\pi_{\phi}^{SFT}(y|x)} } \right] \\
&= -\beta \nabla_{\phi} \mathbb{E}_{(x,y) \sim D_{\pi_{\phi}^{RL}}} \left[ \sum_{i=1}^{n} \log{ \frac{\pi_{\phi}^{RL}(y_i|x,\mathbf{y}_{:i})}{\pi_{\phi}^{SFT}(y_i|x,\mathbf{y}_{:i})} } \right] \quad (5.10) \\
&= -\beta \nabla_{\phi} \sum_{i=1}^{n} \mathbb{E}_{(x,y_i) \sim D_{\pi_{\phi}^{RL}}} \left[ \log{ \frac{\pi_{\phi}^{RL}(y_i|x,\mathbf{y}_{:i})}{\pi_{\phi}^{SFT}(y_i|x,\mathbf{y}_{:i})} } \right] \\
&= -\beta \nabla_{\phi} \sum_{i=1}^{n} \sum_{y_i \in \mathcal{Y}} \pi_{\phi}^{RL}(y_i|x,\mathbf{y}_{:i}) \left[ \log{ \frac{\pi_{\phi}^{RL}(y_i|x,\mathbf{y}_{:i})}{\pi_{\phi}^{SFT}(y_i|x,\mathbf{y}_{:i})} } \right] \\
&= -\beta \sum_{i=1}^{n} \sum_{y_i \in \mathcal{Y}} \nabla_{\phi} \left[ \pi_{\phi}^{RL}(y_i|x,\mathbf{y}_{:i}) \log{ \frac{\pi_{\phi}^{RL}(y_i|x,\mathbf{y}_{:i})}{\pi_{\phi}^{SFT}(y_i|x,\mathbf{y}_{:i})} } \right] \\
&= -\beta \sum_{i=1}^{n} \mathbb{E}_{(x,y_i) \sim D_{\pi_{\phi}^{RL}}} \left[ \nabla_{\phi} \log{\pi_{\phi}^{RL}(y_i|x,\mathbf{y}_{:i})} \left( 1 + \log{ \frac{\pi_{\phi}^{RL}(y_i|x,\mathbf{y}_{:i})}{\pi_{\phi}^{SFT}(y_i|x,\mathbf{y}_{:i})} } \right) \right] \quad (3)
\end{align}
$$

上記の$(3)$式がKL penaltyに関する項の勾配に対応する。

一方、「DeepLearningによって方策が計算できるのだからサンプリングを行わずに期待値の勾配を$\displaystyle \sum$で展開した式から計算できるのではないか」という見方も可能であるように一見見える。しかしながら、この計算にあたっては$y$の全パターンについて確率を計算する必要があり、$y$の構成にあたっては組合せ爆発が生じることから現実的ではない。たとえば単語が$30,000$種類かつ$y$の長さが$10$であるだけで$30,000^{10}$通りであり、サンプリングを用いる意義について理解できる。

正誤表

初版第1刷

【上級】データサイエンス 数学ストラテジスト 公式問題集 解答例まとめ Q.71〜80

「データサイエンス 数学ストラテジスト 上級」はデータサイエンスの基盤である、確率・統計、線形代数、微積分、機械学習、プログラミングなどを取り扱う資格試験です。当記事では「日本数学検定協会」作成の「公式問題集」の演習問題$71$〜$80$の解答例を取り扱いました。

・数学検定まとめ
https://www.hello-statisticians.com/math_certificate

演習問題

Q.71

「有効求人倍率=有効求人数 $\div$ 有効求職者数」なので下記のように計算できる。
$$
\large
\begin{align}
\frac{3035+537}{2356+352} &= \frac{3572}{2708} \\
&= 1.319 \cdots
\end{align}
$$

よって$(4)$が正しい。

Q.72

期待効果の和はそれぞれ下記のように計算できる。
$$
\large
\begin{align}
(1) \, 2+3+5 &= 10 \\
(2) \, 5+2+5 &= 12 \\
(3) \, 5+5+3 &= 13 \\
(4) \, 3+2+2 &= 7 \\
(5) \, 3+3+3 &= 9
\end{align}
$$

$(3)$の期待効果の和が最も大きいので$(3)$が正しい。

Q.73

下記のような計算を行うことで安全在庫を計算できる。

import numpy as np

sd = np.array([20., 12., 16.])
day = np.array([11., 15., 14.])

print(1.65*sd*np.sqrt(day))

・実行結果

[ 109.44861808   76.68507025   98.77975501]

よって$(1)$が正しい。

Q.74

需要曲線は商品の価格$q$が高くなるときに需要$q$が減少する曲線であるので、①、③、⑤は需要曲線ではない。また、需要$q$は$q>0$であるので⑥も需要曲線ではない。よって②、④が需要曲線になり得るので$(2)$が正しい。

Q.75

$$
\large
\begin{align}
\mathrm{PV} = \frac{C_1}{1+r} + \frac{C_2}{(1+r)^{2}} + \frac{C_3}{(1+r)^{3}} + \cdots + \frac{C_n}{(1+r)^{n}} + \cdots
\end{align}
$$

上記に$C_n=100, \, r=0.05$を代入すると等比数列の公式に基づいて下記のように$\mathrm{PV}$を計算できる。
$$
\large
\begin{align}
\mathrm{PV} &= \lim_{n \to \infty} \sum_{i=1}^{n} \frac{100}{(1+0.05)^{i}} \\
&= \lim_{n \to \infty} \frac{\displaystyle 100 \cdot \frac{20}{21} \left[ 1 – \left( \frac{20}{21} \right)^{n} \right]}{\displaystyle 1 – \frac{20}{21}} \\
&= 100 \cdot \frac{20}{\cancel{21}} \cdot \cancel{21} = 2000
\end{align}
$$

よって$(2)$が正しい。

Q.76

$10^{4}=10{,}000$であるので$(3)$が正しい。

Q.77

製品$X, Y, Z$の製造コストはそれぞれ下記のように計算できる。
$$
\large
\begin{align}
X &: 4.5 \times 4 + 6 \times 2 + 5 \times 3 = 45 \\
Y &: 4.5 \times 6 + 6 \times 3 + 5 \times 1 = 50 \\
Z &: 4.5 \times 2 + 6 \times 4 + 5 \times 4 = 53
\end{align}
$$

よって$(2)$が正しい。

Q.78

$p=1000, p’=800, q=7000, q’=10000$なので需要の価格弾力性は下記のように計算できる。
$$
\large
\begin{align}
-\frac{p}{q} \cdot \frac{q’-q}{p’-p} &= -\frac{1000}{7000} \cdot \frac{10000-7000}{800-1000} \\
&= \frac{1}{7} \cdot 15 = 2.14 \cdots
\end{align}
$$

上記より$(3)$が正しい。

Q.79

価格が$p$のときの利益を$f(p)$とおくと、$f(p)$は下記のように表せる。
$$
\large
\begin{align}
f(p) &= (p-400)(600-0.5p) \\
&= -0.5(p-400)(p-1200)
\end{align}
$$

上記は上に凸の二次関数であるので$x=800$のとき下記のような最大値$f(800)$を取る。
$$
\large
\begin{align}
f(800) &= -0.5 \cdot 400 \cdot -400 \\
&= 80000
\end{align}
$$

よって$(3)$が正しい。

Q.80

$U(x)=\log{x}$であるので、$U'(x), U^{”}(x)$は下記のように得られる。
$$
\large
\begin{align}
U'(x) &= \frac{1}{x} \\
U^{”}(x) &= -\frac{1}{x^2}
\end{align}
$$

よって絶対的リスク回避係数$a(x)$と相対的リスク回避係数$\mu(x)$はそれぞれ下記のように計算できる。
$$
\large
\begin{align}
a(x) &= -\frac{U^{”}(x)}{U'(x)} = \frac{1}{x} \\
\mu(x) &= -\frac{xU^{”}(x)}{U'(x)} = 1
\end{align}
$$

よって$(1)$が正しい。

「一様分布」と「Softmax関数による確率化」間のKLダイバージェンスの計算

確率分布の類似度を計算するにあたってKLダイバージェンスが用いられることが多いですが、式の解釈は抽象的で理解が難しいです。当記事ではKLダイバージェンスの概略が把握できるように通常の確率化とSoftmax関数による確率化を題材に一様分布とのKLダイバージェンスの計算を行いました。
「パターン認識と機械学習」の$1.6$節の「Information Theory」などを主に参考に作成を行いました。

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

前提の確認

KLダイバージェンスの式定義

確率変数の取り得る値の集合を$X$とおくと、離散型確率分布$p(x), q(x)$のKLダイバージェンスは下記のような式で定義される。
$$
\large
\begin{align}
KL(p||q) = \sum_{x \in X} p(x) \log{ \left[ \frac{p(x)}{q(x)} \right] }
\end{align}
$$

上記で定義されたKLダイバージェンスはイェンセンの定理に基づいて$KL(p||q) \geq 0$が成立する。

ソフトマックス関数

$\mathbf{a} = (a_1, \cdots , a_K)$が与えられたとき、ソフトマックス関数$\mathrm{Softmax}(a_k)$は下記のように定義できる。
$$
\large
\begin{align}
\mathrm{Softmax}(a_k) = \frac{\exp{(a_k)}}{\displaystyle \sum_{j=1}^{K} \exp{(a_j)}}
\end{align}
$$

上記の定義より、ソフトマックス関数について下記の式が成立する。
$$
\large
\begin{align}
\mathrm{Softmax}(a_k) & \geq 0 \\
\sum_{j=1}^{K} \mathrm{Softmax}(a_j) &= 1
\end{align}
$$

KLダイバージェンスの計算

以下、$\mathbf{a} = (2, 7, 6)$が得られた際に「割り算による確率化」と「ソフトマックス関数による確率化」を行い、それぞれ一様分布とのKLダイバージェンスの計算を行う。まず下記のようなプログラムを実行することで$\mathbf{a} = (2, 7, 6)$の確率化を行うことができる。

import numpy as np

a = np.array([2., 7., 6.])

p_1 = a/np.sum(a)
p_2 = np.exp(a)/np.sum(np.exp(a))

print(p_1)
print(p_2)

・実行結果

[ 0.13333333  0.46666667  0.4       ]
[ 0.00490169  0.72747516  0.26762315]

計算結果を確認すると、ソフトマックス関数の結果が[ 0.00490169 0.72747516 0.26762315]であり、「緩やかなmax関数」のように解釈することができる。次に一様分布とのKLダイバージェンスは下記のようなプログラムを実行することで計算できる。

p_u = np.ones(3)/3.

KL_1 = np.sum(p_1 * np.log(p_1/p_u))
KL_2 = np.sum(p_2 * np.log(p_2/p_u))

print(KL_1)
print(KL_2)

・実行結果

0.155489202361
0.704475577074

上記より、ソフトマックス関数を適用することで一様分布とのKLダイバージェンスが大きくなることが確認できる。