本文へスキップ
ひもとくAI

層を重ねる理由(1本の直線では分けられないデータ)

レッスン 2/6

1本の直線では分けられないデータ

ニューロン1つ(=ロジスティック回帰)は、2つのクラスを 1本の直線 で分けるモデルでした。では、1本の直線ではどうしても分けられないデータはないのでしょうか。

2つのスイッチ1と2があり、どちらか一方だけがオンのときにランプが光る 仕組みを考えます。

スイッチ1 (x1x_1)スイッチ2 (x2x_2)ランプ
0(オフ)0(オフ)0(消える)
01(オン)1(光る)
101
110

この関係は XOR(排他的論理和)と呼ばれます。4つの点をグラフに打つと、次のようになります。

スイッチ1スイッチ2-1012-1012消える光る
4つの点の散布図。「消える」の2点(○)は左下と右上、「光る」の2点(■)は左上と右下にあり、対角線上に交互に並んでいます。どう直線を引いても、○と■を1本の直線で分けることはできません。

「光る」の点は左上と右下、「消える」の点は左下と右上にあり、交互に並んでいます。どこにどんな直線を引いても、○と■をきれいに分けることはできません。

実際に、ロジスティック回帰にこの4件のデータを学習させると、4件すべてを「消える」と予測し、正解率は0.5(半分)にしかなりません。1本の直線しか引けないモデルには、原理的に解けない問題がある のです。

2本の線を組み合わせれば分けられる

1本で無理なら、2本の直線を組み合わせればよいはずです。これを、ニューロンを2段に並べることで実現します。

1段目(隠れ層)に、次の2つのニューロンを置きます。ここでは分かりやすくするため、活性化関数に「zz が0より大きければ1、そうでなければ0」を使います。

  • ニューロンA:「少なくとも1つがオン」を判定する。z=x1+x2−0.5z = x_1 + x_2 - 0.5
  • ニューロンB:「両方ともオン」を判定する。z=x1+x2−1.5z = x_1 + x_2 - 1.5

2段目(出力層)のニューロンは、「Aはオンで、Bはオフ」を判定します。z=A−B−0.5z = A - B - 0.5 です。

x1x_1x2x_2AB出力層の zz出力
00000−0−0.5=−0.50 - 0 - 0.5 = -0.50
01101−0−0.5=0.51 - 0 - 0.5 = 0.51
10100.50.51
11111−1−0.5=−0.51 - 1 - 0.5 = -0.50

出力が、XORの表とぴったり一致しました。

入力層隠れ層(A・B)出力層
入力層の2つ、隠れ層のAとBの2つ、出力層の1つのニューロンが、隣の層のすべてのニューロンと線でつながった図です。

ニューロンは、グラフに1本の直線を引いている

ニューロンAの出力が0から1に切り替わる境目は、z=0z = 0 になるところ、つまり x1+x2−0.5=0x_1 + x_2 - 0.5 = 0 です。これを x2=⋯x_2 = \cdots の形に変形すると、x2=−x1+0.5x_2 = -x_1 + 0.5 になります。横軸を x1x_1、縦軸を x2x_2 としたグラフでは、傾き −1-1、切片 0.50.5 の 一次関数の直線 です。同じように、ニューロンBの境目は x2=−x1+1.5x_2 = -x_1 + 1.5 の直線です。

x1(スイッチ1)x2(スイッチ2)-1012-1012AB消える(0)光る(1)
横軸を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+1h = 2x + 1、2段目が y=3h+1y = 3h + 1 だとします。1段目の結果を2段目に代入すると、

y=3(2x+1)+1=6x+4y = 3(2x + 1) + 1 = 6x + 4

となり、結局 1つの一次関数 y=6x+4y = 6x + 4 と同じです。一次関数に一次関数を代入しても一次関数にしかならないので、何段重ねても「1本の直線」の域を出られません。

層を重ねて複雑な境界を作れるのは、層と層の間で 活性化関数が計算を「曲げて」いる からです。前のスライドの「0より大きければ1」も、シグモイド関数も ReLU も、直線ではない関数です。これを挟むことで、初めて層を重ねる意味が生まれます。

よくある誤解:「層やニューロンを増やせば増やすほど賢くなる?」

層やニューロンを増やすと、表現できる境界は複雑になります。しかし第5章で学んだように、複雑すぎるモデルは訓練データを丸暗記して 過学習 しやすくなり、学習にかかる時間も増えます。データの量や問題の難しさに合った大きさを選ぶことが大切です。

振り返り

  • 1本の直線しか引けないモデルには、XORのように原理的に解けない問題がある
  • ニューロンを層として重ねると、複数の直線を組み合わせた複雑な境界を作れる
  • 層の間に活性化関数がないと、何段重ねても1つの一次関数と同じになってしまう

演習

演習を読み込んでいます…