tanh関数とは
双曲線正接関数(\(\tanh(x)\))は、すべての実数xに対して定義される、なめらかなS字型(シグモイド型)の関数です。指数関数 \(e^{x}\) と \(e^{-x}\) の差を和で割った比として定義されます。出力は常に -1 から 1 の間に厳密に収まり、\(\tanh(-x) = -\tanh(x)\) が成り立つ奇関数です。機械学習の分野では、tanhはニューロンの活性化関数として広く使われています。出力が0を中心に分布する(ゼロ中心)ため、0〜1の範囲を取るシグモイド関数よりも勾配法による学習が速く収束しやすいという利点があります。
このツールの使い方
xに任意の実数を入力すると、\(\tanh(x)\)の値が瞬時に表示されます。あわせて、微分積分・物理・誤差逆伝播(バックプロパゲーション)で役立つ2種類の導関数も計算できます。負の数、小数、絶対値の非常に大きな値もそのまま入力可能です。xが大きな正の値のとき出力は +1 に、大きな負の値のとき -1 に飽和(漸近)します。
計算式の解説
基本となる定義式は $$\tanh(x) = \frac{e^{x} - e^{-x}}{e^{x} + e^{-x}}$$ です。分母は常に2以上になるため、ゼロ除算は決して起こりません。1次導関数は $$\frac{d}{dx}\tanh(x) = 1 - \tanh^{2}(x)$$ というシンプルな恒等式で表され、\(\operatorname{sech}^{2}(x)\) とも書けます。さらに微分すると、2次導関数は $$\frac{d^{2}}{dx^{2}}\tanh(x) = -2\,\tanh(x)\left(1 - \tanh^{2}(x)\right)$$ となります。|x|が非常に大きい場合の数値的な安定性を確保するため、内部ではオーバーフローを避けるために \(e^{-2x}\) を用いた変形式で計算しています。
計算例(x = 0.5)
\(e^{0.5} = 1.6487212707\)、\(e^{-0.5} = 0.6065306597\) を用いると、$$\tanh(0.5) = \frac{1.0421906110}{2.2552519304} = 0.4621171573$$ となります。1次導関数は $$1 - 0.4621171573^{2} = 0.7864477623$$ 2次導関数は $$-2 \times 0.4621171573 \times 0.7864477623 = -0.7269989018$$ です。
よくある質問(FAQ)
tanhの値域は? 開区間 (-1, 1) です。両端の値に限りなく近づきますが、決して到達しません。
tanh(0) はいくつ? ちょうど 0 になります。このとき \(f'(0) = 1\)、\(f''(0) = 0\) です。
なぜシグモイドではなくtanhを使うの? tanhはゼロ中心(出力が0を軸に対称)であるため、ニューラルネットワークの学習を高速化できる場合があります。一方、ロジスティックシグモイドは0〜1の正の値しか出力しません。