1本の直線では分けられないデータ
ニューロン1つ(=ロジスティック回帰)は、2つのクラスを 1本の直線 で分けるモデルでした。では、1本の直線ではどうしても分けられないデータはないのでしょうか。
2つのスイッチ1と2があり、どちらか一方だけがオンのときにランプが光る 仕組みを考えます。
この関係は XOR(排他的論理和)と呼ばれます。4つの点をグラフに打つと、次のようになります。
4つの点の散布図。「消える」の2点(○)は左下と右上、「光る」の2点(■)は左上と右下にあり、対角線上に交互に並んでいます。どう直線を引いても、○と■を1本の直線で分けることはできません。
「光る」の点は左上と右下、「消える」の点は左下と右上にあり、交互に並んでいます。どこにどんな直線を引いても、○と■をきれいに分けることはできません。
実際に、ロジスティック回帰にこの4件のデータを学習させると、4件すべてを「消える」と予測し、正解率は0.5(半分)にしかなりません。1本の直線しか引けないモデルには、原理的に解けない問題がある のです。
2本の線を組み合わせれば分けられる
1本で無理なら、2本の直線を組み合わせればよいはずです。これを、ニューロンを2段に並べることで実現します。
1段目(隠れ層)に、次の2つのニューロンを置きます。ここでは分かりやすくするため、活性化関数に「z が0より大きければ1、そうでなければ0」を使います。
- ニューロンA:「少なくとも1つがオン」を判定する。z=x1+x2−0.5
- ニューロンB:「両方ともオン」を判定する。z=x1+x2−1.5
2段目(出力層)のニューロンは、「Aはオンで、Bはオフ」を判定します。z=A−B−0.5 です。
出力が、XORの表とぴったり一致しました。
入力層の2つ、隠れ層のAとBの2つ、出力層の1つのニューロンが、隣の層のすべてのニューロンと線でつながった図です。
ニューロンは、グラフに1本の直線を引いている
ニューロンAの出力が0から1に切り替わる境目は、z=0 になるところ、つまり x1+x2−0.5=0 です。これを x2=⋯ の形に変形すると、x2=−x1+0.5 になります。横軸を x1、縦軸を x2 としたグラフでは、傾き −1、切片 0.5 の 一次関数の直線 です。同じように、ニューロンBの境目は x2=−x1+1.5 の直線です。
横軸をx1、縦軸をx2にしたXORの4点。(0,1)と(1,0)が■(出力1)、(0,0)と(1,1)が○(出力0)です。ニューロンAの直線 x2=-x1+0.5 と、ニューロンBの直線 x2=-x1+1.5 が平行に引かれ、■の2点だけが2本の線に挟まれた帯の中にあります。
Aは「直線Aより右上なら1」、Bは「直線Bより右上なら1」を出力します。出力層は、その2つの結果を組み合わせて、「直線Aより右上で、直線Bより左下」、つまり 2本の線に挟まれた帯の中なら1 という判断をしています。層を重ねると、1本の直線では表せない複雑な境界を作れる、これがニューラルネットワークの強さの源です。
入力と出力の間にある層は、外から直接は見えないため 隠れ層 と呼ばれます。
活性化関数がないと、層を重ねても意味がない
ここで疑問が浮かぶかもしれません。「活性化関数を使わず、一次関数の計算だけを何段も重ねてはだめなのか?」
中学2年の一次関数で確かめてみましょう。1段目が h=2x+1、2段目が y=3h+1 だとします。1段目の結果を2段目に代入すると、
y=3(2x+1)+1=6x+4
となり、結局 1つの一次関数 y=6x+4 と同じです。一次関数に一次関数を代入しても一次関数にしかならないので、何段重ねても「1本の直線」の域を出られません。
層を重ねて複雑な境界を作れるのは、層と層の間で 活性化関数が計算を「曲げて」いる からです。前のスライドの「0より大きければ1」も、シグモイド関数も ReLU も、直線ではない関数です。これを挟むことで、初めて層を重ねる意味が生まれます。
よくある誤解:「層やニューロンを増やせば増やすほど賢くなる?」
層やニューロンを増やすと、表現できる境界は複雑になります。しかし第5章で学んだように、複雑すぎるモデルは訓練データを丸暗記して 過学習 しやすくなり、学習にかかる時間も増えます。データの量や問題の難しさに合った大きさを選ぶことが大切です。
振り返り
- 1本の直線しか引けないモデルには、XORのように原理的に解けない問題がある
- ニューロンを層として重ねると、複数の直線を組み合わせた複雑な境界を作れる
- 層の間に活性化関数がないと、何段重ねても1つの一次関数と同じになってしまう