|

Pythonを利用したシグモイド関数の実装と可視化:微分まで完全に理解する

シグモイド(Sigmoid)関数はディープラーニングで重要な活性化関数で、主にバイナリ分類問題でよく使われます。この記事では パイソンを使ってこの関数を直接実装して、グラフで可視化する過程を説明します。 さらに、この関数をグラフで可視化します、 シグモイド関数微分も実装して、その可視化結果まで一緒に見てみましょう。 実習コードを見ながら、Sigmoid関数の動作原理をより明確に理解することができます。

シグモイド関数とは?

Sigmoid関数は次のような式で定義されます。

S(x) = \frac{1}{1 + e^{-x}}

この関数は入力値を0と1の間の値に変換してくれる非線形関数で、主にニューラルネットワークで活性化関数としてよく使われます。この式をPythonの可視化実装をして、直接グラフで描いてみましょう。

Sigmoid関数のPythonによる可視化の実装

まず、シグモイド関数をPythonコードで実装してみます。

import numpy as np
import matplotlib.pyplot as plt

# シグモイド関数の定義
def sigmoid(x):
    return 1 / (1 + np.exp(-x))

# xの範囲設定
x = np.linspace(-10, 10, 100)

# シグモイド関数適用
y = sigmoid(x)

#の可視化
plt.plot(x, y, label='Sigmoid')
plt.title('Sigmoid Function')
plt.xlabel('x')
plt.ylabel('S(x)')
plt.grid(True)
plt.legend()
plt.show()

上のコードはSigmoid関数を定義し、それを視覚化したものです。 np.linspaceを使用して-10から10までの値を生成し、各値をSigmoid関数に適用して y 値を計算した後、グラフを描きます。

コード解説

  • numpyをnpとしてインポートする: 数値計算のためのNumPyライブラリを取得します。
  • matplotlib.pyplot as plt をインポートします。: グラフを可視化するためのMatplotlibライブラリを読み込みます。
  • def sigmoid(x): return 1 / (1 + np.exp(-x)): Sigmoid関数を定義します。この関数は入力値を0と1の間の値に変換します。
  • x = np.linspace(-10, 10, 100)を指定します:-10から10まで100個の等間隔の点を生成し、x軸の値として使用します。
  • y = sigmoid(x): 生成されたx値に対してSigmoid関数を適用してy値を計算します。
  • plt.plot(x, y, label='Sigmoid'): xとyの値を利用してSigmoid関数のグラフを描きます。
  • plt.title('Sigmoid Function'): グラフのタイトルを「Sigmoid Function」に設定します。
  • plt.xlabel('x')plt.ylabel('S(x)'): x 軸と y 軸のラベルをそれぞれ 'x' と 'S(x)' に設定します。
  • plt.grid(True): グラフにグリッドを表示します。
  • plt.legend(): グラフに凡例を追加します。
  • plt.show(): 完成したグラフを画面に表示します。
시그모이드 함수 시각화
( Pythonで可視化したシグモイド関数 )

Sigmoid関数微分

Sigmoid関数の微分は次のように定義されます:

S'(x) = S(x) \times (1 - S(x))

この微分関数もPythonで実装して視覚化してみます。

# シグモイド関数微分の定義
def sigmoid_derivative(x):
    return sigmoid(x) * (1 - sigmoid(x))

#シグモイド関数微分を適用します。
y_deriv = sigmoid_derivative(x)

#の可視化
plt.plot(x, y_deriv, label='Sigmoid Derivative', color='orange')
plt.title('Sigmoid Derivative Function')
plt.xlabel('x')
plt.ylabel("S'(x)")
plt.grid(True)
plt.legend()
plt.show()

このコードはSigmoid関数の微分を計算し、その結果を視覚化します。微分値は元のSigmoid関数から導出され、勾配が最も大きい区間がx=0付近であることがグラフで確認できます。

コード解説

  • def sigmoid_derivative(x): return sigmoid(x) * (1 - sigmoid(x)): Sigmoid関数の微分を定義します。Sigmoid関数の微分はS(x) * (1 - S(x))で表現されます。
  • y_deriv = sigmoid_derivative(x): 先に定義したx値に対してSigmoid関数の微分を適用してy_deriv値を計算します。
  • plt.plot(x, y_deriv, label='sigmoid derivative', color='orange'): xとy_derivの値を利用してSigmoid関数の微分グラフをオレンジ色で描画します。
  • plt.title('Sigmoid Derivative Function'): グラフのタイトルを「Sigmoid Derivative Function」に設定します。
  • plt.xlabel('x')plt.ylabel("S'(x)"): x軸とy軸のラベルをそれぞれ'x'と'S'(x)'に設定します。
  • plt.grid(True): グラフにグリッドを表示します。
  • plt.legend(): グラフに凡例を追加します。
  • plt.show(): 完成したグラフを画面に表示します。
시그모이드 함수 미 분 시각화
( シグモイド関数微分の可視化 )

Sigmoid関数と微分関数の比較可視化

では、Sigmoid関数とその微分値を同じグラフで比較してみましょう。 これにより、Sigmoid関数の特性と微分関数の変化を一目で確認することができます。

import numpy as np
import matplotlib.pyplot as plt

# Sigmoid関数の定義
def sigmoid(x):
    return 1 / (1 + np.exp(-x))

# xの範囲設定
x = np.linspace(-10, 10, 100)

# Sigmoid関数適用
y = sigmoid(x)

# Sigmoid関数の微分計算
y_deriv = y * (1 - y) # derivative of sigmoid

# Sigmoid関数と微分関数を一緒に可視化します。
plt.plot(x, y, label='Sigmoid', color='blue')
plt.plot(x, y_deriv, label='Sigmoid Derivative', color='orange') # y_deriv が定義されました。
plt.title('シグモイド関数とその微分')
plt.xlabel('x')
plt.ylabel('Value')
plt.grid(True)
plt.legend()
plt.show()

上のコードは、Sigmoid関数と微分関数を同時に視覚化したものです。 このグラフを通じて、Sigmoid関数がxの値によってどのように変化するのか、その微分がどのようなパターンを示すかを確認することができます。

시그모이드 함수와 미분 함수 비교 시각화
( シグモイド関数と微分関数の比較可視化 )

シグモイド関数を使用する理由

シグモイド関数は様々な理由でディープラーニングで重要な役割を果たします。 その中でも代表的な理由は、バイナリ分類問題で出力値を0と1の間に制限して確率として解釈することができるからです。 また、微分が可能なので、逆伝播(Backpropagation)過程で勾配の計算が容易です。しかし、勾配消失問題を引き起こす可能性があるという欠点があり、現在はReLUなどの関数がより多く使用されることもあります。

整理する

今回の記事では Pythonを利用したシグモイド関数の実装とその微分を可視化する過程を扱いました。シグモイド関数はディープラーニングで重要な活性化関数であり、バイナリ分類問題で確率計算によく使われます。これを直接実装してグラフを描きながら、関数の動作原理とその微分の変化を簡単に理解できたと思います。 シグモイド関数の概念とPythonの実習を通じて、ディープラーニングモデルをよりよく理解し、活用できるようになると思います。

類似の投稿