この文章の目的
ハイパボリックタンジェントを数値パラメタ設定でよく使うのだが、実際に値をどのように設定すれば値を繋いだことになるのかよく覚えておらず、毎回計算して求めているので、ここに書いておくことにした。
ハイパボリックタンジェント
2024年現在的には、深層学習の活性化関数として最もよく使われている
$$
\tanh(x) = \frac{e^x - e^{-x}}{e^{x} + e^{-x}}
$$
である。$\tanh$は-1から1へ変化する関数なので、何か二つの値を滑らかに繋ぎたい場合は、数値計算でも入力パラメタの調整にしばしば使われる。その際は
$$
f(x) = \frac{1}{2}\left[1 + \tanh \frac{(x-x_0)}{d}\right]
$$
というようになる。この場合は、値は0から1を取るようになり、$x_0$は値の切り替わりの座標、$d$は大雑把に切り替わりの幅である。
ハイバボリックタンジェントは以下のような形をしている。
(a) $\tanh(x)$, (b) $[1 + \tanh(x)]/2$, (c) (b)の図を縦軸を対数にしたもの。
ここでは
$$
f(x) = \frac{1}{2}\left[1 + \tanh x\right]
$$
という関数を考える。$x_0=0$、$d=1$とした場合である。すると逆関数は
$$
x = \frac{1}{2}\log\frac{f(x)}{1-f(x)}
$$
となる。$f(x)=10^{-2},~10^{-3},~10^{-4}$となる$x$を計算すると、それぞれ
$x = -2.23,~-3.45,~-4.61$程度となる。精度3桁程度で値を滑らかに繋ぎたい場合は、切り替わりの座標$x_0$を設定した後、$x_0 - h<x< x_0 + h$と定義、$h=3.45d$と設定するのが良い。