活性化関数とは、ニューラルネットワークにおいて入力信号の総和を非線形に変換するための仕組みです。
これが存在しなければ、どれだけ層を重ねても単なる一次変換の連続にすぎず、複雑なパターンを学習することはできません。
活性化関数はネットワークに「非線形性」という知能の源を与え、画像認識や自然言語処理のような高度なタスクを可能にしています。
活性化関数の役割
活性化関数の本質は、入力された信号の強弱に応じて出力を変化させる「スイッチ」のような働きにあります。
小さな信号は抑制し、大きな信号は通過させることで、モデルは特徴を取捨選択しながら学習を進めます。
これにより、単純な線形モデルでは表現できない複雑な関係性を捉えることが可能になります。
代表的な活性化関数と特徴
シグモイド関数
出力が0から1の範囲に収まる古典的な関数で、確率のような解釈が可能です。
ただし、入力が大きくなると出力がほぼ固定化し、勾配(変化率)が極端に小さくなる「勾配消失」が起きやすい点が難点です。
そのため、現在は主に出力層(二値分類など)に限定して用いられます。
tanh関数
出力範囲が−1から1と広く、シグモイドよりも中心がゼロに近いため、学習の安定性が高い関数です。
しかし、大きな入力値に対してはやはり勾配が小さくなりやすく、深いネットワークでは勾配消失の問題を完全には避けられません。
ReLU関数
現在最も広く使われている活性化関数です。
入力が正の値のときはそのまま出力し、負の値のときはゼロにします。
この単純さが計算の高速化を実現し、学習を劇的に効率化しました。
シグモイドやtanhに比べて勾配が消失しにくく、深層学習の成功を支えた要素の一つです。
ただし、負の入力が続くと出力が常にゼロになり、ニューロンが学習しなくなる「死んだReLU」問題が発生することがあります。
Leaky ReLU
ReLUの改良版で、負の領域でもわずかに勾配を残す仕組みを持ちます。
これにより、死んだReLUの問題を軽減できます。
画像生成モデルやCNNの一部でよく採用されています。
ELU
ReLUと同様の高速性を保ちつつ、負の入力に対しても滑らかな出力を返す関数です。
出力の平均がゼロ付近に保たれ、学習が安定しやすいという特徴があります。
ReLUの短所を補う設計として登場しました。
Swish
Googleが提案した比較的新しい関数で、入力値をシグモイド関数で重み付けして滑らかに変化させます。
ReLUよりも性能が向上することが多く、EfficientNetなどの最新モデルに採用されています。
BERTなどのTransformer系モデルでは、Swishではなく次に述べるGELUが主流です。
GELU
標準正規分布に基づいて入力値を確率的に通過させる関数で、Swishに似た滑らかさを持ちながら理論的な裏付けも強いのが特徴です。
BERTをはじめとする多くの自然言語処理モデルで標準的に使われています。
活性化関数の選び方
タスクやネットワークの種類によって、最適な関数は異なります。
- 一般的な全結合ネットワークではReLUかLeaky ReLUが標準です。
- 画像系の深いCNNではReLU、ELU、Swishがよく使われます。
- RNNやLSTMでは、tanhやシグモイドが好まれます。
- Transformer系モデルではGELUが主流です。
- 出力層では、二値分類ならシグモイド、多クラス分類ならSoftmaxが使われます。
勾配消失問題と活性化関数
活性化関数は誤差を逆伝播させる際の勾配(誤差情報)に直接関わります。
シグモイドやtanhのように出力が一定範囲に圧縮される関数は、大きな入力に対して勾配が小さくなり、深い層での学習が困難になります。
一方、ReLUやGELUなどの関数は勾配がより安定して伝わるため、深層学習の学習効率を大幅に改善しました。
活性化関数の進化の流れ
初期はシグモイドやtanhといった生物学的に発想された関数が主流でしたが、勾配消失の問題から実用的な限界がありました。
ReLUの登場によって深層ネットワークの学習が飛躍的に安定し、その後はLeaky ReLUやELUなどの改良版が生まれました。
さらに近年では、SwishやGELUのように滑らかで勾配伝達の効率が高い関数が登場し、自然言語処理や画像認識などの最先端モデルを支えています。
まとめ
活性化関数は、ニューラルネットワークの「非線形性」を担う心臓部です。
モデルの学習速度、安定性、そして最終的な精度に大きく関わります。
現在では、ReLUやその派生型が実用の中心ですが、タスクや構造によって最適な選択は異なります。
つまり、活性化関数は「万能な定数」ではなく、モデル設計における戦略的な選択肢なのです。
以上、機械学習の活性化関数についてでした。
最後までお読みいただき、ありがとうございました。
