logo

ディープラーニングにおける活性化関数 📂機械学習

ディープラーニングにおける活性化関数

定義

実際の生物の閾値を模倣した非線形関数を活性化関数activation functionと言う。

数学的定義

ディープラーニングでは非線形スカラー関数 σ:RnR\sigma : \mathbb{R}^{n} \to \mathbb{R}を活性化関数と呼ぶ。

  • もちろん、この定義から外れるソフトマックスみたいなのもあるが、例外としよう。

説明

一方でベクトル関数レイヤーlayer、層と呼ばれる。

σ:RR\sigma : \mathbb{R} \to \mathbb{R}で定義された活性化関数が入力としてベクトルを受け取るという表現やコードがあれば、成分ごとに適用するという意味だ。

σ([x1x2xn])=[σ(x1)σ(x2)σ(xn)] \sigma (\begin{bmatrix} x_{1} \\ x_{2} \\ \vdots \\ x_{n} \end{bmatrix}) = \begin{bmatrix} \sigma (x_{1}) \\ \sigma (x_{2}) \\ \vdots \\ \sigma (x_{n}) \end{bmatrix}

モチーフ

20190325\_153312.png

閾値とは、生物が刺激に対してどのような反応を引き起こすために必要な最小限の刺激の強さのことで、ディープラーニングはこれを模倣するために、各ノードの計算結果に活性化関数を適用して次のレイヤーへと渡す。このような非線形的補正がなければ、ディープラーニングでヒドゥンレイヤーを置いて計算を何度もする意味がない。活性化関数には様々な種類があるが、どれが良いかはまさにケースバイケースだ。どの活性化関数を使えばパフォーマンスがどう変わるのかという理論はほとんどなく、ただ試してみて結果が良ければ採用するという感じだ。

ステップ関数

u(x):={0,x<01x0u (x) := \begin{cases} 0 & , x<0 \\ 1 & x \ge 0 \end{cases}

ステップ関数は閾値という名前に最も適した関数だが、計算結果をあまりに単純化しすぎるため、実際に使うのは難しい。他の活性化関数もステップ関数ではないが、ステップ関数のように作用するように設計されたと考えると良い。

シグモイド関数

1\_XxxiA0jJvPrHEJHD4z893g.png

シグモイド関数の中で最も有名なのはおそらくロジスティック関数 σ(x):=11+ex\displaystyle \sigma (x) := {{1} \over { 1 + e^{-x} }} で、まるでステップ関数を連続関数につなげたような形状をしている。値域は異なるが、tanhx\tanh x も同じ理由で使用された。最近では、グラディエントバニッシングという問題が発見され、ほとんど使われなくなった。

ReLu(整流線形ユニット) 関数

ReLU(x):=max{0,x}\operatorname{ReLU} (x) := \max \left\{ 0 , x \right\}

シグモイド関数の問題点を克服するために考案された関数だ。x<0x <0 ならば関数値を完全に殺し、00 を超えないとそのまま伝達される、という点で活性化関数らしい。