本記事は
Mathlog Advent Calendar 2021 12/13
の記事です.12/13の記事は道用基底さんalmost everywhereとルベーグ積分
1
でした.
ソフトマックス関数に興味を持ち、美しいと思った数値微分(差分)を書きます。
ソフトマックス関数$S_i(x)$を次式の実$n$変数関数とします。
$1 \leq i \leq n$
$$S_i(x_1,x_2, \cdots x_{n-1},x_n):=\frac{e^{x_i}}{\sum_{k=1}^{n} e^{x_{k}}}$$
$$0< S_i(x)<1$$
$$\sum_{i=1}^n S_i(x)=1$$
$$S_i(x_1+C,x_2+C, \cdots x_{n-1}+C,x_n+C)=S_i(x_1,x_2, \cdots x_{n-1},x_n)$$
$$ \frac{dS_i}{dx_j} =\delta_{i,j}S_i-S_iS_j$$
$$\frac{d\ log(S_i)}{dx_j} =\delta_{i,j}-S_j$$
$\delta_{i,j}$はクロネッカーのデルタ
$$u(x_1,x_2, \cdots x_{n-1},x_n):=\sum_{k=1}^{n} e^{x_{k}}$$
$$\frac{d\ log(u(x))}{dx_i}=S_i(x)$$
増分$ \triangle_j $と$ \bigtriangledown_j$を以下のように、$n$変数関数$f(x)$に作用する作用素とします。
$$ \triangle_jf(x):=f(x_1,x_2, \cdots x_j+h\cdots x_{n-1},x_n)$$
$$ \bigtriangledown_jf(x):=f(x_1,x_2, \cdots x_j-h\cdots x_{n-1},x_n)$$
この作用素は四則演算を保ちます。
$$\frac{\triangle_jf(x)-f(x)}{h}$$
$$\frac{\triangle_jf(x)-\bigtriangledown_jf(x)}{2h}$$
両方とも$ \lim_{h \to 0} $で微分に一致します。
参照記事
数値微分における3つの差分とその誤差について
以下では"よい"ソフトマックス関数専用の数値微分を提案します。
今回はソフトマックス関数の性質を用いて、刻み幅$h$によらず、
$1$階偏微分と一致するような数値微分であり、
また前進差分か中心差分を刻み幅$h$で変形した数値微分を"よい"とします。
次の論文のように、差分と微分の誤差を平均作用素で埋めるではなく。
差分(数値微分)を変えることを考えました。
微分方程式の “理想的” 差分化
$$\triangle_ju(x)=u(x)+e^{x_j+h}-e^{x_j}$$
$$\bigtriangledown_ju(x)=u(x)+e^{x_j-h}-e^{x_j}$$
$$\triangle_jS_i(x)=\frac{e^{x_i+\delta_{i,j}h}}{\triangle_j u(x)}$$
$$\bigtriangledown_jS_i(x)=\frac{e^{x_i-\delta_{i,j}h}}{\bigtriangledown_j u(x)}$$
$$\frac{\triangle_jS_i(x)-S_i(x)}{e^h-1}\frac{\triangle_ju(x)}{u(x)}=\frac{dS_i}{dx_j} =\delta_{i,j}S_i-S_iS_j$$
前進差分との乗法的違いに
$$\frac{h}{e^h-1}$$
と
$$\frac{\triangle_ju(x)}{u(x)}$$
があります。2つ目を変形すると、次が成り立ちます。
$$\frac{\triangle_ju(x)}{u(x)}=1+(e^h-1)S_j\\
\frac{\triangle_ju(x)}{u(x)}=\frac{e^{x_k+\delta_{j,k}h}}{e^{x_k+\delta_{j,k}h}}\frac{\triangle_ju(x)}{u(x)}=\frac{e^{\delta_{j,k}h}S_k(x)}{\triangle_jS_k(x)}$$
$$\frac{\triangle_jS_i(x)-\bigtriangledown_jS_i(x)}{{e^h-e^{-h}}}\frac{\triangle_ju(x)\bigtriangledown_ju(x)}{u(x)^2}=\frac{dS_i}{dx_j} =\delta_{i,j}S_i-S_iS_j$$
中心差分との乗法的違いに
$$\frac{2h}{e^h-e^{-h}}=\frac{h}{sinh(h)}=\frac{h}{2cosh(\frac{h}{2})sinh(\frac{h}{2})}$$
と
$$\frac{\triangle_ju(x)\bigtriangledown_ju(x)}{u(x)^2}$$
があります。2つ目を変形すると、次が成り立ちます。
$$\frac{\triangle_ju(x)\bigtriangledown_ju(x)}{u(x)^2}=(1+(e^h-1)S_j)(1+(e^{-h}-1)S_j)=cosh(\frac{h}{2})^2-(2S_j(x)-1)^2sinh(\frac{h}{2})^2\\
$$
$cosh$と$sinh$は
双曲線関数
$$ \frac{\triangle_ju(x)\bigtriangledown_ju(x)}{u(x)^2}=\frac{e^{x_k+\delta_{j,k}h}}{e^{x_k+\delta_{j,k}h}}\frac{\triangle_ju(x)}{u(x)}\frac{e^{x_k-\delta_{j,k}h}}{e^{x_k-\delta_{j,k}h}}\frac{\bigtriangledown_ju(x)}{u(x)}=\frac{S_k(x)^2}{\triangle_jS_k(x)\bigtriangledown_jS_k(x)}$$
$$\frac{d\ log(u(x))}{dx_i}=\frac{du(x)}{dx_i}\frac{1}{u(x)}=S_i(x)$$
を差分でかくと、
$$\frac{\triangle_iu(x)-u(x)}{e^h-1}\frac{1}{u(x)}=S_i(x)$$
$$\frac{\triangle_iu(x)-\bigtriangledown_iu(x)}{e^h-e^{-h}}\frac{1}{u(x)}=S_i(x)$$
$$\frac{d \frac{1}{S_i(x)}}{dx_j}=-\frac{d S_i(x)}{dx_j}\frac{1}{S_i(x)^2}$$
$$\frac{\triangle_j \frac{1}{S_i(x)}-\frac{1}{S_i(x)}}{e^h-1}e^{\delta_{i,j}h}=-\frac{d S_i(x)}{dx_j}\frac{1}{S_i(x)^2}
$$
$$\frac{\triangle_j \frac{1}{S_i(x)}-\bigtriangledown_j \frac{1}{S_i(x)}}{e^h-e^{-h}}=-\frac{d S_i(x)}{dx_j}\frac{1}{S_i(x)^2}
$$
前進差分や中心差分との違いが$x$に依存しない。
明日の Mathlog Advent Calendar 2021 12/13 は quawaiの記事です、お楽しみに!