機械学習

標準シグモイド関数とその微分をグラフ化してみた

\(f(x)=\displaystyle \frac{1}{1 + e^{-ax}} (a > 0)\)で表現される関数をシグモイド関数といい、このうち\(a=1\)の場合を標準シグモイド関数という。

今回は、標準シグモイド関数とその微分をグラフ化してみたので、その結果を共有する。

標準シグモイド関数\(f(x)=\displaystyle \frac{1}{1 + e^{-x}}\)をPythonでグラフ化した結果は、以下の通り。

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt

# 標準シグモイド関数の定義
def std_sigmoid(x):
    return 1 / (1 + np.e**(-x))

# -10~10までを1000等分した値をxとする
x = np.linspace(-10, 10, 1000)
# 上記xに対応する標準シグモイド関数yの値を算出
y = std_sigmoid(x)

# x,yに対応する値のグラフを表示
plt.plot(x, y)
plt.title("standard sigmoid function")
plt.xlabel("x", size=14)
plt.ylabel("y", size=14)
plt.grid()
plt.show()
標準シグモイド関数のグラフ



また、\(f(x)=\displaystyle \frac{1}{1 + e^{-x}}\)を\(x\)について微分すると、以下のようになる。ただし、\(u=1 + e^{-x}\)と置き換えて計算するものとする。
\[
\begin{eqnarray}
\displaystyle \frac{ \mathrm{d} f(x)}{ \mathrm{d} x} &=& \frac{ \mathrm{d} f(x)}{ \mathrm{d} u}\frac{ \mathrm{d} u}{ \mathrm{d} x} \\
&=& \frac{ \mathrm{d}}{ \mathrm{d} u}\frac{1}{u} \frac{ \mathrm{d}}{ \mathrm{d} x}(1 + e^{-x}) \\
&=& -u^{-2} \times (-e^{-x}) = \frac{e^{-x}}{u^2} = \frac{e^{-x}}{(1 + e^{-x})^2} \\
&=& \frac{1}{1 + e^{-x}}\frac{e^{-x}}{1 + e^{-x}} = \frac{1}{1 + e^{-x}}\frac{1 + e^{-x} – 1}{1 + e^{-x}} \\
&=& \frac{1}{1 + e^{-x}} \left( \frac{1 + e^{-x}}{1 + e^{-x}} – \frac{1}{1 + e^{-x}} \right) \\
&=& \frac{1}{1 + e^{-x}} \left( 1 – \frac{1}{1 + e^{-x}} \right) = f(x)(1-f(x))
\end{eqnarray}
\]

なお、上記計算にあたっては、以下の合成関数の微分公式を利用している。
https://manabitimes.jp/math/936

上記、標準シグモイド関数の微分をグラフに追加した結果は、以下の通り。

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt

# 標準シグモイド関数の定義
def std_sigmoid(x):
    return 1 / (1 + np.e**(-x))

# 標準シグモイド関数の微分の定義
def diff_std_sigmoid(x):
    return std_sigmoid(x) * (1 - std_sigmoid(x))

# -10~10までを1000等分した値をxとする
x = np.linspace(-10, 10, 1000)
# 上記xに対応する標準シグモイド関数y1の値を算出
y1 = std_sigmoid(x)
# 上記xに対応する標準シグモイド関数の微分y2の値を算出
y2 = diff_std_sigmoid(x)

# x,y1,y2に対応する値のグラフを表示
plt.plot(x, y1, label='sigmoid')
plt.plot(x, y2, label='sigmoid differential')
plt.title("standard sigmoid function and differential")
plt.xlabel("x", size=14)
plt.ylabel("y", size=14)
plt.legend()
plt.grid()
plt.show()
標準シグモイド関数とその微分のグラフ

要点まとめ

  • \(f(x)=\displaystyle \frac{1}{1 + e^{-ax}} (a > 0)\)で表現される関数をシグモイド関数といい、このうち\(a=1\)の場合を標準シグモイド関数という。
  • 標準シグモイド関数\(f(x)=\displaystyle \frac{1}{1 + e^{-x}}\)を微分すると、\(f(x) (1-f(x))\)となる。