こんにちは、ほけきよです!
Kerasは簡単に実験ができて便利ですね!今回は、Kerasを使って活性化関数が実際の精度に与える影響を調べてみます。
- 使用するデータ : MNIST
- 使用するライブラリ : Keras
Kerasの動かし方とかわからない人はこの記事を参照!
指標
- training : データを学習する
- validation : 学習データの一部を抜き取って、各エポック毎にテストをする(過学習チェック)
- test : テストデータで精度をチェック(始めから分けておく)
基本的に学習時の精度の上がり方を見たいという時は、trainingとvalidationを見る(testは最後に試す用のものなので使えない)
今回は、training dataでの正解率(accuracy)とvalidation dataでの正解率について各epochごとにどう変わるか見てみた。
使う活性化関数(activation function)
- Linear
- softplus
- sigmoid
- ReLU (Rectified Linear Unit)
- Leaky ReLU
- PReLU (Parametrized ReLU)
Linear〜Leaky ReLUまでの関数系はこれ。数式を知りたい人はググってみてください、そんなに難しくないです。
PReLUというのは、Leaky ReLUの負の部分の傾きを、データによって学習させていく賢い方法。どうやって学習させてるの?時になる方は論文を読んでみましょう→論文
活性化関数の結果
- Linearは活性化関数をかけない状態 つまり線形分類器
- ReLU系強い。そしてsoft plusもなかなか健闘している。
- 両者の関数系は似ている
- PReLUが、validation accuracyまで見るともっとも優秀
- 意外にLeaky ReLUが力を発揮しきれていない?
Leaky ReLUのパラメータと精度
- trainingデータの精度的にはは小さい方がいい
- これは正解データに対して当てはめているだけ
- 実際は過学習している可能性がある。
- 大事なのはvalidation accuracyで、実際にそのepochでtrainingしなかったものに対してどのくらいの効果を発揮するか。
- validation accuracyを見ると、 あたりで Leaky ReLUを調節すればよさそう。
- だが、大幅な精度改善というわけにはいかない
- 今回は層が一層だから差があまりないのかも。深いそうになってくるとPReLUやLeaky ReLUが過学習を防ぐ方向に活躍してくれるらしい。
RReLU(Randomized ReLU)
もうちょっと精度向上に貢献できそうなのが、Randomized ReLU。 何が違うかというと、Leaky ReLUの傾きにランダム性を付与することで、傾きに幅を与えてやる。
画像:論文(Empirical Evaluation of Rectified Activations in Convolutional Network)
論文の中ではReLUやPReLUより高精度になると書かれているが、残念ながら今のKerasでは実装されていない。
だったら作ってやる!! と思ったのですが、情弱のため断念*1。そのうち実装するかも、しないかも。こういう時は、当たり前ですが自分で書いている時の方が拡張しやすいですね。
まとめ
今日のポイントは
・非線形性は精度に大きく寄与している
・ReLU強い。その派生がどんどん出てきている
・RReLUは強いらしい。実装でないかな(他力本願)
今度は層の深さとかにも注目して調べてみたいですね!ではでは!
ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
- 作者: 斎藤康毅
- 出版社/メーカー: オライリージャパン
- 発売日: 2016/09/24
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (14件) を見る
深層学習 Deep Learning (監修:人工知能学会)
- 作者: 麻生英樹,安田宗樹,前田新一,岡野原大輔,岡谷貴之,久保陽太郎,ボレガラダヌシカ,人工知能学会,神嶌敏弘
- 出版社/メーカー: 近代科学社
- 発売日: 2015/11/05
- メディア: 単行本
- この商品を含むブログ (1件) を見る
*1:入力データ毎にランダムに係数をセットする必要があり、割と根っこの部分をいじらないといけないのかなぁ。と思ったり