パーセプトロンと活性化関数
田中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 のような問題も解けるようになります。これが「深層」学習の基盤です。
活性化関数
活性化関数は、ニューロンの出力に非線形性を導入する関数です。活性化関数がなければ、何層重ねても結局は線形変換にしかなりません。
主要な活性化関数
| 関数 | 数式 | 出力範囲 | 主な用途 |
|---|---|---|---|
| Sigmoid | 1/(1+e^(-z)) | (0, 1) | 二値分類の出力層 |
| Tanh | (e^z - e^(-z))/(e^z + e^(-z)) | (-1, 1) | RNN の隠れ層 |
| ReLU | max(0, z) | [0, +inf) | CNN/MLP の隠れ層(最も一般的) |
| Leaky ReLU | max(0.01z, z) | (-inf, +inf) | ReLU の改良版 |
| GELU | z * Phi(z) | 近似的に(-0.17, +inf) | Transformer |
| Softmax | e^(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 が主流なのか
- 計算が高速: max(0, z) は単純な比較演算
- 勾配消失が起きにくい: 正の領域で勾配が常に1
- スパース性: 負の入力を0にすることで、ネットワークがスパースに活性化
ただし、ReLU には「Dying ReLU」問題(一度負になったニューロンが復活しない)があり、Leaky ReLU や GELU で改善されます。
出力層の活性化関数の選び方
| タスク | 出力層の活性化関数 | 損失関数 |
|---|---|---|
| 二値分類 | Sigmoid | Binary Cross-Entropy |
| 多クラス分類 | Softmax | Categorical Cross-Entropy |
| 回帰 | なし(恒等関数) | MSE / MAE |
まとめ
- パーセプトロンは重み付き和 + 活性化関数で構成される
- 単層では線形分離可能な問題しか解けないが、多層にすることで非線形問題に対応できる
- 活性化関数は非線形性を導入する役割を持つ
- 隠れ層では ReLU 系、出力層ではタスクに応じた活性化関数を選ぶ
チェックリスト
- パーセプトロンの計算の流れ(重み付き和 → 活性化関数)を説明できる
- 単層パーセプトロンの限界(線形分離のみ)を理解した
- ReLU、Sigmoid、Softmax の特徴と使い分けを説明できる
- なぜ活性化関数が必要なのかを説明できる
推定読了時間: 30分