ニューラルネットワークの基礎
G検定のパーセプトロンの学習を手計算で確認
G検定のニューラルネットワークの基礎では、単純パーセプトロンと多層パーセプトロンの違いが問われます。このページでは、入力が2つの単純パーセプトロンにANDを覚えさせる計算を、重みの更新から6周目の収束まで手で追います。続けて、同じ規則ではXORが解けないことと、隠れ層を足すと解けることを、同じ4つの入力で確かめます。単純パーセプトロンは、まちがえたときだけ重みを直し、1本の直線で分けられる問題だけを学べます。
このページは試験の学習用の整理です。数値はすべて説明用の例です。
この記事の目次
公式情報の確認
試験日、料金、申込条件、試験方式など変動する情報は、公式情報を最終確認してください。
試験の出題範囲・実施要項は変動するため、受験前に公式情報を確認してください。
単純パーセプトロンの更新式とAND・XORの学習結果
- 単純パーセプトロンは、入力に重みを掛けて足し、0より大きければ1、そうでなければ0を出す
- 重みは、出力が正解とちがったときだけ「学習率×(正解−出力)×入力」の分だけ変える
- ANDは、学習率1・初期値0から数えて6周目に、4つとも正解になって収束する
- XORは、同じ規則で何周回しても、毎周まちがいが残る。1本の直線で分けられないため
- 隠れ層を足し、OR・NAND・ANDを組み合わせると、XORも4つとも正解になる
単純パーセプトロンの計算
入力x1・x2に、重みw1・w2を掛けて足し、さらにバイアス(しきい値を動かす定数)を加えた合計zを作ります。zが0より大きければ出力1、0以下なら出力0です。この「0より大きいか」で出力を切り替える関数が、ステップ関数です。
学習は、入力を1つずつ入れて、出力が正解とちがうときだけ重みを直します。直し方は、重みに「学習率×(正解−出力)×入力」を足す形です。バイアスは、入力を常に1とみなして同じ式で直します。出力が正解と同じなら、重みは変わりません。このページでは学習率を1、バイアスと重みの初期値をすべて0にします。
ANDを学習する6周
ANDの正解は、入力(1,1)のときだけ1で、あとの(0,0)(0,1)(1,0)は0です。4つを(0,0)(0,1)(1,0)(1,1)の順に1周とし、重みを(バイアス, w1, w2)で表します。
1周目は、(0,0)(0,1)(1,0)で合計0、出力0で正解なので何も変わりません。(1,1)でも合計は0で出力0ですが、正解は1です。正解−出力は1なので、バイアスも2つの重みも1ずつ増え、(1, 1, 1)になります。
| 周 | その周の終わりの重み | 何が起きたか |
|---|---|---|
| 1周目 | (1, 1, 1) | (1,1)で初めて誤り。合計0で出力0、正解は1なので全部+1 |
| 2周目 | (0, 2, 1) | (0,0)と(0,1)で出力1の誤り。引いたあと、(1,1)で+1 |
| 3周目 | (−1, 2, 1) | (0,1)と(1,0)と(1,1)で更新 |
| 4周目 | (−1, 2, 2) | (1,0)と(1,1)で更新 |
| 5周目 | (−2, 2, 1) | (0,1)で更新 |
| 6周目 | (−2, 2, 1) | 4つとも正解。更新なしで収束 |
6周目は4つとも更新がありません。最終の重み(−2, 2, 1)で、4つの入力を確かめます。合計はバイアス−2に、2×x1と1×x2を足した値です。
| 入力 | 合計 | 出力 | 正解 |
|---|---|---|---|
| (0, 0) | −2 | 0 | 0 |
| (0, 1) | −1 | 0 | 0 |
| (1, 0) | 0 | 0 | 0 |
| (1, 1) | 1 | 1 | 1 |
(1,0)は合計がちょうど0で、0より大きくないので出力0です。「0より大きい」と「0以上」のどちらで切り替えるかで、境目の入力の出力が変わります。問題文に切り替えの条件が書かれているかを確かめます。
XORが解けない理由
XORは、2つの入力がちがうときだけ1を返す演算です。(0,0)と(1,1)は0、(0,1)と(1,0)は1です。同じ学習規則を、初期値0から100周回すと、まちがえた入力の数は最初の3周で2・3・4、あとは毎周4つになります。更新を続けても、まちがいが消えません。
理由は、図に4つの点を描くとわかります。(0,0)と(1,1)が対角に、(0,1)と(1,0)がもう一方の対角に並びます。1本の直線で、同じ対角の2点ずつを分けることはできません。単純パーセプトロンは1本の直線で分けるモデルなので、線形に分けられないXORは何周しても学べません。ANDやORは、直線1本で分けられる問題です。1969年に、MinskyとPapertの本『Perceptrons』が、この種のネットワークがXORを学べないことを示しました。ただし、その本は、層を重ねたネットワークがXORを表せることは否定していません。
G検定の学習に使う書籍(Amazon)
PR隠れ層でXORを解く
隠れ層に2つの素子を置きます。1つ目はOR(x1+x2−0.5が0より大きければ1)、2つ目はNAND(−x1−x2+1.5が0より大きければ1)です。出力の素子は、2つの出力を足して1.5を引いた値が0より大きければ1、つまりANDにします。
| 入力 | 隠れ層のOR | 隠れ層のNAND | 出力(AND) |
|---|---|---|---|
| (0, 0) | 0 | 1 | 0 |
| (0, 1) | 1 | 1 | 1 |
| (1, 0) | 1 | 1 | 1 |
| (1, 1) | 1 | 0 | 0 |
出力は0・1・1・0になり、XORと一致します。隠れ層が、入力を「少なくとも一方が1か」と「両方が1ではないか」という2つの見方に変え、出力の素子がその両方を満たすものを選んでいます。隠れ層を足すと、直線を複数使えるので、線形に分けられない問題も扱えます。ただし、隠れ層に非線形の活性化関数がなければ、層を重ねても全体は線形のままです。活性化関数の違いは別のページで扱っています。
よくある質問
単純パーセプトロンと多層パーセプトロンの違いは何ですか?
単純パーセプトロンは入力層と出力層だけで、線形に分けられる問題しか学べません。多層パーセプトロンは間に隠れ層を1つ以上持ち、XORのような線形に分けられない問題も扱えます。違いを項目ごとに比べた表は、別ページの比較にまとめています。
パーセプトロンの重みは、どのように更新されますか?
正解と出力が違ったときだけ、重みを「学習率×(正解−出力)×入力」の分だけ変えます。出力が正解と同じなら重みは変わりません。このページでは学習率を1、出力は合計が0より大きければ1としています。
XORが単純パーセプトロンで解けないのは、なぜですか?
単純パーセプトロンは、1本の直線で2つのグループを分けるモデルだからです。XORの正解は(0,1)と(1,0)が1、(0,0)と(1,1)が0で、1本の直線では分けられません。隠れ層を足すと、直線を複数使って分けられます。
