新着情報
3. 活性化関数f(a): Activation Function
① Step function: pythonにおける実装
# ステップ関数のグラフを描く
%matplotlib inline
import matplotlib.pylab as plt
import numpy as np
# ステップ関数のグラフを描く
def step_function(x):
return (x > 0).astype(np.int) # 比較した結果をint型に変換して返す
x = np.arange(-5.0, 5.0, 0.01) # -5.0から5.0までを0.01刻みにした等差数列
y = step_function(x) # 等差数列xを引数にしてステップ関数を実行
plt.plot(x,y) # ステップ関数の結果をy軸にしてグラフを描く
plt.ylim(-0.1, 1.1) # y軸の範囲を(-0.1 -1.1)に指定
plt.grid(True) # グリッドを表示
plt.yticks([-0.5, 0.0, 0.5, 1.0, 1.5] ) # グリッドの間隔を設定
plt.show()
ステップ関数の引数 x に、numpyの配列を割り当て、x > 0かどうかを判定すると判定結果が配列に格納される。配列データをbool型から整数型にキャスティング(型変換)をするため、astype()メソッドを使用し、(x > 0).astype(np.int)により、
True —> 1, False —> 0となり、1 又は 0 を出力するステップ関数は実現できる。
② Sigmoid function: pythonにおける実装
# シグモイド関数のグラフを描く
%matplotlib inline
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.01) # -5.0から5.0までを0.01刻みにした等差数列
y = sigmoid(x) # 等差数列を引数にしてシグモイド関数を実行
plt.plot(x, y) # シグモイド関数の結果をy軸にしてグラフを描く
plt.ylim(-0.1, 1.1) # y軸の範囲を指定
plt.grid(True) # グリッドを表示
plt.yticks(
[-0.5, 0.0, 0.5, 1.0, 1.5] ) # グリッドの間隔を設定
plt.show()
ステップ関数でなく、なぜSigmoid関数が活性化関数として使われるかという疑問は
ニューラルネットワークの重み付けをどう改善するのかという問題と関連する。
学習によりニューラルネットワークへの重みを更新するとき、最適な重みを見つける必要があり、此の様な数値解を求める手法として勾配法が用いられる。勾配法では活性化関数の微分値を用いるので、微分不可能なステップ関数は活性化関数として不適当となり、代わりにSigmoid 関数がニューラルネットで用いられる理由である。
参考文献:
夢見るディープラーニング: ニューラルネットワーク[Python実装]入門, 3章
金城悛哉、秀和システム、2018.