本文へ移動

G検定(ジェネラリスト検定)

たんひかんすう

tanh 関数

Tanh Function

tanh 関数は、ニューラルネットワークの活性化関数の1つで、入力 z に双曲線正接 tanh(z) を当てて出力します。入力が0のとき出力は0になり、出力はマイナス1からプラス1の間に収まります。シグモイド関数 σ とは tanh(z)=2σ(2z)-1 の関係にあり、シグモイド系の関数を使う場合には tanh 関数の方がよい性能を示すことが多いとされます。

詳しい説明

tanh 関数とは

tanh 関数は、ニューラルネットワークの活性化関数の1つです。活性化関数とは、各ユニットが入力の重み付きの和にバイアスを足した値 を受け取り、その値を次の層へ渡す前に変換するための関数 のことです。tanh 関数は、この として双曲線正接 を使います。名前の tanh は、双曲線正接を表す英語 hyperbolic tangent の略記です。

深層学習の教科書であるイアン・グッドフェロー(Ian Goodfellow)らの『Deep Learning』(2016年)は、第6章でこの関数を と定義し、 であることを示しています。入力が0のとき出力も0になる点が、この関数の基本的な性質です。

tanh の値を求める式

tanh の具体的な形は、次の式で表されます。この式そのものはグッドフェローらの該当の節には書かれておらず、数学で一般に使われている標準的な定義として示します。

はネイピア数で、およそ2.71828です。 はどんな に対しても正の値なので、分子は分母より必ず小さくなります。そのため出力は1を超えず、同じ理由でマイナス1を下回りません。

数値を使った計算例

まず のときを計算します。 なので、分子は 、分母は です。したがって となり、教科書が示す と一致します。

次に のときです。、 なので、分子は 、分母は です。 なので、 になります。

にすると、分母は同じまま分子の符号だけが入れ替わるので、 です。入力の符号を反転すると、出力の符号も反転します。

さらに入力を大きくすると、、、 となります。入力を1から2へ1だけ増やすと出力は約0.20増えますが、2から3では約0.031、3から4では約0.0043しか増えません。出力は1に近づくほど動きにくくなり、グラフは両端で平らになるS字の形を描きます。

シグモイド関数との関係

シグモイド関数は、次の式で定義される活性化関数です。出力は0から1の間に収まり、 です。

グッドフェローらは、tanh 関数とシグモイド関数の間に次の関係があることを示しています。

この式は、入力を2倍してシグモイド関数に通し、その出力を2倍してから1を引くと tanh になるという意味です。0から1だった出力の範囲はマイナス1から1へ広がり、 だった中央の点は0へ移ります。つまり2つの関数は同じS字の形をしていて、目盛りの取り方と中心の位置が違います。

数値で確かめます。 では なので、 となり、 と一致します。 では なので、 となり、先に求めた と小数第4位まで一致します。末尾の差は四捨五入によるものです。 では なので、 となり、 とも合います。

飽和と隠れ層での扱い

グッドフェローらは、シグモイド関数や tanh 関数のようなシグモイド系の活性化関数は、定義域の大部分で飽和すると述べています。飽和とは、入力の絶対値が大きい範囲で出力がほぼ一定の値に張り付き、入力を変えても出力がほとんど動かない状態です。計算例で を3から4へ増やしても出力が約0.0043しか増えなかったのは、この様子を数値で見たものです。

出力がほとんど動かない範囲では、誤差を小さくする方向へ重みを少しずつ動かす勾配にもとづく学習が難しくなります。このため同書は、入力から出力へ一方向に計算が流れるフィードフォワードネットワークの隠れ層で、シグモイド系の関数を使うことを推奨していません。隠れ層の既定の推奨としては、 で定義される ReLU 関数を挙げています。

そのうえで同書は、シグモイド系の活性化関数を使わなければならない場合には、tanh 関数の方がシグモイド関数よりもよい性能を示すことが多いと述べています。tanh 関数は飽和の性質をシグモイド関数と共有しながら、 という点でシグモイド関数と異なります。

試験で問われること

G検定

  • tanh 関数は活性化関数 g(z)=tanh(z) として使われ、tanh(0)=0 となり、出力はマイナス1からプラス1の間に収まります。
  • シグモイド関数 σ との間には tanh(z)=2σ(2z)-1 の関係があり、σ(0)=1/2 に対して tanh(0)=0 となる点が2つの関数の違いです。
  • シグモイド系の活性化関数は入力の絶対値が大きい範囲で飽和して勾配にもとづく学習を難しくするため、フィードフォワードネットワークの隠れ層での使用は推奨されず、既定の推奨は ReLU 関数です。
  • シグモイド系の活性化関数を使わなければならない場合には、tanh 関数の方がシグモイド関数よりもよい性能を示すことが多いとされます。

最終更新日: 2026/09/23