1行定義
tanh関数とは、入力を−1から1の範囲の値に変換する、原点を中心に対称なS字形の活性化関数のことです。
くわしく
tanh関数は、ニューラルネットワークの活性化関数の1つで、双曲線正接関数(ハイパボリックタンジェント)とも呼ばれます。式は次のとおりです。
tanh(x) = (e^x − e^(−x)) / (e^x + e^(−x))
形と性質
グラフはシグモイド関数と同じS字形です。ただし出力の範囲が違い、シグモイド関数は0から1、tanh関数は−1から1の値をとります。入力が0のとき出力は0で、原点を中心に対称な形をしています。シグモイド関数σとは tanh(x) = 2σ(2x) − 1 の関係にあり、σを横に縮めて縦に2倍に伸ばし、下に1ずらした形です。
導関数は 1 − tanh(x)^2 で、入力が0のとき最大値1をとります。シグモイド関数の導関数の最大値は0.25なので、tanh関数のほうが逆伝播で勾配が小さくなりにくくなります。
シグモイド関数より好まれた理由
1つ目は、上で述べた勾配の大きさです。2つ目は、出力が0を中心に正と負の両側に分布することです。シグモイド関数の出力は常に正なので、次の層の重みの勾配がそろって同じ符号になりやすく、更新がジグザグに進みがちです。tanh関数ではこの偏りが小さくなり、学習が進みやすくなります。
残る弱点と現在の使われ方
入力の絶対値が大きくなると、出力は−1か1に張り付き、導関数は0に近づきます(飽和)。そのため、層が深いと勾配消失問題は依然として起きます。現在、深いネットワークの隠れ層では、主にReLU関数が使われています。
一方で、tanh関数は今も使われています。RNNやLSTMでは、内部の状態を−1から1の範囲に収める役割でtanh関数を使うのが一般的です。
覚え方
「tanhは中心0、範囲±1、傾きの最大は1」と覚えます。
G検定での出題
出題のされ方
出力の範囲と導関数の最大値を、シグモイド関数と比べる形で問われます。勾配消失問題がシグモイド関数より起きにくいものの完全には防げない点や、ReLU関数との違い、RNNでの利用も問われます。
混同しやすい用語
| 用語 | 意味 |
|---|---|
| tanh関数このページの用語 | 入力を−1から1の範囲の値に変換する、原点を中心に対称なS字形の活性化関数 |
| シグモイド関数 | どんな実数の入力も0から1の間の値に変換する、なめらかなS字形の関数 |
◯×チェック
次の文が正しいか、誤りかを選んでください。
-
tanh関数は、入力が0のとき出力が0.5になる。
答えを見る
答え × 誤り
入力0で出力0.5になるのはシグモイド関数です。tanh関数は原点を通り、入力0で出力0になります。
-
tanh関数のグラフは、シグモイド関数のグラフを縦横に伸び縮みさせ、上下に平行移動した形になっている。
答えを見る
答え ◯ 正しい
tanh(x) = 2σ(2x) − 1 の関係があり、どちらも同じS字形です。違いは出力の範囲と、原点を通るかどうかです。
-
LSTMでは、セルの状態から出力を作るときなどに、値を−1から1の範囲に収めるためtanh関数が使われる。
答えを見る
答え ◯ 正しい
LSTMでは、ゲートの開き具合にはシグモイド関数、値そのものの変換にはtanh関数を使うのが一般的です。
この用語の練習問題
出典
- G検定 試験出題範囲(シラバス2024)第1.4版 (技術分野 項目12 活性化関数)
- Yann LeCun, Léon Bottou, Genevieve B. Orr, Klaus-Robert Müller, Efficient BackProp, Neural Networks: Tricks of the Trade, Lecture Notes in Computer Science 1524, 9–50 (1998)
- Ian Goodfellow, Yoshua Bengio, Aaron Courville, Deep Learning, MIT Press (2016) (6.3 Hidden Units)