いものやま。

雑多な知識の寄せ集め

ニューラルネットワークについて学んでみた。(その2)

昨日は基本的なニューラルネットワークの構成について説明した。

今日は昨日説明しなかった活性化関数について説明する。

活性化関数

活性化関数はニューラルネットワーク非線形にするための関数。
一般的には単調増加する非線形な関数で、微分可能なもの(もしくは似た関数)が使われる。

昔よく使われていたのは、シグモイド関数と総称される関数。
ロジスティック関数や双曲線正接関数がある。

また、最近は正規化線形関数やシグモイド関数を近似した関数が使われたりもする。

ロジスティック関数

ロジスティック関数は、次のような関数:

 {\displaystyle
f(u) = \frac{1}{1 + e^{-u}}
}

定義域は (- \infty, \infty)、値域は (0, 1)になる。

見た目は以下のとおり:

f:id:yamaimo0625:20160203163636p:plain

双曲線正接関数

双曲線正接関数は、次のような関数:

 {\displaystyle
f(u) = \mathrm{tanh}(u) = \frac{e^u - e^{-u}}{e^u + e^{-u}}
}

定義域は (- \infty, \infty)、値域は (-1, 1)になる。

見た目は以下のとおり:

f:id:yamaimo0625:20160203163649p:plain

正規化線形関数

正規化線形関数は、次のような関数:

 {\displaystyle
f(u) = \mathrm{max}(u, 0)
}

定義域は (- \infty, \infty)、値域は [0, \infty)になる。

見た目は以下のとおり:

f:id:yamaimo0625:20160203235827p:plain

シグモイド関数を近似した関数

シグモイド関数を区分的に直線で近似した、次のような関数を使うこともある:

 {\displaystyle
f(u) = \left\{ \begin{array}{ll}
-1 & (u < -1) \\
u & (-1 \le u \le 1) \\
1 & (1 < u)
\end{array} \right.
}

定義域は (- \infty, \infty)、値域は [-1, 1]になる。

見た目は以下のとおり:

f:id:yamaimo0625:20160203235842p:plain

どの活性化関数を使うのか

どの活性化関数を使うのかは、出力としてどの範囲の値を得たいのかによる。

なお、シグモイド関数は値域に上限と下限があるので、下手すると値がすぐに上限/下限に偏ってしまって、学習がうまくいかなくなってしまうことがある。
なので、そういった場合には正規化線形関数を使うといい。

また、シグモイド関数を区分的に直線で近似した関数も、出力に上限と下限を与えることが出来て、かつ、計算が軽いので、使い勝手がいい。

今日はここまで!

深層学習 (機械学習プロフェッショナルシリーズ)

深層学習 (機械学習プロフェッショナルシリーズ)