tanh関数とは?機械学習での役割・式・使い方を解説

tanh関数とは?機械学習での役割・式・使い方を解説

AIの初心者

「tanh関数」って、どういうものですか?AIや機械学習の説明でよく見るのですが、何に使うのかがまだ分かりません。

AI専門家

tanh関数は、入力された値を-1から1までの範囲に変換する関数だよ。ニューラルネットワークでは、各層の出力を調整する活性化関数として使われることがあるんだ。

AIの初心者

-1から1に変換することには、どんな意味があるんですか?

AI専門家

出力が0を中心に広がるので、信号の正負や強弱を表しやすくなるんだ。シグモイド関数より学習の偏りを抑えやすい一方で、入力が大きすぎると勾配が小さくなる点には注意が必要だよ。

tanh関数とは。

tanh関数は、機械学習で使われる代表的な活性化関数の一つです。入力を-1から1の範囲へ変換し、ニューラルネットワークの中で情報の流れを調整します。この記事では、tanh関数の意味、数式、出力範囲、シグモイド関数との違い、勾配消失問題との関係、使いどころを初心者向けに整理します。

tanh関数が入力を-1から1へ変換するイメージ

tanh関数とは何か

tanh関数は、入力値を-1から1の範囲に変換する関数です。読み方は「タンエイチ」または「ハイパボリックタンジェント」で、日本語では双曲線正接関数と呼ばれます。

機械学習では、ニューラルネットワークの各ノードが受け取った値をそのまま次の層へ渡すのではなく、活性化関数を通して変換します。これにより、単純な直線的な計算だけでは表せない複雑な関係をモデルが学習できるようになります。

tanh関数の特徴は、出力が0を中心に正負へ分かれることです。入力が正の方向に大きくなると出力は1に近づき、負の方向に大きくなると-1に近づきます。入力が0のとき、出力も0になります。この性質により、信号の向きや強さを比較的扱いやすい形で表現できます。

項目 tanh関数の特徴
別名 双曲線正接関数、ハイパボリックタンジェント
主な用途 ニューラルネットワークの活性化関数
出力範囲 -1から1
中心 0を中心にした対称な出力
注意点 入力が大きすぎると出力が飽和し、勾配が小さくなる

tanh関数の式と出力範囲

\(tanh(x) = \frac{e^x – e^{-x}}{e^x + e^{-x}}\)

tanh関数は、上のように指数関数を使って表されます。\(e\) は自然対数の底で、約2.718の値を持ちます。式だけを見ると難しく感じますが、実務や学習では手計算するより、Python、NumPy、PyTorch、TensorFlowなどの関数を使うのが一般的です。

tanh関数のS字曲線と出力範囲のイメージ

重要なのは、式を丸暗記することよりも、出力が常に-1から1の範囲に収まると理解することです。入力 \(x\) が大きな正の値になると出力は1に近づき、入力 \(x\) が大きな負の値になると出力は-1に近づきます。

また、tanh関数は0付近では比較的直線に近い動きをします。つまり、入力が小さく変化したときに出力も分かりやすく変化します。一方で、入力が大きくなるほど曲線は平らになり、出力は1または-1に近い値で頭打ちになります。この「頭打ち」の性質を飽和と呼びます。

活性化関数として使われる理由

ニューラルネットワークでは、入力値に重みを掛けて足し合わせるだけでは、どれだけ層を重ねても表現できる関係が限られます。そこで活性化関数を挟み、非線形な変換を加えます。tanh関数はなめらかで微分可能なため、勾配を使って学習するニューラルネットワークと相性があります。

tanh関数の利点は、出力が0中心になる点です。シグモイド関数のように0から1だけを出力する関数では、出力の平均が正の方向へ偏りやすくなります。tanh関数では負の値も正の値も出せるため、層をまたいだ信号の偏りを抑えやすくなります。

さらに、出力範囲が決まっていることは計算の安定にもつながります。非常に大きな値がそのまま後続の層へ流れると、数値計算が不安定になることがあります。tanh関数は値を一定範囲に収めるため、学習中の信号を扱いやすくします。

シグモイド関数との違い

tanh関数とよく比較されるのがシグモイド関数です。どちらもS字の曲線を持つなめらかな活性化関数ですが、出力範囲と中心が異なります。

tanh関数とシグモイド関数の出力範囲を比較する図

項目 シグモイド関数 tanh関数
出力範囲 0から1 -1から1
中心 0.5付近 0付近
出力の偏り 正の値に偏りやすい 正負のバランスを取りやすい
主な用途 確率のように0から1で表したい出力 中間層やRNN内部の信号変換
注意点 入力が大きいと勾配が小さくなる 同じく飽和領域では勾配が小さくなる

