ブログ

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

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

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

演習問題

Q.41

$CBAx$を計算するにあたって、$C$が$4$行$2$列、$A$が$3$行$3$列の行列であるので、$B$は$2$行$3$列の行列でなければならない。よって$(2)$が正しい。

Q.42

$$
\large
\begin{align}
\frac{1}{N} \sum_{i=1}^{N} (y_{i} – \hat{y}_{i})^{2}
\end{align}
$$

$\displaystyle \sum$の定義に基づいて、上記の式は下記のように表すことができる。
$$
\large
\begin{align}
\frac{1}{N} \sum_{i=1}^{N} (y_{i} – \hat{y}_{i})^{2} = \frac{(y_{1} – \hat{y}_{1})^{2} + \cdots (y_{N} – \hat{y}_{N})^{2}}{N}
\end{align}
$$

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

Q.43

$$
\large
\begin{align}
f(x) = \frac{1}{1 + \exp{[-(a+bx)]}}
\end{align}
$$

$a=-2, b=0.1$を代入すると、$f(x)$は下記のように表せる。
$$
\large
\begin{align}
f(x) = \frac{1}{1 + \exp{[-(0.1x-2)]}}
\end{align}
$$

ここで$x=20$のとき$\exp{[-(0.1x-2)]} = e^{0} = 1$より、$f(20)=0.5$が成立する。また、$x \to -\infty$のとき$f(x) \to 0$、$x \to \infty$のとき$f(x) \to 1$が成立する。よって$(2)$が正しい。

・解説
$\displaystyle g(y) = \frac{1}{1 + \exp{(-y)}}$がシグモイド関数に着目すると、シグモイド関数のグラフの形状より$(2)$を選ぶことができます。解答例では検算も兼ねて計算によってグラフの選択を行いました。

Q.44

$(A)$の値を$n_A$とおくと、再現率$p_{r}$、適合率$p_{pre}$はそれぞれ下記のように計算できる。
$$
\large
\begin{align}
p_{r} &= \frac{1236}{1384} \\
p_{pre} &= \frac{1236}{1236 + n_A}
\end{align}
$$

ここで$F$値を$F$とおくと、$F^{-1}$は下記のように表すことができる。
$$
\large
\begin{align}
F^{-1} &= \frac{1}{2} \left( \frac{1}{p_{r}} + \frac{1}{p_{pre}} \right) \\
&= \frac{1}{2} \left( \frac{1384}{1236} + \frac{1236+n_A}{1236} \right) \\
&= \frac{2620 + n_A}{2 \cdot 1236}
\end{align}
$$

ここで$F \geq 0.8$が成立するとき、$n_A$の範囲は下記のように得られる。
$$
\large
\begin{align}
F & \geq 0.8 \\
\left( \frac{2620 + n_A}{2 \cdot 1236} \right)^{-1} & \geq 0.8 \\
\frac{2 \cdot 1236}{2620 + n_A} & \geq 0.8 \\
2 \cdot 1236 & \geq 0.8(2620 + n_A) \\
0.8 n_A & \leq 2 \cdot 1236 – 0.8 \cdot 2620 \\
n_A & \leq \frac{2 \cdot 1236 \cdot 10}{8} – 2620 \\
n_A & \leq 470
\end{align}
$$

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

Q.45

BとD、AとCの順にクラスタの作成が行われるので$(5)$が正しい。

Q.46

$f(x,y)=\log{(x^{2}+2y^{2})}$の点$(4,3)$における勾配ベクトル$\displaystyle \nabla f(x,y) |_{x=4,y=3}$は下記のように計算できる。
$$
\large
\begin{align}
\nabla f(x,y) |_{x=4,y=3} &= \left( \begin{array}{c} \displaystyle \frac{\partial f(x,y)}{\partial x} \\ \displaystyle \frac{\partial f(x,y)}{\partial y} \end{array} \middle) \right|_{x=4,y=3} \\
&= \left( \begin{array}{c} \displaystyle \frac{2x}{x^{2}+2y^{2}} \\ \displaystyle \frac{4y}{x^{2}+2y^{2}} \end{array} \middle) \right|_{x=4,y=3} \\
&= \frac{1}{16+18} \left( \begin{array}{c} 8 \\ 12 \end{array} \right) = \left( \begin{array}{c} \displaystyle \frac{4}{17} \\ \displaystyle \frac{6}{17} \end{array} \right)
\end{align}
$$

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

Q.47

それぞれの式の定義より$(4)$が正しい。

Q.48

左上に重ねて計算した際に$(4)$の計算結果のみ$-3$が得られる。よって$(4)$が正しい。

Q.49

$(5)$が正しい。

Q.50

単語の出現回数はそれぞれ下記のような表で表される。

単語 文書A 文書B 文書C
people $3$ $1$ $0$
of $1$ $2$ $0$
you $0$ $0$ $2$
by $1$ $0$ $0$
this $0$ $0$ $0$
all $10$ $13$ $9$

$2$つの文書で出現する場合、IDFの値が$\displaystyle \log_{2}{\frac{3}{2+1}}=0$となる。よって、$1$つの文書にしか出現しないかつTFの値が$\displaystyle \frac{2}{9}$である$(3)$が正しい。

【GPT-3】Language Models are Few-Shot Learners まとめ

GPT-$3$はTransformerに基づくLLMの$1$つであり、近年大きな注目を集めるChatGPTなど、幅広く用いられます。当記事ではGPT-$3$の論文である、Language Models are Few-Shot Learnersの取りまとめを行いました。

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

・GPT-$3$

前提の確認

Transformer

下記で詳しく取り扱った。
・直感的に理解するTransformer

Transformer Decoder

オリジナルのTransformerではEncoder Decoderに基づいて構成されるが、GPT-$3$ではTransformerのDecoderのみを用いる。この構成の元になったのがTransformer Decoderの論文である。

GPT論文のFigure$1$:左の図がDecoderに基づくアーキテクチャである

Pre-training

GPT、GPT-$2$、GPT-$3$ではトークン列$x_0, \cdots x_n$が得られたとき、下記のように定義する対数尤度を元に教師なし事前学習(Unsupervised Pre-Training)を行う。
$$
\large
\begin{align}
\log{L(\Theta)} &= \log{ P(x_0|\Theta) \prod_{i=1}^{n} P(x_i|\mathbf{x}_{:(i-1)},\Theta) } \\
&= \log{P(x_0|\Theta)} + \sum_{i=1}^{n} \log{P(x_i|\mathbf{x}_{:(i-1)},\Theta)} \\
\mathbf{x}_{:0} &= (x_0), \quad \mathbf{x}_{:(i-1)} = (x_0, \cdots , x_{i-1}), \, i \geq 1
\end{align}
$$

上記の対数尤度の最大化は教師なし学習であり単にテキストがあれば良いので、Wikipediaのような巨大なコーパスを用いて学習を行うことができる。

ここではGPT論文(Improving Language Understanding by Generative Pre-Training)に基づいて数式を定義したが、BERTの事前学習であるMLM(Masked Lauguage Model)と基本的には同様なカテゴリで理解しておくと良い。

GPT-$3$

Fine-Tuning

Pre-trainingによって得られた学習済みモデルのパラメータ(weights)を特定のタスクの教師ありデータセットに基づいて追加学習を行う一連のプロセスをFine-Tuningという。

Fine-TuningはDeepLearningの多くの分野で広く用いられているテクニックである一方で、GPT-$3$ではFine-Tuningを用いる代わりに次項で取り扱うZero-Shot・One-Shot・Few-Shotを元に追加学習を行う。

Zero-Shot・One-Shot・Few-Shot

GPT-$3$論文 Figure $2.1$

ここで”Shot”は推論の際に入力する”Example”に相当し、Zero-Shotはタスクのみ、One-Shotはタスク+$1$例、Few-Shotはタスク+数例の入力にそれぞれ対応する。具体的には下記のような入力と出力が対応するように学習を行う。

GPT-$3$論文 Figure $G.1$ ~Formatted dataset example for RACE-h~

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

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

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

演習問題

Q.61

製品ABCDEFG
重量(g)$150$$170$$180$$200$$200$$240$$250$
電源容量(mAh) $3000$ $4000$ $5000$ $7000$ $8000$ $8000$$9000$

「電源容量 $\div$ 重量」は下記のように計算できる。

製品ABCDEFG
電源容量 $\div$ 重量 $20$ $23.5$ $27.8$ $35$ $40$ $33.3$ $36$

上記が大きい順にD、E、F、Gを選ぶと合計は$32000$であり、$(4)$か$(5)$に絞られる。ここでFをB、Cに入れ替えたB、C、D、E、Gも$1$kg以下であり、この合計は$33000$である。よって、$(5)$が正しい。

Q.62

①〜⑥の処理手順は下記のプログラムに対応する。

a = 1

for i in range(1,5):
    a = 3*a+4

print(a)

・実行結果

241

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

・解説
for文でなくwhile文を用いるのが厳密には正しい一方で、while文は基本的にfor文で代用できるのでここではfor文を用いました。

Q.63

各基数について下記のような計算を行うことで用意するマークの数を計算することができる。

import numpy as np

n = np.array([2, 3, 4, 8, 16])

