概要
- パーセプトロン は最小の「脳」で、1つの入力に対し Yes/No で答える単純な仕組み
- 重み・バイアス・ループ のみで構成され、現代ニューラルネットワークの基礎
- 決定境界 や バイアスの役割、 学習率、 正規化 の重要性を解説
- Pythonで実装 し、学習の様子やパラメータ更新の流れを観察
- 複数のニューロンを重ねることで、より複雑な問題にも対応可能
パーセプトロンとは何か
- パーセプトロン は1958年にFrank Rosenblattが考案した計算モデル
- ニューロン (脳細胞)を模倣し、入力信号が十分強ければ出力を発火
- 数式: output = 1 if (w · x + b) > 0, 0 otherwise
- x は入力、 w は重み、 b はバイアス
- 入力値に重みをかけて合計し、バイアスを足して閾値(0)を超えたら「Yes」
人間の意思決定との類似
- John Doeの例: 要素(入力)ごとに重み付け して合計、閾値を超えたら決断
- 重み は「どれだけ重要か」、 バイアス は「基準値(閾値)」の役割
- 体言止め: 人間の意思決定プロセス
パーセプトロンの構造
- 複数入力(例:給料・勤務地) × 重み + バイアス → 合計値
- 合計値が0を超えたら「Yes」、それ以外は「No」
- 体言止め: 単純な二値分類器
最も単純な判断:「この数は正か?」
- 入力1つ、 判定基準は0
- 数式: prediction = (weight * value + bias) > 0
- 重み・バイアス は初期値としてランダム
- 体言止め: 単純な分類関数
学習の仕組み
- 予測が間違った場合のみ、重みとバイアスを微調整
- 誤差計算: error = result - prediction
- 更新式: weight += learning_rate * error * value
- learning_rate (学習率)は修正幅を決定
- epoch (エポック):全データを1周学習
- 体言止め: 逐次的な誤差修正
決定境界とは
- 決定境界 :出力がFalseからTrueに切り替わる点
- 数式: decision_boundary = -bias / weight
- バイアスがない場合、決定境界は常に0に固定
- 体言止め: 分類の分岐点
バイアスの重要性:合格ラインの例
- 新たな問題: 試験の合格(50点以上)
- バイアスなし では決定境界が0から動かせない
- バイアスあり だと境界を50に設定可能
- 重み は傾きを決定、 バイアス は境界の位置を調整
- 体言止め: バイアスによる柔軟な境界設定
エポックと学習率
- エポック :データ全体を何度繰り返し学習したか
- 学習率 :1回の修正の大きさ
- 小さい学習率は安定だが遅い、大きいと速いが不安定
- 体言止め: 学習パラメータの調整
データの正規化の必要性
- 入力値が大きいと、1回の誤りで重みが大きく変動
- 正規化 :入力を0〜1など小さな範囲に変換
- 異なるスケールの入力要素のバランス調整
- 一般的な方法: 最大値で割る、または 平均・標準偏差で標準化
- 体言止め: 安定した学習のための前処理
Pythonによるパーセプトロン実装
- 重み・バイアス をランダム初期化
- 学習率・エポック数 を設定
- データ生成 :正の数(True)、負の数(False)を用意
- 逐次的に 予測・誤差計算・重みバイアス更新
- 決定境界 の計算と表示
import random
learning_rate = 0.1
EPOCHS = 100
weight = random.uniform(-1, 1)
bias = random.uniform(-1, 1)
data = [(i * 0.1, True) for i in range(1, 501)]
data += [(i * 0.1, False) for i in range(-500, 0)]
random.shuffle(data)
for epoch in range(EPOCHS):
for value, result in data:
prediction = (weight * value + bias) > 0
if prediction != result:
error = result - prediction
weight += learning_rate * error * value
bias += learning_rate * error
decision_boundary = -bias / weight
print(f"weight = {weight:.3f}")
print(f"bias = {bias:.3f}")
print(f"decision boundary = {decision_boundary:.3f}")
- 学生合格判定 への応用:データを試験点数に変更、バイアスの有無で挙動を比較
- 体言止め: シンプルなパーセプトロンの全体像
まとめと次のステップ
- パーセプトロン は入力を重み付けし、バイアスを加えて判定
- 誤りから学習 し、エポックごとに精度向上
- 単一ニューロン は直線分離までだが、 多層化で複雑な問題に対応
- すべてのニューラルネットワークの基礎となる動作
- 体言止め: 深層学習の出発点としてのパーセプトロン
参考・謝辞
- 本記事のインスピレーション:Welch Labsの動画「The Perceptron」
- 視覚的に学びたい方 におすすめ
- 体言止め: 学習リソースの紹介