プロクラシスト

今日の寄り道 明日の近道

【ReLU, PReLU, シグモイド etc...】ニューラルネットでよく使う活性化関数の効果をKerasで調べてみた


スポンサーリンク

こんにちは、ほけきよです!

Kerasは簡単に実験ができて便利ですね!今回は、Kerasを使って活性化関数が実際の精度に与える影響を調べてみます。

  • 使用するデータ : MNIST
  • 使用するライブラリ : Keras

Kerasの動かし方とかわからない人はこの記事を参照!

www.procrasist.com

指標

  • training : データを学習する
  • validation : 学習データの一部を抜き取って、各エポック毎にテストをする(過学習チェック)
  • test : テストデータで精度をチェック(始めから分けておく)

基本的に学習時の精度の上がり方を見たいという時は、trainingとvalidationを見る(testは最後に試す用のものなので使えない)

f:id:imslotter:20170112005513p:plain

今回は、training dataでの正解率(accuracy)とvalidation dataでの正解率について各epochごとにどう変わるか見てみた。

使う活性化関数(activation function)

  • Linear
  • softplus
  • sigmoid
  • ReLU (Rectified Linear Unit)
  • Leaky ReLU
  • PReLU (Parametrized ReLU)

Linear〜Leaky ReLUまでの関数系はこれ。数式を知りたい人はググってみてください、そんなに難しくないです。

f:id:imslotter:20170112005543p:plain

PReLUというのは、Leaky ReLUの負の部分の傾きを、データによって学習させていく賢い方法。どうやって学習させてるの?時になる方は論文を読んでみましょう→論文

活性化関数の結果

  • Linearは活性化関数をかけない状態 つまり線形分類器
  • ReLU系強い。そしてsoft plusもなかなか健闘している。
    • 両者の関数系は似ている
  • PReLUが、validation accuracyまで見るともっとも優秀
  • 意外にLeaky ReLUが力を発揮しきれていない?

f:id:imslotter:20170112010055p:plain

Leaky ReLUのパラメータと精度

  • trainingデータの精度的には{a}は小さい方がいい
    • これは正解データに対して当てはめているだけ
    • 実際は過学習している可能性がある
  • 大事なのはvalidation accuracyで、実際にそのepochでtrainingしなかったものに対してどのくらいの効果を発揮するか。
    • validation accuracyを見ると、{0.0 \le a \lt 0.4} あたりで Leaky ReLUを調節すればよさそう。
    • だが、大幅な精度改善というわけにはいかない
  • 今回は層が一層だから差があまりないのかも。深いそうになってくるとPReLUやLeaky ReLUが過学習を防ぐ方向に活躍してくれるらしい。

f:id:imslotter:20170112010129p:plain

RReLU(Randomized ReLU)

もうちょっと精度向上に貢献できそうなのが、Randomized ReLU。 何が違うかというと、Leaky ReLUの傾きにランダム性を付与することで、傾きに幅を与えてやる。

f:id:imslotter:20170112010809p:plain 画像:論文(Empirical Evaluation of Rectified Activations in Convolutional Network)

論文の中ではReLUやPReLUより高精度になると書かれているが、残念ながら今のKerasでは実装されていない。

だったら作ってやる!! と思ったのですが、情弱のため断念*1。そのうち実装するかも、しないかも。こういう時は、当たり前ですが自分で書いている時の方が拡張しやすいですね。

まとめ

今日のポイントは
非線形性は精度に大きく寄与している
・ReLU強い。その派生がどんどん出てきている
・RReLUは強いらしい。実装でないかな(他力本願)
今度は層の深さとかにも注目して調べてみたいですね!ではでは!

深層学習 Deep Learning (監修:人工知能学会)

深層学習 Deep Learning (監修:人工知能学会)

*1:入力データ毎にランダムに係数をセットする必要があり、割と根っこの部分をいじらないといけないのかなぁ。と思ったり

PROCRASIST