パーセプトロン学習シミュレーター 戻る
機械学習シミュレーター

パーセプトロン学習シミュレーター — 線形分類器の収束

2入力単純パーセプトロン y = sign(w1·x1 + w2·x2 + b) の学習則を可視化。線形分離可能なデータに対して決定境界が収束する過程を、学習率や初期値を変えて観察できます。

パラメータ設定
学習率 η
エポック数
w_1 初期値
b 初期値

w_2 の初期値は 0.5 に固定しています。データは固定シード(LCG seed=42)で生成され、再描画しても同じ20点が現れます。

計算結果
最終分類精度
学習後 w_1
学習後 w_2
収束エポック数
最終決定境界

青丸=クラス+1/赤×=クラス-1/緑実線=学習後の決定境界/灰色破線=真の境界 x1+x2=0

理論・主要公式

単純パーセプトロンは2入力の線形しきい値素子で、出力は重み付き和の符号として与えられます:

$$y = \operatorname{sign}(w_1 x_1 + w_2 x_2 + b)$$

学習則(パーセプトロン学習アルゴリズム、PLA)。$t$ は教師信号 $\pm 1$、$y$ はモデル出力:

$$w_i \leftarrow w_i + \eta\,(t - y)\,x_i,\quad b \leftarrow b + \eta\,(t - y)$$

決定境界は $w_1 x_1 + w_2 x_2 + b = 0$、グラフ表示用に整理すると:

$$x_2 = -\frac{w_1 x_1 + b}{w_2}$$

マージン(最近傍点までの距離)は重みノルムで正規化して評価します:

$$\gamma = \frac{w \cdot x_{\text{target}} + b}{\|w\|}$$

データが線形分離可能であれば、パーセプトロン収束定理により有限回の反復で必ず分離超平面が得られます。

パーセプトロン学習シミュレーターとは

🙋
「パーセプトロン」って、ニューラルネットワークの一番最初に出てくる用語ですよね。これって今でも勉強する意味あるんですか?
🎓
ある。むしろここを飛ばすと、後で出てくる深層学習の仕組みが「なんとなくの呪文」に見えてしまう。単純パーセプトロンは「入力2つの重み付き和の符号で2クラスを分ける」だけの最小モデルで、学習則も $w \leftarrow w + \eta(t-y)x$ という1行で済む。上のシミュレーターの「最終分類精度」が100%になっているのは、データが線形分離可能だからだ。
🙋
学習率 η を1.0近くまで上げてみたら、決定境界の傾きが結構ガクッと変わりますね。
🎓
それは更新ステップが大きすぎて、誤分類点1つで重みが大きく振られているからだ。線形分離可能なら最終的には収束するけれど、収束までのエポック数が増えたり、境界が「真の境界 x1+x2=0」から大きく外れたまま止まったりする。実務ではまず小さい η(0.01〜0.1)から始めて、振動が大きすぎるなら下げるのが定石だ。
🙋
「収束エポック数」のカードを見ると、デフォルトだと結構小さい数字ですね。これって何を表してるんですか?
🎓
「全データを1周しても1つも誤分類が出なかった最初のエポック」のことだよ。初期値 w=(0.5, 0.5), b=0 はすでにデータをきれいに分けられる重みなので、ほぼ初回でゼロエラーになる。w_1 初期値を -2 にしてみると、最初は赤×と青丸を逆に分類してしまうから、収束までエポックが必要になるのが観察できる。
🙋
じゃあ「学習」って、要は最初の山勘から少しずつ正解に近づくってことですか?
🎓
そう、しかも誤分類があったときだけ修正する、という非常に倹約的なやり方だ。これがオンライン学習の原型で、ストリーミングデータに強い。1958年にRosenblattが提案したこのアルゴリズムは、今のSGD(確率的勾配降下法)に直結している。スライダーを動かしながら境界線がどう動くかを見ると、深層学習のオプティマイザの気持ちが少し分かるはずだ。

よくある質問

