こんにちは、インフラエンジニアのryuです。
今回は、ニューラルネットワークの活性化関数について解説します。活性化関数とは、ニューラルネットワークの計算で使用されるもので、出力信号を変換する関数のことです。いくつかの種類があり、良く分からない人も多いと思います。今回はステップ関数とシグモイド関数をpythonで実装しながら解説します。
活性化関数を実装する【ステップ関数とシグモイド関数】
活性化関数とは、ニューラルネットワークの計算で使用されるもので、出力信号を変換する関数のことです。
活性化関数には、以下のようなものがあります。
- ステップ関数
- シグモイド関数
- ReLu関数
- 恒等関数
- ソフトマックス関数
その他にも種類がありますが、上記の関数を理解しておけば大丈夫です。その他のものは、上記の関数から派生したものが多いです。
今回は、上2つの”ステップ関数”と”シグモイド関数”について解説します。
では、早速実装してみましょう。実装にはpythonを使用しています。
ステップ関数
ステップ関数とは、0以上の場合は1を出力して、それ以外は0を出力する関数です。
グラフにすると以下のようになります。
ステップ関数は、2値分類で使われます。パーセプトロンが登場したころに使われていましたが、今は後で説明するシグモイド関数が2値分類では使われます。
では、pythonで実装してみましょう。
import numpy as np
import matplotlib.pylab as plt #グラフを表示するモジュール
#ステップ関数の定義
def step_function(x):
return np.array(x > 0, dtype=np.int)
x = np.arange(-5.0, 5.0, 0.1)
y = step_function(x)
plt.plot(x,y)
上記コードの解説を行います。
まず、2つのモジュールをインポートします。numpyは学術計算をするモジュールで、人工知能を作成するときによく使います。matplitlibはグラフを表示するモジュールです。
def step_function(x):にて、ステップ関数の定義を行っています。numpyをつかって、xが0以上なら1を出力、それ以外は0を出力するようにしています。詳しく説明すると、np.array(x>0)で”true”or”false”が出力されます。それをdtype=np.intをつかってtrueなら1を、falseなら0を出力するようにしています。
最後にmatplotlibを使ってグラフを表示させています。
シグモイド関数
シグモイド関数はニューラルネットワークで良く使われる関数です。グラフにすると↓のようになります。
ステップ関数を滑らかにしたものです。ステップ関数は0か1しか返さないのに対して、シグモイド関数は0~1の値を返します。そうすることで、ニューラルネットワークの精度が増します。
では、pythonで実装してみましょう。
import numpy as np
import matplotlib.pylab as plt
#シグモイド関数の定義
def sigmoid(x):
return 1 / (1 + np.exp(-x))
x = np.arange(-5.0, 5.0, 0.1)
y = sigmoid(x)
plt.plot(x,y)
ステップ関数同様、numpyとmatplotlibをインポートします。
defからシグモイド関数を定義します。シグモイド関数は、以下の数式で定義されます。
この数式をnumpyを使って実装しています。
次にx=np.arrange(-5.0, 5.0, 0.1)で-5~5までの間で0.1間隔の数列を作ります。
-5.0 -4.9 -4.8 ・・・・・4.9 5.0 のようになります。
そして、その数字をシグモイド関数に入れ、yに格納します。
最後にmatplotlibでグラフにして終了です。
活性化関数の実装まとめ
今回は、pythonを使ってステップ関数とシグモイド関数を実装しました。活性化関数はニューラルネットークを理解する上で必要な知識です。pythonで実装し、どのような動作をするのか理解しましょう。
また、私自身がAIをどのように勉強したのかを詳しくまとめたので、興味ある方はこちらもご覧ください。