🧠 STEP 2: パーセプトロンの仕組み
ニューラルネットワークの最も基本的な構成要素を理解しよう
📋 このステップで学ぶこと
- パーセプトロンとは何か(基本イメージ)
- 重みとバイアスの役割
- 活性化関数(ステップ関数)
- AND、OR、NANDゲートの実装
- XOR問題とパーセプトロンの限界
🎯 1. パーセプトロンとは何か?
1-1. パーセプトロンの歴史
パーセプトロン(Perceptron)は、1958年にアメリカの心理学者フランク・ローゼンブラットが発明した、ニューラルネットワークの最も基本的な構成要素です。
パーセプトロンは「人工ニューロン」とも呼ばれ、人間の脳の神経細胞(ニューロン)の働きを数学的にモデル化したものです。
ディープラーニングの「ディープ(深い)」は、このパーセプトロンを何層も重ねることを意味します。
つまり、パーセプトロンを理解することが、ディープラーニングを理解する第一歩です。
1-2. パーセプトロンの基本イメージ
パーセプトロンを一言で表すと、「複数の入力を受け取り、1つの出力を返す装置」です。
パーセプトロンは、複数の条件を考慮してON(1)かOFF(0)を決めるスイッチのようなものです。
【例:買い物に行くかどうかの判断】
あなたが「買い物に行くかどうか」を決めるとき、いくつかの条件を考えますよね:
- 条件1:天気は良いか?(良い=1、悪い=0)
- 条件2:お金はあるか?(ある=1、ない=0)
そして、これらの条件を総合的に判断して「行く(1)」か「行かない(0)」を決めます。
→ これがパーセプトロンの動作イメージです!
1-3. パーセプトロンの構造を図で理解する
以下の図は横スクロールできます。
- 入力(Input):外から受け取る複数の値(x₁, x₂, …)
- 重み(Weight):各入力がどれくらい重要かを表す値(w₁, w₂, …)
- バイアス(Bias):出力が1になるハードルの高さを調整する値(b)
⚖️ 2. 重みとバイアスの役割
2-1. パーセプトロンの計算式
パーセプトロンは、以下の手順で計算します。
ステップ1:入力と重みを掛け算して、バイアスを足す
合計 = w₁×x₁ + w₂×x₂ + b
ステップ2:合計が0より大きいかどうかで出力を決める
y = 1 (合計 > 0 のとき)
y = 0 (合計 ≤ 0 のとき)
2-2. 重み(Weight)とは?
重みは、各入力が結果にどれくらい影響するかを表す値です。
【例:買い物に行くかどうかの判断】
あなたにとって、「天気」と「お金」のどちらが重要ですか?
パターンA:天気を重視する人
- 天気の重み w₁ = 1.0(天気が良ければ行きたい!)
- お金の重み w₂ = 0.3(お金はあまり関係ない)
パターンB:お金を重視する人
- 天気の重み w₁ = 0.3(天気は気にしない)
- お金の重み w₂ = 1.0(お金がないと行かない!)
→ 重みが大きいほど、その入力が結果に大きく影響します。
- 重みが大きい:その入力が結果に強く影響する
- 重みが小さい:その入力はあまり結果に影響しない
- 重みが0:その入力は完全に無視される
- 重みがマイナス:その入力が大きいほど、出力は小さくなる(抑制効果)
2-3. バイアス(Bias)とは?
バイアスは、出力が1になるハードルの高さを調整する値です。
【例:買い物に行くかどうかの判断】
慎重派の人(バイアス = -1.0)
- 条件がかなり良くないと「行く」とは言わない
- 入力の合計が1.0を超えないと出力が1にならない
行動派の人(バイアス = 0.5)
- ちょっとでも条件が良ければ「行く」と言う
- 入力の合計が-0.5を超えれば出力が1になる
→ バイアスが大きいほど、出力が1になりやすい(ハードルが低い)
→ バイアスが小さい(マイナス)ほど、出力が1になりにくい(ハードルが高い)
2-4. 具体的な計算例
実際に数値を入れて計算してみましょう。
【入力 (x₁=1, x₂=1) の場合】
合計 = 0.5×1 + 0.5×1 + (-0.7)
= 0.5 + 0.5 – 0.7
= 0.3
0.3 > 0 なので、出力 y = 1
【入力 (x₁=1, x₂=0) の場合】
合計 = 0.5×1 + 0.5×0 + (-0.7)
= 0.5 + 0 – 0.7
= -0.2
-0.2 ≤ 0 なので、出力 y = 0
ディープラーニングでは、この重みとバイアスを「学習」によって自動的に調整します。
正解データを大量に与えることで、パーセプトロンは自分で最適な重みとバイアスを見つけ出します。
これがディープラーニングの「学習」の本質です!
🔀 3. 活性化関数(ステップ関数)
3-1. 活性化関数とは?
活性化関数(Activation Function)とは、パーセプトロンの計算結果を「最終的な出力」に変換する関数です。
重みと入力の計算結果(w₁×x₁ + w₂×x₂ + b)は、-∞ から +∞ までの任意の値になります。
しかし、パーセプトロンの出力は「ON(1)かOFF(0)」のような明確な判断であってほしいですよね。
そこで、活性化関数を使って、計算結果を0か1に変換します。
3-2. ステップ関数の仕組み
単純パーセプトロンでは、ステップ関数(Step Function)を使います。
step(x) = 1 (x > 0 のとき)
step(x) = 0 (x ≤ 0 のとき)
計算例:
- step(0.5) = 1 (0.5は0より大きいので)
- step(-0.3) = 0 (-0.3は0以下なので)
- step(0) = 0 (0は0以下なので)
- step(100) = 1 (どんなに大きくても1)
- step(-100) = 0 (どんなに小さくても0)
3-3. ステップ関数のグラフ
以下の図は横スクロールできます。
3-4. パーセプトロンの全体の流れ
ステップ1:入力と重みを掛け算する
w₁×x₁ + w₂×x₂
ステップ2:バイアスを足す
w₁×x₁ + w₂×x₂ + b
ステップ3:ステップ関数で0か1に変換する
y = step(w₁×x₁ + w₂×x₂ + b)
🔧 4. 論理ゲートの実装(AND、OR、NAND)
パーセプトロンを使って、基本的な論理ゲート(Logic Gate)を作ってみましょう。
論理ゲートとは、0と1の入力に対して、特定のルールで0か1を出力する回路です。
4-1. ANDゲート
日本語で言うと「AかつB」です。両方の条件が満たされたときだけ真(1)になります。
| x₁ | x₂ | y(出力) | 意味 |
|---|---|---|---|
| 0 | 0 | 0 | 両方OFF → OFF |
| 0 | 1 | 0 | 片方だけON → OFF |
| 1 | 0 | 0 | 片方だけON → OFF |
| 1 | 1 | 1 | 両方ON → ON |
以下の重みとバイアスでANDゲートを実現できます:
w₁ = 0.5, w₂ = 0.5, b = -0.7
なぜこの値で動くのか?計算して確認してみましょう:
- (0,0): 0.5×0 + 0.5×0 – 0.7 = -0.7 ≤ 0 → 出力 0 ✅
- (0,1): 0.5×0 + 0.5×1 – 0.7 = -0.2 ≤ 0 → 出力 0 ✅
- (1,0): 0.5×1 + 0.5×0 – 0.7 = -0.2 ≤ 0 → 出力 0 ✅
- (1,1): 0.5×1 + 0.5×1 – 0.7 = 0.3 > 0 → 出力 1 ✅
ANDゲートのPythonコード
以下のコードでANDゲートを実装できます。各行の意味を説明します。
def AND(x1, x2):
「AND」という名前の関数を定義。x1とx2の2つの入力を受け取る。
w1, w2, b = 0.5, 0.5, -0.7
重みw1, w2とバイアスbに値を代入。ANDゲート用の値。
tmp = x1*w1 + x2*w2 + b
パーセプトロンの計算。入力×重みの合計にバイアスを足す。
if tmp > 0:
合計が0より大きいかどうかをチェック(ステップ関数の判定)。
return 1
0より大きければ1を返す。
else: return 0
0以下なら0を返す。
AND(0, 0) = 0 AND(0, 1) = 0 AND(1, 0) = 0 AND(1, 1) = 1
4-2. ORゲート
日本語で言うと「AまたはB」です。どちらかの条件が満たされれば真(1)になります。
| x₁ | x₂ | y(出力) | 意味 |
|---|---|---|---|
| 0 | 0 | 0 | 両方OFF → OFF |
| 0 | 1 | 1 | 片方ON → ON |
| 1 | 0 | 1 | 片方ON → ON |
| 1 | 1 | 1 | 両方ON → ON |
以下の重みとバイアスでORゲートを実現できます:
w₁ = 0.5, w₂ = 0.5, b = -0.2
ANDゲートとの違いは、バイアスだけ!
- ANDゲート:b = -0.7(ハードルが高い→両方1でないと超えない)
- ORゲート:b = -0.2(ハードルが低い→1つでもあれば超える)
計算して確認:
- (0,0): 0.5×0 + 0.5×0 – 0.2 = -0.2 ≤ 0 → 出力 0 ✅
- (0,1): 0.5×0 + 0.5×1 – 0.2 = 0.3 > 0 → 出力 1 ✅
- (1,0): 0.5×1 + 0.5×0 – 0.2 = 0.3 > 0 → 出力 1 ✅
- (1,1): 0.5×1 + 0.5×1 – 0.2 = 0.8 > 0 → 出力 1 ✅
OR(0, 0) = 0 OR(0, 1) = 1 OR(1, 0) = 1 OR(1, 1) = 1
4-3. NANDゲート
NANDは「Not AND」の略です。ANDの結果を反転させたものです。
| x₁ | x₂ | y(出力) | ANDとの比較 |
|---|---|---|---|
| 0 | 0 | 1 | ANDは0 → 反転で1 |
| 0 | 1 | 1 | ANDは0 → 反転で1 |
| 1 | 0 | 1 | ANDは0 → 反転で1 |
| 1 | 1 | 0 | ANDは1 → 反転で0 |
以下の重みとバイアスでNANDゲートを実現できます:
w₁ = -0.5, w₂ = -0.5, b = 0.7
ANDゲートとの違い:符号が全部逆!
- ANDゲート:w₁=0.5, w₂=0.5, b=-0.7
- NANDゲート:w₁=-0.5, w₂=-0.5, b=0.7
重みがマイナスの意味:
入力が大きいほど、合計が小さくなる(抑制効果)。
つまり、両方の入力が1だと、合計が最も小さくなり、0を出力します。
NAND(0, 0) = 1 NAND(0, 1) = 1 NAND(1, 0) = 1 NAND(1, 1) = 0
AND、OR、NANDゲートは、パーセプトロンの構造は全く同じで、重みとバイアスの値を変えるだけで実現できます!
これは非常に重要な発見です。
パーセプトロンはパラメータ(重みとバイアス)を調整することで、様々な問題を解けるということです。
ディープラーニングは、この「パラメータの調整」を自動で行う技術です!
❌ 5. XOR問題とパーセプトロンの限界
5-1. XORゲートとは?
XORは「Exclusive OR(排他的論理和)」の略です。「どちらか一方だけ」という意味です。
| x₁ | x₂ | y(出力) | 意味 |
|---|---|---|---|
| 0 | 0 | 0 | 同じ(両方0)→ 0 |
| 0 | 1 | 1 | 異なる → 1 |
| 1 | 0 | 1 | 異なる → 1 |
| 1 | 1 | 0 | 同じ(両方1)→ 0 |
どんな重みとバイアスの値を試しても、単純パーセプトロンではXORゲートを作ることができません。
これは1969年にマービン・ミンスキーとシーモア・パパートによって数学的に証明されました。
この発見は、AI研究の「冬の時代」を引き起こす原因の1つとなりました。
5-2. なぜXORは実現できないのか?
これを理解するために、グラフで視覚的に考えてみましょう。
単純パーセプトロンは、1本の直線で「0を出力するグループ」と「1を出力するグループ」を分けることしかできません。
以下の図は横スクロールできます。
線形分離可能:1本の直線(または平面)で2つのグループを分けられる状態
線形分離不可能:1本の直線では分けられない状態
単純パーセプトロンは線形分離可能な問題しか解けないという限界があります。
XORは線形分離不可能なので、単純パーセプトロンでは解けません。
5-3. XOR問題の解決策:多層パーセプトロン
では、XOR問題はどうすれば解けるのでしょうか?
答えは、パーセプトロンを多層に重ねることです!
XORは、実はNAND、OR、ANDの組み合わせで表現できます。
XOR(x₁, x₂) = AND( NAND(x₁, x₂), OR(x₁, x₂) )
以下の図は横スクロールできます。
ステップ1:第1層の計算
- NAND(1, 0) = 1(片方だけ1なので、出力は1)
- OR(1, 0) = 1(片方でも1なら、出力は1)
ステップ2:第2層の計算
- AND(1, 1) = 1(両方1なので、出力は1)
最終出力:1 ← XORの正解と一致!
XOR(0, 0) = 0 XOR(0, 1) = 1 XOR(1, 0) = 1 XOR(1, 1) = 0
- 単層パーセプトロン:線形分離可能な問題しか解けない(AND、OR、NANDなど)
- XOR問題:線形分離不可能 → 単層では解けない
- 解決策:パーセプトロンを多層に重ねる → 複雑な問題も解ける!
- これが多層パーセプトロン(MLP: Multi-Layer Perceptron)
- そして、多層パーセプトロンをさらに発展させたものがディープラーニングです!
📝 STEP 2 のまとめ
- パーセプトロンは、入力・重み・バイアスから出力を計算する基本単位
- 重みは各入力の重要度を表し、バイアスは判断の閾値を調整する
- ステップ関数で計算結果を0か1に変換(ON/OFFスイッチのイメージ)
- AND、OR、NANDゲートはパラメータを変えるだけで実現可能
- XOR問題は単層では解けない → 多層化が必要
パーセプトロンは単純ですが、ディープラーニングの基礎となる重要な概念です。
単層パーセプトロンには線形分離可能な問題しか解けないという限界がありますが、
層を重ねる(多層化)ことで、XORのような複雑な問題も解けるようになります。
次のSTEP 3では、多層パーセプトロン(MLP)を学び、
複雑な問題を解く仕組みを理解しましょう!
📝 練習問題
パーセプトロンの構成要素
パーセプトロンの説明として正しくないものを選んでください。
- A. 複数の入力を受け取ることができる
- B. 重みは各入力の重要度を表す
- C. バイアスは出力の閾値を調整する
- D. 出力は必ず0から1の間の小数になる
なぜDが間違いなのか?
単純パーセプトロンはステップ関数を使用するため、出力は0か1の2値のみです。
0.3や0.7のような小数にはなりません。
他の選択肢の解説:
Aが正しい理由:
パーセプトロンはx₁, x₂, x₃…のように複数の入力を受け取ることができます。
入力の数は2つに限らず、任意の数に対応できます。
Bが正しい理由:
重み(w)は各入力がどれくらい結果に影響するかを表します。
重みが大きいほど、その入力が結果に強く影響します。
Cが正しい理由:
バイアス(b)は、出力が1になるハードルの高さを調整します。
バイアスが大きいと出力が1になりやすく、小さいと1になりにくくなります。
補足:0〜1の連続値を出力したい場合
後のステップで学ぶシグモイド関数を使うと、0〜1の連続的な値を出力できるようになります。
これは「確率」を表現したい場合などに便利です。
ANDゲートの計算
ANDゲートのパーセプトロン(w₁=0.5, w₂=0.5, b=-0.7)に、
x₁=1, x₂=0 を入力したとき、出力はいくつになりますか?
- A. 0
- B. 1
- C. 0.5
- D. -0.2
計算の手順を追ってみましょう:
ステップ1:入力と重みの掛け算、バイアスを足す
ステップ2:ステップ関数で判定
合計 = -0.2
-0.2 ≤ 0 なので、出力は0
なぜCとDが間違いなのか?
C(0.5)が間違い:単純パーセプトロンはステップ関数を使うため、出力は0か1の2値のみです。0.5のような中間値にはなりません。
D(-0.2)が間違い:-0.2は「ステップ関数に入力する前の値(合計)」です。最終出力ではありません。
確認:ANDゲートの真理値表と一致している?
ANDゲートは「両方が1のときだけ1を出力」するので、
(1, 0) の場合は 0 を出力するのが正解です ✅
論理ゲートの実現
次のうち、単純パーセプトロン(1層)で実現できないものを選んでください。
- A. ANDゲート
- B. ORゲート
- C. XORゲート
- D. NANDゲート
なぜXORゲートは単層で実現できないのか?
XORゲートは「線形分離不可能」な問題だからです。
線形分離可能とは?
「1本の直線で、出力が0のグループと1のグループを分けられるか」ということです。
他の選択肢はなぜ実現できるのか?
AND、OR、NANDは全て線形分離可能です。
つまり、1本の直線で0と1を分けることができます。
XORを実現するには?
パーセプトロンを多層に重ねることで実現できます。
これが「多層パーセプトロン(MLP)」であり、次のSTEP 3で詳しく学びます!
重みとバイアスの調整
次の真理値表を実現するには、重みとバイアスをどう設定すればよいですか?
| x₁ | x₂ | y |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
- A. w₁=1.0, w₂=0.0, b=-0.5
- B. w₁=0.5, w₂=0.5, b=-0.7
- C. w₁=0.5, w₂=0.5, b=-0.2
- D. w₁=-0.5, w₂=-0.5, b=0.7
まず、真理値表のパターンを分析してみましょう
この真理値表を見ると、x₁が1のときだけ出力が1になっています。
x₂の値は結果に影響していません。
つまり、これは「x₂を無視して、x₁だけを見る」パーセプトロンです。
選択肢Aで計算して確認
なぜw₂=0.0なのか?
w₂=0.0にすることで、x₂がどんな値でも「0.0×x₂=0」となり、
x₂の影響を完全に無視できます。
他の選択肢が間違いの理由
B(w₁=0.5, w₂=0.5, b=-0.7):これはANDゲートです。(1,0)で0を出力してしまいます。
C(w₁=0.5, w₂=0.5, b=-0.2):これはORゲートです。(0,1)で1を出力してしまいます。
D(w₁=-0.5, w₂=-0.5, b=0.7):これはNANDゲートです。(1,1)で0を出力してしまいます。
重要な学び
重みを0にすることで、特定の入力を完全に無視できます。
これは、ディープラーニングで「どの特徴が重要か」を学習する際の基本原理です!
学習の過程で、重要でない入力の重みは0に近づいていきます。
学習メモ
ディープラーニング基礎 - Step 2