この記事は、
ディープラーニングの学習コードを書いたことはあるが、なぜ活性化関数が必要なのかよく分からない人
を対象としています。
概要
この記事で取り扱うこと - 活性化関数が必要な理由 - なぜ非線形でないといけないのかの説明 取り扱わないこと - ニューラルネットワーク(NN)のモデルの説明 - 活性化関数の具体的な形式
結論
時間がない人のために先に結論を述べておきます。
中間層における活性化関数の持つ非線形性により、 モデルがスケールを獲得し表現力が豊かになるため
活性化関数の必要性
ニューラルネットワーク
ニューラルネットワークは、脳内の構造を数学的に模したもので、多層のノード からなります。
そして、n+1
番目の層 は、n
番目の層 の線型結合で書かれ、各成分は次のような関係式で表されます。
ここで行列 とベクトル は、"いわゆる"重みとバイアスであり、j については和をとっています。
通常はこの線形変換の後に、ReLU
などの非線形な活性化関数を挟むことが多いです。
活性化関数がなかったら
なぜ必要かを考えるにあたり、活性化関数がなかったらどうなるかを考えてみます。
活性化関数を挟まずに複数の層を重ねた場合、n+2
層目は次のようにかけます
(ここで、j,k については和をとっています)
この結果は、n+2
層目のベクトルがn
層目のベクトルの線形変換でかけていることを意味しています。
そしてこれを繰り返すことで、たとえ 100 層の中間層を入れたとしても 1層(単層)の線形変換の効果しか得られないということになります。
よって、線形変換のみからなる多層のネットワークにおいては表現力を持たず、常に1層のネットワークと同等ということがわかりました。
より考えやすくするために、1次元の線形変換
$$ X^{n+1} = aX^{n} + b $$
を考えてみます(紛らわしいですが $X^{n}$ は Xの n 乗ではなく、級数 X の n 番目という意味で使ってます)。
この変換を2回行ったとき、
とかけます。ここで、
とおけば、
となり、n+2
層目はn
層目の線形変換でかけることがわかります。これは、n+1
層目が不要ということを意味しており、繰り返すことで全ての中間層が無意味になってしまいます。
結論
線形変換のみからなる多層のネットワークにおいては、常に1層のネットワークと同等の効果しか持たず、層を積み重ねる意味がなくなってしまう。
そこで、各線形変換の後に非線形変換である活性化関数を挟むことで、表現力を豊かにしてスケールを獲得することになります。
おわりに
機械学習をやっていると「経験的にこのパラメータを設定する」ということも多いですが、きちんと理論的に考えられる部分も当然あります。そういった部分をきちんと理解していけるようになりたいと思っています。