for i in n:
    num_mark = 0
    y, m, d = 0, 0, 0
    count = 0
    while y < 2099:
        count += 1
        y = i**count - 1
    num_mark += (i*(count-1) + 2099//i**(count-1) + 1)
    count = 0
    while m < 12:
        count += 1
        m = i**count - 1
    if i<12:
        num_mark += (i*(count-1) + 12//i**(count-1) + 1)
    else:
        num_mark += (i*(count-1) + 12//i**(count-1))
    count = 0
    while d < 31:
        count += 1
        d = i**count - 1
    num_mark += (i*(count-1) + 31//i**(count-1) + 1)
    print("n: {}, mark: {}".format(i, num_mark))

・実行結果

n: 2, mark: 42
n: 3, mark: 40
n: 4, mark: 41
n: 8, mark: 51
n: 16, mark: 71

実行結果より基数が$3$のときマークの数が最小になるので$(2)$が正しい。

・解説
基数が$16$の場合、月の$12$を上回りますが、このときだけ処理を変える必要があることに注意しておくと良いです。

Q.64

$n \to \infty$のとき$n \log{n} << n^{2}$なので$(2)$が正しい。

Q.65

$1$$0$$0$$1$$\mathbf{1}$$1$$0$$0$
$0$$1$$0$$0$$\mathbf{1}$$0$$1$$1$
$1$$1$$0$$0$$\mathbf{1}$$0$$0$$1$
$\mathbf{1}$$\mathbf{0}$$\mathbf{0}$$\mathbf{1}$$\mathbf{1}$$\mathbf{0}$$\mathbf{1}$$\mathbf{1}$
$1$$1$$0$$0$$\mathbf{1}$$0$$1$$0$
$0$$0$$1$$0$$\mathbf{0}$$0$$1$$0$
$0$$1$$0$$1$$\mathbf{1}$$0$$0$$1$
$0$$0$$1$$1$$\mathbf{1}$$1$$0$$0$

上記より$4$行目と$5$列目の和が奇数であることが確認できるので$(3)$が正しい。

Q.66

$n=16$の場合:$1,3,5,7,9,11,13,15,2,6,10,14,4,12,8,16$
$n=30$の場合:$1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,2,6,10,14,18,22,26,30,8,16,24,4,20,12,28$

上記より$(4)$の組み合わせが正しい。

Q.67

逆ポーランド記法の仕組みより$(3)$が正しい。

Q.68

$a$と$\sqrt{a^{2}-4b}$の差の$a-\sqrt{a^{2}-4b}$はそれぞれの値について下記のような計算で得られる。

import numpy as np

a = np.array([2., 1.00001, 1.1, -1., -1.00001])
b = np.array([1., 0.00001, -1.1, -2., -1.00001])

print(a-np.sqrt(a**2-4*b))

・実行結果

[  2.00000000e+00   2.00000000e-05  -1.26854386e+00  -4.00000000e+00
  -3.23609139e+00]

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

Q.69

下記のような計算によって結果を得ることができる。

import numpy as np

n_st = np.array([500., 300., 200., 100.])

for i in [100, 125, 150, 175, 200]:
    n_candi = np.ceil(n_st/i)
    print("i: {}, n_sum: {}, n_candi: {}".format(i, np.sum(n_candi), n_candi))

・実行結果

i: 100, n_sum: 11.0, n_candi: [ 5.  3.  2.  1.]
i: 125, n_sum: 10.0, n_candi: [ 4.  3.  2.  1.]
i: 150, n_sum: 9.0, n_candi: [ 4.  2.  2.  1.]
i: 175, n_sum: 8.0, n_candi: [ 3.  2.  2.  1.]
i: 200, n_sum: 7.0, n_candi: [ 3.  2.  1.  1.]

上記より$175$で割ったときの結果を考えればよく、$(4)$が正しいことが確認できる。

Q.70

$$
\large
\begin{align}
c_1 &= x_1 + x_2 + x_3 \, (\mathrm{mod} \, 2) \\
c_2 &= x_1 + x_2 + x_4 \, (\mathrm{mod} \, 2) \\
c_3 &= x_1 + x_3 + x_4 \, (\mathrm{mod} \, 2)
\end{align}
$$

$x_1=1, x_2=1, x_3=0, x_4=1$の場合、$c_1=0, c_2=1, c_3=0$が得られる。

ここで実際は$c_1=1, c_2=0, c_3=0$であるが、$x_2$を$0$に変えたときのみ$c_1=1, c_2=0, c_3=0$に一致する。よって、$(2)$の$1001100$が正しい。

【softmax関数】ガンベル最大トリック(Gumbel-max trick)を用いたサンプリング

ソフトマックス関数に基づく確率分布に基づいてサンプリングを行うにあたって、$\exp(x)$がオーバーフローを起こす場合があります。当記事ではこのような際に有用なガンベル最大トリック(Gumbel-max trick)の仕組みとPythonプログラムの作成を取り扱いました。
当記事の作成にあたっては「深層学習による自然言語処理」の$7.3.2$項の「ガンベル最大トリック」を参考にしました。

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

ガンベル最大トリックのアルゴリズム

ガンベル分布

位置パラメータ$0$、尺度パラメータ$1$のガンベル分布の累積分布関数を$F(x)$、確率密度関数を$f(x)$とおくと、それぞれ下記のように表すことができる。
$$
\large
\begin{align}
F(x) &= \exp{[-\exp{(-x)}]} \\
f(x) &= \frac{d}{dx}F(x) = \exp{[-\exp{(-x)}]} \times -\exp{(-x)} \times (-1) \\
&= \exp{(-x)} \exp{[-\exp{(-x)}]} = \exp{(-x)} F(x)
\end{align}
$$

累積分布関数$F(x)$のグラフは下記のように描くことができる。

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

sns.set_theme()

x = np.arange(-5., 5.01, 0.01)
F_x = np.exp(-np.exp(-x))

plt.plot(x, F_x)
plt.show()

・実行結果

また、下記のように$F(x)$の$x \to -\infty, \, x \to \infty$の極限や、$F(0)$の値を計算することもできる。
$$
\large
\begin{align}
\lim_{x \to -\infty} F(x) &= \lim_{x \to -\infty} \exp{[-\exp{(-x)}]} \\
&= \lim_{s \to \infty} \exp{[-s]} = 0 \\
F(0) &= \exp{[-\exp{(0)}]} \\
&= \exp{(-1)} = \frac{1}{e} = 0.367879 \cdots \\
\lim_{x \to \infty} F(x) &= \lim_{x \to \infty} \exp{[-\exp{(-x)}]} \\
&= \exp{(0)} = 1
\end{align}
$$

ガンベル分布と逆関数法

逆関数法は一様乱数$u \sim \mathrm{Uniform}(0,1)$を累積分布関数$F(x)$の逆関数$F^{-1}(u)$に代入することで$F(x)$に対応する分布に基づく乱数生成を行う手法である。詳しくは下記などで取り扱った。

ここで$u = F(x) = \exp{[-\exp{(-x)}]}$を$x$について解くと下記が得られる。
$$
\large
\begin{align}
u &= \exp{[-\exp{(-x)}]} \\
\log{u} &= -\exp{(-x)} \\
-\log{u} &= \exp{-x} \\
\log{(-\log{u})} &= -x \\
x &= -\log{(-\log{u})}
\end{align}
$$

上記よりガンベル分布の累積分布関数の逆関数$F^{-1}(u)$は$F^{-1}(u)=-\log{(-\log{u})}$である。よって得られた一様乱数に対し、$F^{-1}(u)=-\log{(-\log{u})}$を計算することでガンベル分布に従う乱数を得ることができる。

ガンベル最大トリックのアルゴリズム・プログラム

$$
\large
\begin{align}
p_{k} = \mathrm{softmax}(a_k) = \frac{\exp{(a_{k})}}{\displaystyle \sum_{i=1}^{N} \exp{a_{i}}}
\end{align}
$$

$a_1, \cdots a_N$が与えられた際に上記の確率$p_k$に基づいて無作為サンプリングを行う際に、$a_1, \cdots a_N$の値によっては$\exp$を計算することで値がオーバーフローを起こす場合がある。

ガンベル最大トリックは「位置パラメータ$0$、尺度パラメータ$1$のガンベル分布に基づいて得られた乱数$G_i$を元に$Z_i=a_i+G_i$とおくとき、$Z_k$が最大である確率が$p_k$に一致すること」に基づく手法である。下記のプログラムを用いることでガンベル最大トリックを用いたサンプリングを行える。

import numpy as np

np.random.seed(0)

a = np.array([3., 7., 5.])
z = np.zeros(len(a))

for n in range(10):
    for i in range(len(a)):
        u_i = np.random.rand()
        g_i = -np.log(-np.log(u_i))
        z[i] = a[i] + g_i
    k = np.argmax(z)+1
    print(k)

・実行結果

2
2
2
2
2
3
2
2
2
2

上記では$i=2$が多く得られる結果が観測された。ここで$i=1$〜$i=3$のそれぞれの確率は下記のように計算できる。

import numpy as np

a = np.array([3., 7., 5.])
p = np.exp(a)/np.sum(np.exp(a))

print(p)
[ 0.01587624  0.86681333  0.11731043]

上記より$p_1=0.01587624, \, p_2=0.86681333, \, p_3=0.11731043$であるので、サンプリング結果は概ね適切であることが確認できる。

ガンベル最大トリックの導出

$G_k=g_k$のとき$Z_k$が最大である条件付き確率

$G_k$を$G_k=g_k$で固定するとき、$Z_k=a_k+g_k$が$Z_i$より大きい確率$P(Z_i<Z_k)$は下記のように表せる。
$$
\large
\begin{align}
P(Z_i < a_k+g_k) &= P(a_i+G_i < a_k+g_k) \\
&= P(G_i < a_k-a_i+g_k) \quad (1)
\end{align}
$$

このとき$G_i$がガンベル分布に従うので$(1)$式は下記のように表せる。
$$
\large
\begin{align}
P(Z_i < Z_k) &= P(G_i < a_k-a_i+g_k) \quad (1) \\
&= F(a_k – a_i + g_k) \quad (2)
\end{align}
$$

ここで$G_i$は独立同分布($\mathrm{i.i.d.}$)に基づいてサンプリングされるので、$i \neq k$のすべての$i$について$Z_i < Z_k$が成立する確率は下記のように表せる。
$$
\large
\begin{align}
P(\max{(Z_1, \cdots , Z_N)}=Z_k|G_k=g_k) = \prod_{i \neq k} F(a_k – a_i + g_k) \quad (3)
\end{align}
$$

$G_k$に関する周辺化

以下、$(3)$式を$G_k=g_k$について周辺化を行う。
$$
\begin{align}
P(\max{(Z_1, \cdots , Z_N)}=Z_k) &= \int_{-\infty}^{\infty} P(\max{(Z_1, \cdots , Z_N)}=Z_k|G_k=g_k) P(G_k=g_k) d g_k \\
&= \int_{-\infty}^{\infty} f(g_k) \prod_{i \neq k} F(a_k-a_i+g_k) d g_k \\
&= \int_{-\infty}^{\infty} \exp{(-g_k)} F(g_k) \prod_{i \neq k} F(a_k-a_i+g_k) d g_k \\
&= \int_{-\infty}^{\infty} \exp{(-g_k)} F(a_k-a_k+g_k) \prod_{i \neq k} F(a_k-a_i+g_k) d g_k \\
&= \int_{-\infty}^{\infty} \exp{(-g_k)} \prod_{i=1}^{N} F(a_k-a_i+g_k) d g_k \\
&= \int_{-\infty}^{\infty} \exp{(-g_k)} \prod_{i=1}^{N} \exp{(-\exp{[-(a_k-a_i+g_k)]})} d g_k \\
&= \int_{-\infty}^{\infty} \exp{(-g_k)} \exp{ \left( – \sum_{i=1}^{N} \exp{[-(a_k-a_i+g_k)]} \right)} d g_k \\
&= \int_{-\infty}^{\infty} \exp{(-g_k)} \exp{ \left( – \sum_{i=1}^{N} \frac{\exp{a_i}\exp{(-g_k)}}{\exp{a_k}} \right)} d g_k \\
&= \int_{-\infty}^{\infty} \exp{(-g_k)} \exp{ \left( – \exp{(-g_k)} \frac{\sum_{i=1}^{N} \exp{a_i}}{\exp{a_k}} \right)} d g_k \\
&= \int_{-\infty}^{\infty} \exp{(-g_k)} \exp{ \left( – \frac{\exp{-g_k}}{p_k} \right)} d g_k \\
&= \int_{-\infty}^{\infty} \exp{(-x)} \exp{ \left( – \frac{\exp{-x}}{p_k} \right)} dx \\
&= \left[ p_{k} \exp{\left( -\frac{\exp{(-x)}}{p_{k}} \right)} \right]_{-\infty}^{\infty} \\
&= p_{k} \exp{(0)} = p_k
\end{align}
$$

上記より、$Z_k$が最大である確率が$p_k$に一致することが確認できる。また、積分にあたっては下記が成立することを用いた。
$$
\large
\begin{align}
\frac{d}{dx} \left[ p_{k} \exp{\left( -\frac{\exp{(-x)}}{p_{k}} \right)} \right] &= \cancel{p_{k}} \exp{\left( -\frac{\exp{(-x)}}{p_{k}} \right)} \times -\frac{\exp{(-x)}}{\cancel{p_{k}}} \times (-1) \\
&= \exp{(-x)} \exp{ \left( – \frac{\exp{-x}}{p_k} \right)}
\end{align}
$$

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

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

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

演習問題

Q.21

$$
\large
\begin{align}
AB = 8, \, BC = 5, \, \angle{ABC} = 60^{\circ}
\end{align}
$$

余弦定理より下記が成立する。
$$
\large
\begin{align}
AC^{2} &= AB^{2} + BC^{2} – 2 \cdot AB \cdot BC \cdot \cos{60^{\circ}} \\
&= 8^{2} + 5^{2} – \cancel{2} \cdot 8 \cdot 5 \cdot \frac{1}{\cancel{2}} \\
&= 64 + 25 – 40 = 49
\end{align}
$$

$AC>0$より$AC=7$である。また、外接円の半径が$R$なので正弦定理より下記が成立する。
$$
\large
\begin{align}
\frac{AC}{\sin{60^{\circ}}} &= 2R \\
R &= 7 \cdot \frac{\cancel{2}}{\sqrt{3}} \cdot \frac{1}{\cancel{2}} \\
&= \frac{7}{\sqrt{3}}
\end{align}
$$

また、$\triangle{ABC}$の面積を$S$とおくと$S$は下記のように計算できる。
$$
\large
\begin{align}
S &= \frac{1}{2} AB \cdot BC \sin{60^{\circ}} \\
&= 20 \cdot \frac{\sqrt{3}}{2} = 10 \sqrt{3}
\end{align}
$$

ここで内接円の半径$r$は下記の式に基づいて得られる。
$$
\large
\begin{align}
S &= \frac{1}{2}(AB+BC+AC)r \\
10 \sqrt{3} &= \frac{1}{2}(8+5+7)r \\
r &= \sqrt{3}
\end{align}
$$

よって$\displaystyle \frac{R}{r}$は下記のように得られる。
$$
\large
\begin{align}
\frac{R}{r} &= \frac{7}{\sqrt{3}} \cdot \frac{1}{\sqrt{3}} \\
&= \frac{7}{3}
\end{align}
$$

Q.22

$p_{n}, \, n=0,1,2,3$は下記のような式で表すことができる。
$$
\large
\begin{align}
p_{n} &= \frac{{}_{5} C_{n} \cdot {}_{10} C_{3-n}}{{}_{15} C_{3}} \quad [1]
\end{align}
$$

$[1]$式より、$p_0, p_1, p_2, p_3$は下記のように計算できる。
$$
\large
\begin{align}
p_{0} &= \frac{{}_{5} C_{0} \cdot {}_{10} C_{3}}{{}_{15} C_{3}} \\
&= \frac{10 \cdot 9 \cdot 8}{15 \cdot 14 \cdot 13} \\
&= \frac{24}{91} \\
p_{1} &= \frac{{}_{5} C_{1} \cdot {}_{10} C_{2}}{{}_{15} C_{3}} \\
&= \frac{5 \cdot 10 \cdot 9}{2} \cdot \frac{3 \cdot 2 \cdot 1}{15 \cdot 14 \cdot 13} \\
&= \frac{45}{91} \\
p_{2} &= \frac{{}_{5} C_{2} \cdot {}_{10} C_{1}}{{}_{15} C_{3}} \\
&= \frac{5 \cdot 4 \cdot 10}{2} \cdot \frac{3 \cdot 2 \cdot 1}{15 \cdot 14 \cdot 13} \\
&= \frac{20}{91} \\
p_{3} &= \frac{{}_{5} C_{3} \cdot {}_{10} C_{0}}{{}_{15} C_{3}} \\
&= \frac{5 \cdot 4 \cdot 3}{15 \cdot 14 \cdot 13} \\
&= \frac{2}{91}
\end{align}
$$

上記より$p_3 < p_2 < p_0 < p_1$であるので$(1)$が正しい。

・解説
この問題は超幾何分布の確率関数の計算と対応するので、合わせて抑えておくと良いです。

Q.23

$$
\large
\begin{align}
\sin{\alpha} &= \frac{1}{3}, \, \sin{\beta} = \frac{2}{3} \\
0 < & \alpha < \frac{\pi}{2}, \, 0 < \beta < \frac{\pi}{2}
\end{align}
$$

上記より、$0 < \cos{\alpha}, \, 0 < \cos{\beta}$であるので、$\sin^{2}{\theta}+\cos^{2}{\theta}=1$に基づいて下記が得られる。
$$
\large
\begin{align}
\sin^{2}{\alpha} + \cos^{2}{\alpha} &= 1 \\
\cos^{2}{\alpha} &= 1-\frac{1}{3^2} \\
\cos{\alpha} &= \frac{2\sqrt{2}}{3} \\
\sin^{2}{\beta} + \cos^{2}{\beta} &= 1 \\
\cos^{2}{\beta} &= 1-\frac{2^2}{3^2} \\
\cos{\beta} &= \frac{\sqrt{5}}{3}
\end{align}
$$

よって$\sin{(\alpha+\beta)}$は加法定理に基づいて下記のように得られる。
$$
\large
\begin{align}
\sin{(\alpha+\beta)} &= \sin{\alpha} \cos{\beta} + \cos{\alpha} \sin{\beta} \\
&= \frac{1}{3} \cdot \frac{\sqrt{5}}{3} + \frac{2\sqrt{2}}{3} \cdot \frac{2}{3} \\
&= \frac{4 \sqrt{2} + \sqrt{5}}{9}
\end{align}
$$

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

Q.24

$$
\large
\begin{align}
x^{\log_{10}{x}} = 1000 \sqrt{x} \quad [1]
\end{align}
$$

$[1]$式の両辺に対し、底が$10$の対数を取ると下記のように方程式を解くことができる。
$$
\large
\begin{align}
\log_{10}{x^{\log_{10}{x}}} &= \log_{10}{(1000 \sqrt{x})} \quad [1]’ \\
\log_{10}{x} \cdot \log_{10}{x} &= \frac{1}{2} \log_{10}{x} + 3 \\
2 (\log_{10}{x})^{2} – \log_{10}{x} – 6 &= 0 \\
(2 \log_{10}{x} + 3)(\log_{10}{x} – 2) &= 0 \\
\log_{10}{x} &= -\frac{3}{2}, \, 2 \\
x &= \frac{\sqrt{10}}{100}, \, 100
\end{align}
$$

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

Q.25

$a, b, c$が等比数列かつ$\displaystyle \frac{b}{a} = r$より、$b,c$は$a,r$を用いて下記のように表すことができる。
$$
\large
\begin{align}
b &= ar \\
c &= ar^2
\end{align}
$$

また、$a,b,c$の相加平均が$b+2$に等しいことから下記が成立する。
$$
\large
\begin{align}
\frac{1}{3}(a+b+c) &= b+2 \\
a + ar + ar^2 &= 3(ar+2) \\
a(1+r+r^2-3r) &= 6 \\
a(1-2r+r^2) &= 6 \\
a(r-1)^{2} &= 6 \quad [1]
\end{align}
$$

$[1]$式より$a$が正の整数で$\displaystyle \frac{b}{a} = r$が整数であることから、$a=6, (r-1)^{2}=1$が成立する。ここで$r \neq 0$より$r=2$が成立する。よって、与えられた式は下記のように計算できる。
$$
\large
\begin{align}
\frac{a^2+a-7}{a+1} + \frac{r^2+r-1}{r+3} &= \frac{6^2+6-7}{6+1} + \frac{2^2+2-1}{2+3} \\
&= 5 + 1 = 6
\end{align}
$$

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

Q.26

面積の和$S_1+S_2$は下記のように計算できる。
$$
\large
\begin{align}
S_1+S_2 &= \int_{0}^{5} -(x^2-5x) dx + \int_{5}^{6} (x^2-5x) dx \\
&= \left[ -\frac{1}{3}x^3 + \frac{5}{2}x^2 \right]_{0}^{5} + \left[ \frac{1}{3}x^3 – \frac{5}{2}x^2 \right]_{5}^{6} \\
&= 2 \left( -\frac{125}{3}+\frac{125}{2} \right) + \frac{6^3}{3} – \frac{5 \cdot 6^2}{2} \\
&= 2 \cdot \frac{125}{6} + 72 – 90 \\
&= \frac{125 – 3 \cdot 18}{3} \\
&= \frac{71}{3}
\end{align}
$$

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

Q.27

$$
\large
\begin{align}
f(x) &= ax^3 + bx^2 + cx + d \\
f'(x) &= 3ax^2 + 2bx + c
\end{align}
$$

$x=-2$のとき極大値$15$、$x=4$のとき極小値$-12$を取るには下記の必要条件が成立しなければならない。
$$
\large
\begin{align}
f'(-2) &= 12a – 4b + c = 0 \quad [1] \\
f(-2) &= -8a + 4b – 2c + d = 15 \quad [2] \\
f'(4) &= 48a + 8b + c = 0 \quad [3] \\
f(4) &= 64a + 16b + 4c + d = -12 \quad [4]
\end{align}
$$

$[2]-[1]$より下記が得られる。
$$
\large
\begin{align}
36a + 12b &= 0 \\
b &= -3a \quad [5]
\end{align}
$$

$[5]$式を$[1]$に代入することで下記が得られる。
$$
\large
\begin{align}
12a – 4 \cdot (-3a) + c &= 0 \quad [1]’ \\
c &= -24a \quad [6]
\end{align}
$$

$[4]-[2]$より下記が得られる。
$$
\large
\begin{align}
72a + 12b + 6c = -27 \quad [7]
\end{align}
$$

$[7]$式に$[5], [6]$を代入すると下記が得られる。
$$
\large
\begin{align}
72a + 12 \cdot (-3a) + 6 \cdot (-24a) &= -27 \quad [7]’ \\
-108a &= -27 \\
a &= \frac{1}{4} \quad [8]
\end{align}
$$

$[8]$を$[5], [6]$に代入することで下記が得られる。
$$
\large
\begin{align}
b &= -\frac{3}{4} \quad [9] \\
c &= -6 \quad [10]
\end{align}
$$

また、$[8], [9], [10]$を$[2]$に代入することで下記が得られる。
$$
\large
\begin{align}
-8 \cdot \frac{1}{4} + 4 \cdot \left( -\frac{3}{4} \right) – 2 \cdot (-6) + d &= 15 \quad [2]’ \\
-2 – 3 + 12 + d &= 15 \\
d &= 8 \quad [11]
\end{align}
$$

$[8], [9], [10], [11]$より$a+b+c+d$は下記のように計算できる。
$$
\large
\begin{align}
a + b + c + d &= \frac{1}{4} – \frac{3}{4} – 6 + 8 \\
&= -\frac{1}{2} + 2 \\
&= \frac{3}{2}
\end{align}
$$

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

Q.28

$\displaystyle X \sim \mathrm{Bin} \left( 10n, \frac{1}{2} \right)$であるので、$m=E[X], \sigma=\sqrt{V[X]}$は下記のように計算できる。
$$
\large
\begin{align}
m &= E[X] \\
&= 10n \cdot \frac{1}{2} \\
&= 5n \\
\sigma &= \sqrt{V[X]} \\
&= \sqrt{10n \cdot \frac{1}{2} \cdot \frac{1}{2}} \\
&= \frac{\sqrt{10n}}{2}
\end{align}
$$

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

・解説
二項分布の期待値$E[X]$と分散$V[X]$の式と導出は下記で取り扱ったので、合わせて抑えておくと良いです。

Q.29

・$0 \leq x \leq 1$
$$
\large
\begin{align}
f(x) = a(x-x^{2}) \quad [1]
\end{align}
$$

・$x < 0, 1 < x$
$$
\large
\begin{align}
f(x) = 0 \quad [2]
\end{align}
$$

$[1], [2]$式と確率密度関数の定義より下記が成立する。
$$
\large
\begin{align}
\int_{0}^{1} f(x) dx &= 1 \\
a \int_{0}^{1} (x-x^{2}) dx &= 1 \\
a \left[ \frac{1}{2}x^{2} – \frac{1}{3}x^{3} \right]_{0}^{1} &= 1 \\
a \left( \frac{1}{2} – \frac{1}{3} \right) &= 1 \\
a &= 6
\end{align}
$$

また、$E[X], E[X^{2}]$はそれぞれ下記のように計算できる。
$$
\large
\begin{align}
E[X] &= \int_{0}^{1} x f(x) dx = \int_{0}^{1} (x^{2}-x^{3}) dx \\
&= 6 \left[ \frac{1}{3}x^{3}-\frac{1}{4}x^{4} \right]{0}^{1} \\
&= 6 \cdot \frac{1}{12} = \frac{1}{2} E[X^{2}] \\
&= \int_{0}^{1} x^{2} f(x) dx = \int_{0}^{1} (x^{3}-x^{4}) dx \\
&= 6 \left[ \frac{1}{4}x^{3} – \frac{1}{5}x^{4}) \right]_{0}^{1} \\
&= 6 \cdot \frac{1}{20} = \frac{3}{10}
\end{align}
$$

よって分散$V[X]=E[X^{2}]-E[X]^{2}$は下記のように得られる。
$$
\large
\begin{align}
V[X] &= E[X^{2}] – E[X]^{2} \\
&= \frac{3}{10} – \left( \frac{1}{2} \right)^{2} \\
&= \frac{6-5}{20} = \frac{1}{20}
\end{align}
$$

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

Q.30

$$
\large
\begin{align}
\vec{a} = \left( \begin{array}{c} 2 \\ -1 \end{array} \right), \, \vec{a} = \left( \begin{array}{c} -1 \\ 3 \end{array} \right)
\end{align}
$$

ベクトル$\vec{p}=k\vec{a}+\vec{b}$は下記のように表せる。
$$
\large
\begin{align}
\vec{p} &= k \vec{a} + \vec{b} = k \left( \begin{array}{c} 2 \\ -1 \end{array} \right) + \left( \begin{array}{c} -1 \\ 3 \end{array} \right) \\
&= \left( \begin{array}{c} 2k-1 \\ -k+3 \end{array} \right)
\end{align}
$$

上記より$|\vec{p}|$は下記のように計算できる。
$$
\large
\begin{align}
|\vec{p}| &= \sqrt{(2k-1)^{2} + (-k+3)^{2}} \\
&= \sqrt{(4k^{2}-4k+1) + (k^{2}-6k+9)} \\
&= \sqrt{5k^{2} – 10k + 10} \\
&= \sqrt{5(k^{2}-2k+1) + 5} \\
&= \sqrt{5(k-1)^{2} + 5}
\end{align}
$$

ここで$\displaystyle -1 \leq k \frac{3}{2}$であるので、$|\vec{p}|$は$k=1$のとき最小値$\sqrt{5}$を取る。よって$m^{2}=5$であるので$(3)$が正しい。

BPE(Byte Pair Encoding)アルゴリズムの仕組みとPythonプログラムの確認

Transformerに基づくLLMの学習にあたっては多くの文書を用いる一方で、単語をそのまま取り扱うとEmbedding処理のパラメータ数が増大します。当記事ではこの解決にあたって用いられる手法の$1$つであるBPE(Byte Pair Encoding)のアルゴリズムの仕組みとPythonプログラムの確認を行いました。

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

BPEアルゴリズム

BPEの基本的な仕組み

BPE(Byte Pair Encoding)の基本的な仕組みは下図を元に理解することができる。

A New Algorithm for Data Compression(Philip Gage, $1994$)のFigure.$1$

上図では入力が”ABABCABCD”であり、”A”、”B”、”C”、”D”の$4$種類の文字で文字列が構成される。ここで”AB”の並びが最多の$3$回確認できるので”AB”を”H”で置き換えると、文字列は”HHCHCD”に変換できる。

次に”HHCHCD”の文字列では”HC”の並びが最多の$2$回観測されるので”G”で置き換えると文字列は”HGGD”に変換できる。BPEではこのように取得した”G”と”H”を加えた”A”、”B”、”C”、”D”、”G”、”H”で文字列を表す。

BPEの論文

BPE(Byte Pair Encoding)を用いる際に参照されることが多いのが「Neural Machine Translation of Rare Words with Subword Units(Sennrich et al., $2016$)」である。

上記はByte Pair Encodingを用いた機械翻訳の論文である一方で、Byte Pair Encodingについては”A New Algorithm for Data Compression(Gage, $1994$)”を参照している。

近年の論文ではBPEを示すにあたって新しいものが参照されることが多いので注意が必要である。当記事でも以下、近年の論文に倣い「Neural Machine Translation of Rare Words with Subword Units(Sennrich et al., $2016$)」を「BPE論文」と表す。

BPEのPythonプログラム

BPE論文のPythonプログラム

BPE論文のAlgorithm$1$では下記のようにPythonを用いたBPE処理が確認できる。

BPE論文のAlgorithm$1$
import re, collections

def get_stats(vocab):
    pairs = collections.defaultdict(int)
    for word, freq in vocab.items():
        symbols = word.split()
        for i in range(len(symbols)-1):
            pairs[symbols[i],symbols[i+1]] += freq
    return pairs

def merge_vocab(pair, v_in):
    v_out = {}
    bigram = re.escape(' '.join(pair))
    p = re.compile(r'(?<!\S)' + bigram + r'(?!\S)')
    for word in v_in:
        w_out = p.sub(''.join(pair), word)
        v_out[w_out] = v_in[word]
    return v_out

vocab = {'l o w _' : 5, 'l o w e r _' : 2, 'n e w e s t _':6,'w i d e s t _':3}
num_merges = 10

for i in range(num_merges):
    pairs = get_stats(vocab)
    best = max(pairs, key=pairs.get)
    vocab = merge_vocab(best, vocab)
    print(best)

・実行結果

('e', 's')
('es', 't')
('est', '_')
('l', 'o')
('lo', 'w')
('n', 'e')
('ne', 'w')
('new', 'est_')
('low', '_')
('w', 'i')

上記の出力結果はfor文による繰り返し処理それぞれで連結する文字列の組である。たとえば”e”と”s”は”newest”と”widest”に一度ずつ出現するので、全部で$9$回観測され、全体の中で最多である。

処理の概要については次項で詳しく確認を行う。

処理の概要

以下のプログラムではモジュールの読み込みやget_stats関数とmerge_vocab関数の定義は基本的には省略する。

まず、get_stats(vocab)の実行結果の確認を行う。

vocab = {'l o w _' : 5, 'l o w e r _' : 2, 'n e w e s t _':6,'w i d e s t _':3}

print(get_stats(vocab))

・実行結果

defaultdict(int,
            {('l', 'o'): 7,
             ('o', 'w'): 7,
             ('w', '_'): 5,
             ('w', 'e'): 8,
             ('e', 'r'): 2,
             ('r', '_'): 2,
             ('n', 'e'): 6,
             ('e', 'w'): 6,
             ('e', 's'): 9,
             ('s', 't'): 9,
             ('t', '_'): 9,
             ('w', 'i'): 3,
             ('i', 'd'): 3,
             ('d', 'e'): 3})

上記より、「e-s」、「s-t」、「t-_」の出現回数が$9$で最多であることが確認できる。プログラムでは次に下記のような処理を行う。

vocab = {'l o w _' : 5, 'l o w e r _' : 2, 'n e w e s t _':6,'w i d e s t _':3}

pairs = get_stats(vocab)
best = max(pairs, key=pairs.get)
vocab = merge_vocab(best, vocab)

print(best)
print(vocab)

・実行結果

('e', 's')
{'l o w _': 5, 'l o w e r _': 2, 'n e w es t _': 6, 'w i d es t _': 3}

上記より、出現頻度が最多の組をbestに格納し、merge_vocab(best, vocab)を実行することで”e”と”s”の連結を行う流れが確認できる。この処理を10回繰り返すことで下記のような結果が得られる。

vocab = {'l o w _' : 5, 'l o w e r _' : 2, 'n e w e s t _':6,'w i d e s t _':3}
num_merges = 10

for i in range(num_merges):
    pairs = get_stats(vocab)
    best = max(pairs, key=pairs.get)
    vocab = merge_vocab(best, vocab)
    print(best)

print("===")
print(vocab)

・実行結果

('e', 's')
('es', 't')
('est', '_')
('l', 'o')
('lo', 'w')
('n', 'e')
('ne', 'w')
('new', 'est_')
('low', '_')
('w', 'i')
===
{'low_': 5, 'low e r _': 2, 'newest_': 6, 'wi d est_': 3}

また、下記のようにプログラムを改変すると10回繰り返した際の辞書を得ることができる。

vocab = {'l o w _' : 5, 'l o w e r _' : 2, 'n e w e s t _':6,'w i d e s t _':3}
num_merges = 10

bpe_dict = []
for i in range(num_merges):
    pairs = get_stats(vocab)
    best = max(pairs, key=pairs.get)
    bpe_dict.append("".join(best))
    vocab = merge_vocab(best, vocab)
    print(best)

print("===")
print(bpe_dict)

・実行結果

('e', 's')
('es', 't')
('est', '_')
('l', 'o')
('lo', 'w')
('n', 'e')
('ne', 'w')
('new', 'est_')
('low', '_')
('w', 'i')
===
['es', 'est', 'est_', 'lo', 'low', 'ne', 'new', 'newest_', 'low_', 'wi']

BPE(Byte Pair Encoding)では上記のように得られる辞書を元にsubwordにidを割り当て、以後の処理を行う。

【Transformer】LLM(Large Language Model)のパラメータ数の概算法

昨今LLM(Large Language Model)が大きな注目を集める一方で、パラメータ数がどのように決まるかについて抑えておくと理解に役立ちます。そこで当記事ではLLMの主要モジュールであるTransformerに用いられるパラメータの概算法について取りまとめを行いました。
Transformerの論文や筆者作成の『直感的に理解するTransformer』の内容などを元に取りまとめを行いました。

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

・Transformer論文
・直感的に理解するTransformer(運営者作成)

パラメータ数の概算

パラメータ数の単位

LLM(Large Language Model)関連の論文ではパラメータ数はMillionを表すMやBillionを表すBで略記されるので注意が必要です。Millionは$10^{6}$の$100$万、Billionは$10^{9}$の$10$億にそれぞれ対応します。

具体的な論文とパラメータ数の対応については、$110$Mと$340$MのBERTが$1.1$億と$3.4$億、$11$BのT$5$が$110$億、$175$BのGPT$3$が$1750$億にそれぞれ対応します。

Transformerの大まかな仕組み

LLMの基盤のアーキテクチャには基本的にTransformerが用いられます。よって、LLMのパラメータ数について解釈する際はTransformerの大まかな仕組みの理解が重要です。Transformerの大まかな仕組みについては下記で詳しくまとめました。

・直感的に理解するTransformer

パラメータ数の概算

Transformerにおけるパラメータは主にEmbedding、各層におけるMulti-Head Attention、FFN(Feed Forward Network)処理にそれぞれ用いられます。下図の赤枠がパラメータ処理に対応します。

Transformer論文のFigure$1$を改変

上記に基づいてTransformerに用いられるパラメータ数を大まかに概算することが可能です。以下、パラメータ数の計算を下記の三つにわけて概算します。

$1. \,$ Embedding処理
$2. \,$ Multi-Head Attention処理
$3. \,$ FFN処理

Embedding処理

Embedding処理は$1$-hotベクトルにEmbedding Matrixを左からかけることで得ることができます。このEmbedding Matrixのパラメータ数は語彙数$V$とTransformer処理における隠れ層の数$D$によって概算が可能です。

たとえば$1$万種類の単語に対し、Transformerのそれぞれの単語の隠れ層の数が$D=512$である場合、パラメータ数は下記のように概算できます。
$$
\large
\begin{align}
V \times D &= 10^{4} \times 512 \\
&= 5.12 \times 10^{6}
\end{align}
$$

上記は約$5$Mに対応します。同様に$10$万種類の単語を$D=1024$で取り扱う場合は下記のように概算できます。
$$
\large
\begin{align}
V \times D &= 10^{7} \times 1024 \\
&= 1.024 \times 10^{8}
\end{align}
$$

上記は約$100$Mに対応します。パラメータ数の概算にあたっては、桁数で大まかに把握できるので、$5.12 \times 10^{6}$や$1.024 \times 10^{8}$のようにパラメータ数を表しました。

トークンが単語単位の場合はWord$2$vecがEmbeddingに対応する一方で、トークンの種類が増大するLLMではBPE(Byte Pair Encoding)などを用いることで$3$万〜$7$万種程度の語彙(vocabulary)に集約させるのが一般的です。よって、LLMの学習時に取り扱う文章が増えても語彙数は数万程度に収まることが多いです。

Multi-Head Attention処理

$$
\large
\begin{align}
\mathrm{MultiHead}(Q,K,V) &= \mathrm{Concat}(\mathrm{head}_{1}, \cdots , \mathrm{head}_{h}) W^{O} \\
\mathrm{head}_{i} &= \mathrm{Attention}(QW_{i}^{Q}, KW_{i}^{K}, VW_{i}^{V}) \\
W_{i}^{O} \in \mathbb{R}^{hd_{v} \times d_{model}}, \, W_{i}^{Q} & \in \mathbb{R}^{d_{model} \times d_{k}}, \, W_{i}^{K} \in \mathbb{R}^{d_{model} \times d_{k}}, W_{i}^{V} \in \mathbb{R}^{d_{model} \times d_{v}}
\end{align}
$$

Multi-Head Attentionではアンサンブル学習と同様に各Headにおける計算の相関が低くなるようにパラメータ$W$を元に上記のような計算を行います。ここで$d_{model}$は各トークンの分散表現の次元数であり前項の$D$と同義です。また、$h$はヘッドの数を表します。このとき、パラメータ数は下記のように概算できます。
$$
\large
\begin{align}
N \times d_{model} \times (h \times (2d_{k} + d_{v}) + h d_{v}) = 2 N d_{model} h(d_{k}+d_{v}) \quad (1)
\end{align}
$$

$N=6, d_{model}=512, h=8, d_{k}=64, d_{v}=64$のとき、Multi-Head Attention処理のパラメータ数は$(1)$式を元に下記のように概算できます。
$$
\large
\begin{align}
2 N d_{model} h(d_{k}+d_{v}) &= 2 \times 6 \times 512 \times 8 \times (64+64) \\
&= 6291456 = 6.29 \times 10^{6}
\end{align}
$$

上記は$6.29$Mに対応します。

FFN処理

FFN処理は単語ごとの隠れ層に対してMLP(Multi Layer Perceptron)を行うことに対応します。よって、単語数$L$、それぞれの単語の隠れ層の数が$D$である場合、$N$層のMLPにおけるパラメータ数は下記のように概算することができます。
$$
\large
\begin{align}
N \times L \times D^{2} = NLD^2
\end{align}
$$

たとえば、$N=6, L=512, D=512$の場合、パラメータ数は下記のように概算できます。
$$
\large
\begin{align}
6 \times 512 \times 512^2 &= 805306368 \\
& \simeq 8.53 \times 10^{8}
\end{align}
$$

上記は$800$Mに対応し、Transformerのパラメータ数の約$100$Mを大きく上回ります。Transformerでは一般的に同じ層の単語では同じパラメータを使うので、$L$はかけないことに注意が必要です。また、FFNの処理では「$D$次元$\to$$D$次元」ではなく、「$D$次元$\to$$4D$次元$\to$$D$次元」のような処理が行われます。中間層の$4D$は別途設定されることもありますが、$4D$が用いられることが多いです。ここまでの内容に基づいてFFN処理におけるパラメータは下記のように概算できます。
$$
\large
\begin{align}
2 \times N \times D \times 4D = 8ND^2 \quad (2)
\end{align}
$$

また、$N=6, D=512$の場合のパラメータ数は$(2)$式より下記のように概算できます。
$$
\large
\begin{align}
8ND^2 &= 8 \times 6 \times 512^{2} \\
&= 12582912 = 1.26 \times 10^{7}
\end{align}
$$

上記は$12.6$Mに対応します。

LLMのパラメータ数の概算

注意事項:Encoder-Decoderの場合

Transformer論文のFigure$1$を改変

前節では上図を元にEncoder部分のみを確認しましたが、論文によってEncoderとDecoderの双方を用いる場合があることに注意が必要です。この場合、Multi-Head Attentionのパラメータ数を$3$倍、FFNの処理のパラメータ数を$2$倍して概算する必要があります。

具体的にはTransformerの論文やT$5$の論文はEncoderとDecoderを用いており、BERTやGPT-$3$は片方のみが用いられます。

GPT-$3$論文のTable$D.1$より

上記はGPT-$3$の論文のTable$D.1$に対応しますが、「T$5$がencoder-decoder modelであるのでパラメータの半数のみがactive」というような注意書きが読み取れます。

このように論文毎にパラメータの概算方法が変わる場合があるので単にパラメータの総数だけでなく、大まかな概算法も合わせて抑えておくと良いです。

Transformer

Transformer論文のTable$3$より

Transformer論文のパラメータ設定は上記より確認できます。以下、Transformerのパラメータ数がEncoder-Decoderを前提に計算されることを元にbaseとbigの双方についてパラメータの概算を行います。

base

・Embedding
$V=37000, D=512$を元にパラメータ数は下記のように計算できます。
$$
\large
\begin{align}
V \times D &= 37000 \times 512 \\
&= 18{,}944{,}000
\end{align}
$$

・Multi-Head Attention
$N=6, d_{model}=512, h=8, d_{k}=64, d_{v}=64$を元にパラメータ数は下記のように計算できます。
$$
\large
\begin{align}
2 N d_{model} h(d_{k}+d_{v}) \times 3 &= 2 \times 6 \times 512 \times 8 \times (64+64) \times 3 \\
&= 18{,}874{,}368
\end{align}
$$

・FFN
$N=6, D=512$の場合のパラメータ数は下記のように概算できます。
$$
\large
\begin{align}
8ND^2 \times 2 &= 8 \times 6 \times 512^{2} \times 2 \\
&= 25{,}165{,}824
\end{align}
$$

よって、パラメータの総数は下記のように概算できます。
$$
\large
\begin{align}
& 18{,}944{,}000 + 18{,}874{,}368 + 25{,}165{,}824 \\
&= 62{,}984{,}192 = 6.3 \times 10^{7}
\end{align}
$$

上記は$63$Mなので、表の値と概ね一致することが確認できます。

big

・Embedding
$V=37000, D=1024$を元にパラメータ数は下記のように計算できます。
$$
\large
\begin{align}
V \times D &= 37000 \times 1024 \\
&= 37{,}888{,}000
\end{align}
$$

・Multi-Head Attention
$N=6, d_{model}=1024, h=16, d_{k}=64, d_{v}=64$を元にパラメータ数は下記のように計算できます。
$$
\large
\begin{align}
2 N d_{model} h(d_{k}+d_{v}) \times 3 &= 2 \times 6 \times 1024 \times 16 \times (64+64) \times 3 \\
&= 75{,}497{,}472
\end{align}
$$

・FFN
$N=6, D=1024$の場合のパラメータ数は下記のように概算できます。
$$
\large
\begin{align}
8ND^2 \times 2 &= 8 \times 6 \times 1024^{2} \times 2 \\
&= 100{,}663{,}296
\end{align}
$$

よって、パラメータの総数は下記のように概算できます。
$$
\large
\begin{align}
& 37{,}888{,}000 + 75{,}497{,}472 + 100{,}663{,}296 \\
&= 214{,}048{,}768 = 2.14 \times 10^{8}
\end{align}
$$

上記は$214$Mなので、表の値と概ね一致することが確認できます。

BERT

BERT論文のSection$3$より

BERT論文のパラメータ設定は上記より確認できます。以下、BERTのパラメータ数がEncoderのみを用いて計算されることを元にBASEとLARGEの双方についてパラメータの概算を行います。

BASE

・Embedding
$H=768$がhidden sizeであるので$V=30000, D=768$を元にパラメータ数は下記のように計算できます。
$$
\large
\begin{align}
V \times D &= 30000 \times 768 \\
&= 23{,}040{,}000
\end{align}
$$

・Multi-Head Attention
$N=12, d_{model}=768, h=12, d_{k}=64, d_{v}=64$を元にパラメータ数は下記のように計算できます。
$$
\large
\begin{align}
2 N d_{model} h(d_{k}+d_{v}) &= 2 \times 12 \times 768 \times 12 \times (64+64) \\
&= 28{,}311{,}552
\end{align}
$$

・FFN
$N=12, D=768$を元にパラメータ数は下記のように概算できます。
$$
\large
\begin{align}
8ND^2 &= 8 \times 12 \times 768^{2} \\
&= 56{,}623{,}104
\end{align}
$$

よって、パラメータの総数は下記のように概算できます。
$$
\large
\begin{align}
& 23{,}040{,}000 + 28{,}311{,}552 + 56{,}623{,}104 \\
&= 107{,}974{,}656 = 1.08 \times 10^{8}
\end{align}
$$

上記は$108$Mなので、論文のパラメータ数と概ね一致することが確認できます。

LARGE

・Embedding
$H=1024$がhidden sizeであるので$V=30000, D=1024$を元にパラメータ数は下記のように計算できます。
$$
\large
\begin{align}
V \times D &= 30000 \times 1024 \\
&= 30{,}720{,}000
\end{align}
$$

・Multi-Head Attention
$N=24, d_{model}=1024, h=16, d_{k}=64, d_{v}=64$を元にパラメータ数は下記のように計算できます。
$$
\large
\begin{align}
2 N d_{model} h(d_{k}+d_{v}) &= 2 \times 24 \times 1024 \times 16 \times (64+64) \\
&= 100{,}663{,}296
\end{align}
$$

・FFN
$N=24, D=1024$を元にパラメータ数は下記のように概算できます。
$$
\large
\begin{align}
8ND^2 &= 8 \times 24 \times 1024^{2} \\
&= 201{,}326{,}592
\end{align}
$$

よって、パラメータの総数は下記のように概算できます。
$$
\large
\begin{align}
& 30{,}720{,}000 + 100{,}663{,}296 + 201{,}326{,}592 \\
&= 332{,}709{,}888 = 3.33 \times 10^{8}
\end{align}
$$

上記は$333$Mなので、論文のパラメータ数と概ね一致することが確認できます。

T$5$

T$5$論文のSection$3.7$より

T$5$論文のパラメータ設定は上記より確認できます。以下、T$5$のパラメータ数がEncoder-Decoderを前提に計算されることを元に$3B$と$11B$の双方についてパラメータの概算を行います。

$3B$

GPT-$3$

GPT-$3$論文のTable$2.1$より

GPT-$3$のパラメータ設定は上記より確認できます。

GPT論文のFigure$1$より

GPT-$3$では上図のようにencoderを用いないTransformerであるTransformer decoderを用います。Transformer decoderの概要については下記で詳しく取り扱いました。

GPT論文のFigure$1$よりGPT-$3$のパラメータ数はencoderのみを用いるBERTと基本的には同様の概算を行えることが確認できます。以下、GPT-$3$のパラメータ数がEncoderのみを用いて計算されることを元に$6.7$B、$13$B、$175$Bについてパラメータの概算を行います。

$6.7$B

・Embedding
$V=40000, D=4096$を元にパラメータ数は下記のように計算できます。
$$
\large
\begin{align}
V \times D &= 40000 \times 4096 \\
&= 163{,}840{,}000
\end{align}
$$

$V=40000$はGPTの論文を参照しました。

・Multi-Head Attention
$N=32, d_{model}=4096, h=32, d_{k}=128, d_{v}=128$を元にパラメータ数は下記のように計算できます。
$$
\large
\begin{align}
2 N d_{model} h(d_{k}+d_{v}) &= 2 \times 32 \times 4096 \times 32 \times (128+128) \\
&= 2{,}147{,}483{,}648
\end{align}
$$

・FFN
$N=32, D=4096$の場合のパラメータ数は下記のように概算できます。
$$
\large
\begin{align}
8ND^2 &= 8 \times 32 \times 4096^{2} \\
&= 4{,}294{,}967{,}296
\end{align}
$$

よって、パラメータの総数は下記のように概算できます。
$$
\large
\begin{align}
& 163{,}840{,}000 + 2{,}147{,}483{,}648 + 4{,}294{,}967{,}296 \\
&= 6{,}606{,}290{,}944 = 6.6 \times 10^{9}
\end{align}
$$

上記は$6.6$Bなので、表の値と概ね一致することが確認できます。

$13$B

・Embedding
$V=40000, D=5140$を元にパラメータ数は下記のように計算できます。
$$
\large
\begin{align}
V \times D &= 40000 \times 5140 \\
&= 205{,}600{,}000
\end{align}
$$

$V=40000$はGPTの論文を参照しました。

・Multi-Head Attention
$N=40, d_{model}=5140, h=40, d_{k}=128, d_{v}=128$を元にパラメータ数は下記のように計算できます。
$$
\large
\begin{align}
2 N d_{model} h(d_{k}+d_{v}) &= 2 \times 40 \times 5140 \times 40 \times (128+128) \\
&= 4{,}210{,}688{,}000
\end{align}
$$

・FFN
$N=40, D=5140$の場合のパラメータ数は下記のように概算できます。
$$
\large
\begin{align}
8ND^2 &= 8 \times 40 \times 5140^{2} \\
&= 8{,}454{,}272{,}000
\end{align}
$$

よって、パラメータの総数は下記のように概算できます。
$$
\large
\begin{align}
& 205{,}600{,}000 + 4{,}210{,}688{,}000 + 8{,}454{,}272{,}000 \\
&= 12{,}870{,}560{,}000 = 1.29 \times 10^{10}
\end{align}
$$

上記は$12.9$Bなので、表の値と概ね一致することが確認できます。

$175$B

・Embedding
$V=40000, D=12288$を元にパラメータ数は下記のように計算できます。
$$
\large
\begin{align}
V \times D &= 40000 \times 12288 \\
&= 491{,}520{,}000
\end{align}
$$

$V=40000$はGPTの論文を参照しました。

・Multi-Head Attention
$N=96, d_{model}=12288, h=96, d_{k}=128, d_{v}=128$を元にパラメータ数は下記のように計算できます。
$$
\large
\begin{align}
2 N d_{model} h(d_{k}+d_{v}) &= 2 \times 96 \times 12288 \times 96 \times (128+128) \\
&= 57{,}982{,}058{,}496
\end{align}
$$

・FFN
$N=96, D=12288$の場合のパラメータ数は下記のように概算できます。
$$
\large
\begin{align}
8ND^2 &= 8 \times 96 \times 12288^{2} \\
&= 115{,}964{,}116{,}992
\end{align}
$$

よって、パラメータの総数は下記のように概算できます。
$$
\large
\begin{align}
& 491{,}520{,}000 + 57{,}982{,}058{,}496 + 115{,}964{,}116{,}992 \\
&= 174{,}437{,}695{,}488 = 1.74 \times 10^{11}
\end{align}
$$

上記は$174$Bなので、表の値と概ね一致することが確認できます。

Gopher

Gopher論文のパラメータ設定は上記より確認できます。基本的にはGPT$3$と同様にTransformer decoderの構成が用いられます。

$44$M

・Embedding
$V=32000, D=512$を元にパラメータ数は下記のように計算できます。
$$
\large
\begin{align}
V \times D &= 32000 \times 512 \\
&= 16{,}384{,}000
\end{align}
$$

・Multi-Head Attention
$N=8, d_{model}=512, h=16, d_{k}=32, d_{v}=32$を元にパラメータ数は下記のように計算できます。
$$
\large
\begin{align}
2 N d_{model} h(d_{k}+d_{v}) &= 2 \times 8 \times 512 \times 16 \times (32+32) \\
&= 8{,}388{,}608
\end{align}
$$

・FFN
$N=8, D=512$の場合のパラメータ数は下記のように概算できます。
$$
\large
\begin{align}
8ND^2 &= 8 \times 8 \times 512^{2} \\
&= 16{,}777{,}216
\end{align}
$$

よって、パラメータの総数は下記のように概算できます。
$$
\large
\begin{align}
& 16{,}384{,}000 + 8{,}388{,}608 + 16{,}777{,}216 \\
&= 41{,}549{,}824 = 4.2 \times 10^{7}
\end{align}
$$

上記は$42$Mなので、表の値と概ね一致することが確認できます。

$117$M

・Embedding
$V=32000, D=512$を元にパラメータ数は下記のように計算できます。
$$
\large
\begin{align}
V \times D &= 32000 \times 768 \\
&= 24{,}576{,}000
\end{align}
$$

・Multi-Head Attention
$N=12, d_{model}=768, h=12, d_{k}=64, d_{v}=64$を元にパラメータ数は下記のように計算できます。
$$
\large
\begin{align}
2 N d_{model} h(d_{k}+d_{v}) &= 2 \times 12 \times 768 \times 12 \times (64+64) \\
&= 28{,}311{,}552
\end{align}
$$

・FFN
$N=12, D=768$の場合のパラメータ数は下記のように概算できます。
$$
\large
\begin{align}
8ND^2 &= 8 \times 12 \times 768^{2} \\
&= 56{,}623{,}104
\end{align}
$$

よって、パラメータの総数は下記のように概算できます。
$$
\large
\begin{align}
& 24{,}576{,}000 + 28{,}311{,}552 + 56{,}623{,}104 \\
&= 109{,}510{,}656 = 1.1 \times 10^{8}
\end{align}
$$

上記は$110$Mなので、表の値と概ね一致することが確認できます。

$417$M

・Embedding
$V=32000, D=1536$を元にパラメータ数は下記のように計算できます。
$$
\large
\begin{align}
V \times D &= 32000 \times 1536 \\
&= 49{,}152{,}000
\end{align}
$$

・Multi-Head Attention
$N=12, d_{model}=1536, h=12, d_{k}=128, d_{v}=128$を元にパラメータ数は下記のように計算できます。
$$
\large
\begin{align}
2 N d_{model} h(d_{k}+d_{v}) &= 2 \times 12 \times 1536 \times 12 \times (128+128) \\
&= 113{,}246{,}208
\end{align}
$$

・FFN
$N=12, D=1536$の場合のパラメータ数は下記のように概算できます。
$$
\large
\begin{align}
8ND^2 &= 8 \times 12 \times 1536^{2} \\
&= 226{,}492{,}416
\end{align}
$$

よって、パラメータの総数は下記のように概算できます。
$$
\large
\begin{align}
& 49{,}152{,}000 + 113{,}246{,}208 + 226{,}492{,}416 \\
&= 388{,}890{,}624 = 3.89 \times 10^{8}
\end{align}
$$

上記は$389$Mなので、表の値と概ね一致することが確認できます。

$1.4$B

・Embedding
$V=32000, D=2048$を元にパラメータ数は下記のように計算できます。
$$
\large
\begin{align}
V \times D &= 32000 \times 2048 \\
&= 65{,}536{,}000
\end{align}
$$

・Multi-Head Attention
$N=24, d_{model}=2048, h=16, d_{k}=128, d_{v}=128$を元にパラメータ数は下記のように計算できます。
$$
\large
\begin{align}
2 N d_{model} h(d_{k}+d_{v}) &= 2 \times 24 \times 2048 \times 16 \times (128+128) \\
&= 402{,}653{,}184
\end{align}
$$

・FFN
$N=24, D=2048$の場合のパラメータ数は下記のように概算できます。
$$
\large
\begin{align}
8ND^2 &= 8 \times 24 \times 2048^{2} \\
&= 805{,}306{,}368
\end{align}
$$

よって、パラメータの総数は下記のように概算できます。
$$
\large
\begin{align}
& 65{,}536{,}000 + 402{,}653{,}184 + 805{,}306{,}368 \\
&= 1{,}273{,}495{,}552 = 1.27 \times 10^{9}
\end{align}
$$

上記は$1.27$Bなので、表の値と概ね一致することが確認できます。

$7.1$B

・Embedding
$V=32000, D=4096$を元にパラメータ数は下記のように計算できます。
$$
\large
\begin{align}
V \times D &= 32000 \times 4096 \\
&= 131{,}072{,}000
\end{align}
$$

・Multi-Head Attention
$N=32, d_{model}=4096, h=32, d_{k}=128, d_{v}=128$を元にパラメータ数は下記のように計算できます。
$$
\large
\begin{align}
2 N d_{model} h(d_{k}+d_{v}) &= 2 \times 32 \times 4096 \times 32 \times (128+128) \\
&= 2{,}147{,}483{,}648
\end{align}
$$

・FFN
$N=32, D=4096$の場合のパラメータ数は下記のように概算できます。
$$
\large
\begin{align}
8ND^2 &= 8 \times 24 \times 2048^{2} \\
&= 4{,}294{,}967{,}296
\end{align}
$$

よって、パラメータの総数は下記のように概算できます。
$$
\large
\begin{align}
& 131{,}072{,}000 + 2{,}147{,}483{,}648 + 4{,}294{,}967{,}296 \\
&= 6{,}573{,}522{,}944 = 6.57 \times 10^{9}
\end{align}
$$

上記は$6.57$Bなので、表の値と概ね一致することが確認できます。

$280B$

・Embedding
$V=32000, D=16384$を元にパラメータ数は下記のように計算できます。
$$
\large
\begin{align}
V \times D &= 32000 \times 16384 \\
&= 524{,}288{,}000
\end{align}
$$

・Multi-Head Attention
$N=80, d_{model}=16384, h=128, d_{k}=128, d_{v}=128$を元にパラメータ数は下記のように計算できます。
$$
\large
\begin{align}
2 N d_{model} h(d_{k}+d_{v}) &= 2 \times 80 \times 16384 \times 128 \times (128+128) \\
&= 85{,}899{,}345{,}920
\end{align}
$$

・FFN
$N=32, D=16384$の場合のパラメータ数は下記のように概算できます。
$$
\large
\begin{align}
8ND^2 &= 8 \times 80 \times 16384^{2} \\
&= 171{,}798{,}691{,}840
\end{align}
$$

よって、パラメータの総数は下記のように概算できます。
$$
\large
\begin{align}
& 524{,}288{,}000 + 85{,}899{,}345{,}920 + 171{,}798{,}691{,}840 \\
&= 258{,}222{,}325{,}760 = 2.58 \times 10^{11}
\end{align}
$$

上記は$258$Bなので、表の値と概ね一致することが確認できます。

GLaM

PaLM

PaLM論文 Table.$1$

PaLM論文のパラメータ設定は上記より確認できます。基本的にはGPT$3$と同様にTransformer decoderの構成が用いられます。

$8$B

・Embedding
$V=256000, D=4096$を元にパラメータ数は下記のように計算できます。
$$
\large
\begin{align}
V \times D &= 256000 \times 4096 \\
&= 1{,}048{,}576{,}000
\end{align}
$$

$V=256000$はPaLMの論文を参照しました。

・Multi-Head Attention
$N=32, d_{model}=4096, h=16, d_{k}=256, d_{v}=256$を元にパラメータ数は下記のように計算できます。
$$
\large
\begin{align}
2 N d_{model} h(d_{k}+d_{v}) &= 2 \times 32 \times 4096 \times 16 \times (256+256) \\
&= 2{,}147{,}483{,}648
\end{align}
$$

・FFN
$N=32, D=4096$の場合のパラメータ数は下記のように概算できます。
$$
\large
\begin{align}
8ND^2 &= 8 \times 32 \times 4096^{2} \\
&= 4{,}294{,}967{,}296
\end{align}
$$

よって、パラメータの総数は下記のように概算できます。
$$
\large
\begin{align}
& 1{,}048{,}576{,}000 + 2{,}147{,}483{,}648 + 4{,}294{,}967{,}296 \\
&= 7{,}491{,}026{,}944 = 7.49 \times 10^{9}
\end{align}
$$

上記は$7.49$Bなので、表の値$8$Bと概ね一致することが確認できます。

$62$B

・Embedding
$V=256000, D=8192$を元にパラメータ数は下記のように計算できます。
$$
\large
\begin{align}
V \times D &= 256000 \times 8192 \\
&= 2{,}097{,}152{,}000
\end{align}
$$

・Multi-Head Attention
$N=64, d_{model}=8192, h=32, d_{k}=256, d_{v}=256$を元にパラメータ数は下記のように計算できます。
$$
\large
\begin{align}
2 N d_{model} h(d_{k}+d_{v}) &= 2 \times 32 \times 4096 \times 16 \times (256+256) \\
&= 17{,}179{,}869{,}184
\end{align}
$$

・FFN
$N=32, D=4096$の場合のパラメータ数は下記のように概算できます。
$$
\large
\begin{align}
8ND^2 &= 8 \times 64 \times 8192^{2} \\
&= 34{,}359{,}738{,}368
\end{align}
$$

よって、パラメータの総数は下記のように概算できます。
$$
\large
\begin{align}
& 2{,}097{,}152{,}000 + 17{,}179{,}869{,}184 + 34{,}359{,}738{,}368 \\
&= 53{,}636{,}759{,}552 = 5.36 \times 10^{10}
\end{align}
$$

上記は$53.6$Bなので、表の値$62$Bと概ね一致することが確認できます。

$540$B

・Embedding
$V=256000, D=18432$を元にパラメータ数は下記のように計算できます。
$$
\large
\begin{align}
V \times D &= 256000 \times 18432 \\
&= 4{,}718{,}592{,}000
\end{align}
$$

・Multi-Head Attention
$N=118, d_{model}=18432, h=72, d_{k}=256, d_{v}=256$を元にパラメータ数は下記のように計算できます。
$$
\large
\begin{align}
2 N d_{model} h(d_{k}+d_{v}) &= 2 \times 118 \times 18432 \times 72 \times (256+256) \\
&= 160{,}356{,}630{,}528
\end{align}
$$

・FFN
$N=118, D=18432$の場合のパラメータ数は下記のように概算できます。
$$
\large
\begin{align}
8ND^2 &= 8 \times 118 \times 18432^{2} \\
&= 320{,}713{,}261{,}056
\end{align}
$$

よって、パラメータの総数は下記のように概算できます。
$$
\large
\begin{align}
& 4{,}718{,}592{,}000 + 160{,}356{,}630{,}528 + 320{,}713{,}261{,}056 \\
&= 485{,}280{,}579{,}584 = 4.85 \times 10^{11}
\end{align}
$$

上記は$485$Bなので、表の値$540$Bと概ね一致することが確認できます。

参考

・Transformer論文:Attention is All you need$[2017]$
・BERT論文
・T$5$論文
・GPT$2$論文
・GPT$3$論文
・PaLM論文
・Transformer decoder論文
・直感的に理解するTransformer(運営者作成)

行列の列基本変形と基本行列(elementary matrix)による列基本変形の対応

行基本変形は基本行列(elementary matrix)の積による操作によって表すことができるなど、基本行列は
よく出てくるので抑えておくと良いです。当記事では列基本変形の概要と列基本変形と基本行列の対応について取り扱いました。
作成にあたっては「チャート式シリーズ 大学教養 線形代数」の第$3$節「行列の構造」を主に参考にしました。

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

列基本変形と基本行列

基本行列の定義

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

列基本変形

列基本変形と基本行列の対応

具体例の確認

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

基本例題$041$

$[1]$
$$
\large
\begin{align}
\left(\begin{array}{cccc} 4 & -1 & 3 & 0 \\ 1 & 2 & -4 & 2 \end{array} \right)
\end{align}
$$

上記に対し、$1$列目と$2$列目を入れ替える列基本変形を行うと下記が得られる。
$$
\large
\begin{align}
\left(\begin{array}{cccc} 4 & -1 & 3 & 0 \\ 1 & 2 & -4 & 2 \end{array} \right) \longrightarrow \left(\begin{array}{cccc} -1 & 4 & 3 & 0 \\ 2 & 1 & -4 & 2 \end{array} \right)
\end{align}
$$

$[2]$
$$
\large
\begin{align}
\left(\begin{array}{ccc} -1 & 2 & 3 \\ 2 & 1 & 1 \end{array} \right)
\end{align}
$$

上記に対し、$1$列目の$2$倍を$2$列目に加える列基本変形を行うと下記が得られる。
$$
\large
\begin{align}
\left(\begin{array}{ccc} -1 & 2 & 3 \\ 2 & 1 & 1 \end{array} \right) \longrightarrow \left(\begin{array}{ccc} -1 & 0 & 3 \\ 2 & 5 & 1 \end{array} \right)
\end{align}
$$

$[3]$
$$
\large
\begin{align}
\left(\begin{array}{cccc} 1 & 0 & -2 & 1 \\ 1 & 1 & 1 & -1 \\ -1 & 3 & -5 & 0 \end{array} \right)
\end{align}
$$

上記に対し、$1$列目の$-1$倍を$2$列目に加え、$1$列目の$1$倍を$3$列目に加える列基本変形を行うと下記が得られる。
$$
\large
\begin{align}
\left(\begin{array}{cccc} 1 & 0 & -2 & 1 \\ 1 & 1 & 1 & -1 \\ -1 & 3 & -5 & 0 \end{array} \right) \longrightarrow \left(\begin{array}{cccc} 1 & -1 & -1 & 1 \\ 1 & 0 & 2 & -1 \\ -1 & 4 & -6 & 0 \end{array} \right)
\end{align}
$$

基本例題$042$

基本例題$043$

【Word2vecなどの出力層高速化】雑音対照推定(NCE)・負例サンプリング

分布仮説に基づくWord$2$vecなどの学習にあたっては、出力層が語彙の数に対応する分類問題に対応するので、そのまま取り扱うと巨大なソフトマックス関数の取り扱いが必要になります。当記事はNCEや負例サンプリング(Negative Sampling)を用いた解決策について取り扱いました。
「深層学習による自然言語処理」$4.3$節の「出力層の高速化」などを参考に当記事の作成を行いました。

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

前提の確認

語彙が大きい場合のソフトマックス関数の取り扱い

Word$2$vecや翻訳・文書要約・対話などの文章の生成タスクなどの学習を行う際は、入力文$\mathbf{x} \in \mathcal{X}$と予測対象の単語$y \in \mathcal{Y}$を元に、下記のように交差エントロピー損失関数を定義する。
$$
\large
\begin{align}
l_{\boldsymbol{\theta}}^{\mathrm{softmax}}(\mathbf{x},y) = -\log{ \frac{\exp{(f_{\boldsymbol{\theta}}(\mathbf{x},y))}}{\displaystyle \sum_{\tilde{y} \in \mathcal{Y}} \exp{(f_{\boldsymbol{\theta}}(\mathbf{x},\tilde{y}))}} } \quad (1.1)
\end{align}
$$

上記に対し、下記のように$s(y)$と$Z(\mathcal{Y})$を定義する。
$$
\large
\begin{align}
s(y) &= f_{\boldsymbol{\theta}}(\mathbf{x},y) \quad (1.2) \\
Z(\mathcal{Y}) &= \sum_{\tilde{y} \in \mathcal{Y}} \exp{(s(\tilde{y}))} = \sum_{\tilde{y} \in \mathcal{Y}} \exp{(f_{\boldsymbol{\theta}}(\mathbf{x},\tilde{y})))} \quad (1.3)
\end{align}
$$

$(1.2), \, (1.3)$式を元に$(1.1)$式は下記のように表せる。
$$
\large
\begin{align}
l_{\boldsymbol{\theta}}^{\mathrm{softmax}}(\mathbf{x},y) &= -\log{ \frac{\exp{(f_{\boldsymbol{\theta}}(\mathbf{x},y))}}{\displaystyle \sum_{\tilde{y} \in \mathcal{Y}} \exp{(f_{\boldsymbol{\theta}}(\mathbf{x},\tilde{y}))}} } \quad (1.1) \\
&= -s(y) + \log{Z(\mathcal{Y})} \quad (1.4)
\end{align}
$$

ここで$(1.4)$式の両辺をパラメータベクトル$\boldsymbol{\theta} \in \mathbb{R}^{p}$で方向微分すると下記が得られる。
$$
\large
\begin{align}
\nabla l_{\boldsymbol{\theta}}^{\mathrm{softmax}}(\mathbf{x},y) = – \nabla s(y) + \nabla \log{Z(\mathcal{Y})} \quad (1.5)
\end{align}
$$

ここまでの詳しい式変形は下記で取り扱った。

$(1.5)$式の取り扱いの際に語彙数$|\mathcal{Y}|$が大きいと出力層の計算量が大きくなるので、何らかの解決策があると良いが、上記の記事では重点サンプリングを用いた手法について取り扱った。当記事ではNCEと負例サンプリングに基づく手法を次節で取り扱う。

NEC・負例サンプリング

学習にあたっての基本的な方針

上記の重点サンプリングでは分配関数$Z$の近似を行ったが、当節では$Z$を未知のパラメータとみなして学習させる方法について取り扱う。この学習にあたっては、通常の最尤推定ではない目的関数を設定し、パラメータの推定を行う。

具体的には「訓練データ」と「無作為に生成したノイズ」を区別するような目的関数を用いることで$Z$の推定を行う。

以下、上記に基づく手法である「雑音対照推定(NCE; Noise Contrasive Estimation)」、「負例サンプリング(Negative Sampling)」についてそれぞれ取り扱った。

NCE

NCE(Noise Contrasive Estimation)では「訓練データ」と「ノイズの分布$q$から生成された標本」の識別を行うような分類器の学習を行う。分類を取り扱うにあたって、確率変数$D$を用いて「訓練データ」を$D=1$、「ノイズからの標本」を$D=0$で定義する。

ここで$D=0$が$D=1$の$k$倍出現しやすいと仮定するとき、$D$と単語に対応する$Y$の同時確率は$D=1$と$D=0$に対してそれぞれ下記のように表せる。
$$
\large
\begin{align}
P(D=1, Y=y) &= \frac{1}{k+1} p(y) \quad (2.1) \\
P(D=0, Y=y) &= \frac{k}{k+1} q(y) \quad (2.2)
\end{align}
$$

このとき、単語に関する周辺確率$P(Y=y)$は下記のように表せる。
$$
\large
\begin{align}
P(Y=y) &= P(D=1, Y=y) + P(D=0, Y=y) \\
&= \frac{1}{k+1} p(y) + \frac{k}{k+1} q(y) \quad (2.3)
\end{align}
$$

上記に基づいて単語$Y=y$がノイズからの標本である確率$P(D=0|Y=y)$は条件付き確率の定義式を元に下記のように得られる。
$$
\large
\begin{align}
P(D=0|Y=y) &= \frac{P(D=0, Y=y)}{P(Y=y)} \\
&= \frac{\displaystyle \frac{k}{\cancel{k+1}} q(y)}{\displaystyle \frac{1}{\cancel{k+1}} p(y) + \frac{k}{\cancel{k+1}} q(y)} \\
&= \frac{k q(y)}{p(y) + k q(y)} \quad (2.4)
\end{align}
$$

同様に単語$Y=y$が訓練データである確率$P(D=1|Y=y)$は下記のように得られる。
$$
\large
\begin{align}
P(D=1|Y=y) &= \frac{P(D=1, Y=y)}{P(Y=y)} \\
&= \frac{\displaystyle \frac{1}{\cancel{k+1}} p(y)}{\displaystyle \frac{1}{\cancel{k+1}} p(y) + \frac{k}{\cancel{k+1}} q(y)} \\
&= \frac{p(y)}{p(y) + k q(y)} \quad (2.5)
\end{align}
$$

ここで$1$つの訓練データ$y$に対して、ノイズ分布$q$からの$k$個の標本$\tilde{\mathcal{D}}=(\tilde{y}_{1}, \cdots , \tilde{y}_{k})$の無作為抽出を行う。この$k+1$個の事例に対して下記の関数$l_{\boldsymbol{\theta}}^{\mathrm{NCE}}(y)$を定義する。
$$
\large
\begin{align}
l_{\boldsymbol{\theta}}^{\mathrm{NCE}}(y) &= -\log{P(D=1|Y=y)} – \sum_{\tilde{y} \in \mathcal{D}} \log{P(D=0|Y=\tilde{y})} \\
&= -\log{\frac{p(y)}{p(y) + k q(y)}} – \sum_{\tilde{y} \in \mathcal{D}} \log{\frac{k q(\tilde{y})}{p(\tilde{y}) + k q(\tilde{y})}} \quad (2.6)
\end{align}
$$

上記の$(2.6)$式は$k+1$個の事例に対する$D$の負の対数尤度であり、$\boldsymbol{\theta}$は関数$\displaystyle p(y)=\frac{\exp{(s(y))}}{Z}=\exp{(s(y)+c)}$で用いられるパラメータである。

$\displaystyle p(y)=\frac{\exp{(s(y))}}{Z}=\exp{(s(y)+c)}$の$c$は下記のように解釈することができる。
$$
\large
\begin{align}
\exp{(s(y)+c)} &= \exp{(s(y))} \exp{(c)} \\
&= \frac{\exp{(s(y))}}{\exp{(-c)}} = \frac{\exp{(s(y))}}{Z} \\
Z &= \exp{(-c)} \quad (2.7)
\end{align}
$$

$(2.6)$式を$\boldsymbol{\theta}$について最適化する際に、このように導入した$c$を同時に学習させることで分配関数$Z$の計算を省略することができる。また、$Z=\exp{(-c)}=1$とおいても結果が変わらないという実験結果もあり、この場合は下記の$(2.8)$式のような目的関数を用いる。
$$
\large
\begin{align}
l_{\boldsymbol{\theta}}^{\mathrm{NCE}}(y) &= -\log{\frac{p(y)}{p(y) + k q(y)}} – \sum_{\tilde{y} \in \mathcal{D}} \log{\frac{k q(\tilde{y})}{p(\tilde{y}) + k q(\tilde{y})}} \quad (2.6) \\
&= -\log{\frac{\exp{(s(y))}}{\exp{(s(y))} + k q(y)}} – \sum_{\tilde{y} \in \mathcal{D}} \log{\frac{k q(\tilde{y})}{\exp{(s(\tilde{y}))} + k q(\tilde{y})}} \quad (2.8)
\end{align}
$$

雑音対照推定(NCE)は上記の$(2.6)$式や$(2.8)$式を用いてパラメータの推定を行う手法である。

負例サンプリング

負例サンプリング(Negative Sampling)はNCEの損失関数の$(2.6)$式の確率にシグモイド関数を用いて簡略化を行った手法である。負例サンプリングの目的関数$l_{\boldsymbol{\theta}}^{\mathrm{NS}}(y)$は下記のように定義される。
$$
\large
\begin{align}
l_{\boldsymbol{\theta}}^{\mathrm{NS}}(y) &= -\log{[\mathrm{sigmoid}(s(y))]} – \sum_{\tilde{y} \in \mathcal{D}} \log{[1-\mathrm{sigmoid}(s(y))]} \\
&= \log{\frac{\exp{(s(y))}}{\exp{(s(y))}+1}} – \sum_{\tilde{y} \in \mathcal{D}} \log{\frac{1}{\exp{(s(\tilde{y}))}+1}} \quad (2.9) \\
\mathrm{sigmoid}(x) &= \frac{\exp{(x)}}{\exp{(x)}+1}
\end{align}
$$

$(2.9)$式の$\tilde{y}$が一様分布によってサンプリングされる場合は、$(2.8)$式で$k=|\mathcal{Y}|$かつ$\displaystyle q(\tilde{y}) = \frac{1}{|\mathcal{Y}|}$である場合の式に一致することは抑えておくと良い。

一方で、負例サンプリングの論文では、単語の出現頻度に比例した確率であるユニグラム確率の$\displaystyle \frac{3}{4}$を使用すると単純なユニグラム確率や一様分布を使用する場合以上に性能が上がるとされる。この辺の設定は実験の前提にもよるので、参考に確認しておくで十分であると思われる。

参考文献

・NCE論文
・負例サンプリング論文

複数の行基本変形と基本行列(elementary matrix)の積の対応

行基本変形は基本行列(elementary matrix)の積による操作によって表すことができるなど、基本行列はよく出てくるので抑えておくと良いです。当記事では複数の行基本変形と基本行列の積の対応について取り扱いました。
作成にあたっては「チャート式シリーズ 大学教養 線形代数」の第$3$節「行列の構造」を主に参考にしました。

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

複数の行基本変形と基本行列の積

基本行列の定義

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

複数の行基本変形と基本行列の積の対応

「複数の行基本変形を行うこと」は「対応する基本行列を左から次々に掛ける」ことに対応する。具体例は次節で取り扱った。

基本行列の具体例の確認

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

基本例題$040$

・$[1]$
$2$行目に$3$を掛けたのちに$2$行目と$3$行目を入れ替える操作は行列$A$に$P_{23}P_{2}(3)$を左から掛ける演算に対応する。

・$[2]$
$2$行目に$3$行目の$-1$倍を加えたのちに$4$行目に$1$行目の$2$倍を加える操作は行列$A$に$P_{41}(2)P_{23}(-1)$を左から掛ける演算に対応する。

・$[3]$
$3$行目に$1$行目の$2$倍を加え、$2$行目と$4$行目を入れ替えたのちに$4$行目に$3$行目の$-3$倍を加える操作は行列$A$に$P_{43}(-3)P_{24}P_{31}(2)$を左から掛ける演算に対応する。