モジュール 2 ・ 目安 90 分

ニューロンで論理を組む

はじめに — ネットワークを部品から理解する

前のモジュールで、深層学習のモデルは「パラメータを持つ関数」だと学びました。では、その関数の中身はどうなっているのでしょうか。機械を分解すればネジや歯車という部品が現れるように、ニューラルネットワークを分解すると ニューロン(Neuron) という最小部品が現れます。数百万個のパラメータも、正体はこの小さな計算単位の集まりです。

このモジュールの狙いは、ニューロンを「魔法の箱」ではなく「配線を調整できる素朴な回路」として理解することです。そのために、たった1〜2個のニューロンでAND・OR・NOTといった論理演算を実際に組み立てます。これは本講義の課題1と同じ形式でもあります。重みとバイアスというつまみを自分で回し、真理値表が合格になる瞬間を体感すれば、「学習とはこのつまみを自動で回すことなのだ」という核心が腑に落ちるはずです。

ニューロン — 線形重み付け+活性化

1個のニューロンがやっていることは、たった2ステップです。第1に、複数の入力にそれぞれ 重み(Weight) を掛けて足し合わせ、さらに バイアス(Bias) という下駄を足します。第2に、その合計を 活性化関数(Activation Function) ff に通して出力します。式で書けば、

y=f(wx+b)=f ⁣(w1x1+w2x2++wnxn+b)y = f(w^\top x + b) = f\!\left(w_1 x_1 + w_2 x_2 + \cdots + w_n x_n + b\right)

です。ここで xx は入力ベクトル、ww は重みベクトル、bb はバイアス(スカラー)です。wxw^\top x は重み付き和を表す内積で、機械工学でいえば複数のセンサ信号を「感度(重み)」を掛けて合成する操作に相当します。バイアス bb は、合成値をどのくらいの基準でオン・オフ判定するかを決める「しきい値の調整ネジ」だと考えてください。

重要なのは、活性化関数 ff がなければニューロンは単なる線形の重み付き和にすぎない、という点です。線形の変換をいくら重ねても結局は1つの線形変換にまとまってしまい、複雑な関係は表せません。ff に非線形性を入れることで初めて、ネットワークは曲がった境界や複雑な論理を表現できるようになります。活性化関数はネットワークに「非線形の効き」を与える要の部品です。

活性化関数 — sign とシグモイド

論理演算を組むうえで役立つ活性化関数を2つ紹介します。1つ目は 符号関数(Sign Function) (sign)です。入力が正なら1、負なら0(または‑1)を返す、階段状のオン・オフスイッチです。しきい値をまたいだ瞬間にパチンと出力が切り替わる、リレースイッチのような素直な関数です。

2つ目は シグモイド関数(Sigmoid) で、次の式で定義されます。

σ(z)=11+ez\sigma(z) = \frac{1}{1 + e^{-z}}

シグモイドは入力 zz が大きいほど1に、小さいほど0に近づき、その間をなめらかなS字でつなぎます。signが「カクッと切り替わるスイッチ」なら、シグモイドは「じわっと開くバルブ」です。出力が0〜1に収まるため「その入力が正例である確からしさ(確率)」とみなせること、そしてなめらかなので学習(勾配を使った調整、モジュール4)に向くことが利点です。論理演算を手で組むときは直感的なsignで考え、実際に学習させるときはシグモイドを使う、と整理しておきましょう。

単層ネットで論理演算を組む

いよいよニューロン1個で論理演算を作ります。入力は x1,x2x_1, x_2 の2つ、それぞれ0か1をとります。出力が目的の真理値表に一致するよう、重み w1,w2w_1, w_2 とバイアス bb を選ぶのが目標です。判定は「重み付き和 w1x1+w2x2+bw_1 x_1 + w_2 x_2 + b が正なら1、そうでなければ0」とします。

