概要
脳の構造をまねるボトムアップのアプローチ。1 つのニューロンがするのは、入力に重みを掛けて足し、活性化関数に通すだけ(Y = f(Σ xᵢwᵢ))。その単純な素子を層にして大量のデータで訓練する。
歴史は「限界があった → 乗り越えた → 道具で手軽になったが、注意点もある」という 1 本の話として読める。1 層のパーセプトロンは直線 1 本でしか分けられず XOR が解けない。層を重ねて非線形の活性化関数をはさみ、誤差逆伝播法で学習させるとそれを越えられる。PyTorch や TensorFlow が勾配計算を自動化し、強いモデルが手軽に作れるようになった代わりに、過学習に注意が要る。
詳細
パーセプトロンとその限界
- 1957 年、フランク・ローゼンブラットがハードウェアの Mark I を作った(20×20 の光電セル、重みはポテンショメータ)。原型は 1943 年のマカロックとピッツの論文
- 出力は f(wᵀx) のステップ関数で +1 / −1。バイアスは「常に 1 の入力」を 1 次元足して重みに含められる
- 学習は誤分類した例だけを足すパーセプトロン基準を勾配降下法で最小化し、w ← w + η Σ xₙtₙ で更新する
- 決定境界は wᵀx = 0 の直線(超平面)1 本なので、線形分離可能なデータしか分けられない。XOR の 4 点は 1,000 回更新しても 3 点(0.75)が上限。1969 年にミンスキーとパパートが『Perceptrons』で指摘し、研究は約 10 年停滞した
- それでも MNIST の 0 と 1 は 99.75% で分けられる。学習後の重みを 28×28 に並べると、1 の縦線の位置に正、0 の輪の位置に負の重みが付き、「どの画素に線があるか」だけで判断していることが読める。数字がずれると誤分類しうる、という弱点が CNN への動機になる
資料による表記の違い(パーセプトロン)
日本語の入門記事を読み比べると、本質は同じでも約束事が違う。別の資料に移るときに戸惑いやすい。
| 項目 | よくある書き方 | 別の書き方 |
|---|---|---|
| 出力の値 | 0 と 1 | −1 と +1(AI-For-Beginners など) |
| バイアス | 常に 1 の入力に掛かる重み w₀ | しきい値 θ(常に −1 の入力の重み) |
| 発火の条件 | z ≥ 0 で 1 | z > 0 で 1 |
| 層の数え方 | 入力層と出力層で「2 層」 | 重みを持つ層だけで「1 層」(英語の single-layer perceptron) |
0/1 表記の学習則は w ← w + η(t − y)x で、間違えたときだけ重みを正解の方向へ動かす。線形分離可能なデータなら有限回で必ず収束する(パーセプトロンの収束定理)。NumPy だけの実装では AND は 6 エポック、OR は 4 エポックで収束し、XOR は何エポック回しても 4 件中 2 件しか合わない。隠れ層 4 個・シグモイド・誤差逆伝播で学習させると XOR の出力は [0.007, 0.981, 0.981, 0.024] になる。
年代は資料によって揺れる(パーセプトロンは 1957 年の提案書か 1958 年の論文か、Mark I は 1958 年試作か 1959 年か)。多層ネットワークの学習法として誤差逆伝播法を広めたのは 1986 年のラメルハート、ヒントン、ウィリアムズの論文で、「1990 年代に考案」とする記述は誤り。
MLP の位置づけ
- 名前は「パーセプトロン」でも中身は違う — 誤差逆伝播法は微分を使うので、ほとんどの場所で傾き 0 のステップ関数は使えず、シグモイドや ReLU を使う
- 課題 — 深くすると勾配消失、パラメータが多く過学習しやすい、計算コスト、判断の説明しにくさ(金融審査や医療診断支援では注意)
- 今の価値 — 構造が単純で軽く、特徴量が整理されたタスクやエッジ AI に向く。Transformer の各層のフィードフォワード層は MLP そのもので、CNN・RNN・Transformer も「重み付き和を活性化関数に通す」単位を積み上げてできている
- CNN へ — 全結合では数字の位置がずれると誤分類しうる。同じ小さなフィルターを画像のどの位置にも当てる CNN がこの弱点を克服する(AI-For-Beginners パート IV)
多層化と誤差逆伝播法
- 損失関数: 回帰は絶対誤差・二乗誤差、分類はロジスティック損失。多クラスでは出力を Softmax で確率分布にし、交差エントロピー損失(正解クラスの確率 p_c に対して −log p_c)を使う。0-1 損失は正解にどれだけ近かったかを表せない
- 確率的勾配降下法(SGD): ミニバッチごとに勾配を計算して W ← W − η∂L/∂W。データ全体を 1 周するのが 1 エポック
- 層: 同じ入力を受けて重み付き和を計算するニューロンの集まり。前の層の出力が次の層の入力になる
- 非線形の活性化関数(tanh など)をはさまないと、線形層を何層重ねても線形関数の合成で 1 層と同じ表現力にしかならない
- 誤差逆伝播法: 各層の勾配は連鎖律で書け、先頭部分が共通する。計算グラフを損失の側から逆向きにたどれば共通部分を使い回して効率よく計算できる
各レイヤーを forward / backward / update を持つクラスとして NumPy だけで書くと、Linear → tanh → Linear → Softmax の 2 層で XOR の 4 点を確率 0.999 / 0.001 で正しく分類できた(1 層では全点 0.5 で判断できない)。十分なニューロンがあれば 2 層で任意の凸集合、3 層でほぼ任意の集合を分類できる。
フレームワーク: 自動微分と GPU
NumPy はテンソル演算はできるが勾配は計算できない。フレームワークに求めるのは任意の式の勾配の自動計算と GPU / TPU での並列化。
| TensorFlow | PyTorch | |
|---|---|---|
| 低レベル API | TensorFlow(tf.GradientTape) | PyTorch(requires_grad=True → backward()) |
| 高レベル API | Keras(compile → fit) | PyTorch Lightning(LightningModule → Trainer) |
PyTorch の学習ループの optim.zero_grad() → loss.backward() → optim.step() の 3 行は、手書きした「勾配リセット → 逆伝播 → 更新」にそのまま対応する。PyTorch は勾配を加算して蓄積するので、ステップごとのリセットを忘れない。Keras は 2023 年の Keras 3 から TensorFlow・JAX・PyTorch のどれでも動くマルチバックエンドになった。
過学習とバイアス・バリアンス
5 点をパラメータ 7 個のモデルで近似すると学習誤差 0・検証誤差 20、直線(パラメータ 2 個)なら 5.3 / 5.1。表現力が高いモデルほど汎化に多くのデータを要する。
- 原因: 学習データが少ない、モデルが強力すぎる、入力のノイズが多い
- 見分け方: 学習誤差は低いのに検証誤差が高い。学習中に検証誤差が下げ止まって上がり始めた時点で止める(少なくとも保存する)
- 対策: データを増やす、モデルを単純にする、Dropout などの正則化
これは統計学のバイアス(未学習)とバリアンス(過学習)のトレードオフの一例である。
教材の Notebook を 2026 年の環境で動かす
| 症状 | 原因 | 対処 |
|---|---|---|
TypeError: tuple indices must be integers | data/mnist.pkl.gz が 2025 年に (学習, 検証, テスト) のタプル形式へ差し替わった | タプルとして読み、(tr_x * 256).round().astype(np.int32) で辞書に詰め直す |
module 'numpy' has no attribute 'NAN' | NumPy 2.0 で別名が削除 | np.nan |
'ArtistList' object has no attribute 'pop' | Matplotlib の ax.lines がリストでなくなった | ax.lines[-1].remove() |
dtype='string' is not a valid dtype | Keras 3 で compile の 3 番目の位置引数が loss_weights に | metrics=['accuracy'] をキーワードで渡す |
MisconfigurationException | Mac で accelerator='cuda' | accelerator='auto' |
教材のコード自体の誤りもある。PyTorch 版の手書き Network クラスは zero_grad で勾配ではなく重みを 0 にし、バイアスを勾配でなく値で更新しているが、修正前も後も正解率 0.8 で結果からは気づけない。TensorFlow 版は binary_crossentropy(z, y) と引数が逆で、残された出力でも損失が 4.78 → 8.43 と増えている。
関連ページ
- AI-For-Beginners(Microsoft) — このページの出典カリキュラム
- 記号的 AI(知識表現とエキスパートシステム) — 反対側のトップダウン・アプローチ
- 沈黙する失敗 — 結果が正しく見えるバグ(重みを 0 にするクラス)
- ローカル LLM 比較 — ニューラルネットワークの先にある現在のモデル
ソース記事
- ニューラルネットワークの基礎をやさしく解説 — Microsoft AI-For-Beginners レッスン 03〜05 — 2026-09-30
- AI の歴史と基本をやさしく解説 — Microsoft AI-For-Beginners レッスン 01 — 2026-09-29(ボトムアップ・アプローチの位置づけ)
- パーセプトロン入門 — 単純パーセプトロンの仕組みから多層パーセプトロン(MLP)まで — 2026-10-02(表記の違い、AND / OR / XOR の実装、MLP の今の使いどころ)
- コンピュータビジョンの基礎をやさしく解説 — Microsoft AI-For-Beginners レッスン 06〜12 — 2026-10-02(CNN による位置ずれの克服)