ニューラルネットワークの学習能力と表現力を左右する重要な要素、「活性化関数」。G検定の「機械学習の具体的手法」においても頻出のトピックです。この記事では、ニューラルネットワークの中級学習者を対象に、活性化関数の基本的な役割から主要な種類、特にReLUファミリーや勾配消失問題との関連、そして出力層での適切な使い分けまで、深く掘り下げて解説します。
活性化関数とは? – ニューロンの出力を決めるスイッチ
ニューラルネットワークは、多数の「ニューロン」と呼ばれる計算ユニットが層状に結合したモデルです。各ニューロンは、前の層のニューロンから複数の入力を受け取り、それぞれに「重み」を掛けて合計します(この合計値に「バイアス」を加えることもあります)。
u=i∑wixi+b
ここで、xi は入力、wi は重み、b はバイアス、u は入力の重み付き総和です。
活性化関数 (Activation Function) は、この総和 u を入力として受け取り、ニューロンの最終的な出力 z を決定する関数 f です。
z=f(u)
つまり、活性化関数はニューロンが次の層にどのような信号を送るか(どの程度「活性化」するか)を決定する、重要な役割を担っています。
なぜ活性化関数が必要なのか? – 非線形性の導入
活性化関数の最も重要な役割は、ニューラルネットワークに非線形性 (Non-linearity) を導入することです。
もし活性化関数が存在しない、あるいは活性化関数が線形関数(例: f(u)=au+b)だった場合、何が起こるでしょうか?線形変換は、何度繰り返しても結局は線形変換のままです。つまり、どれだけ層を深く重ねても、そのネットワーク全体は単一の線形変換(単層のネットワーク)で表現できてしまいます。
f3(f2(f1(x)))=flinear(x)
これでは、複雑なデータ分布やパターンを学習することができません。現実世界の問題の多くは非線形であり、これに対応するためには、ネットワーク自体が非線形な表現能力を持つ必要があります。活性化関数(特に非線形なもの)を各ニューロンに適用することで、層を重ねるごとに表現力が向上し、複雑な関数を近似できるようになるのです。
主要な活性化関数の種類と特徴
活性化関数には様々な種類があり、それぞれに特徴や適した用途があります。代表的なものを見ていきましょう。
ステップ関数 (Step Function)
- 数式: $$ f(u) = \begin{cases} 1 & (u > \theta) \ 0 & (u \le \theta) \end{cases} $$ (θ は閾値、通常は0)
- 特徴: 最も初期のニューラルネットワーク(パーセプトロン)で用いられた、最も単純な活性化関数。入力が閾値を超えると1、そうでなければ0を出力します。
- 利点: 実装が容易。ニューロンの「発火/非発火」を直感的に表現。
- 欠点: 出力が二値のみで表現力が乏しい。微分がほとんどの点で0であり、勾配を用いた学習(バックプロパゲーション)が困難。現代のディープラーニングでは中間層にはほとんど使われません。
シグモイド関数 (Sigmoid Function) / ロジスティック関数
- 数式: $$ f(u) = \frac{1}{1 + e^{-u}} $$
- 特徴: 出力を (0, 1) の範囲に滑らかに押し込めるS字カーブを描く関数。確率的な解釈がしやすいため、かつては中間層でも広く使われ、現在でも二値分類の出力層でよく用いられます。
- 利点: 出力が0から1の範囲に収まり、確率として解釈しやすい。微分が容易 (f′(u)=f(u)(1−f(u)))。
- 欠点:
- 勾配消失問題: 入力 u の絶対値が大きい領域では、勾配(微分値)がほぼ0になります。これにより、深いネットワークで誤差逆伝播を行う際に、勾配がどんどん小さくなり、学習が進まなくなる「勾配消失」の原因となりやすいです。
- 出力がゼロ中心でない: 出力が常に正の値を取るため、学習の収束が遅くなる可能性があります。
tanh関数 (Hyperbolic Tangent Function)
- 数式: $$ f(u) = \tanh(u) = \frac{e^u – e^{-u}}{e^u + e^{-u}} $$
- 特徴: シグモイド関数を線形変換したもので、出力範囲が (-1, 1) となります。形状はシグモイド関数に似ていますが、出力がゼロ中心である点が異なります。
- 利点: 出力がゼロ中心のため、シグモイド関数よりも学習の収束が速い傾向があります。
- 欠点: シグモイド関数と同様に、入力の絶対値が大きい領域で勾配が消失しやすいという問題は依然として残ります。
ReLU (Rectified Linear Unit) ファミリー【重点解説】
ReLUとその派生形は、近年のディープラーニングで最も広く使われている活性化関数です。
ReLU
- 数式: $$ f(u) = \max(0, u) = \begin{cases} u & (u > 0) \ 0 & (u \le 0) \end{cases} $$
- 特徴: 入力が正であればそのまま出力し、負であれば0を出力するという非常にシンプルな関数です。
- 利点:
- 計算が非常に高速: 微分計算も u>0 で1、u<0 で0と単純。
- 勾配消失問題の緩和: u>0 の領域では勾配が1で消失しないため、シグモイドやtanhに比べて深いネットワークでも学習が進みやすい。
- 欠点:
- Dying ReLU問題: 入力が常に負になるニューロンは、出力も勾配も常に0となり、それ以降学習に関与しなくなる(死んでしまう)可能性があります。
- 出力がゼロ中心でない: tanhとは異なり、出力は常に非負です。
Leaky ReLU (LReLU)
- 数式: $$ f(u) = \max(\alpha u, u) = \begin{cases} u & (u > 0) \ \alpha u & (u \le 0) \end{cases} $$ (α は小さな正の定数、例えば 0.01)
- 特徴: ReLUのDying ReLU問題を解決するために提案されました。入力が負の場合でも、完全に0にするのではなく、わずかな勾配 (α) を持たせます。
- 利点: Dying ReLU問題を回避できる。計算も依然として高速。
- 欠点: 負領域の勾配 α をハイパーパラメータとして事前に設定する必要がある。最適な α はタスク依存。
Parametric ReLU (PReLU)
- 数式: Leaky ReLUと同じだが、α を学習可能なパラメータとする。
- 特徴: Leaky ReLUの α をデータから学習させることで、より最適な活性化関数を適応的に獲得しようとする試みです。
- 利点: Leaky ReLUよりも性能が向上する可能性がある。
- 欠点: パラメータが増えるため、過学習のリスクが若干高まる。
ELU (Exponential Linear Unit)
- 数式: $$ f(u) = \begin{cases} u & (u > 0) \ \alpha (e^u – 1) & (u \le 0) \end{cases} $$ (α は正の定数)
- 特徴: ReLUの利点を持ちつつ、負の入力に対しては滑らかな曲線でマイナス値を取ります。出力がゼロ中心に近くなり、Dying ReLU問題も回避します。
- 利点: Dying ReLU問題を回避し、出力がゼロ中心に近く、ノイズに対する頑健性が高いとされる。
- 欠点: 指数計算が含まれるため、ReLUやLeaky ReLUより計算コストが高い。
ReLUファミリーの使い分け: まずはReLUを試すのが一般的です。学習がうまくいかない、Dying ReLUが疑われる場合にLeaky ReLUやELUを検討すると良いでしょう。
ソフトマックス関数 (Softmax Function)
- 数式 (出力層の j 番目のニューロン): $$ z_j = f(u_j) = \frac{e^{u_j}}{\sum_{k=1}^{K} e^{u_k}} $$ (K はクラス数)
- 特徴: 主に多クラス分類問題の出力層で用いられます。複数の出力値の合計が1になるように正規化し、各出力値をそのクラスに属する「確率」として解釈できるようにします。
- 利点: 出力層の各ニューロンの値を、対応するクラスの確率として解釈できる。
- 欠点: 中間層で使われることは稀です。
恒等関数 (Identity Function)
- 数式: $$ f(u) = u $$
- 特徴: 入力をそのまま出力する関数。
- 利点: 出力値の範囲に制限がないため、回帰問題の出力層で用いられます。
- 欠点: 非線形性を持たないため、中間層では使用されません(使用すると層を重ねる意味がなくなります)。
勾配消失問題と活性化関数【重点解説】
勾配消失問題 (Vanishing Gradient Problem) は、深いニューラルネットワークの学習を困難にする主要な要因の一つです。バックプロパゲーションでは、出力層から入力層に向かって勾配を計算し、重みを更新していきます。この際、活性化関数の導関数が連鎖的に掛け合わされます。
∂wij∂E=∂zk∂E∂uk∂zk∂zj∂uk…∂uj∂zj∂wij∂uj
ここで、∂u∂z が活性化関数の導関数です。
- シグモイド関数やtanh関数: これらの関数は、入力の絶対値が大きい領域で導関数が0に近づきます(最大でもシグモイドは0.25、tanhは1.0)。深いネットワークでは、この1未満の値が繰り返し掛け合わされることで、入力層に近い層に伝わる勾配が極めて小さくなり、重みの更新がほとんど行われなくなってしまいます。これが勾配消失です。
- ReLU: 入力が正の領域では導関数が常に1であるため、勾配が消失しにくくなります。これにより、シグモイドやtanhに比べて深いネットワークの学習が可能になりました。これがReLUが広く使われるようになった大きな理由の一つです。
- Leaky ReLUなど: ReLUのDying ReLU問題を回避しつつ、勾配消失も抑制します。負の領域でも勾配が0にならないため、ニューロンが完全に学習を停止するリスクを減らします。
勾配消失問題への対策は活性化関数の選択だけではありませんが(重みの初期化、バッチ正規化、残差接続なども有効)、ReLUとその派生形の登場がブレイクスルーとなったことは間違いありません。
出力層における活性化関数の選択【重点解説】
中間層では主にReLUファミリーが推奨されますが、出力層の活性化関数は解きたいタスクによって明確に選択する必要があります。
- 回帰 (Regression): 目的変数が連続値(住宅価格、株価など)の場合。
- 活性化関数: 恒等関数 (Identity Function)
- 理由: 出力値の範囲に制限を設ける必要がなく、予測したい値を直接出力するため。
- 二値分類 (Binary Classification): 2つのクラスのどちらかに分類する場合(スパムメールか否か、陽性か陰性かなど)。
- 活性化関数: シグモイド関数 (Sigmoid Function)
- 理由: 出力を (0, 1) の範囲に収め、それを一方のクラスに属する確率として解釈できるため。閾値(通常0.5)を設定してクラスを判定します。
- 多クラス分類 (Multi-class Classification): 3つ以上のクラスのどれかに分類する場合(手書き数字認識(0-9)、画像分類(犬、猫、鳥)など)。
- 活性化関数: ソフトマックス関数 (Softmax Function)
- 理由: 出力層の全ニューロンの出力値の合計が1になるように正規化し、それぞれの出力値を対応するクラスへの所属確率として解釈できるため。最も確率の高いクラスを予測結果とします。
このように、出力層の活性化関数は、モデルの出力を問題設定に合わせて適切に変換する役割を担っています。
中間層の活性化関数選択の指針
絶対的な正解はありませんが、一般的な指針としては以下が挙げられます。
- 第一候補はReLU: シンプルで計算効率が良く、多くの場合で良好な性能を発揮します。
- Dying ReLUが懸念される場合: Leaky ReLU, PReLU, ELUなどを試します。特にELUは性能が良いとされる報告もありますが、計算コストとのトレードオフになります。
- シグモイド、tanh: 近年の中間層では、勾配消失の問題からReLU系に比べて使用頻度は減っています。ただし、特定のタスクやネットワーク構造(RNNの一部など)では依然として有効な場合があります。
色々試してみて、検証データに対する性能で判断するのが最終的なアプローチとなります。
まとめ
活性化関数は、ニューラルネットワークに非線形性をもたらし、複雑なパターンを学習可能にするための鍵となる要素です。
- 非線形性の重要性: 線形関数のみでは層を重ねる意味がない。
- 主要な関数: ステップ、シグモイド、tanh、ReLU、Leaky ReLU、ソフトマックス、恒等関数など、それぞれ特徴がある。
- ReLUファミリー: 計算効率と勾配消失抑制に優れ、広く使われるが、Dying ReLU問題には注意。Leaky ReLUなどで対策可能。
- 勾配消失問題: 深いネットワークの学習を妨げる。ReLU系はこの問題を緩和する。
- 出力層での使い分け: 回帰には恒等関数、二値分類にはシグモイド、多クラス分類にはソフトマックスが基本。
G検定においては、各活性化関数の名称、形状(グラフのイメージ)、数式(簡単なもの)、主な特徴(特にReLUの利点と欠点、シグモイド/ソフトマックスの用途)を理解しておくことが重要です。活性化関数の役割と選択理由を把握することで、ニューラルネットワークの挙動に対する理解が深まり、より高度な問題にも対応できるようになるでしょう。
コメント