世界を動かす技術を、日本語で。

作れる最小の脳: Pythonによるパーセプトロン

2026年6月8日原文(ranpara.net)

概要

  • パーセプトロン は最小の「脳」で、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」
  • 視覚的に学びたい方 におすすめ
  • 体言止め: 学習リソースの紹介

Hackerたちの意見

MLの基本を学びたいなら、クリス・ビショップの「Deep Learning: Foundations and Concepts」って本をおすすめするよ。オンラインで学びたいなら、https://course.fast.ai/もいい選択肢だね。MLを知らないなら、即席のデモではあまり学べないと思うよ。

この本のおかげで、機械学習を視覚化するための直感やツールが身についたよ。もっと頭が良ければ、全部をうまくまとめられたのに。

おすすめしてくれた本を見てみたら、サイトに無料のオンラインオプションもあったよ!めっちゃ親切だね:https://www.bishopbook.com/

ビショップが新しい教科書を出してたなんて知らなかった。ちょっと見てみるつもり。彼の「Pattern Recognition」本はちょっと密度が高すぎてあんまり好きじゃなかったな。マーフィーやアルパイディンの本の方が好きだった。追記:彼の息子が共著者なの?

このFast AIコース、めっちゃ良さそうだね!絶対にすぐに学び始めるよ。ありがとう!

シンプルでいいね!JavaScriptで似たようなアプローチを試して、NanoNeuronを作ったよ。https://github.com/trekhleb/nano-neuron(でもPythonよりは冗長だけどね)

インタラクティブデモから今日はたくさん学んだよ。あなたは教育するのに必要な明確さとスキルを持ってるね。

ありがとう!他のコンセプトでももっとデモを作るようにするよ。

パーセプトロンは、作れる中で最小の脳なんだ。 > 1958年、フランク・ローゼンブラットという研究者が「パーセプトロン」と呼ぶ機械を作ったんだ。 > それは、単一の脳細胞、ニューロンにインスパイアされたものだよ。

そうだね。でも、少なくともこの投稿はOP自身が書いたみたいだし、素晴らしい学習リソースだよね。これって、もっと重要かもね :-)

IF文はソフトウェアプログラミングの根本的なクリエイターなんだ。二つの値を比較して、指示のブロックに分岐する能力がある。だから、読み取り、意思決定、ルーティングを行っていて、これが生命と無生物を分けるものなんだ。AIエージェントも同じループを実行していて、最初の二つのステップをモデルに委任してる。さらに遡ると、トランジスタ(またはPNP接合)がIF文のハードウェアレベルの実現を可能にしてる。電流によって駆動されるアクション(スイッチング)は、無生物が電気の速さで「観察して行動する」最初の現れなんだ。もちろん、機械的な同等物も存在していて、燃料の流れを制御するガバナーの速度が、ガバナーの速度を制御している。

チューリング・タンブルで遊ぶのも楽しいかもしれないよ。

Hacker Newsで議論の続きを見る