活性化関数とはある閾値以上の値が入力された場合に、出力が一段と大きくなる関数です。一般的によく知られている活性化関数としては、「sigmoid」,「tanh」,「ReLU」,「leakyReLU」,「ELU」などがあり、今回はこの5種類の活性化関数の違いをNewral Network Consoleを使って検証していきたいと思います。
今回検証に用いるテーマは数字認識とします。前回の記事に数字認識に関する記事を記載しましたのでよろしければご確認よろしくお願いいたします。
ディープラーニングに関する記事はこちら
スポンサーリンク
活性化関数
まず今回検証する活性化関数は以下の5種類です。
- sigmoid
- tanh
- ReLU
- LeakyReLU
- ELU
グラフを重ね書きすると下記グラフのようになります。
数字認識
検証モデルは変更せずに活性化関数のみを変更して精度を比較していきます。また、中間層の数は1でノードの数は30に統一して検証を進めます。
Sigmoid(シグモイド関数)
まずはじめにシグモイド関数です。
検証モデル
検証モデルは下記のようになります。
学習曲線
検証結果
精度は94.1%となりました。
tanh
次にtanhの検証結果です。
検証モデル
検証モデルは下記のようになります。
学習曲線
検証結果
精度は93.8%となりました。
ReLU
次にReLUの検証結果です。
検証モデル
検証モデルは下記のようになります。
学習曲線
検証結果
精度は95.2%となりました。
leakyReLU
次にleakyReLUの検証結果です。
検証モデル
検証モデルは下記のようになります。
学習曲線
検証結果
精度は95.1%となりました。
ELU
最後にELUの検証結果です。
検証モデル
検証モデルは下記のようになります。
学習曲線
検証結果
精度は95.0%となりました。
精度比較
5種類の活性化関数の比較をしてみたいと思います。
精度として一番良い活性化関数はReLUになります。近年ディープラーニングが急速に注目され精度も飛躍したのはこのReLU関数の影響が一番大きいという人もいます。活性化関数に迷ったらとりあえずReLUにしておいて問題ないと思います。
またReLUの派生でLeakyReLUがありますが、いろいろな噂を聞くとReLUと比較しても特にメリットはなさそうです。
数字認識追加検証(おまけ)
前回の記事では数字認識の精度が90%にいかなかったので、この場を借りて再度以下の検証モデルを使ってトライしてみたいと思います。活性化関数はReLUを使用し、中間ノードの数は300としています。
検証モデル
学習曲線
検証結果
精度は97.2%となり、数字認識としてはひとまず合格ラインは超えていると判断しました。
結果を見ると誤認識として最も多いパターンは「7」と「9」間違いでした。実際に手書きデータを見てみましたが、人が見ても「7」か「9」かどちらを書いている分からないくらいのサンプルでした。
このようなサンプルがある限り精度は100%にならないため、97%~98%が精度の限界ではないかと思われます。
次回の記事では複雑な関数を近似してみます。
スポンサーリンク