いっしきまさひこBLOG

AI・機械学習関連、Web制作関連、プログラミング関連、旅行記録などなど。一色政彦。

活性化関数の「導関数」の出力グラフをPythonで描画する方法

この記事では、活性化関数の「導関数」の出力をグラフにします。導関数にデータを渡してグラフにするだけで難しくないです。

でも面倒というかサッと書きたい場合(含む:コピペしたい場合)、使えそうな情報がほとんどなさそうだから、必要な人(含む:自分)用に書きました。

活性化関数といってもいろいろありますが、例としてシグモイド関数を取り上げます。シグモイド関数やその導関数については、「[活性化関数]シグモイド関数(Sigmoid function)とは?:AI・機械学習の用語辞典 - @IT」を参考にしてください。

以下で説明する内容は、以下に実行/ソースコード参照できます。

■準備

●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] ……などと表示される

●シグモイド関数のグラフを描画

f:id:misshiki:20200317001751p:plain
シグモイド関数のグラフ

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] ……などと表示される

●シグモイド関数の「導関数」のグラフを描画

f:id:misshiki:20200317001809p:plain
シグモイド関数の「導関数」のグラフ

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

以上で終わりです。