🧠 STEP 3: 多層パーセプトロン(MLP)
層を重ねることで複雑な問題を解決する仕組みを理解しよう
📋 このステップで学ぶこと
- なぜ多層構造が必要なのか
- 隠れ層の役割と意味
- XOR問題を多層パーセプトロンで解決する
- 順伝播(Forward Propagation)の仕組み
- ニューラルネットワークの表現力
🎯 1. なぜ多層構造が必要なのか?
1-1. 単層パーセプトロンの限界を振り返る
STEP 2で学んだように、単層パーセプトロンには大きな限界がありました。
- 線形分離可能な問題しか解けない:1本の直線で分けられる問題のみ
- XORゲートが作れない:「どちらか一方だけ1」という判断ができない
- 複雑なパターンは認識できない:画像認識などは到底不可能
1-2. 解決策:パーセプトロンを重ねる
この限界を突破するアイデアは、とてもシンプルです。
「パーセプトロンを複数の層に重ねる」だけです!
単純なパーセプトロンは、1個のレゴブロックのようなものです。
1個だけでは単純な形しか作れませんが、たくさん組み合わせれば複雑な形も作れます。
同じように、パーセプトロンを何層にも重ねることで、
複雑な問題も解けるようになります!
1-3. 多層パーセプトロン(MLP)とは?
MLP = Multi-Layer Perceptron(マルチレイヤー・パーセプトロン)
パーセプトロンを3層以上に重ねたニューラルネットワークのことです。
3つの層で構成されます:
- 入力層(Input Layer):データを受け取る層
- 隠れ層(Hidden Layer):中間で処理を行う層(1層以上)
- 出力層(Output Layer):最終結果を出力する層
1-4. 多層パーセプトロンの構造図
以下の図は横スクロールできます。
単層パーセプトロンは1本の直線で分類しようとします。
しかし、層を重ねると、曲線や複雑な境界で分類できるようになります。
これを「非線形な変換が可能になる」と言います。
XOR問題も、この非線形な変換によって解決できます!
🔍 2. 隠れ層の役割
2-1. なぜ「隠れ層」と呼ぶのか?
隠れ層(Hidden Layer)とは、入力層と出力層の間にある層のことです。
ニューラルネットワークを外から見ると:
- 入力層:外から見える(何を入力したか分かる)
- 出力層:外から見える(何が出力されたか分かる)
- 隠れ層:外から見えない(中で何をしているか分からない)
中間の処理が「隠れている」ので、隠れ層(Hidden Layer)と呼びます。
2-2. 隠れ層は何をしているのか?
隠れ層の最も重要な役割は、「新しい特徴を作り出す」ことです。
役割1:入力の「組み合わせ」を作る
元の入力x₁, x₂から、新しい特徴s₁, s₂を作り出します。
例:s₁ = NAND(x₁, x₂), s₂ = OR(x₁, x₂)
役割2:非線形な変換を可能にする
活性化関数を通すことで、直線では表せない複雑なパターンを表現できます。
役割3:階層的な特徴抽出
単純な特徴から、段階的に複雑な特徴を抽出していきます。
2-3. 具体例:顔認識の場合
隠れ層の役割を、顔認識の例で理解しましょう。
入力層:
画像のピクセル値をそのまま受け取る(例:100×100=10,000個の数値)
隠れ層1(浅い層):
エッジ(輪郭)を検出する
「ここに縦線がある」「ここに横線がある」
隠れ層2(中間の層):
パーツを認識する
「これは目だ」「これは鼻だ」「これは口だ」
隠れ層3(深い層):
顔全体の形状を理解する
「目と鼻と口がこの配置なら、顔だ」
出力層:
「この人は誰か」を判定する
「Aさんである確率90%、Bさんである確率5%…」
隠れ層を何層も重ねることで、
単純な特徴 → 中程度の特徴 → 複雑な特徴と、
段階的に抽象度の高い特徴を学習できます。
これが「Deep(深い)」Learningの意味です!
✅ 3. XOR問題を多層パーセプトロンで解決する
STEP 2で「単層では解けない」と言ったXOR問題を、多層パーセプトロンで解決しましょう!
3-1. XOR問題の復習
「2つの入力が異なるときだけ1を出力」するゲートです。
| x₁ | x₂ | y(出力) | 説明 |
|---|---|---|---|
| 0 | 0 | 0 | 両方0(同じ)→ 0 |
| 0 | 1 | 1 | 異なる → 1 |
| 1 | 0 | 1 | 異なる → 1 |
| 1 | 1 | 0 | 両方1(同じ)→ 0 |
3-2. XORを分解して考える
XORを直接作ることはできませんが、NAND、OR、ANDの組み合わせで作れます!
XOR(x₁, x₂) = AND( NAND(x₁, x₂), OR(x₁, x₂) )
つまり:
ステップ1:x₁とx₂からNANDとORを計算する(隠れ層)
ステップ2:NANDの結果とORの結果からANDを計算する(出力層)
3-3. 多層パーセプトロンの構造
以下の図は横スクロールできます。
3-4. 計算の流れを詳しく見てみよう
4つの入力パターンすべてについて、計算してみましょう。
入力:x₁=0, x₂=0
隠れ層の計算:
- s₁ = NAND(0, 0) = 1(両方0なので、NANDは1)
- s₂ = OR(0, 0) = 0(両方0なので、ORは0)
出力層の計算:
- y = AND(1, 0) = 0(両方1でないので、ANDは0)
結果:XOR(0, 0) = 0 ✅ 正解!
入力:x₁=0, x₂=1
隠れ層の計算:
- s₁ = NAND(0, 1) = 1(両方1ではないので、NANDは1)
- s₂ = OR(0, 1) = 1(どちらかが1なので、ORは1)
出力層の計算:
- y = AND(1, 1) = 1(両方1なので、ANDは1)
結果:XOR(0, 1) = 1 ✅ 正解!
入力:x₁=1, x₂=0
隠れ層の計算:
- s₁ = NAND(1, 0) = 1(両方1ではないので、NANDは1)
- s₂ = OR(1, 0) = 1(どちらかが1なので、ORは1)
出力層の計算:
- y = AND(1, 1) = 1(両方1なので、ANDは1)
結果:XOR(1, 0) = 1 ✅ 正解!
入力:x₁=1, x₂=1
隠れ層の計算:
- s₁ = NAND(1, 1) = 0(両方1なので、NANDは0)
- s₂ = OR(1, 1) = 1(どちらかが1なので、ORは1)
出力層の計算:
- y = AND(0, 1) = 0(両方1でないので、ANDは0)
結果:XOR(1, 1) = 0 ✅ 正解!
3-5. Pythonで実装してみよう
STEP 2で作成したAND、OR、NANDゲートを組み合わせて、XORゲートを作ります。
1. 基本ゲート関数(STEP 2で作成済み)
AND、OR、NANDの3つの関数を定義します。
2. XOR関数(今回作成)
隠れ層でNANDとORを計算し、出力層でANDを計算します。
3. 動作確認
4つの入力パターンすべてをテストします。
=== XORゲートの動作確認 === XOR(0, 0) = 0 XOR(0, 1) = 1 XOR(1, 0) = 1 XOR(1, 1) = 0
- 単層では不可能だったXORが、2層(隠れ層+出力層)で可能に!
- 隠れ層で新しい特徴(s₁=NAND, s₂=OR)を作成
- 出力層でそれらを組み合わせて(AND)最終判断
- これが多層パーセプトロンの威力です!
⚡ 4. 順伝播(Forward Propagation)
4-1. 順伝播とは?
順伝播(じゅんでんぱ)とは、入力から出力へ、順番に計算を進めていく処理のことです。
Forward Propagation(フォワード・プロパゲーション)
= 前方(Forward)へ伝播(Propagation)する
つまり、「前へ前へと計算を進める」という意味です。
入力層 → 隠れ層 → 出力層 と、左から右へ計算が進みます。
4-2. 順伝播の計算手順
各層で行う計算は、次の2ステップです。
4-3. 順伝播の流れを図で理解する
以下の図は横スクロールできます。
4-4. NumPyを使った順伝播の実装
ここでは、NumPyを使って順伝播を実装してみます。
※NumPyは数値計算ライブラリで、行列の計算が簡単にできます。
import numpy as np
NumPyライブラリを「np」という名前で読み込みます。
def sigmoid(x):
シグモイド関数を定義。0〜1の値を出力する活性化関数です。
(詳しくはSTEP 4で学習します)
return 1 / (1 + np.exp(-x))
シグモイド関数の計算式。np.expは指数関数(eのx乗)です。
X = np.array([1.0, 0.5])
入力データ。x₁=1.0, x₂=0.5 の2つの値。
W1 = np.array([[0.1, 0.3, 0.5], [0.2, 0.4, 0.6]])
第1層(入力→隠れ層)の重み。2×3の行列。
B1 = np.array([0.1, 0.2, 0.3])
第1層のバイアス。3つの値(隠れ層のニューロン数分)。
W2, B2
第2層(隠れ層→出力層)の重みとバイアス。
A1 = np.dot(X, W1) + B1
隠れ層の重み付き和を計算。np.dotは行列の掛け算(内積)です。
Z1 = sigmoid(A1)
隠れ層の活性化。シグモイド関数を適用して0〜1の値に変換。
A2 = np.dot(Z1, W2) + B2
出力層の重み付き和を計算。隠れ層の出力Z1を入力として使用。
Y = sigmoid(A2)
出力層の活性化。最終的な出力を得る。
【順伝播の計算過程】 入力: [1. 0.5] 隠れ層の重み付き和: [0.3 0.7 1.1] 隠れ層の出力(活性化後): [0.57444252 0.66818777 0.75026011] 出力層の重み付き和: [0.51615984 1.0212736 ] 最終出力: [0.62624937 0.73522793]
- 左から右へ(入力 → 出力)計算を進める
- 各層で重み付き和 → 活性化関数の2ステップ
- 前の層の出力が、次の層の入力になる
- これが「順伝播(Forward Propagation)」
※後のステップで学ぶ「誤差逆伝播法(Backpropagation)」は、
逆方向(出力 → 入力)に計算を進める処理です。
🚀 5. ニューラルネットワークの表現力
5-1. 層を増やすとどうなる?
層を増やす(ネットワークを深くする)と、より複雑なパターンを学習できるようになります。
5-2. 万能近似定理
ニューラルネットワークには、驚くべき理論的な裏付けがあります。
「1つの隠れ層を持つニューラルネットワークは、
任意の連続関数を近似できる」
これは1989年にGeorge Cybenkoによって証明された定理です。
理論上は、2層のネットワークでどんな問題も解けるということです!
ただし、注意点があります:
- 隠れ層のニューロン数が膨大になる可能性がある
- 学習が困難になることがある
- 実用的には深いネットワークの方が効率的
5-3. なぜ「深く」するのか?
万能近似定理があるのに、なぜわざわざ層を深くするのでしょうか?
利点1:階層的な特徴抽出
浅い層:単純な特徴(エッジ、色)
中間層:中程度の特徴(パーツ)
深い層:複雑な特徴(全体像)
→ 人間の認知プロセスに似ている
利点2:パラメータ効率
同じ問題を解くのに、浅いネットワークより少ないパラメータで済む
→ 学習が速く、メモリも少なくて済む
利点3:汎化性能
見たことのないデータにも対応しやすい
→ 過学習(訓練データに特化しすぎること)を防ぎやすい
5-4. ディープラーニングの本質
Deep Learning(ディープラーニング)の「Deep」は、
「層が深い」という意味です。
多層パーセプトロンをさらに深くすることで:
- 10層、50層、100層、1000層…
- 人間の脳に近い、高度な認識能力を実現
- 画像認識、音声認識、自然言語処理など
これがディープラーニング(Deep Learning)です!
📝 STEP 3 のまとめ
- 多層パーセプトロン(MLP)は、パーセプトロンを3層以上に重ねたもの
- 隠れ層は、中間で新しい特徴を作り出し、非線形な変換を可能にする
- XOR問題は、NAND・OR・ANDの組み合わせ(2層)で解決できる
- 順伝播は、入力から出力へ順番に計算を進める処理
- 層を深くすることで、複雑なパターンを効率的に学習できる
- 万能近似定理:1つの隠れ層で任意の連続関数を近似できる
多層パーセプトロンは、ディープラーニングの基礎です。
単層では不可能だったXOR問題が、層を重ねることで解決できました。
これが「Deep(深い)」の意味であり、ディープラーニングの本質です。
次のSTEP 4では、活性化関数を詳しく学び、
ニューラルネットワークをより強力にする方法を理解しましょう!
📝 練習問題
多層パーセプトロンの構成
多層パーセプトロンについて正しいものを選んでください。
- A. 入力層と出力層の2層で構成される
- B. 隠れ層は必ず1層だけである
- C. 入力層、隠れ層、出力層の3層以上で構成される
- D. 隠れ層は外から直接見ることができる
なぜCが正解なのか?
多層パーセプトロン(MLP)は、「入力層」「隠れ層」「出力層」の3層以上で構成されます。
「多層」という名前の通り、複数の層を持つことが特徴です。
他の選択肢の解説:
Aが間違いの理由:
2層だけ(入力層と出力層のみ)では「多層」とは言いません。
これは単層パーセプトロンと同じで、XORのような問題は解けません。
Bが間違いの理由:
隠れ層は1層でも、2層でも、100層でもOKです。
深いネットワーク(ディープラーニング)では、隠れ層が数十〜数百層になることもあります。
Dが間違いの理由:
「隠れ層」は「Hidden Layer」の訳で、外から見えないという意味です。
入力と出力は外から見えますが、中間の処理は隠れています。
XOR問題の解決
XORゲートを実現するために使った論理ゲートの組み合わせは?
- A. AND と OR のみ
- B. NAND と OR と AND
- C. NOT と AND のみ
- D. OR のみ
なぜBが正解なのか?
XORゲートは、NAND、OR、ANDの3つのゲートを組み合わせて作ります。
なぜこの組み合わせでXORが作れるのか?
- NAND:「両方1ではない」ことを検出(片方だけ1、または両方0のとき1)
- OR:「少なくとも1つは1」ことを検出(片方でも1なら1)
- AND:両方の条件が満たされたときだけ1
NANDとORの両方が1になるのは、「片方だけ1」の場合だけです。
これがまさにXORの定義と一致します!
順伝播の理解
順伝播(Forward Propagation)について正しくないものを選んでください。
- A. 入力から出力へ順番に計算を進める
- B. 各層で重み付き和と活性化関数を計算する
- C. 出力から入力へ逆向きに計算を進める
- D. 前の層の出力が次の層の入力になる
なぜCが間違いなのか?
順伝播(Forward Propagation)は、入力から出力へ順番に計算を進めます。
「出力から入力へ逆向き」ではありません。
「逆向きに計算」とは?
Cで述べている「出力から入力へ逆向きに計算」するのは、
誤差逆伝播法(Backpropagation)と呼ばれる別の処理です。
これは、学習時に「誤差を逆向きに伝えて重みを更新する」ための計算で、
後のSTEP(STEP 10)で詳しく学習します。
覚え方:
- Forward(順伝播):前へ進む = 入力 → 出力(予測を行う)
- Backward(逆伝播):後ろへ戻る = 出力 → 入力(学習を行う)
隠れ層の役割
隠れ層の役割について最も適切なものを選んでください。
- A. データの入力を受け取る
- B. 最終結果を出力する
- C. 中間で特徴を抽出し、非線形な変換を可能にする
- D. ネットワークを見やすくするための装飾
なぜCが正解なのか?
隠れ層の最も重要な役割は、「中間で特徴を抽出し、非線形な変換を可能にする」ことです。
隠れ層の具体的な役割:
- 新しい特徴を作る:入力の組み合わせから、新しい表現を生成
- 非線形な変換:直線では表せない複雑なパターンを表現
- 階層的な抽出:単純な特徴から複雑な特徴へ段階的に処理
他の選択肢の解説:
Aが間違いの理由:「データの入力を受け取る」のは入力層の役割です。
Bが間違いの理由:「最終結果を出力する」のは出力層の役割です。
Dが間違いの理由:隠れ層は装飾ではなく、ネットワークの核心的な処理を担います。
隠れ層がなければ、XORのような非線形問題は解けません。
万能近似定理
万能近似定理について正しいものを選んでください。
- A. 1つの隠れ層で任意の連続関数を近似できる
- B. 深いネットワークは全く必要ない
- C. 2層のネットワークで全ての問題を効率的に解ける
- D. 隠れ層がなくても任意の関数を表現できる
万能近似定理とは?
1989年にGeorge Cybenkoが証明した定理で、
「1つの隠れ層を持つニューラルネットワークは、任意の連続関数を近似できる」
という内容です。
他の選択肢の解説:
Bが間違いの理由:
万能近似定理は「理論上は可能」という話です。実際には:
- 隠れ層のニューロン数が膨大になる可能性がある
- 学習が困難になることがある
- 深いネットワークの方が効率的に学習できる
だからこそ、ディープラーニングでは深いネットワークが使われています。
Cが間違いの理由:
「近似できる」と「効率的に解ける」は別の問題です。
理論上は2層で可能でも、実用上は深いネットワークの方が効率的です。
Dが間違いの理由:
隠れ層がない(単層パーセプトロン)では、線形な関数しか表現できません。
XORのような非線形関数は、隠れ層がないと表現できません。
重要な理解:
万能近似定理は「理論的な可能性」を示したもので、
「実用的な効率性」を保証するものではありません。
これが、ディープラーニング(深いネットワーク)が発展した理由です!
学習メモ
ディープラーニング基礎 - Step 3