見出し画像

活性化関数

学習目標

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

  • シグモイド関数

  • tanh関数

  • ReLU関数

  • ソフトマックス関数

キーワードLeaky ReLU関数


シグモイド関数

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

$$
\sigma(x) = \frac{1}{1 + e^{-x}}
$$

シグモイド関数


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

シグモイド関数の微分値

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

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

tanh関数

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

$$
tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}}
$$

tanh関数

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

tanh関数の微分値

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

ReLU関数

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

$$
y = \max(0, x)
$$

ReLU関数

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

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

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

ReLU関数の微分

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

Leaky ReLU関数

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

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

Leaky ReLU関数

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

Leaky ReLU関数の微分(α = 0.1)

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

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

Parametric ReLU関数

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

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

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

Randomized ReLU関数

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

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

ELU関数

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

$$
y =
\begin{cases}
x \text{ if } x > 0 \\
\alpha (e^x - 1) \text{ otherwise}
\end{cases}
$$

ELU関数

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

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


ELU関数の微分

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

ソフトマックス関数

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

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

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

$$
y_i = \frac{ e^{x_i} }{ \sum_{k=1}^n e^{x_k} }, (i = 1, 2, \dots, n)
$$

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


いいなと思ったら応援しよう!