新着情報

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()

Fig.1 ステップ関数

 

 

 

 

 

 

 

 

ステップ関数の引数 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()

Fig.2 Sigmoid Function

ステップ関数でなく、なぜSigmoid関数が活性化関数として使われるかという疑問は

ニューラルネットワークの重み付けをどう改善するのかという問題と関連する。

学習によりニューラルネットワークへの重みを更新するとき、最適な重みを見つける必要があり、此の様な数値解を求める手法として勾配法が用いられる。勾配法では活性化関数の微分値を用いるので、微分不可能なステップ関数は活性化関数として不適当となり、代わりにSigmoid 関数がニューラルネットで用いられる理由である。

 

参考文献:

夢見るディープラーニング: ニューラルネットワーク[Python実装]入門, 3章

金城悛哉、秀和システム、2018.

コメント投稿フォーム

メールアドレスが公開されることはありません。 が付いている欄は必須項目です