例としてAND(両方1のときだけ1)を考えます。両方が1のときだけ和が正になり、片方だけ・両方0のときは負になればよいわけです。たとえば w1=w2=1,  b=1.5w_1 = w_2 = 1,\; b = -1.5 とすると、入力が (1,1)(1,1) のときだけ和が 0.5>00.5 > 0、それ以外は負になり、みごとにANDが実現します。OR(どちらか一方でも1なら1)なら b=0.5b = -0.5 に緩めればよく、NOTは入力の重みを負にして反転させます。つまり、論理演算の違いは「しきい値 bb をどこに置くか、重みの符号をどうするか」という配線の調整だけで表現できるのです。

可視化で試そう — 重み・バイアス操作盤

この配線調整を、下の操作盤で体験してください。まず課題モードをAND に設定し、w1,w2,bw_1, w_2, b のスライダーを動かしながら、真理値表の4行すべてがPASSになる組み合わせを自分で探してみましょう。 うまくいったら、bb だけを少しずつ0へ近づけてみてください。ある点を境にORへ切り替わり、(0,1)(0,1)(1,0)(1,0) の行がFAILからPASSに変わるはずです。しきい値 bb を動かすと合否の境目がどう移動するか、重みの符号を反転させると出力がどう反転するかを、行ごとの変化として観察してください。 NANDやNOTモードでも同じように「合格する配線」を探し、論理演算が重みとバイアスの選び方に還元されることを体で理解しましょう。

重み・バイアス操作盤

AND モードで w₁=w₂=2、b=−3 を試してください。全行 PASS になる組み合わせを自分で探しましょう。b を少しずつ上げると OR に変わる瞬間がわかります。NOT モードにすると入力が 1 本になります。
2.0
2.0
-3.0
モード: AND
σ(z) > 0.5 → 出力 1
σ(z) ≤ 0.5 → 出力 0
z = w₁·x₁ + w₂·x₂ + b = 2.0·x₁ + 2.0·x₂ + (-3.0)出力 y = (σ(z) > 0.5) ? 1 : 0x₁x₂期待実際 σ(z)判定0000σ=0.05 z=-3.00PASS ✓0100σ=0.27 z=-1.00PASS ✓1000σ=0.27 z=-1.00PASS ✓1111σ=0.73 z=1.00PASS ✓全行 PASS! AND が実現できています!w₁=2.0, w₂=2.0, b=-3.0

決定境界 — ニューロンは平面に1本の線を引く

なぜ1個のニューロンでANDやORが作れるのか。その理由は、幾何学的に見るとよく分かります。入力 (x1,x2)(x_1, x_2) を平面上の点だと考えると、w1x1+w2x2+b=0w_1 x_1 + w_2 x_2 + b = 0 という条件は1本の直線を表します。この直線を 決定境界(Decision Boundary) と呼びます。ニューロンは、この境界線の片側を1、反対側を0と判定しているのです。重み ww は境界線の向き(傾き)を、バイアス bb は境界線の位置(平行移動)を決めます。

ANDが実現できるのは、真理値表の4点のうち (1,1)(1,1) だけを1本の直線でうまく切り分けられるからです。逆に、1本の直線ではどうしても分けられない配置もあります。有名なのがXOR(排他的論理和)で、対角の2点ずつを分けるには直線1本では足りません。ここに単層ニューロンの限界があり、これを超えるために層を重ねる——という次の話につながります。

可視化で試そう — 単一ニューロンの決定境界

下の可視化では、重みとバイアスを動かすと、平面上の決定境界線と、その両側の分類領域の色分けがリアルタイムで変わります。まず重み w1,w2w_1, w_2 を変えて境界線の傾きがどう回転するかを見てください。次にバイアス bb を動かすと、線が平行に移動するはずです。 重みの大きさ(ベクトルの長さ)を変えると、境界そのものは動かないのに色の勾配(判定の鋭さ)が変わることにも注目しましょう。「重みは向き、バイアスは位置を決める」という対応を、線の動きとして自分の目で確認してください。 これが分類の最も基本的な仕組みです。

単一ニューロンの決定境界

w₁、w₂ を変えて境界線の傾きが回転するのを観察してください。b を動かすと線が平行移動します。重みを大きくすると、境界付近の色のグラデーションがどう変わりますか?
2.0
2.0
-3.0
境界線: x₂ = -1 · x₁ + 1.5
シグモイド σ(z) の濃淡で確率を表示

