活性化関数は、ニューラルネットワークに非線形性を与える心臓部です。この項目では、シグモイド・tanh・ReLU・Leaky ReLU・GELUの定義と性質、そして勾配消失問題との関係を学びます。各関数の式・値域・微分はE資格の計算問題の定番です。
📖 概要
全結合層の線形変換だけを何層重ねても、全体としては1つの線形変換にしかなりません。各層の出力に非線形な活性化関数を挟むことで、初めて深いネットワークが複雑な関数を表現できるようになります。
活性化関数の歴史は勾配消失問題との戦いでもあります。古くから使われたシグモイド関数やtanhは滑らかで確率的な解釈もしやすい一方、入力の絶対値が大きい領域で微分がほぼ0になる「飽和」を起こし、深いネットワークでは勾配が層を遡るほど指数的に減衰してしまいます。この問題を大きく緩和したのがReLUであり、その改良としてLeaky ReLU、さらに滑らかな性質を持つGELUが登場し、GELUはTransformer系のモデルで広く採用されています。
🔍 キーワード解説
シグモイド関数
シグモイド関数(ロジスティックシグモイド)は
σ(x) = 1 / (1 + exp(-x))
で定義され、任意の実数を0〜1の範囲に押し込みます。出力を確率と解釈できるため、2値分類の出力層では現在も標準的に使われます。微分は σ'(x) = σ(x)(1 - σ(x)) と自身の出力だけで書ける便利な形をしており、その最大値は x=0 のときの0.25です。
弱点は、|x| が大きい領域で微分がほぼ0になる飽和です。このため深いネットワークの隠れ層の活性化関数としては勾配消失を招きやすく、現在は隠れ層にはReLU系が使われることが多くなっています。また、出力の中心が0でない(常に正である)ことも学習を遅くする一因とされます。
温度パラメータ T を導入した σ(x/T) という形もよく使われます。Tを大きくすると曲線がなだらかになり出力が0.5に近づき(分布が平滑化され)、Tを小さくすると急峻になりステップ関数に近づきます。ソフトマックス関数でも同様に exp(z_k/T) の形で温度が使われ、知識蒸留で教師モデルの出力分布を軟らかくする用途などが知られています。
勾配消失
勾配消失は、誤差逆伝播の際に各層の活性化関数の微分が繰り返し掛け合わされることで、入力に近い層ほど勾配が指数的に小さくなり、学習が進まなくなる問題です。シグモイドの微分は最大でも0.25なので、層を重ねるだけで勾配の上限は0.25の累乗で縮んでいきます。飽和しにくい活性化関数(ReLU系)の採用、適切な重み初期化、バッチ正規化、残差接続などが代表的な対策です。
ReLU, Leaky ReLU
ReLU(Rectified Linear Unit)は
ReLU(x) = max(0, x)
というシンプルな関数です。正の領域では微分が常に1で飽和しないため、勾配消失を大きく緩和し、深層学習の実用化を支えました。計算も極めて軽量です。微分は x>0 で1、x<0 で0です(x=0では微分不可能ですが、実装上は0または1を割り当てます)。一方、負の入力に対して出力も勾配も0になるため、あるユニットが常に負の入力しか受けなくなると学習が止まる「dying ReLU」と呼ばれる問題が起こりえます。
Leaky ReLUはこの弱点への対策で、負の領域にも小さな傾き α(例: 0.01)を持たせた
LeakyReLU(x) = x (x > 0), αx (x ≤ 0)
です。負の側でも勾配が0にならないため、ユニットが死ににくくなります。傾きαを学習可能なパラメータにしたPReLUという派生もあります。
GELU
GELU(Gaussian Error Linear Unit)は、入力xに「標準正規分布の累積分布関数 Φ(x)」を掛けた
GELU(x) = x * Φ(x)
で定義される滑らかな活性化関数です。直感的には「入力を確率的に通すか通さないかの期待値」であり、大きな正の入力はほぼそのまま通し、大きな負の入力はほぼ0にし、0付近では滑らかに遷移します。ReLUと似た形状ですが全域で滑らかで、0付近でわずかに負の値をとる点が特徴です。BERTやGPTなどTransformer系モデルの標準的な活性化関数として広く使われています。実装ではtanhを使った近似式が用いられることもあります。
tanh(双曲線関数)
tanh(双曲線正接)は双曲線関数の一つで、
tanh(x) = (exp(x) - exp(-x)) / (exp(x) + exp(-x))
と定義され、値域は -1〜1 です。シグモイドとは tanh(x) = 2σ(2x) - 1 の関係にあり、形は似ていますが出力の中心が0である点が異なります。中心が0であるため、シグモイドより学習が進みやすいとされ、隠れ層の活性化関数としてはシグモイドより好まれてきました。微分は tanh'(x) = 1 - tanh(x)^2 で、最大値は x=0 のときの1です。ただし、やはり両端で飽和するため勾配消失は避けられず、現在はRNN(LSTMやGRUの内部)などで使われるのが主な活躍の場です。
📝 試験でのポイント
- 各関数の式・値域・微分(σ'=σ(1-σ)、tanh'=1-tanh^2、ReLUは x>0 で1)を使った計算問題は最頻出です。σ'の最大値0.25も覚えておきましょう
- シグモイドとtanhの対比(値域0〜1 vs -1〜1、出力中心が0かどうか)、シグモイドとtanhの関係式は正誤問題で問われます
- 「シグモイド/tanhの飽和→勾配消失、ReLUで緩和」という因果関係の説明問題が出やすいです
- ReLUのdying ReLU問題と、Leaky ReLUが負側に小さな傾きを持たせて対策していることをセットで押さえましょう
- GELUが x*Φ(x)(正規分布の累積分布関数を利用)で定義され、Transformer系で使われることは新しめの頻出ポイントです
- 温度パラメータの効果(大きいと分布が平滑に、小さいと先鋭に)も確認しておきましょう
📚 まとめ
活性化関数はネットワークに非線形性を与える要素であり、シグモイドとtanh(双曲線関数)は滑らかだが飽和により勾配消失を招きやすく、ReLUは正側で勾配1を保つことでこれを緩和しました。Leaky ReLUは負側の勾配0(dying ReLU)への対策、GELUは滑らかな確率的ゲートとしてTransformer系で標準化しています。式・値域・微分・弱点をセットで整理することが得点への近道です。
