Pythonで指数関数を計算する:math.exp()の使い方とシグモイド関数の実装

科学技術計算や機械学習の分野では、ネイピア数 $e$(自然対数の底、約2.718)を底とする指数関数 $y = e^x$ が頻繁に登場します。

Pythonの標準ライブラリ math モジュールには、この計算を高速かつ高精度に行うための関数 math.exp() が用意されています。

この記事では、math.exp() の基本的な使い方と、機械学習でよく使われる「シグモイド関数」の実装例を通じてその活用方法を解説します。

目次

math.exp() の基本的な使い方

math.exp(x) は、$e$ の $x$ 乗($e^x$)を計算して返します。

構文:

import math

値 = math.exp(数値)

具体的な使用例:放射性物質の減衰

指数関数的な減少(減衰)を計算する例です。ある物質の量が時間とともに $e^{-t}$ に比例して減少していく様子をシミュレーションします。

import math

def calculate_decay(initial_amount, rate, time):
    """
    指数関数的減衰を計算する関数
    N(t) = N0 * e^(-λt)
    """
    # -rate * time の部分を指数として計算
    decay_factor = math.exp(-rate * time)
    return initial_amount * decay_factor

# 初期量: 100, 減衰率: 0.5, 時間: 2
amount_at_t2 = calculate_decay(100, 0.5, 2)

# 時間: 5
amount_at_t5 = calculate_decay(100, 0.5, 5)

print(f"時間0: 100.0")
print(f"時間2: {amount_at_t2:.4f}")
print(f"時間5: {amount_at_t5:.4f}")

実行結果:

時間0: 100.0
時間2: 36.7879
時間5: 8.2085

math.exp(-rate * time) を使うことで、自然な減衰カーブを簡単に計算できます。

実践例:シグモイド関数の実装

math.exp() が最もよく使われる場面の一つに、AI(ニューラルネットワーク)における活性化関数「シグモイド関数」の実装があります。

数式は以下の通りです。

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

これをPythonコードに落とし込みます。

import math

def sigmoid(x):
    """シグモイド関数"""
    return 1 / (1 + math.exp(-x))

# --- 動作確認 ---
values = [-5, 0, 5]

print("--- シグモイド関数の計算結果 ---")
for v in values:
    result = sigmoid(v)
    print(f"x={v:>2} : {result:.4f}")

実行結果:

--- シグモイド関数の計算結果 ---
x=-5 : 0.0067
x= 0 : 0.5000
x= 5 : 0.9933

入力値が 0 のときに 0.5 となり、大きな正の値なら 1 に、小さな負の値なら 0 に近づくシグモイド関数の特性が確認できます。

math.e ** x との違い

math.exp(x) は、math.e ** x (定数 e のべき乗)と同じ計算をしているように見えますが、以下の点で math.exp(x) の使用が推奨されます。

  1. 精度: math.exp(x) は、指数関数専用のアルゴリズムで実装されており、通常のべき乗計算よりも精度が高い場合があります。
  2. 可読性: 数式における $\exp(x)$ という表記と対応しており、コードの意味が伝わりやすくなります。
x = 10

# どちらもほぼ同じ結果になるが、math.exp の方が専用関数として好ましい
print(math.e ** x)
print(math.exp(x))

まとめ

  • math.exp(x): ネイピア数 $e$ の $x$ 乗($e^x$)を計算します。
  • 物理現象のシミュレーション(減衰、成長)や、統計・機械学習(シグモイド関数、正規分布)など幅広い分野で利用されます。
  • 単純な math.e ** x よりも、専用関数である math.exp(x) を使うことが一般的です。
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次