(41) Python matplotlibで活性化関数のグラフを描く。

投稿者: | 2025年5月15日

526 views

やりたいこと

Pythonの描画ライブラリである Matplotlibを使って、活性化関数をグラフにしてみたい。

やってみた

(1) sigmoid, tanh

グラフを見ると一目瞭然だが、
入力値の絶対値が大きい時に出力値が飽和する(=出力値がほぼ一定になる)
 ↓
逆伝播を実行時に微分値(=傾き、勾配)がほぼ 0になる。
 ↓
勾配消失問題(Vanishing Gradient Problem)

import numpy as np
import matplotlib.pyplot as plt

# 入力値の範囲
x = np.linspace(-10, 10, 400)

# 活性化関数
sigmoid = 1 / (1 + np.exp(-x))
tanh    = np.tanh(x)

# グラフ描画
plt.figure(figsize=(8, 5))
plt.plot(x, sigmoid, label='sigmoid', linestyle='-', linewidth=2)
plt.plot(x, tanh,    label='tanh',    linestyle='-', linewidth=2)
plt.title('Activation Functions')
plt.xlabel('x')
plt.ylabel('y')
plt.grid(True)
plt.legend()
plt.axhline(0, color='gray', linewidth=0.5)
plt.axvline(0, color='gray', linewidth=0.5)
plt.tight_layout()
plt.show()

(2) ReLU

入力値が負の値(x < 0)の場合に出力が 0に固定される。
 ↓
死んだニューロン問題(Dead Neuron Problem)
死んだReLU問題(Dying ReLU Problem)

✨ ReLU = max(0, x) のメリット
 🔹正の入力はそのまま通す → 勾配は1で消失しにくい
 🔹負の入力は切り捨てる(0)→ 非線形を生む、スパース活性化
   → ノイズに強くなる。過学習のリスクを減らす。
 🔹計算が軽い(if文一つで済む)

# ReLU 関数の定義
relu = np.maximum(0, x)

# グラフ描画
plt.figure(figsize=(8, 5))
plt.plot(x, relu, label='ReLU', linestyle='-', linewidth=2)
plt.title('ReLU Activation Function')
plt.xlabel('x')
plt.ylabel('y')
plt.grid(True)
plt.legend()
plt.axhline(0, color='gray', linewidth=0.5)
plt.axvline(0, color='gray', linewidth=0.5)
plt.tight_layout()
plt.show()

(3) Leaky ReLU

死んだReLU問題への対策として登場した。

# Leaky ReLU 関数の定義(負の領域に係数0.1)
leaky_relu = np.where(x > 0, x, 0.1 * x)

# グラフ描画
plt.figure(figsize=(8, 5))
plt.plot(x, leaky_relu, label='Leaky ReLU (slope=0.1)', linestyle='-', linewidth=2)
plt.title('Leaky ReLU Activation Function')
plt.xlabel('x')
plt.ylabel('y')
plt.grid(True)
plt.legend()
plt.axhline(0, color='gray', linewidth=0.5)
plt.axvline(0, color='gray', linewidth=0.5)
plt.tight_layout()
plt.show()

ReLU vs Leaky ReLU

速度面、学習性能面で大差はないようだ。

深層ネットワークや不安定なデータセットなど、
ReLUでうまく行かなかったら Leaky ReLUを使ってみる
の使い方で良いようだ。


アクセス数(直近7日): ※試験運用中、BOT除外簡易実装済
  • 2026-02-10: 0回
  • 2026-02-09: 0回
  • 2026-02-08: 0回
  • 2026-02-07: 0回
  • 2026-02-06: 2回
  • 2026-02-05: 0回
  • 2026-02-04: 0回
  • コメントを残す

    メールアドレスが公開されることはありません。 が付いている欄は必須項目です