この記事では、活性化関数の「導関数」の出力をグラフにします。導関数にデータを渡してグラフにするだけで難しくないです。
でも面倒というかサッと書きたい場合(含む:コピペしたい場合)、使えそうな情報がほとんどなさそうだから、必要な人(含む:自分)用に書きました。
活性化関数といってもいろいろありますが、例としてシグモイド関数を取り上げます。シグモイド関数やその導関数については、「[活性化関数]シグモイド関数(Sigmoid function)とは?:AI・機械学習の用語辞典 - @IT」を参考にしてください。
以下で説明する内容は、以下に実行/ソースコード参照できます。
- Colab: How to draw Derivative graph of a function.ipynb - Colaboratory
- GitHub: MLnotebooks/How_to_draw_Derivative_graph_of_a_function.ipynb at master · isshiki/MLnotebooks
■準備
●Pythonバージョン:3.x
import sys print('Python', sys.version) # Python 3.6.9 (default, Nov 7 2019, 10:44:02) …… などと表示される
■実装方法
●NumPyを使って0.001間隔で-6~6の数値を生成
import numpy as np xn = np.arange(-6.0, 6.0, 0.001) print(xn) # [-6. -5.999 -5.998 ... 5.997 5.998 5.999] ……などと表示される
●シグモイド関数(ゲイン付き)の定義
def sigmoid(x, a=1): # a: ゲイン(係数) return 1.0 / (1.0 + np.exp(-a*x)) print(sigmoid(xn)) # [0.00247262 0.00247509 0.00247756 ... 0.99751997 0.99752244 0.99752491] ……などと表示される
●シグモイド関数のグラフを描画
import matplotlib.pyplot as plt plt.plot(xn, sigmoid(xn), label = "Sigmoid(a=1)") plt.plot(xn, sigmoid(xn, 2), label = " (a=2)") plt.plot(xn, sigmoid(xn, 10), label = " (a=10)") plt.plot(xn, sigmoid(xn, 100), label = " (a=100)") plt.xlim(-6, 6) plt.ylim(-0.2, 1.2) plt.grid() plt.legend() plt.show()
●シグモイド関数の「導関数」の定義
def der_sigmoid(x, a=1): # a: ゲイン(係数) return sigmoid(x, a) * (1.0 - sigmoid(x, a)) print(der_sigmoid(xn)) # [0.00246651 0.00246896 0.00247142 ... 0.00247388 0.00247142 0.00246896] ……などと表示される
●シグモイド関数の「導関数」のグラフを描画
import matplotlib.pyplot as plt plt.plot(xn, der_sigmoid(xn), label = "Derivative of Sigmoid(a=1)") plt.plot(xn, der_sigmoid(xn, 2), label = " (a=2)") plt.plot(xn, der_sigmoid(xn, 10), label = " (a=10)") plt.plot(xn, der_sigmoid(xn, 100), label = " (a=100)") plt.xlim(-6, 6) plt.ylim(-0.2, 0.3) plt.grid() plt.legend() plt.show()