けの〜のブログ

ガッキーでディープラーニングして教育界に革命を起こす

活性化関数の働きについて 学習を上手く行うために

活性化関数について

 

Sigmoid関数が避けられるのは、

1.大きな値、小さすぎる値には1か0を出力するために、傾きが殺されてしまうということ

 

2.正の値のみし返さないため、inputの値であるxが正の時はwは正の値しか与えられず負の場合にはwは負の値になるため、重みwの更新が上手くいかない

3.eの計算が負担になるということ

 

出力が0以上にしかならないしかならない問題点を解消する関数がtanhである

しかしtanh関数も傾きを殺してしまう、計算の負担という点で問題を抱えている

f:id:keno-lasalle-kagoshima:20171117163620p:plain

 左がsigmoid関数で右側がtanh関数である

 

Relu関数

正の値に関しては傾きを保存する

計算の負担が少ない

 

問題点として

値が0以上に限られる

負の値に関して傾きが殺される

f:id:keno-lasalle-kagoshima:20171117163831p:plain

左図がRelu関数である右図はtanhと比較してRelu関数の方がより学習を効率よく行えている例である。

気をつけなければいけないことが

そもそも重みwの初期値が適切でないと活性化関数で活性化されず重みの更新がなされないこと

Learning Rateも適切に設定しないと、発散してしまい学習が上手くいかないこと

 

Leaky Relu

負の値に関しても傾きが殺されない

 

PRelu

自分で負の値に関する傾きを調整できる

 

実用上はReluを使うように

Leaky Reluなども試してみる価値はある

tanhも試すのはいいが期待はすべきでない

sigmoidは使ってはいけない

 

cs231n.github.io