活性化関数 Mish: Self Regularized Non-Monotonic Activation Function を試してみた

#目的

藁にも縋る思いで、、、**活性化関数Mish**を試してみた。
（実際は、もう少し気楽に、、、しかし、なんかすばらしいものないかな。。。という思いにて。）

## Mishとは
Mishとは、以下のような形をした活性化関数です。

出典：https://github.com/digantamisra98/Mish



<img width="400" alt="mish.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/342207/4f5d3f39-ad5c-d448-e4d2-865958ef6aa4.png">

#使ってみた結果

上記のgithub
(https://github.com/digantamisra98/Mish)
のコードを使いました。

具体的には、
https://github.com/digantamisra98/Mish/tree/master/Examples%20and%20Benchmarks

の
**cifar-10-resnext-50-mish.ipynb**
のコードを動かしました。

ジュピターノートの使い方がわからないので、このINのコードを
はぎとって、動かしました。

## コードの変更点１(動かすという意味では、1行のみ変更。)

**動かすという意味では、1行のみ変更。**
以下をコメントアウト

```
#print(os.listdir("../input"))
```

## コードの変更点２（自分のノートパソコン都合で、3行変更）

りっぱなパソコンの場合は、この変更は不要。
ワタシのは、立派ですが、凄く立派ではないノートPCで、
**Geforce GTX 1050Ti**
なので、

**resnext-50**

を動かすには、メモリが足らないようです。

**バッチサイズを極端に小さくしました。16にしました。**元は、128か64だったと思います。

```
def get_training_dataloader(train_transform, batch_size=16, num_workers=0, shuffle=True):
```


```
def get_testing_dataloader(test_transform, batch_size=16, num_workers=0, shuffle=True):
```

```
batch_size = 16
```


## コードの変更点３（cifar10を対象としているので、augmentationが足らないと思ったので。）

augmentationを適当に増やしました。

```
    transforms.RandomCrop(32,padding=8),
    transforms.ColorJitter(brightness=0.5),

```

以下も1/10にしました。

```
learning_rate = 0.0001
```

##結果発表！！　accuracyの結果(cifar10)

一日ぐらい動かしましたが、epochは、まだ、50程度。

**Test accuracy: 0.9025..**   

⇒普通な結果。あと1日ぐらい動かしてみますが。。。

```
Epoch 40/100.. Time per epoch: 1337.4019.. Average time per step: 0.4280.. Train loss: 0.3072.. Train accuracy: 0.8935.. Top-3 train accuracy: 0.9848.. Test loss: 0.3861.. Test accuracy: 0.8870.. Top-3 test accuracy: 0.9823
Epoch 41/100.. Time per epoch: 1338.3242.. Average time per step: 0.4283.. Train loss: 0.3007.. Train accuracy: 0.8952.. Top-3 train accuracy: 0.9858.. Test loss: 0.3657.. Test accuracy: 0.8917.. Top-3 test accuracy: 0.9829
Epoch 42/100.. Time per epoch: 1340.5420.. Average time per step: 0.4290.. Train loss: 0.2975.. Train accuracy: 0.8958.. Top-3 train accuracy: 0.9865.. Test loss: 0.3853.. Test accuracy: 0.8913.. Top-3 test accuracy: 0.9821
Epoch 43/100.. Time per epoch: 1340.4637.. Average time per step: 0.4289.. Train loss: 0.2878.. Train accuracy: 0.8994.. Top-3 train accuracy: 0.9864.. Test loss: 0.3520.. Test accuracy: 0.8999.. Top-3 test accuracy: 0.9856
Epoch 44/100.. Time per epoch: 1338.6670.. Average time per step: 0.4284.. Train loss: 0.2824.. Train accuracy: 0.9005.. Top-3 train accuracy: 0.9869.. Test loss: 0.3827.. Test accuracy: 0.8941.. Top-3 test accuracy: 0.9839
Epoch 45/100.. Time per epoch: 1330.7962.. Average time per step: 0.4259.. Train loss: 0.2768.. Train accuracy: 0.9018.. Top-3 train accuracy: 0.9876.. Test loss: 0.3541.. Test accuracy: 0.9025.. Top-3 test accuracy: 0.9845
```

# Mishに関するコメント（感想？）
**煽ったような技術記事**をみて試したのだが、それほど、興味を引くような結果は得られていない。
例えば、検出精度を追及する際に、これが大きく貢献するような気は、ちょっと、しませんでした。
例えば、ReLUで105層のものが、Mishで102層で同じ性能が出るとか、そういったレベルに感じる。最高性能は、条件フリーだと同じぐらいでは？？（すみません、何の根拠もないですが。。。）

#まとめ
今回、cifar10を対象にしましたが、
**cifar10のようなシンプルな問題の場合**、
さすがに、活性化関数ぐらいでは、**すばらしいことは起きませんね。。。**

**もうすこし、世間の評価を待ちたいと思います。**

#今後
特別、予定なし。
コメントなどあれば、お願いいます。