ディープラーニングを始めてみる 5
前回
参考書はこれ
今回は活性化関数について
ニューラルネットワークに使われる主な活性化関数はシグモイド関数
を使うことが多い。
このグラフは
こんな形状のグラフになる。
一方、これまでパーセプトロンで使っていた活性化関数はステップ関数と呼ばれ入力が0を超えたら1を出力し、それ以外では0を出力する。パーセプトロンとニューラルネットワークの大きな違いはここにある。
二つを重ねて比べてみるとこんな感じ
・滑らかさが違う。シグモイド関数はステップ関数に比べて滑らか
・シグモイド関数はステップ関数と違い、1と0の中間の値、0.8等も出す
ちなみに、二つに共通する特徴として
・どれだけ大きい値を入力してもかならず0から1の間の値を返す
というものがあります。
さらに最近使われる活性化関数にReLU(Rectifield Linear Unit)関数というものがあります。入力が0以下なら0を出力し、0を超えたならそのまま出力する関数で、数式で表すと
グラフで表すとこうなります。
さて、ここで疑問点があります。
なぜ活性化関数を使わないといけないのか?
どうしてこういった関数を使わないといけないのでしょうか?
それにはちゃんとした理由があります。
それはどちらの活性化関数も非線形関数だということ。
非線形な関数だからこそネットワークに意味ができます。
逆に線形関数とは言ってしまえば一直線の関数。
非線形関数は一直線ではない関数です。シグモイド関数もステップ関数も直線ではありません。
線形の関数でネットワークを作るとどうなるのか?
試しに活性化関数
このネットワークは
という式で表されます。
この計算結果は
になります。青枠で囲まれたところに着目すると、aの3乗をxに掛けているだけです。
aの3乗というのはただの定数ですから、結局これはただの線形の式ということになり
こういう単純なニューロンに置き換えることができてしまいます。
これの何が問題かというと、以前パーセプトロンでやったように単純なニューロンでは動作に限界があるということです。XORゲートは1重のパーセプトロンではつくれませんでした。
線形の活性化関数でニューラルネットワークを作ってどんなに層を重ねても、結局は1重のニューラルネットワークと同じ動作しかしないわけです。
複雑な動作をさせるには非線形関数が絶対に必要になるわけです。
ニューラルネットワークが複雑な動作をするためには活性化関数に非線形なものを使用しなければいけないのがよくわかりました。
今日はここまでです。