値をもたせればその分平行移動する)ReLUに関してシグモイド関数は微分可能にするという数学的な発想で生まれました。微分可能にしたことで、誤差逆伝搬法という画期的な学習手法が使えるようになりました。s0sem0y.hatenablog.com現在はランプ関数(ReLU)が最も使われているのでこの関数を中心に説明します。勾配消失の緩和まず以下のReLUの出力を見ましょう。誤差逆伝搬法では出力値の微分が学習の係数に入ってきます。ReLUは入力値が正であれば、入力値をそのまま出力します。このとき微分は必ず1の値を取り、出力の値が学習を邪魔することが一切無くなります。これがシグモイド関数(以下)の場合だとどうでしょうか。入力が大きくなればなるほど、微分の値は小さくなっていきます。入力の値が仮に偶然10などになった場合、微分の値が極めて小さな値を取ることが想定できます。この小さな値が学習の係数に掛かってきてしまうため、(本来はまだ最適解にたどり着いていないのに)学習が滞ってしまう勾配消失問題の引き金になってしまうのです。(実際には0になるわけではないのだが、多層の場合に、複数の層でこのようなことが起こると、誤差逆伝搬で誤差を伝えていくうちに、非常に小さい数の掛け算が行われていった挙句、誤差が正しく伝搬されなくなる)ネットワークのスパース化ReLUのもう1つの特徴としては、ネットワークのスパース化に貢献するという点です。ニューラルネットワークがスパースであるとは、出力が0であるユニットがたくさんある状態を指します。仮にあるユニットへの入力が0未満になると、出力が0になります。その領域において、ReLUの微分は0であるため、これが学習の係数に掛かるため、結果としてそのユニットは全く学習が行われなくなります。学習が行われなくなったユニットに対するパラメータは変化しないため、入力も変化せず(0未満のまま)、出力がその後ずっと0となります。学習は残ったユニットだけで行われるようになりますが、ニューラルネットワークは元来冗長であるため、返ってユニットを厳選していくこととなり、良い成果が得られるのだと言われています(事実上学習するパラメータを厳選していることになる)。ReLUの派生ReLUの活躍を見て、この活性関数を改造していく試みが多く存在します。qiita.comReLUの派生はいろいろあるんですけども、とりあえずやってみた感満載です(別に良いんですけど)。他のタスクに使えるのか(効果の再現性的なもの)は謎です。だいたい何がどう嬉しいのかよくわからないものが多いです(勉強不足なだけかもしれません)。シグモイド関数や双曲線正接関数についてシグモイド関数と双曲線正接関数に関しては、その値域に着目して利用がなされています。Networkでは、シグモイド関数が0〜1の値を取ることに注目して、「値をそのまま通過」と「値を変換する」の混合割合を調整するゲートとして用いています。s0sem0y.hatenablog.comこのゲートという発想はLSTMで用いられているもので、LSTMでは記憶保持や、過去の値をどれくらい使うか、現在の値をどれくらい通過させるかなどに使われています。s0sem0y.hatenablog.com最後に現状、タスク毎に活性化関数を変えたほうがいいという状況です(ReLUの派生が良い成果だすこともある点を考慮すれば)。ところで、ニューラルネットワークのパラメータは基本的に膨大で、明らかに分類タスクや回帰のタスクにおいて冗長な形式となっています。そのような観点からスパース化は重要な技術だと考えられており、ReLUはスパース化が達成でき、かつ計算も速くなるので迷ったらとりあえずこれを使っておけばいいでしょう。変換が単純であるが故に表現力は単体では乏しいですが、ニューラルネットを多層にすればそんなの問題無し(どころか何度も言うが冗長)、むしろバランスが取れると言ったところでしょう。»プロフィール自分が勉強していく上で学んだことなどをまとめていきたいと思います。ML_deepスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。