シグモイド関数の弱点を改善した活性化関数がtanh関数(ハイパボリックタンジェント関数)です。この記事では「-1から1」「中心が0」「微分の最大値が1」という3つの数字の意味を軸に、シグモイド関数との違いを整理します。

📖 ひと言でいうと

tanh関数とは、任意の実数を-1から1の範囲に変換するS字型の活性化関数です。日本語では双曲線正接関数と呼ばれ、シグモイド関数と形はよく似ていますが、出力の範囲と中心が異なります。

例えるなら、シグモイド関数が「0点から100点」で採点する採点者だとすると、tanh関数は「マイナス100点からプラス100点」で採点する採点者です。良いものにはプラス、悪いものにはマイナスと、0を中心に両側へ振れるため、後工程が「プラス評価かマイナス評価か」を扱いやすくなります。厳密には、出力の中心が0になることでデータの中心化が容易になる、という性質に対応します。

🖼 1枚でわかるtanh関数

tanh関数の要点
  • 出力範囲 — -1から1。中心が0なのでデータの中心化が容易
  • 微分の最大値 — 1(シグモイド関数は0.25)。勾配が消失しにくい
  • 限界 — 微分値はほとんどの場所で1未満。勾配消失を完全には防げない
  • 位置づけ — 隠れ層でシグモイドの置き換え候補。LSTMなどでも利用
つくもち屋「G検定対策」SUMMARY

📘 公式テキストの説明

シグモイド関数が0から1の範囲を取るのに対して、tanh関数は-1から1の範囲を取る。これは出力の中心が0になるため、データの中心化が容易になるとも言える。シグモイド関数の微分の最大値が0.25であるのに対し、tanh関数の微分の最大値は1であるため、勾配が消失しにくい。この特性により、一般的なディープニューラルネットワークの隠れ層でシグモイド関数が使われている場合、それをtanh関数に置き換えると性能が改善する可能性がある。ただし、この微分の"最大値"が1であり、1より小さい数になってしまうケースが多いため、勾配消失問題を完全に防ぐことはできない。実際に、勾配消失問題は深いネットワークにおいては依然として問題となり得る。

公式説明は徹頭徹尾「シグモイド関数との比較」で書かれています。比較ポイントは2つで、①出力範囲(0〜1に対して-1〜1、中心が0)、②微分の最大値(0.25に対して1)です。そして最後の「完全には防げない」という限定が試験でも重要です。最大値が1というだけで、入力が0から離れるとすぐ1未満に落ちるため、深いネットワークでは勾配消失が依然として起こり得ます。

🔍 しっかり理解する

中心が0であることの利点

シグモイド関数の出力は常に0より大きい(0〜1)ため、次の層へ渡される値はすべて正に偏ります。一方、tanh関数の出力は-1から1で中心が0なので、正負両方の値をバランスよく次の層へ渡せます。これが「データの中心化が容易になる」という意味です。

入力データの前処理でも、平均を0に揃える中心化(センタリング)は学習を安定させる定石です。tanh関数は、層から層へ流れる途中の信号についてもこの「中心0」の状態を保ちやすくしてくれる、と捉えるとイメージしやすいでしょう。

微分の最大値0.25と1の差が効いてくる理由

誤差逆伝播法では、出力層から入力層へ勾配を伝える際、各層で活性化関数の微分値が掛け合わされます。シグモイド関数の微分は最大でも0.25なので、10層遡れば最大でも0.25を10回掛けることになり、勾配は急激に小さくなります。tanh関数なら微分の最大値は1なので、条件が良ければ勾配の減衰をかなり抑えられます。この差が「隠れ層のシグモイド関数をtanh関数に置き換えると性能が改善する可能性がある」と言われる根拠です。

ただし注意が必要です。tanh関数の微分が1になるのは入力が0のときの1点だけで、入力が0から離れるにつれて微分値は1未満へ、さらに大きく離れるとほぼ0へと落ちていきます(グラフの両端で平らになるためです)。1未満の数を何度も掛ければやはり勾配は縮んでいくので、勾配消失問題の緩和にはなっても根本解決にはなりません。この限界を突破したのが、正の入力で微分値が常に1のReLU関数です。

3つの活性化関数の中での立ち位置

活性化関数の変遷は「シグモイド関数→tanh関数→ReLU関数」という改善の流れで整理できます。

シグモイド関数
出力0〜1・微分最大0.25。勾配消失が起きやすい
tanh関数
出力-1〜1・微分最大1。改善するが完全ではない
ReLU関数
正の側で微分が常に1。深い層の学習を実用化

tanh関数は「シグモイド関数の改良版だが、深い層ではReLU関数に道を譲った中継ぎ」という立ち位置です。ただし過去の遺物ではなく、現在も活躍の場があります。

💡 具体例で考える

tanh関数が今も現役で使われている代表例が、時系列データを扱うLSTM(Long Short-Term Memory)です。LSTMの内部では、記憶セルに書き込む候補の値や出力の値を作る箇所でtanh関数が使われています。ここでtanh関数が選ばれる理由の1つは、出力が-1から1に収まるという性質です。記憶セルの値を一定の範囲に保ち、「増やす方向(正)にも減らす方向(負)にも」バランスよく更新できることが、この場所の役割に合っているのです。

もし0〜1しか出せないシグモイド関数をこの場所に使うと、更新が常にプラス方向に偏ってしまいます。「値そのものを渡す場所にはtanh、割合(ゲートの開き具合)を表す場所にはシグモイド」という使い分けは、両者の出力範囲の違いを理解する好例です。

⚠️ よくある誤解・紛らわしい用語

💡 ポイント
  • 「tanh関数なら勾配消失しない」は誤り — 微分の「最大値」が1なだけで、ほとんどの入力で1未満です。深いネットワークでは勾配消失は依然として起こり得ます。
  • シグモイド関数との混同 — S字型という見た目は似ていますが、出力範囲(0〜1と-1〜1)、中心(0.5付近と0)、微分の最大値(0.25と1)がすべて異なります。
  • ReLU関数との違い — ReLUは正の側で微分値が常に1ですが、tanhで微分値が1になるのは入力0の1点だけです。「常に1」か「最大で1」かの違いが勾配消失への強さの差になります。
  • 数字の取り違え — 「微分の最大値0.25」はシグモイド関数の数値です。tanh関数は1。出題で入れ替えられやすいので正確に覚えましょう。

📝 試験でのポイント

💡 ポイント
  • 「出力が-1から1」「出力の中心が0でデータの中心化が容易」という記述からtanh関数を特定する問題が想定されます。
  • シグモイド関数との微分最大値の比較(0.25対1)は数値ごと問われ得ます。どちらがどちらの数値かを確実に。
  • 「隠れ層のシグモイド関数をtanh関数に置き換えると性能が改善する可能性がある」という公式テキストの表現は、そのまま正誤判定に使われそうな一文です。
  • 「勾配消失問題を完全に防ぐことはできない」という限定を落とした選択肢(完全に解決する等)は誤りと判断しましょう。

📚 まとめ

tanh関数は、出力が-1から1で中心が0のS字型活性化関数です。シグモイド関数と比べて、出力の中心化が容易で、微分の最大値も0.25に対して1と大きいため勾配が消失しにくく、隠れ層での置き換えで性能改善が期待できます。ただし微分値が1未満になる場合が多く、勾配消失を完全には防げません。シグモイド関数との数値比較と、LSTMなどでの現役の使いどころをセットで押さえておきましょう。