活性化関数(activation function)とは
ニューラルネットワークの1つのニューロンにおいて入力信号の総和を出力信号に変換する関数のことを活性化関数と呼ぶ。
活性化関数は非線形関数である必要がある。その理由は一次関数を多層重ねても一次関数として表現できるため層を重ねるメリットがない。
深層学習のメリットは単純な非線形関数を複数重ねることで複雑な関数を作成することができることなので、活性化関数は非線形関数を用いる。
ディープラーニングでは活性化関数関数は大きく中間層で使われるものと出力層で使われるものに分類することができる。
中間層で使われる活性化関数
ステップ関数(step function)
$$f(x)=\begin{cases}{1 (x>0)}\\{0(x\leq0)}\end{cases}$$
ステップ関数は入力が0より大きい場合は1を出力し、入力が1以下の場合は0を出力する。
パーセプトロンなどでは利用されていたが、3層以上のニューラルネットワークでは微分の値がほどんどの場所で0になるという特性があることから使用することができない。
シグモイド関数(sigmoid function)
$$f(x)=\frac{1}{1+\exp(x)}$$
シグモイド関数は入力が大きくなると1に近づき、小さくなると0に近づく。
どんな入力も0~1の範囲に押しつぶすことが可能であるという性質を持つ。
ReLU関数(ReLU function)
$$f(x)=\begin{cases}{x (x>0)}\\{0(x\leq0)}\end{cases}$$
ReLU関数は0以下の入力は0を出力し、正の値は入力値をそのまま出力する。
ReLU関数は正の範囲で微分値が全て1になるように設計されているため、シグモイド関数が抱えていた勾配消失問題を防ぐことができる。
また入力前の値の半数ほどを0にすることからスパースな特徴マップを作成することができ計算が高速化されるというメリットもある。
出力層で使われる活性化関数
恒等関数(identify function)
回帰問題を解くときに使用する関数。
入力の値をそのまま出力するだけなので省略可能。
シグモイド関数(sigmoid function)
シグモイド関数は中間層の活性化関数としてだけではなく、2値分類のタスクを解くときに出力層の活性化関数としても利用することができる。
出力を確率で表現することができ、大きな値を1、小さな値を0にするなどして出力を丸めて使用する。
ソフトマックス関数(softmax function)
$$y_k=\frac{a_k}{\sum_{i=1}^n\exp(a_i)}$$
多値分類のタスクを解くときに使用する活性化関数。
出力が確率として表現することができるため、最も値が大きいものを出力とする。
コメント