1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【活性化関数】MishってSwishより精度良いの?

Last updated at Posted at 2020-10-14

Mishの利点

・少しマイナスの情報を保持することでDyingReLU減少が改善された。 ・Mishは飽和を避けてくれる。一般的にgradientが0に近いとtrainingのスピードが急激に遅くなる ・マイナスに行く事は強い正規化の効果もある ・ReLUのように特異点がない(連続である)

Swish Familyを比べてみた

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482094/1cb2e3df-11e0-4751-5f39-bb68025f269b.png) Swishに似た活性化関数(Swish Family)を比較してみた。 右図から分かるようにMishとxlog(1+tanh(e^x))がSwishよりやや精度が高い事が分かる。しかし、xlog(1+tanh(e^x))はoverfittingしやすく学習が不安定であった。 よってMishが優秀な事が分かる。

image.png

Mishな一次微分を変形してみると(2)のようになる。
∆(x) parameterは前処理のような振る舞いをする。それによって、正規化と勾配をsmoothにしてくれる。Swishに前処理を行うという事はSwishより精度が高くなる可能性があるらしい

Smoothだと何が良いの?

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482094/def76c8b-675b-bd09-16e0-927f8d44ed7c.png)

5層のNetworkをランダムにinitializationしReLUとMishを比べてみた。
Mishの方がReLUよりSmoothなのが分かる

image.png

図から分かるようにMishの最小値の範囲が一番広い。最小値の範囲が広いとgeneralizationに役立つ。
SwishやReLUは複数の最小値がある=>overfittingしやすい?!

実行速度

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482094/396cbfd0-2fa5-7cb2-0446-c0e63edc6e97.png) MishはReLUに比べて約3倍遅い。CUDA-baseのimplementationしたMish-CUDAはReLUとほぼ同じ速度になっている。

結論

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482094/4e1e592d-c21e-91c4-5bf8-749f8da33db5.png)

論文が主張している通りであれば、理論も結果もReLUやSwishより良さそう。
今後色々な研究で使われるか見ていきたい。

参考文献

Mish: A Self Regularized Non-Monotonic Activation Function https://arxiv.org/pdf/1908.08681v3.pdf
1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?