今回はJupyter Notebookやブログサイトの記事などで数式を綺麗に表示させるための方法をご紹介したいと思います。
Jupyter Notebookでは、デフォルトで数式表示の設定がされているので記法さえ覚えてしまえばこのように表示することができます。
$$\hat{y} = \theta_0 + \theta_1x_1 + \theta_2x_2 + \cdots+ \theta_nx_n$$
自前でWebサイトやブログサイトを運営されている方は、MathJaxというJava Scriptのコードを入手し、HTMLファイルの<head>.....</head>内に組み込む必要があります。
まずは自前のWebサイトにJava Scriptのコードを組み込んで、機械学習で使われる数式を表示させていきたいと思います。
こちらのサイトを参考に組込みました。
<!-- base.html -->
<!doctype html>
<html>
<head>
<title>Blog</title>
<!-- MathJax-->
<script>
MathJax = {
chtml: {
matchFontHeight: false
},
tex: {
inlineMath: [['$', '$']]
}
};
</script>
<script id="MathJax-script" async
src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js">
</script>
</head>
<body>
</body>
</html>
ヘッダー内に組込み、ファイルを保存し、サイトをリロードしたらさっそく記述していきましょう。
記法に関してはこちらのサイトがコピー&ペーストをできるように一覧を設けてくれています。
ここからはJupyter Notebook上でも同じ記法です。
基本的に、数式を表示させたい部分をドルマークで囲みます($......$
)。
見出しのように数式を表示させるにはドルマークふたつを両端に置く($$......$$
)。
<font size='3'>$$ \hat{y} = \theta_0 + \theta_1x_1 + \theta_2x_2 + \cdots + \theta_nx_n $$</font>
$$ \hat{y} = \theta_0 + \theta_1x_1 + \theta_2x_2 + \cdots + \theta_nx_n $$
文章中に数式を表示させる場合は、数式の部分にだけドルマークをひとつずつ両端に置きます($.....$
)。
$ \hat{y} $ は予測された値で、$ n $ は特徴量数。
$\hat{y}$ は予測された値で、$n$ は特徴量数。
※注意1 ドルマーク($
)の数をしっかり揃えないと数式のレイアウトが崩れてしまいます。例えば今みたいな文章中に$
を打ち込んだ際はひとつ余分に多くなることになります。その場合は、逆クォート3つ(```)を両端で囲んで表示させると崩れないで済みます。
※注意2 もうひとつは、過去に書いた記事内に($
)を打ち込んでいる場合、文章中の字体が崩れていないか確かめる必要があります(<pre>や<code>タグ内では表示されません)。
それでは、機械学習モデルで使われる数式一部(回帰モデル)ですが、MathJaxを使って表示させてみたいと思います。
$$ \hat{y} = \theta_0 + \theta_1x_1 + \theta_2x_2 + \cdots + \theta_nx_n $$
$$ \hat{y} = \theta_0 + \theta_1x_1 + \theta_2x_2 + \cdots + \theta_nx_n $$
$$ \hat{y} = h_\theta(x)= \theta^T \cdot x $$
$$ \hat{y} = h_\theta(x)= \theta^T \cdot x $$
$$ \hat{\theta} = (\boldsymbol{X}^T \cdot \boldsymbol{X})^{-1} \cdot \boldsymbol{X}^T \cdot y $$
$$ \hat{\theta} = (\boldsymbol{X}^T \cdot \boldsymbol{X})^{-1} \cdot \boldsymbol{X}^T \cdot y $$
$$ MSE(\boldsymbol{X}, h_\theta) = \frac{1}{m} \sum_{i=1}^m(\theta^T\cdot x^{(i)} - y^{(i)})^2 $$
$$ MSE(\boldsymbol{X}, h_\theta) = \frac{1}{m} \sum_{i=1}^m(\theta^T\cdot x^{(i)} - y^{(i)})^2 $$
$$ RMSE(\boldsymbol{X}, h) = \sqrt{\frac{1}{m} \sum_{i=1}^m(h(x^{(i)})-y^{(i)})^2} $$
$$ RMSE(\boldsymbol{X}, h) = \sqrt{\frac{1}{m} \sum_{i=1}^m(h(x^{(i)})-y^{(i)})^2} $$
$$ MAE(\boldsymbol{X}, h) = \frac{1}{m} \sum_{i=1}^m | h(x^{(i)})-y^{(i)} | $$
$$ MAE(\boldsymbol{X}, h) = \frac{1}{m} \sum_{i=1}^m | h(x^{(i)})-y^{(i)} | $$
$$ \frac{\partial}{\partial \theta_j}MSE(\theta) = \frac{2}{m}\sum_{i=1}^{m}(\theta^T \cdot x^{(i)} - y^{(i)})x_j^{(i)} $$
$$ \frac{\partial}{\partial \theta_j}MSE(\theta) = \frac{2}{m}\sum_{i=1}^{m}(\theta^T \cdot x^{(i)} - y^{(i)})x_j^{(i)} $$
$$ \nabla_\theta MSE(\theta) = \left(\begin{array}{c} \frac{\partial}{\partial\theta_0}MSE(\theta) \\\ \frac{\partial}{\partial\theta_1}MSE(\theta) \\\ \vdots \\\ \frac{\partial}{\partial\theta_n}MSE(\theta) \end{array} \right) = \frac{2}{m}\boldsymbol{X}^T \cdot (\boldsymbol{X} \cdot \theta - y) $$
※注意 ベクトル空間内の改行を(\\\
)としていますが、本来は(\\
)であります。
$$ \nabla_\theta MSE(\theta) = \left(\begin{array}{c} \frac{\partial}{\partial\theta_0}MSE(\theta) \\ \frac{\partial}{\partial\theta_1}MSE(\theta) \\ \vdots \\ \frac{\partial}{\partial\theta_n}MSE(\theta) \end{array} \right) = \frac{2}{m}\boldsymbol{X}^T \cdot (\boldsymbol{X} \cdot \theta - y) $$
$$ \theta^{(\mathrm{next \ step})} = \theta - \eta\nabla_\theta MSE(\theta) $$
$$ \theta^{(\mathrm{next \ step})} = \theta - \eta\nabla_\theta MSE(\theta) $$
$$ J(\theta) = MSE(\theta) + \alpha\frac{1}{2}\sum_{i=1}^{n}\theta_i^2 $$
$$ J(\theta) = MSE(\theta) + \alpha\frac{1}{2}\sum_{i=1}^{n}\theta_i^2 $$
$$ \hat{\theta} = (\boldsymbol{X}^T \cdot \boldsymbol{X} + \alpha\boldsymbol{A})^{-1} \cdot \boldsymbol{X}^T \cdot y $$
$$ \hat{\theta} = (\boldsymbol{X}^T \cdot \boldsymbol{X} + \alpha\boldsymbol{A})^{-1} \cdot \boldsymbol{X}^T \cdot y $$
$$ J(\theta) = MSE(\theta) + \alpha\sum_{i=1}^n|\theta_i| $$
$$ J(\theta) = MSE(\theta) + \alpha\sum_{i=1}^n|\theta_i| $$
$$ \mathrm{where \ sign}(\theta_i) = \begin{eqnarray}\begin{cases} -1 & \mathrm{if} \ \theta_i < 0 \\\ 0 & \mathrm{if} \ \theta_i = 0 \\\ +1 & \mathrm{if} \ \theta_i > 0\end{cases}\end{eqnarray} $$
$$ g(\theta,J) = \nabla_\theta MSE(\theta) + \alpha \left(\begin{array}{c} \mathrm{sign}(\theta_1) \\\ \mathrm{sign}(\theta_2) \\\ \vdots \\\ \mathrm{sign}(\theta_n) \end{array}\right) $$
※注意 ベクトル空間内の改行を(\\\
)としていますが、本来は(\\
)であります。
$$ \mathrm{where \ sign}(\theta_i) = \begin{eqnarray}\begin{cases} -1 & \mathrm{if} \ \theta_i < 0 \\ 0 & \mathrm{if} \ \theta_i = 0 \\ +1 & \mathrm{if} \ \theta_i > 0\end{cases}\end{eqnarray} $$
$$ g(\theta,J) = \nabla_\theta MSE(\theta) + \alpha \left(\begin{array}{c} \mathrm{sign}(\theta_1) \\ \mathrm{sign}(\theta_2) \\ \vdots \\ \mathrm{sign}(\theta_n) \end{array}\right) $$
$$ J(\theta) = MSE(\theta) + \tau\alpha\sum_{i=1}^n |\theta_i | + \frac{1-\tau}{2}\alpha\sum_{i=1}^n \theta_i^2 $$
$$ J(\theta) = MSE(\theta) + \tau\alpha\sum_{i=1}^n |\theta_i | + \frac{1-\tau}{2}\alpha\sum_{i=1}^n \theta_i^2 $$
$$ \hat{p} = h_\theta (x) = \sigma(\theta^T \cdot x) $$
$$ \hat{p} = h_\theta (x) = \sigma(\theta^T \cdot x) $$
$$ \sigma(t) = \frac{1}{1+exp(-t)} $$
$$ \sigma(t) = \frac{1}{1+exp(-t)} $$
$$ \hat{y} = \begin{eqnarray}\begin{cases} 0 & \mathrm{if} \ \hat{p} < 0.5 \\\ 1 & \mathrm{if} \ \hat{p} \geqq 0.5 \end{cases}\end{eqnarray} $$
$$ \hat{y} = \begin{eqnarray}\begin{cases} 0 & \mathrm{if} \ \hat{p} < 0.5 \\ 1 & \mathrm{if} \ \hat{p} \geqq 0.5 \end{cases}\end{eqnarray} $$
$$ c(\theta) = \begin{eqnarray}\begin{cases} -log(\hat{p}) & \mathrm{if} \ y = 1 \\\ -log(1-\hat{p}) & \mathrm{if} \ y = 0 \end{cases}\end{eqnarray} $$
$$ c(\theta) = \begin{eqnarray}\begin{cases} -log(\hat{p}) & \mathrm{if} \ y = 1 \\ -log(1-\hat{p}) & \mathrm{if} \ y = 0 \end{cases}\end{eqnarray} $$
$$ J(\theta) = -\frac{1}{m}\sum_{i=1}^m \left[ y^{(i)}log \left(\hat{p}^{(i)} \right) + (1 - y^{(i)})log \left(1 - \hat{p}^{(i)} \right) \right] $$
$$ J(\theta) = -\frac{1}{m}\sum_{i=1}^m \left[ y^{(i)}log \left(\hat{p}^{(i)} \right) + (1 - y^{(i)})log \left(1 - \hat{p}^{(i)} \right) \right] $$
$$ \frac{\partial}{\partial \theta_j}J(\theta) = \frac{1}{m}\sum_{i=1}^m \left(\sigma(\theta^T \cdot x^{(i)}) - y^{(i)} \right) x_j^{(i)} $$
$$ \frac{\partial}{\partial \theta_j}J(\theta) = \frac{1}{m}\sum_{i=1}^m \left(\sigma(\theta^T \cdot x^{(i)}) - y^{(i)} \right) x_j^{(i)} $$
$$ s_k(x) = (\theta^{(k)})^T \cdot x $$
$$ s_k(x) = (\theta^{(k)})^T \cdot x $$
$$ = \frac{exp(s_k(x))}{\sum_{j=1}^{K} exp(s_j(x))} $$
$$ \hat{p}_k = \sigma(s(x))_k $$
$$ = \frac{exp(s_k(x))}{\sum_{j=1}^{K} exp(s_j(x))} $$
$$ \hat{p}_k = \sigma(s(x))_k $$
$$ = \mathrm{argmax}_k \ \left((\theta^{(k)})^T \cdot x \right) $$
$$ = \mathrm{argmax}_k \ s_k (x) $$
$$ \hat{y} = \mathrm{argmax}_k \ \sigma(s(x))_k $$
$$ = \mathrm{argmax}_k \ \left((\theta^{(k)})^T \cdot x \right) $$
$$ = \mathrm{argmax}_k \ s_k (x) $$
$$ \hat{y} = \mathrm{argmax}_k \ \sigma(s(x))_k $$
$$ J(\Theta) = -\frac{1}{m} \sum_{i=1}^m \sum_{k=1}^K y_k^{(i)} log \left(\hat{p}_k^{(i)} \right) $$
$$ J(\Theta) = -\frac{1}{m} \sum_{i=1}^m \sum_{k=1}^K y_k^{(i)} log \left(\hat{p}_k^{(i)} \right) $$
$$ = \frac{1}{m} \sum_{i=1}^m \left(\hat{p}_k^{(i)} - y_k^{(i)} \right) x^{(i)} $$
$$ \nabla_{\theta^{(k)}} J(\Theta) $$
$$ = \frac{1}{m} \sum_{i=1}^m \left(\hat{p}_k^{(i)} - y_k^{(i)} \right) x^{(i)} $$
$$ \nabla_{\theta^{(k)}} J(\Theta) $$
他のモデルの数式については、この記事の続きとするとか、別記事にするか検討しています。
とりあえずですが、今回はMathJax導入や数式の記法について少しばかりご紹介できたので、参考になれば幸いです。
それでは以上となります。
最後までご覧いただきありがとうございました。