1. tanh 関数とは [概要]
tanh関数 (Hyperbolic tangent function, 双曲線正接関数) とは,ニューラルネットワークにおいて,隠れ層に用いられる活性化関数の1つである.シグモイド関数と関数形が似ている「シグモイド形関数」ではあるが,少し異なった「ゼロ中心・出力[-1,1]」の関数形により,シグモイド関数の短所を克服できる活性化関数である.
この記事では tanh関数と,そのゲート機構付き版であるGated Tanh Unit(GTU)について紹介する.
tanhは,3層MLPや,LSTM・GRUなどの隠れ層でよく用いられていた.それが,WaveNet [Oord et al., 2016a] やGated PixelCNN [Oord et al., 2016b]の活性化関数に,(かなり深い)自己回帰型生成モデルの精度をよくするために,「ゲート機構 + tanh」の組み合わせであるGTU(gated tanh unit, ゲート付きtanhユニット) の使用が提案された.これ以降,WaveNetを使用したボコーダなどにも,GTUを通してtanhがよく使われる (2.2節).
一方,CNNでは,ReLU [He et al.,2015] が隠れ層の活性化関数として,tanhやシグモイドの代わりにメインで使われるようになって以降,tanhの出番は激減した.
2. tanh 関数の定義

tanh関数は,以下のように定義される,
\[ \text{tanh}(x) = \frac{\exp(x) – \exp(-x) }{\exp(x) + \exp(-x) } \tag{2.1}\]
活性化関数の記事 2.1.1で説明しているように,「ステップ関数を近似」している微分可能な関数である.
2.1 シグモイド関数との違い・関係

tanh関数は,以下のようにシグモイド関数をスケール・シフトした関数に相当している:
\[ \text{tanh}(x) = 2 \sigma(2x) + 1 \tag{2.2}\]
図2のように,シグモイド関数は,このおかげで出力範囲が[-1, 1]の範囲に代わり,tanhの[-1, 0]とは異なって「平均値がゼロ」になる.これにより,活性化値に「ゼロ中心のガウス分布」を期待した学習が行えるので,学習が安定・高速化しやすくなるメリットが出てくる.
(ゼロ平均による正規化のメリットについて詳しくは,バッチ正規化や,局所応答正規化の記事などを参照のこと)
ただし,LSTMやGRUの繰り返しユニット(ブロック)の中で,シグモイドもtanhも両方とも使われている.自然言語処理の界隈では,(Transformerが流行するまで)LSTM・GRUは文章系列モデルの基本道具であったので,ゲート機構やアテンション機構とともに,シグモイドもtanhも使われ続けていくこととなった.
2.2 GTU(ゲート付きtanhユニット)
以下の,LSTMスタイルの「ゲート付きのtanh」を,小ブロックの塊とみなし,Gated PixelCNNやWaveNetのように「畳み込み層と連携して」使用する際に,改めて名前をつけたものがGTU(Gated Tanh Unit)である:
\[ \tanh( \bm{W}_1 * \bm{x}) \odot \sigma ( \bm{W}_2 * \bm{x}) \tag{2.3}\]
ここで$*$は畳み込み演算子であり,$\odot$は要素積を示す.要するに,tanh(2.3式 1項目)に,ゲート係数もシグモイド関数(2.3式 2項目)で一緒に学習する活性化関数を,GTUと呼ぶ.
多くの人は,LSTMを通して,この「ゲート付きtanh」を以前から使っていた.それが,Gated PixelCNN・WaveNetの登場で,自己回帰型の深層生成モデルに対して(LSTMと同様に)その有効性が実証された.よって,このユニットに名前がつけられ,LSTM以外のところでも,畳み込み層と共に使用して,応用されるようになった.
まず画像の深層生成モデルであるGated PixelCNN において,活性化関数としてGTUの使用が提案された [Oord et al., 2016b].畳み込みで,自己回帰モデルにより高次元データを生成するには,かなりの長期依存関係を学習しておく必要がある.そこで,LSTMで既に実績があった「ゲート機構の導入」を著者らが閃いたというのがGated PixelCNNである.当然,LSTMでも全く同じユニットは使われていたが,畳み込み層を使用した生成モデルで,改めてLSTM形式の「ゲート機構 + tanh」のまとまりに,GTUという名前がつけられて活性化関数層として使われたのが, Gated Pixel CNNやWaveNetの研究である.
そして,同著者グループによる,高解像度な音生成ネットワーク「WaveNet」にもGTUは採用された [Oord et al., 2016a].WaveNetは高解像度な音波形を生成できる自己回帰型生成モデルであり,1d-膨張畳み込み層を用いて高サンプリングレートの波形データを生成する中で,活性化関数にGTUを使用する.その後の音響生成や音声生成,ならびにTTSなどのテキスト音声合成などでよく用いられるようになったモデルであり,WaveNetを介してGTUがよく用いられることとなった.
また,OordらのDeepMindチームは,WaveNetの1-d 膨張畳み込みの発想を,機械翻訳向けに転用したByteNet [Kalchbrenner et al., 2016] においても,引き続きGTUを使用し,その効用を示した.そのFacebook AI によるフォロー研究の [Dauphin et al., 2017] でも,GTU(Gated Tanh Unit)の改善版が提案された.
3. tanh 関数のまとめ
tanhは,ゼロ中心の出力ができる設計がされた活性化関数である.ゼロ中心でないシグモイド関数より,学習中の正規化で有利になるので,3層MLPやCNN初期はよく隠れ層にtanhは使われていた.しかし,画像認識だと,ReLU登場以前は,CNNでも隠れ層によく用いられていた.
一方,LSTM・GRUのユニット内でtanhは使われていたので自然言語処理ではお世話になることが多かった.また,「ゲート機構 × tanh」の組み合わせがGTU(gated tanh unit)という名前をつけて,Gated PixelCNN・WaveNetでの使用を皮切りに,個別に活用されるようになった.以降GTUは,WaveNet界隈の音合成においてよく使われるようになっている.
関連記事
関連書籍
- 深層学習 改訂第2版 (機械学習プロフェッショナルシリーズ) 岡谷貴之,講談社,2022.
- 2.1.2 活性化関数 (p14)
- Pythonで学ぶ音声合成(機械学習実践シリーズ) . 山本 龍一 , 高道 慎之介.インプレス,2021.
References
- [Dauphin et al.,2017] Dauphin YN, Fan A, Auli M, Grangier D. Language modeling with gated convolutional networks. In ICML, 2017.
- [He et al., 2015] He, K., Zhang, X., Ren, S., Sun, J.: Delving deep into rectifiers: Surpassing human-level performance on imagenet classification. In, ICCV, 2015.
- [Kalchbrenner et al., 2016] N. Kalchbrenner, L. Espeholt, K. Simonyan, A. v. d. Oord, A. Graves, K. Kavukcuoglu, Neural machine translation in linear time, CoRR abs/1610.10099. (2016)
- [Oord et al., 2016a]A. vand en Oord, S. Dieleman, H. Zen, K. Simonyan, O. Vinyals, A. Graves, N. Kalchbrenner, A. Senior, and K. Kavukcuoglu, “WaveNet: A generative model for raw audio,” arXiv preprint arXiv:1609.03499, 2016.
- [Oord et al., 2016b] Aaron van den Oord, Nal Kalchbrenner, Lasse Espeholt, Oriol Vinyals, Alex Graves, et al. Conditional image generation with pixelcnn decoders. In NIPS, 2016.