活性化関数 Swish
前提
DeepLearningで、活性化関数として用いられるrelu関数は、安定して良い精度を出せるものとして様々なモデルに使われているそうです。(知らなかった...)
しかし、限界はあるので、reluに変わる活性化関数の研究はつねに行われてきました。そこでgoogleの社員によって発見されたのがswishです。
swish関数
f(x)=x·sigmoid(βx)
これを使っていろいろなデータで検証したところ、reluと比べて、平均して0.7%くらい精度が上がったらしいです。今まで提唱された他の活性化関数と比べても、様々な種類のデータセットに対して良い精度が出せて汎用性が高いんだそうです。
実装するのもめちゃくちゃ簡単です。reluのところを少し変えればできます。TensorFlowのライブラリにはもう入ってるそうなので、tf.nn.swish(x) で呼び出せます。
他の発見
このswish関数を見つける過程で得られた発見が個人的には面白いと思いました。
swish関数を見つける過程では、いろいろな関数を組み合わせてみたらしいんですが、組み合わせの最終段階で、xそのものを引数の一つに取るのがいいんだとか。
他にも、複雑な組み合わせより、シンプルなもののほうがいい結果が出るらしいです。(完全に私的な感覚ですけど、過学習させないために次元を減らすのに近いのかなと思います。)
まとめ
swishを使えば同じモデルでもコードを少し変えるだけで精度がよくなるので、知っといて損はないと思います。基本的にはreluで問題ないと思いますが、少しでも精度を良くしたいと思ったら、利用してみるのがいいと思います。