前回は、単一のパーセプトロンでは、XOR問題が解けないことをちょこっと数学的に図を用いて証明してみました。
【仕組み解説】全結合層をゼロから実装しよう:パーセプトロンで解けない-XOR問題-(NN #3)
XOR問題はなぜパーセプトロンで解けないのか?その限界に挑み、線形分離不可能な問題から非線形の必要性を理解します。
今回は、パーセプトロンを多層化することで、XOR問題を解けるようにしてみようと思います。
XOR問題
XOR問題とは、XOR(排他的論理和)をパーセプトロンで表現できるか?という問題です。
どうやったら XOR問題を解けるか?
前回、パーセプトロンで解ける問題は、一本の直線で分割できるかどうかで決まるという線形分離不可能性で判断できるということを理解したと思います。
Q. では、どうやったらXOR問題を解けるでしょうか?

図 1 XORの真理値と適当な2直線
一本ずつだと無理そう。
(〇と✕はXORの真理値)

図2 ORの領域分割
OR(どちらかが1の時1) ダメそう。
(左図中〇と✕はORの真理値)

図3 NANDの領域分割
NAND (両方1でないとき 1)ダメそう
(左図中〇と✕はNANDの真理値)
組み合わせたら解ける?
そのままでは解けそうになさそうですが、XORの1となる〇と、0となる✕が入っている領域(図1)と図2と図3を見比べてみると、
ORとNANDで両方とも“1“になるところは、XORの”1″。
ORかNANDのどちらかだけしか”1″ではないところはXORで”0″になっています。
黄緑と赤の領域両方が1のところがXORの”1” → 黄緑と赤の領域のAND
黄緑と赤の領域両方が1のところがXORの”0” これって、黄緑の領域(ORで”1”)であることを \(h_1’\)、赤色の領域(NANDで”1″)であることを\(h_2’\)と考えたら、 XORは\(h_1’\) と\(h_2’\)のANDで表せそうということですね。

(ここまでに出てきた OR NANDは、上側の図で塗分けしているように、1つのパーセプトロンで表現可能です。)
よって、NANDとORを取った結果に対してANDを取るような操作をすれば、一本の直線だと無理なXORでも、二本以上の直線を組み合わせたら(多層化すれば)解けそうであることがわかりました。
中間層(隠れ層)と多層パーセプトロン
XORは1つのパーセプトロンでは表現できないが、パーセプトロンを多層化すればとけることが図でイメージできたと思います。
この例の一回目のNANDとORのような一段階目、最終的な出力には出てこないが、中間にある層のことを”中間層”、あるいは、途中にある出力に見えない隠れた層なので”隠れ層”と言います。
(中間層と隠れ層はこのシリーズの記事においては同じものを指すので適宜読み替えて理解してください)

また、このような中間層を持つパーセプトロン群を多層パーセプトロンと言います。
XORを二段階に分けて分割する手順
先ほどの例の分割をステップに分けて、どんな多層パーセプトロンで、どのように、XORを表せるかをもう少し考えてみます。
ステップ1:隠れ層が「領域を分割する」
まず、隠れ層にある2つのニューロン\(h_1\) と \(h_2\)が、それぞれ元の \(x_1\), \(x_2\) 空間に1本ずつ直線を引くと考えます。
- 直線1 (h1: OR的): \(x_1 + x_2 – 0.5 = 0\)
- 直線2 (h2: NAND的): \(-x_1 – x_2 + 1.5 = 0\)
この2本の直線は、元の \(x_1, x_2\) 空間をいくつかの領域に分割します。
ステップ2:「領域の置き換え」= 新しい座標空間への変換
ここが多層パーセプトロンの最も重要なポイントです。
XORの4つのデータ点が、この2本の直線\(h_1, h_2\)によって、それぞれ「プラス側にある(1)」か「マイナス側にある(0)」かを見てみます。(先ほどの図のORとNANDを取った後を見てみる)
| 元の座標 (x1, x2) | ターゲット (y) | h1の出力 (OR) | h2の出力 (NAND) |
| (0, 0) | 0 | \(0+0-0.5 < 0 \rightarrow\) 0 | \(-0-0+1.5 > 0 \rightarrow\) 1 |
| (0, 1) | 1 | \(0+1-0.5 > 0 \rightarrow\) 1 | \(-0-1+1.5 > 0 \rightarrow\) 1 |
| (1, 0) | 1 | \(1+0-0.5 > 0 \rightarrow\) 1 | \(-1-0+1.5 > 0 \rightarrow\) 1 |
| (1, 1) | 0 | \(1+1-0.5 > 0 \rightarrow\) 1 | \(-1-1+1.5 < 0 \rightarrow\) 0 |
この表を見ると、元の \(x_1, x_2\) という座標が、隠れ層を通過することで \(h_1, h_2\) という全く新しい座標に「置き換えられた(変換された)」ことがわかります。
- (0, 0) \(\rightarrow\) (0, 1)
- (0, 1) \(\rightarrow\) (1, 1)
- (1, 0) \(\rightarrow\) (1, 1)
- (1, 1) \(\rightarrow\) (1, 0)
ステップ3:新しい空間では「線形分離可能」になる
この「置き換えられた」新しい \(h_1, h_2\) 空間をグラフにしてみましょう。

- ターゲットが 1 の点((0,1)と(1,0)だったもの)は、両方とも (1, 1) という同じ点に集まりました。
- ターゲットが 0 の点((0,0)と(1,1)だったもの)は、それぞれ (0, 1) と (1, 0) に移動しました。
この新しい空間では、ターゲット「1」の点とターゲット「0」の点を、たった1本の直線で分離できます。
多層パーセプトロンでXOR問題を解けた。
パーセプトロンだけでXOR問題解けることが示せました□
まとめと次回:活性化関数の導入
今回は多層パーセプトロンでXOR問題を解けることが理解できたと思います。
一つのパーセプトロンでは表現できなかったXORをパーセプトロンを重ねることで表現できるようになりました、このようにパーセプトロン(層)を重ねるほどより複雑なものを表現できる。これがディープラーニングの考え方の基本です。
次回は多層化ととても関連が深い活性化関数について、xor問題を例に考えてみます。
【仕組み解説】全結合層をゼロから実装しよう:活性化関数の導入(NN #5)
なぜ活性化関数が必要なのか?非線形性を導入し、全結合層の機能を最大限に引き出すための重要な役割と効果を解説します。
ゼロから作る全結合層
ゼロから作る全結合層シリーズでは、初心者でも理解しやすいように、 「パーセプトロンの仕組み」から「全結合層の実装」までを...
ここまで読んでいただきありがとうございます。
では、次の記事で。 lumenHero