キカベン
機械学習でより便利な世の中へ
G検定対策
お問い合わせ
   

活性化関数

thumb image

1. 学習目標🔝

ニューラルネットワークにおいて重要な役割をになう活性化関数を理解する。

  • シグモイド関数
  • tanh関数
  • ReLU関数
  • ソフトマックス関数

キーワードLeaky ReLU関数

2. シグモイド関数🔝

ロジスティック回帰で使われたシグモイド関数はネットワークの出力を0以上1以下の範囲に収めるので確率として扱うことができ有用でした。

ロジスティック回帰
シグモイド関数:$\sigma(x) = \frac{1}{1 + e^{-x}}$

しかし、ディープラーニングの隠れ層の活性化関数としてシグモイド関数を使うと勾配消失問題を引き起こす原因になります。これはシグモイド関数の微分の最大値が0.25しかないためです。

シグモイド関数の微分値

勾配消失問題は事前学習で一応は解決されはしました。しかし、より良い解決法は勾配消失が起きにくい活性化関数を使ってディープニューラルネットワークの全ての層を同時に学習させることです。

活性化関数にさほどの制限はありません。まず必要なのは非線形性です。これがないと線形問題しか解けなくなってしまいます。さらに誤差逆伝播法を用いるために活性化関数は微分が可能である必要があります。

3. tanh関数🔝

tanh(hyperbolic tangent)関数はシグモイド関数を線形変換したもので、-1から1の範囲の値を取ります。

tanh関数:$\tanh(x) = \frac{e^{x} – e^{-x}}{e^{x} + e^{-x}}$

微分の最大値が1であり、その点でシグモイド関数よりも勾配消失を起こしにくく誤差逆伝播に優れているといえます。

tanh関数の微分値

しかし、ディープラーニングの研究が盛んになる活性化関数も見直され、tanhよりもっと勾配消失が起きにくいReLU関数が登場します。

4. ReLU関数🔝

ReLU(Rectified Linear Unit)関数の定義は以下の通りです。

ReLU関数:$y = max(0, x)$

上図から見てわかるようにReLUは非線形ですがその関数がとてもシンプルです。0以下の数値は0になり、0より上の値はそのままです。よって、入力値$x$が0より大きい時の微分値は常に1です。

tanh関数では微分値の最大値は1($x=0$)でそれ以外は1より小さいので、ReLUの方が勾配消失が起こりにくくなっています。ディープラーニングの訓練でReLUはとてもよく使われるようになりました。

ただし、ReLUでも勾配消失が起こりえます。それは入力値が0以下の場合に勾配が0になるからです。$x=0$では微分できないのですが、便宜上、$x=0$での微分値を0か1とします。

ReLU関数の微分

ReLUはとても効果的に学習ができることが多かったので様々なバリエーションが生み出されました。

4.1. Leaky ReLU関数🔝

Leaky ReLU関数は、$x<0$の値を$\alpha$倍します。$\alpha$は通常1より小さい値で下図では$\alpha = 0.1$になっています。

Leaky ReLU関数:$y=\begin{cases}x \text{ if } x > 0 \\ \alpha x \text{ otherwise}\end{cases}$

負の入力値に対して勾配が$\alpha$になります。

Leaky ReLU関数の微分($\alpha=0.1$)

これでReLUより勾配消失しにくくはなったのですが、必ずしもモデルの精度が良くなるわけでもありません。ネットワークによってはReLUの方が良い精度を出すケースもよくあります。

また、Leaky ReLUの係数$\alpha$はハイパーパラメータなので人間が調節する変数が一つ増えてしまうことになります。

4.2. Parametric ReLU関数🔝

Parametric ReLU関数(PReLU)はLeaky ReLUの係数$\alpha$自体を学習するパラメータとして扱います。ReLUと同じ式ですが、$\alpha$もネットワークの重さと同時に誤差逆伝播法で更新されていきます。

$y=\begin{cases}x \text{ if } x > 0 \\ \alpha x \text{ otherwise}\end{cases}$

PReLUの$\alpha$は1つの値だけでなくチャンネルごとに異なる$\alpha$を学習することも可能です。

4.3. Randomized ReLU関数🔝

Randomized ReLU関数(RReLU)はLeaky ReLUの係数$\alpha$がランダムに選ばれるものです。例えば、下限0.125、上限0.333の範囲から一様分布を使ってランダムにサンプルしたものを$\alpha$の値として使います。

関連論文Empirical Evaluation of Rectified Activations in Convolutional Network

5. ELU関数🔝

ELU関数(Exponential linear unit)はLeaky ReLUのように負の値に対しての微分値が0にならないようにするものです。ただし、指数関数を使っているので微分値がなるべく0に近づくようになっています。

ELU関数:$\begin{cases} x \text{ if } x > 0 \\ \alpha(e^x-1) \text{ otherwise}\end{cases}$

$\alpha>0の値が指定可能ですが通常は1を使うことが多いようです。上図でも$\alpha$は1に設定してあります。

負の値の微分は$\alpha e^x$となります。$x=0$では微分できないのですが、便宜上、$x=0$での微分値を1とします。

ELU関数の微分

いろいろある活性化関数ですが、基本はReLUで実験した後に他の活性関数を試してみるという手順がよく見受けられます。

6. ソフトマックス関数🔝

ソフトマックス関数(Softmax)はシグモイド関数と似て確率を計算するのに使われます。通常は、ネットワークの出力層で使われます。

シグモイド関数では真偽の2つのクラスの確率しか返せませんが、Softmaxでは2つ以上の複数クラスに対しての確率を計算できます。

例えば、画像が犬か猫かウサギかの確率を出す場合は3つの正の数値を出し、その合計が1(100%)になるようになっています。

$y_i = \frac{e^{x_i}}{\sum\limits_{k=1}^{n} e^{x_k}}, (i = 1, 2, …, n)$

上式では$i$がクラスのインデックスになっています。指数関数を使っているので全ての入力値が0以上の値となり、各値を総和で割っているので割合(確率)が計算できるようになっています。



コメントを残す

メールアドレスは公開されません。