学習できません。XORは線形分離不可能なため、どれだけ学習を繰り返しても重みが永久に振動し決定境界が収束しません。MinskyとPapertが1969年に著書『Perceptrons』でこの限界を指摘したことが、第一次ニューラルネット冬の時代の引き金になりました。隠れ層を1つ追加した多層パーセプトロン(MLP)なら、特徴空間を非線形に変換することでXORを表現できます。
単純パーセプトロンは線形分離可能な問題しか解けませんが、隠れ層を1層以上追加すると任意の連続関数を任意精度で近似できます(普遍近似定理)。学習は誤差逆伝播法(バックプロパゲーション)で行い、活性化関数も階段関数からシグモイドやReLUに置き換わります。現在のディープラーニングは、この多層構造をさらに深くしたものです。
両者とも線形分離面を求める手法ですが、最適化目標が異なります。パーセプトロンは「とにかく分離できる超平面を1つ見つける」だけで、解はデータの提示順や初期値に依存し一意ではありません。SVMは「マージン(最近傍データから境界までの距離)を最大化する超平面」を求めるため解が一意で、汎化性能が高くなります。SVMはさらにカーネル法で非線形問題にも拡張できます。
最大の原因はデータが線形分離不可能なことです。この場合パーセプトロン収束定理が成立せず、重みが永久に振動し続けます。対策としては (1) データが本当に線形分離可能か散布図で確認する、(2) ポケットアルゴリズムで「これまでで最も誤分類が少なかった重み」を保持する、(3) 線形分離不可能ならMLPやカーネルSVMに切り替える、などがあります。本シミュレーターは線形分離可能な固定データを使うため、必ず100%精度に到達します。

実世界での応用

歴史的意義(1958年〜):Frank Rosenblattが提案した単純パーセプトロンは、現代のニューラルネットワークと深層学習の出発点です。当時はハードウェア実装まで作られ「学習する機械」として注目を集めました。その後MinskyとPapertによる線形分離可能性の限界指摘で一度は冬の時代に入りましたが、多層化と誤差逆伝播法の発見で復活し、現在のディープラーニングへと繋がっています。

線形SVMやロジスティック回帰の理論的基礎:「2クラスを線形に分離する超平面を学習する」という基本構造は、線形SVM、ロジスティック回帰、線形判別分析(LDA)など、現在も実務で多用される線形分類器すべてに共通しています。パーセプトロンを理解しておくと、これらの違いが「損失関数」と「最適化方法」の違いとして整理できます。

オンライン学習・ストリーミングデータ:パーセプトロンは1サンプルごとに重みを更新する「オンライン学習」の原型です。バッチ全体を見る必要がないため、メモリ消費が少なく、データが順次到着する状況(広告のクリック予測、不正検知、IoTセンサー解析など)で今も活躍しています。

教育・概念実証:機械学習の入門教材として最も頻繁に取り上げられるアルゴリズムです。「重み」「バイアス」「学習率」「収束」「過学習」「線形分離可能性」といった、現代の深層学習にも共通する重要概念が、わずか数行のコードで体験できます。

よくある誤解と注意点

最も多い誤解は、「学習を長く回せばどんなデータでもいつかは分離できる」と考えてしまうことです。パーセプトロン収束定理は「データが線形分離可能ならば有限回で収束する」という形をしており、線形分離不可能なデータでは100エポック回しても10000エポック回しても収束しません。本シミュレーターはわざと線形分離可能な固定データセットを使っているため必ず100%精度に到達しますが、現実のデータは特徴量を加工しないと線形分離できないことがほとんどです。

次に多い落とし穴は、「学習率は大きいほど早く収束する」と思って η を1.0近くまで上げてしまうことです。確かにステップは大きくなりますが、誤分類点1つで重みが大きく振り回され、境界の傾きが安定するまで余計にエポックを要したり、真の境界(x1+x2=0)から大きく外れた位置で止まったりします。上のシミュレーターで η を 0.01 から 1.0 までゆっくり動かし、「学習後 w_1, w_2」と「決定境界」の挙動を比べてみてください。実務では小さい η から始め、振動が大きいなら下げる、収束が遅すぎるなら上げる、という調整が定石です。

最後に、「パーセプトロンの解は一意である」と誤解するケースです。線形分離可能なデータには、それを分離する超平面が無数に存在します(マージンが少しでも空けば、その範囲で境界を平行移動・回転できる)。パーセプトロンは「最初にゼロエラーになった重み」を返すだけなので、学習データの提示順や初期値が変わると別の境界が得られます。一意な「最良の境界」を得たいときは、マージン最大化を目的関数に組み込んだSVMを使うのが標準的な選択です。