ニューラルネットワークで重要な活性化関数の1つである「Mish関数」を、紹介します。理解のしやすいMish関数をPythonで実装も行いながら紹介しています。
Mish関数とは?
Mish関数のグラフ
Mish関数は、負の値は膨らんでから「0」へ収束、正の値は「x」を出力する関数です。
ミッシュ関数と呼ばれます。
Swish関数はReLU関数を拡張した関数で非常に似ています。
ReLU関数よりも下限を滑らかにすることで柔軟な学習結果を期待します。
それでもやはり、ReLU関数が最善とされていますが、
ReLU関数よりもMish関数のほうが良いのではないかという論文もあり、Mish関数は非常に注目されています。
下に、ReLU関数、Swish関数、Mish関数を重ねたグラフを載せておきます。
Mish関数はSwish関数よりもReLU関数に近い線を描きます。
Mish関数の数式
Mish関数はtanh関数とソフトプラス関数δ(x)を利用します。
数式は難しく見えますが、単なる組み合わせなのでそこまで難しくありません。
Mish関数のソースコードを後述しますが、NumPyを利用すればたった2行で書くことができます。
PythonでMish関数を実装
実装
#Mish関数
import numpy as np
def mish(x):
x_sp = np.log(1 + np.exp(x))
return x * ((np.exp(x_sp) - np.exp(-x_sp)) / (np.exp(x_sp) + np.exp(-x_sp)))
if __name__ == '__main__':
print(mish(2)) # 任意の数字を入力
【実行結果】
1.9439589595339948
5行目の「np.exp(-x)」は、「e の -x乗」を表しています。
Mish関数は数式は複雑ですが、NumPyを利用すれば非常にシンプルに表すことができます。
【参考】Mish関数をプロットするコード
下記は、matplotlibを使ってMish関数を描画するソースコードです。
#Mish関数
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(-6, 6, 0.1)
x_sp = np.log(1 + np.exp(x))
y = x * ((np.exp(x_sp) - np.exp(-x_sp)) / (np.exp(x_sp) + np.exp(-x_sp)))
plt.grid()
plt.plot(x, y)
plt.show()
このコードを実行すると、下のグラフが実行結果として生成されます。
うまくMish関数がプロットされています。
ということで本記事は、
ニューラルネットワークで非常に重要な、活性化関数の1つであるMish関数を紹介しました!
最後まで読んでいただき、ありがとうございました\(^o^)/
ディープラーニングのおすすめ書籍
専門書としては異例の発行部数を誇る、素晴らしい書籍です(^^)
初心者の方から知識のある方まで、幅広い方に向けて書かれていますよ!\(^o^)/
超オススメのPC用品
PCを操作する上で、トラックボールマウスが非常におすすめです!
僕も感動したこのマウスを、騙されたと思って使ってみてください!(^^)
外部モニターで2倍以上の効率化が見込めます!
安いものだと、たったの1万円前後なのでおすすめですよー!\(^o^)/