tanh関数はシグモイド関数よりゼロ中心の出力を作りやすいため、中間層の活性化関数としてはシグモイドより扱いやすい場面があります。ただし、どちらも入力が大きい領域では曲線が平らになり、勾配が小さくなる点は共通しています。

勾配消失問題との関係

勾配消失問題とは、ニューラルネットワークの層が深くなるにつれて、誤差を伝えるための勾配が非常に小さくなり、前の層ほど学習が進みにくくなる現象です。学習の指示が弱くなりすぎるため、重みの更新がほとんど起きなくなります。

深いニューラルネットワークで勾配が小さくなるイメージ

tanh関数は、シグモイド関数に比べるとゼロ中心であり、微分の最大値も大きいため、学習が進みやすい場面があります。そのため、古典的なニューラルネットワークやRNNの説明では、シグモイド関数より有利な活性化関数として紹介されることがあります。

ただし、tanh関数は勾配消失問題を完全に解決する関数ではありません。入力が大きくなり、出力が1または-1に近づく飽和領域では、tanh関数でも勾配は小さくなります。深いネットワークでは、重み初期化、正規化、残差接続、ReLU系の活性化関数など、複数の工夫を組み合わせて学習を安定させます。

tanh関数が使われる場面

tanh関数は、画像認識、自然言語処理、音声認識、時系列予測など、機械学習のさまざまな文脈で登場します。特に重要なのが、時間とともに変化するデータを扱うリカレントニューラルネットワーク(RNN)です。

RNNや時系列データでtanh関数が使われるイメージ

RNNは、過去の情報を現在の判断へ反映するための仕組みを持っています。文章の続きを予測する、音声の流れを解析する、センサーデータの変化を読むといったタスクでは、前後のつながりが重要です。tanh関数は、RNN内部で状態を更新する際の候補値を作るために使われることがあります。

LSTMやGRUのような発展形のモデルでも、ゲートにはシグモイド関数、内部状態の候補にはtanh関数のように、役割に応じて活性化関数を使い分ける設計が見られます。これは、0から1で「通す量」を表す処理と、-1から1で「信号の内容」を表す処理を分けるためです。

ReLUなど他の活性化関数との使い分け

現在の深いニューラルネットワークでは、隠れ層の活性化関数としてReLUやLeaky ReLUなどのReLU系関数がよく使われます。ReLUは正の入力をそのまま通し、負の入力を0にする単純な関数で、計算が軽く、深いネットワークでも勾配が伝わりやすいという利点があります。

一方、tanh関数には、出力を-1から1に収め、0中心の信号を作れるという強みがあります。そのため、RNN系の内部状態や、出力範囲を明確に制御したい場面では今でも重要です。

関数 特徴 使われやすい場面
シグモイド関数 0から1の値を出す 確率、ゲート、二値分類の出力
tanh関数 -1から1の0中心の値を出す RNN内部、状態更新、正負の信号表現
ReLU 正の値を通し、負の値を0にする 深いニューラルネットワークの隠れ層
Leaky ReLU 負の値も少しだけ通す ReLUで負側の情報が消えすぎる場合

初心者は、tanh関数を「古い関数」とだけ覚えるのではなく、出力範囲を-1から1に制御したいときに意味を持つ関数として理解すると整理しやすくなります。

初心者が押さえたい注意点

tanh関数を学ぶときは、まず「出力範囲」「ゼロ中心」「飽和」の3点を押さえるのが近道です。式や微分の詳細は後からでも構いません。機械学習で大切なのは、その関数を使うと学習中の信号がどう変わるかを理解することです。

また、tanh関数はどの場面でも最適な活性化関数ではありません。深いCNNや一般的な多層ニューラルネットワークではReLU系が選ばれることも多く、RNNや出力範囲を制御したい場面ではtanh関数が適することがあります。モデルの種類、扱うデータ、出力に求める意味によって使い分けます。

実装では、自分で指数関数の式を書くより、ライブラリに用意された関数を使うのが安全です。数値的に安定した実装が使われているため、極端に大きな入力値でも扱いやすくなります。

まとめ

tanh関数は、入力値を-1から1の範囲に変換する双曲線正接関数です。ニューラルネットワークでは活性化関数として使われ、0を中心にした出力、なめらかな曲線、範囲が限定された値を作れる点に特徴があります。

シグモイド関数と比べると、tanh関数はゼロ中心の出力を作りやすく、学習時の偏りを抑えやすい利点があります。ただし、飽和領域では勾配が小さくなるため、勾配消失問題を完全に防ぐわけではありません。RNNやLSTMなどの文脈では今でも重要であり、ReLU系の関数と役割を分けて理解することが大切です。

更新履歴

日付 内容
2025年1月31日 初回公開
2026年6月13日 式、比較、使い分けを補い検索意図に沿う流れへ調整