活性化関数の働きについて 学習を上手く行うために
活性化関数について
Sigmoid関数が避けられるのは、
1.大きな値、小さすぎる値には1か0を出力するために、傾きが殺されてしまうということ
2.正の値のみし返さないため、inputの値であるxが正の時はwは正の値しか与えられず負の場合にはwは負の値になるため、重みwの更新が上手くいかない
3.eの計算が負担になるということ
出力が0以上にしかならないしかならない問題点を解消する関数がtanhである
しかしtanh関数も傾きを殺してしまう、計算の負担という点で問題を抱えている
左がsigmoid関数で右側がtanh関数である
Relu関数
正の値に関しては傾きを保存する
計算の負担が少ない
問題点として
・値が0以上に限られる
・負の値に関して傾きが殺される
左図がRelu関数である右図はtanhと比較してRelu関数の方がより学習を効率よく行えている例である。
気をつけなければいけないことが
そもそも重みwの初期値が適切でないと活性化関数で活性化されず重みの更新がなされないこと
Learning Rateも適切に設定しないと、発散してしまい学習が上手くいかないこと
Leaky Relu
負の値に関しても傾きが殺されない
PRelu
自分で負の値に関する傾きを調整できる
実用上はReluを使うように
Leaky Reluなども試してみる価値はある
tanhも試すのはいいが期待はすべきでない
sigmoidは使ってはいけない