LESSON

パーセプトロンと活性化関数

田中VPoE:「深層学習の全体像はつかめたかな? ここからは、ニューラルネットワークの最小単位であるパーセプトロンから掘り下げていこう。人間の脳のニューロンを模倣したモデルだ。」

あなた:「ニューロンのような計算ユニットを積み重ねて、複雑なパターンを学習するわけですね。」

田中VPoE:「その通り。まずは1つのニューロンがどう動くかを理解しよう。」

パーセプトロンとは

パーセプトロンは、複数の入力を受け取り、重み付き和を計算し、活性化関数を通して出力する計算ユニットです。

入力 x1 ─── w1 ───┐

入力 x2 ─── w2 ───┼── Σ(wi*xi) + b ── f(z) ── 出力 y

入力 x3 ─── w3 ───┘

                  バイアス b

数式で表すと:

z = w1*x1 + w2*x2 + ... + wn*xn + b  (重み付き和)
y = f(z)                               (活性化関数の適用)

単純パーセプトロンの限界

単純パーセプトロンは線形分離可能な問題しか解けません。

import numpy as np

# AND ゲート(線形分離可能 → 解ける)
def and_gate(x1, x2):
    w1, w2, b = 0.5, 0.5, -0.7
    z = w1 * x1 + w2 * x2 + b
    return 1 if z > 0 else 0

# XOR ゲート(線形分離不可能 → 単純パーセプトロンでは解けない)
# → 多層パーセプトロン(MLP)が必要

多層にすることで、非線形な境界を学習でき、XOR のような問題も解けるようになります。これが「深層」学習の基盤です。

活性化関数

活性化関数は、ニューロンの出力に非線形性を導入する関数です。活性化関数がなければ、何層重ねても結局は線形変換にしかなりません。

主要な活性化関数

関数数式出力範囲主な用途
Sigmoid1/(1+e^(-z))(0, 1)二値分類の出力層
Tanh(e^z - e^(-z))/(e^z + e^(-z))(-1, 1)RNN の隠れ層
ReLUmax(0, z)[0, +inf)CNN/MLP の隠れ層(最も一般的)
Leaky ReLUmax(0.01z, z)(-inf, +inf)ReLU の改良版
GELUz * Phi(z)近似的に(-0.17, +inf)Transformer
Softmaxe^(zi)/Σe^(zj)(0, 1), 合計=1多クラス分類の出力層

活性化関数の実装と可視化

import numpy as np
import matplotlib.pyplot as plt

z = np.linspace(-5, 5, 200)

# Sigmoid
sigmoid = 1 / (1 + np.exp(-z))

# Tanh
tanh = np.tanh(z)

# ReLU
relu = np.maximum(0, z)

# Leaky ReLU
leaky_relu = np.where(z > 0, z, 0.01 * z)

fig, axes = plt.subplots(2, 2, figsize=(10, 8))

for ax, name, values in zip(
    axes.flat,
    ['Sigmoid', 'Tanh', 'ReLU', 'Leaky ReLU'],
    [sigmoid, tanh, relu, leaky_relu]
):
    ax.plot(z, values, linewidth=2)
    ax.set_title(name, fontsize=14)
    ax.axhline(y=0, color='gray', linestyle='--', alpha=0.5)
    ax.axvline(x=0, color='gray', linestyle='--', alpha=0.5)
    ax.grid(True, alpha=0.3)

plt.tight_layout()
plt.show()

なぜ ReLU が主流なのか

  1. 計算が高速: max(0, z) は単純な比較演算
  2. 勾配消失が起きにくい: 正の領域で勾配が常に1
  3. スパース性: 負の入力を0にすることで、ネットワークがスパースに活性化

ただし、ReLU には「Dying ReLU」問題(一度負になったニューロンが復活しない)があり、Leaky ReLU や GELU で改善されます。

出力層の活性化関数の選び方

タスク出力層の活性化関数損失関数
二値分類SigmoidBinary Cross-Entropy
多クラス分類SoftmaxCategorical Cross-Entropy
回帰なし(恒等関数)MSE / MAE

まとめ

  • パーセプトロンは重み付き和 + 活性化関数で構成される
  • 単層では線形分離可能な問題しか解けないが、多層にすることで非線形問題に対応できる
  • 活性化関数は非線形性を導入する役割を持つ
  • 隠れ層では ReLU 系、出力層ではタスクに応じた活性化関数を選ぶ

チェックリスト

  • パーセプトロンの計算の流れ(重み付き和 → 活性化関数)を説明できる
  • 単層パーセプトロンの限界(線形分離のみ)を理解した
  • ReLU、Sigmoid、Softmax の特徴と使い分けを説明できる
  • なぜ活性化関数が必要なのかを説明できる

推定読了時間: 30分