【深層学習】tanh (双曲線正接関数)の定義や微分を解説

Posted: , Category: 可視化 , 数学 , 深層学習

深層学習の勉強をしていると、LSTMやRNNなどの活性化関数として、tanh(双曲線正接関数、ハイパボリックタンジェント関数)が頻出します。

tanhという略語に初めて出会った人は、少し面食らってしまう人もいるのではないでしょうか。

今回は、このtanhについてわかりやすく解説します。

tanhの定義

まず、tanhは活性化関数の1つです。ReLUやsigmoidと同じ位置付けであることを意識してください。

tanhの関数系は次のようになっています。

tanhの関数系
\begin{equation}
\begin{split}
tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}}
\end{split}
\end{equation}

tanhを可視化する

import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots(figsize=(10, 3), dpi=120)
x = np.linspace(-10, 10, 100)
def tanh(x):
    return (np.exp(x) - np.exp(-x)) / (np.exp(x) + np.exp(-x))

y_tanh = tanh(x)
ax.plot(x, y_tanh, label="tanh function")
ax.legend()

tanhの微分形

証明は省略しますが、tanhの微分形は次のようになります。

tanhの微分
\begin{equation}
\begin{split}
tanh'(x) &= {= 1 - (\frac{e^x - e^{-x}}{e^x + e^{-x}})^2} \\
&= 1 - \{tanh(x) \}^2
\end{split}
\end{equation}

この$tanh(x)$の微分系は、ニューラルネットワークの誤差逆伝搬法にも頻繁に登場するので、この微分系は覚えておくとよいでしょう。

tanhとsigmoid関数の比較

活性化関数の値として、0~1の値を返すシグモイド関数と、今回のtanh関数を比較してみます。

グラフを見るとわかると思いますが、xの極限においては、tanhは次のようになります。

\begin{split}
\lim_{x \rarr \infin} tanh(x) &= 1 \\
\lim_{x \rarr -\infin} tanh(x) &= -1
\end{split}

シグモイド関数が0~1の範囲で値をとるのに対し、tanhは[-1, 1]の範囲で値をとることがわかります。

【広告】
統計学的にあなたの悩みを解決します。
仕事やプライベートでお悩みの方は、ベテラン占い師 蓮若菜にご相談ください。

機械学習と情報技術