2026年10月8日に、Googleのニューラルネットワーク教材、backpropagation、overfittingを再読しました。ノード・隠れ層・活性化関数が推論の表現を作り、逆伝播は勾配を計算しoptimizerが更新する役割を分けます。勾配消失・爆発やdead ReLU、dropoutは訓練上の論点で、層数だけで未知データへの強さは決まりません。学習と推論、訓練成績と汎化、教材計算と実データ評価を分離します。
入力に重みを掛けて足すことと、そこから学習することは別です。ニューラルネットワークを理解するときは、まず「入力から出力を計算する道」と「損失から重みを直す道」を分けてみましょう。猫と犬の画像を分類する例でも、出力が猫だったという事実だけでは、正しい特徴を学習できたかは分かりません。
30秒で要点
- 一つのユニットは重み付き和に変換を加えます。非線形な変換を挟むことで、単純な直線だけでは分けられない関係も表せます。
- 逆伝播は損失に対する勾配の計算、optimizerはその勾配を使う更新です。推論では通常、学習済みの重みを固定して出力を計算します。
- 層を増やすだけで未知のデータに強くなるとは限りません。目的、比較対象、データの分け方、誤りの種類を先に決めます。
一つのユニットを手で計算する
ここからの数値は仕組みを確かめるための架空の教材です。入力をx₁=1、x₂=0、重みをw₁=0.6、w₂=0.4、バイアスをb=−0.5とすると、重み付き和zは次の値になります。
z = 0.6 × 1 + 0.4 × 0 − 0.5 = 0.1
パーセプトロンの簡単な例として、zが0より大きいとき1、それ以外は0を返すと決めれば、出力は1です。閾値をどちら側に含めるかもモデルの定義の一部です。ここではこのルールを一貫して使います。
表が収まらない場合は、横にスクロールできます
| 部品 | この例 | 確認すること |
|---|---|---|
| 入力 | 1と0 | 何を数値に変えたか |
| 重み | 0.6と0.4 | 各入力が和にどう寄与するか |
| バイアス | −0.5 | 判定境界をどこへ動かすか |
| 変換 | zが正なら1 | 出力をどう解釈するか |
これは猫や犬の特徴量ではありません。画像分類では多数の入力と層を使うため、一つの重みを「猫らしさ」と名付ければ説明が完成するわけでもありません。PyTorchの公式教材では、重みとバイアスを持つLinearにReLUなどの非線形変換を組み合わせています。ReLUは正の値をそのまま、負の値を0へ変換する関数です。
XORで「層を足す意味」を確かめる
XORは、二つの入力が違うときだけ1を返す関係です。単一の線形判定を w₁x₁+w₂x₂+b>0 とすると、正解に必要な条件は、(0,0)でb≤0、(1,0)でw₁+b>0、(0,1)でw₂+b>0、(1,1)でw₁+w₂+b≤0です。
中央二つを足すとw₁+w₂+2b>0。一方、最初と最後の条件からw₁+w₂+2b≤0になり、両立しません。この限定したモデルでは、直線一本で四点を正しく分けられないと分かります。
そこで隠れた二つのユニットにORとNANDを計算させ、その出力をANDで合わせます。次の表と図は、学習済みモデルの成果ではなく、重みを人が決めた構成例です。
表が収まらない場合は、横にスクロールできます
| x₁ | x₂ | h₁: OR | h₂: NAND | 最終AND=XOR |
|---|---|---|---|---|
| 0 | 0 | 0 | 1 | 0 |
| 0 | 1 | 1 | 1 | 1 |
| 1 | 0 | 1 | 1 | 1 |
| 1 | 1 | 1 | 0 | 0 |
def step(z):
return int(z > 0)
def xor(x1, x2):
h1 = step(x1 + x2 - 0.5) # OR
h2 = step(-x1 - x2 + 1.5) # NAND
return step(h1 + h2 - 1.5) # AND
inputs = [(0, 0), (0, 1), (1, 0), (1, 1)]
actual = [xor(a, b) for a, b in inputs]
assert actual == [0, 1, 1, 0]
print(actual)
入力層、隠れ層、出力層を持つ構造が多層パーセプトロンの基本です。非線形変換を入れずに線形変換だけを重ねても、合成した一つの重み付き和とバイアスの形にまとめられます。「段数を増やす」だけと「表せる関係を変える」は区別してください。
逆伝播と重み更新を分ける
学習は出力を正解と比較し、損失を小さくする方向へパラメータを調整する過程です。PyTorchの最適化教材も、勾配の計算とoptimizerによる更新を分けています。前回分の勾配を消す処理を含め、どの時点の値を使うかが重要です。
表が収まらない場合は、横にスクロールできます
| 段階 | 実施すること | 混同しないもの |
|---|---|---|
| 順伝播 | 現在の重みから出力を計算 | 正解との比較はまだ別 |
| 損失 | 出力と正解のずれを数値化 | 業務上の損害と常に同じではない |
| 逆伝播 | 各パラメータの勾配を計算 | この操作だけで重みが更新されるわけではない |
| 更新 | 学習率などに従って重みを変更 | 必ず未知データの成績が上がる保証ではない |
| 評価・推論 | 更新せずに出力を確認 | 学習時と同じ処理状態とは限らない |
さらに小さな架空例で、出力 ŷ=w×2、正解1、損失 L=(ŷ−1)²、初期w=0.2とします。ŷ=0.4、L=0.36、勾配は 2×(0.4−1)×2=−2.4。学習率0.1の更新で w=0.2−0.1×(−2.4)=0.44、新しい出力は0.88、損失は0.0144になります。これは一つのデータに対する一回の計算であり、汎化や収束の証明ではありません。
パーセプトロンから深層学習へ
単純な判定ユニット、多層での表現、さらに多くの層を用いる深層学習という違いを理解する方が、「何層以上なら深い」という一律の線引きより役立ちます。層数だけでモデルの能力や適性は決まりません。学習方法、データ、計算資源、損失や評価の設計も関わります。
画像では医用画像の支援、運転支援、品質検査、自然言語では翻訳・要約・チャット、推薦では商品・コンテンツ・広告の候補選択などが検討対象になります。ただし用途名は導入成功の証拠ではありません。特に誤りの影響が大きい用途では、誤検知と見逃しの扱いや人の確認を別に決めます。
実務で試す前の五段階
- 目的と指標:猫と犬を分けたいのか、不良品を見逃したくないのか。正解率だけで足りるかを決める。
- 条件:入力の品質、利用時の変化、誤りを許容できる範囲を記録する。
- モデル選択:単純なルールや線形モデルも比較対象にし、複雑さを増す理由を明確にする。
- データと学習:学習用と評価用を分ける。同じ人・同じ製品の近いデータが両方に入り、成績が楽観的になっていないか確認する。
- 測定と改善:未知データの誤りを種類別に見る。正則化やモデル変更も、同じ評価条件で比べる。
人が経験から判断を変えることは直感の入口になりますが、ニューラルネットワークを人間の理解や創造性と同一視しないでください。データが増えれば必ず良くなるという法則としても扱えません。偏りや条件のずれを含むデータを増やした場合は、何を学ぶかから再点検します。