2層ネットと one-hot で min / max を作る

単層で表せない演算は、ニューロンを2層に重ねれば表現できます。1層目で複数の直線(部分的な判断)を引き、2層目でそれらを組み合わせるイメージです。直線を何本か引いて領域を囲めば、曲がった境界や複雑な論理も表現できるようになります。層を重ねることが、そのまま表現力の拡張になるわけです。

本講義の課題1では、2つの数の min(小さいほう)と max(大きいほう)を2層ネットで作ります。ここで鍵になるのが one-hotエンコーディング(One-Hot Encoding) です。これは「どれか1つだけが1で残りは0」という表現方法で、たとえば「3番目のクラス」を (0,0,1,0)(0,0,1,0) のように表します。数値の大小関係の判定結果をone-hotで受け渡すことで、min/maxのような選択的な演算をネットワークで素直に表現できます。one-hotはこのあと分類問題(モジュール3のsoftmax)でも中心的に使う表現なので、ここで名前と形に慣れておきましょう。

手を動かして確かめたい人のために、論理演算とmin/maxを実際にコードで組むノートブックを用意しました。ブラウザだけで動くColab環境です。上で操作盤を触って得た直感を、そのままコードで再現してみてください。

Open in Colab 論理演算・min/max の練習ノートブック

データの分け方 — Train / Validation / Test

最後に、モデルを正しく評価するための作法を押さえます。手元のデータは、役割の異なる3つに分けて使います。 訓練データ(Training Set) (Train)はパラメータの学習に使うデータ、 検証データ(Validation Set) (Validation)は層数や学習率などの設計の善し悪しを見比べるためのデータ、 テストデータ(Test Set) (Test)は最終的な実力を測るためだけに取っておくデータです。

ここで絶対に守るべき鉄則があります。テストデータを学習や調整に使ってはいけません。 これは、期末試験の問題を事前に見てから勉強するようなもの——いわゆるカンニングにあたります。テストで良い点が出ても、それは本当の汎化性能ではなく「答えを覚えていただけ」かもしれません。機械学習で扱う代表的な画像データセットには、手書き数字の MNIST(MNIST) や、10〜100種類の物体画像を集めた CIFAR(CIFAR) があります。これらを使う実験でも、必ずTrain/Validation/Testを分け、テストは最後の1回だけ触る、という規律を守ってください。この作法は次モジュール以降のすべての実験の前提になります。

まとめ

このモジュールでは、ニューラルネットワークの最小部品であるニューロンを分解して理解しました。ニューロンは「入力に重みを掛けて足し、バイアスを加え、活性化関数に通す」という素朴な計算単位で、式は y=f(wx+b)y = f(w^\top x + b)。重みとバイアスを選ぶだけで、1個のニューロンがAND・OR・NOTを実現できること、その正体は「平面に引いた1本の決定境界」であることを、操作盤と決定境界の可視化で体感しました。単層では引けないXORのような境界は、層を重ねることで表現でき、min/maxはone-hotを使って2層ネットで作れます。あわせて、データをTrain/Validation/Testに分け、テストは学習に使わないという評価の鉄則も確認しました。

次のモジュールでは、活性化関数の一族を整理し、多クラス分類の要となるsoftmaxと交差エントロピー、そして画像認識の主役である畳み込みへと進みます。まずは下のクイズで理解を確かめましょう。

確認クイズ

確認クイズ(0 / 5 問回答)正解 0 / 5
  1. 1個のニューロン y = f(wᵀx + b) が行う計算の順序として正しいものはどれですか。

  2. 活性化関数が存在しない(線形のまま)と、何層重ねてもネットワークに起きることはどれですか。

  3. 単層ニューロンが平面上で行っている分類の幾何学的な意味はどれですか。

  4. 単層ニューロンでは XOR を実現できないのはなぜですか。

  5. Train / Validation / Test の使い分けで守るべき鉄則はどれですか。