2022年9月19日

自作OSで文字列をPC98に表示する

すごい。また高校生が自作OSを作ってる。そして参考文献に川合さんの30日OS自作本。この本、多くの人の人生に影響を与えている。僕もこういう本が書きたい。30日並列MD本とか書きたい。

いやしかし、最近の高校生は部誌をMarkdownで集めてGitHubで公開するのか。時代だな・・・

RBMの学習の勉強。

ようやくKL距離と対数尤度関数が結びついた。忘れない内にまとめておく。

確率変数$\hat{X}$を考える。この確率変数はN種類の値をとり得るとする。$\hat{X} = i$となることを「事象$i$」と呼ぶ。ある事象$i$が起きる真の確率を$q_i$とし、それをモデルで再現したいとする。モデルパラメータが$\theta$の時に、そのモデルにおいて事象$i$が起きる確率を$p_i(\theta)$とする。真の分布とモデルによる分布のKL距離は

$$ \begin{aligned} KL(\vec{q}|\vec{p}(\theta)) & \equiv \sum_i^N q_i \log \frac{q_i}{p_i} \ &= \sum_i^N q_i \log q_i - \sum_i^N q_i \log p_i \end{aligned} $$

この距離をパラメータ$\theta$で微分するので、第一項は消え、第二項だけ考えれば良い。

さて、いま真の分布がわからない代わりに、$T$回事象を観測し、その$k$回目の事象が$S_k$であったとしよう。この時、尤度関数$l(\theta)$は

$$ l(\theta) = \prod_k^T P(\hat{X} = S_t | \theta) $$

で表される。ただし$P(\hat{X} = S_t | \theta)$は、パラメータ$\theta$のもとで、確率変数が値$S_t$を取る確率である。後のために対数尤度にしておく。

$$ \log l(\theta) = \sum_t^T \log P(\hat{X} = S_t | \theta) $$

さて、$T$回の試行のうち、事象$i$が起きた回数を$n_i$とする。すると、先程の尤度関数の和を試行に関する和から、事象の種類に関する和に書き直すことができる。

$$ \log l(\theta) = \sum_i^N n_i \log P(\hat{X} = i | \theta) $$

$P(\hat{X} = i | \theta)$は、パラメータ$\theta$において事象$i$が起きる確率であるから$p_i$のことである。したがって、

$$ \log l(\theta) = \sum_i^N n_i \log p_i $$

両辺を試行回数$T$で割ると、

$$ \frac{1}{T}\log l(\theta) = \sum_i^N \frac{n_i}{T} \log p_i $$

$T$回の試行のうち、事象$i$が起きた回数が$n_i$なので、事象$i$が起きる確率$q_i$は$n_i/T$で近似できる。すると、

$$ \begin{aligned} \frac{1}{T}\log l(\theta) &= \sum_i^N \frac{n_i}{T} \log p_i\ &\sim \sum_i^N q_i \log p_i \end{aligned} $$

これは、KL距離の第二項にほかならない。