0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

tanhで滑らかに値をゼロにつなげる時の目安

Posted at

この文章の目的

ハイパボリックタンジェントを数値パラメタ設定でよく使うのだが、実際に値をどのように設定すれば値を繋いだことになるのかよく覚えておらず、毎回計算して求めているので、ここに書いておくことにした。

ハイパボリックタンジェント

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)の図を縦軸を対数にしたもの。

tanh.png

ここでは
$$
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$と設定するのが良い。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?