DIVE

Part 6: 並列ハード・数学基盤

第 18 章

勾配降下法 — AIは『山を下る』ように賢くなる

前章の最後で、こう述べた。「AIの学習とは、行列 WW の中身をうまく調整すること」だと。だがどうやって、数百万個もの数値を正しい方向へ調整するのか。人間が手で決めるのは不可能だ。

その答えが、この章の主役——勾配降下法(Gradient Descent)だ。これは、現代のほぼすべての機械学習を支える「学習の心臓部」であり、その発想は驚くほど素朴だ。「誤差」という名の山を、一歩ずつ下って、谷底(最も誤差の小さい状態)を目指す。 この旅を、微分という道具から解いていこう。


学習とは「誤差を減らす」こと — 歴史の必然

まず、「賢くなる」を数学の言葉に翻訳しよう。AIの予測が正解からどれだけズレているか——これを誤差(損失, loss)と呼ぶ。たとえば、予測値と正解の差を二乗して平均する(平均二乗誤差):

L=1n∑i=1n(予測i−正解i)2L = \frac{1}{n}\sum_{i=1}^{n} (\text{予測}_i - \text{正解}_i)^2

この損失 LL は、モデルのパラメータ(第17章の WW や bb)を変えると変化する。損失が小さいほど、予測は正確だ。つまり学習の目標はただ一つ:

損失 LL を最小にするパラメータを見つけること。

これは数学的には最適化問題だ。パラメータという無数のツマミを回して、損失という値を最小化する。だが、ツマミは数百万個ある。総当たりは不可能だ。ではどうするか。ここで微分が、進むべき方向を教えてくれる。


厨房のアナロジー — 味を目標に近づける火加減

スープの味を、目標の一点に合わせる作業を思い浮かべてほしい。今は少し塩気が足りない。あなたは塩をひとつまみ足し、味見する。近づいた。もうひとつまみ。近づきすぎた——今度は少し戻す。「目標とのズレ(誤差)を見て、ツマミ(塩の量)を少しずつ調整する」。これを繰り返して、目標の味に収束させる。

私が飲食店で味を決めるとき、まさにこれをやっていた。一度に大量の塩を入れる(大きすぎる調整)と行き過ぎて台無しになる。逆に微量すぎる(小さすぎる調整)と、いつまでも目標に届かない。「ズレの向きと大きさを見て、適切な幅で調整する」——この職人の勘こそ、勾配降下法そのものだ。AIは、この味見と微調整を、数百万のツマミに対して、超高速で繰り返している。


微分 — 「その点での傾き」

調整の「向きと大きさ」を数学的に与えるのが微分だ。微分とは、ある点で関数がどちらへ、どれだけ傾いているか——坂の勾配を表す。

dLdw=lim⁡h→0L(w+h)−L(w)h\frac{dL}{dw} = \lim_{h \to 0} \frac{L(w+h) - L(w)}{h}

難しく見えるが、意味は単純だ。「ww を少し増やしたら、LL はどう変わるか」の比率。

損失 L
  │╲                    ╱   ← ここは傾き正(下るには左=wを減らす)
  │ ╲                  ╱
  │  ╲   傾き負       ╱
  │   ╲(下るには右)  ╱
  │    ╲___________╱
  │         ↑ 谷底(最小)= 傾き0
  └──────────────────────── w(パラメータ)

各点で傾き(微分)を調べ、傾きと逆向きに動けば、必ず谷底へ近づく

決定的な洞察はこれだ。「損失を減らしたければ、微分(傾き)と逆向きに、パラメータを動かせばいい」。坂を下るには、傾いている方向と逆——低い方へ足を進める。これが勾配降下法の核心だ。


偏微分と勾配 — 多次元の坂を下る

現実のモデルのパラメータは1個ではない。数百万個だ。この場合、「w1w_1 以外を固定して、w1w_1 だけ動かしたときの傾き」を調べる。これが偏微分だ。

∂L∂w1,∂L∂w2,…,∂L∂wn\frac{\partial L}{\partial w_1}, \quad \frac{\partial L}{\partial w_2}, \quad \dots, \quad \frac{\partial L}{\partial w_n}

そして、全パラメータの偏微分を並べたベクトルを勾配(gradient) ∇L\nabla L と呼ぶ:

∇L=(∂L∂w1,∂L∂w2,…,∂L∂wn)\nabla L = \left( \frac{\partial L}{\partial w_1}, \frac{\partial L}{\partial w_2}, \dots, \frac{\partial L}{\partial w_n} \right)

勾配には美しい性質がある。勾配ベクトルは、損失が最も急に増加する方向を指す。ならば、その逆向きこそ、損失が最も急に減少する方向——最短の下り坂だ。

霧の中の下山

イメージはこうだ。あなたは濃霧の山中にいて、谷底(最小値)を目指したい。全体は見えないが、足元の地面の傾きだけは分かる。ならば戦略は明快だ。足元で最も急な下り方向へ、一歩進む。また傾きを調べ、一歩進む。これを繰り返せば、いつか谷底に着く。勾配降下法は、まさにこの「霧の中の下山」だ。全体像(最適解)が見えなくても、足元の勾配だけを頼りに、着実に最小へ向かう。


勾配降下法とは、この更新式のこと

以上をまとめると、パラメータの更新式は驚くほど単純になる。現在のパラメータから、勾配の逆向きに、少しだけ動かす:

w新=w旧−η ∂L∂ww_{\text{新}} = w_{\text{旧}} - \eta \, \frac{\partial L}{\partial w}

ここで η\eta(イータ)は学習率(learning rate)——「一歩の大きさ」だ。マイナス符号が「傾きと逆向き(下り方向)に進む」ことを表す。この一行を、全パラメータに対して、何万回も繰り返す。それだけで、AIは賢くなっていく。

import numpy as np

# 例: L(w) = (w - 3)^2 を最小化する(答えは w=3 で L=0)
def loss(w):      return (w - 3) ** 2
def gradient(w):  return 2 * (w - 3)   # L の微分(傾き)

w = 0.0            # 適当な初期値からスタート
lr = 0.1           # 学習率(一歩の大きさ)

for step in range(30):
    grad = gradient(w)        # 今いる場所の傾きを調べる
    w = w - lr * grad         # 傾きと逆向きに一歩進む ← 勾配降下法の核心
    if step % 5 == 0:
        print(f"step {step:2d}: w={w:.4f}, loss={loss(w):.6f}")

# w は 3 へ、loss は 0 へ収束していく = 谷底に到達

このコードを走らせると、w が初期値 0 から目標の 3 へ、loss が 0 へと吸い寄せられていく。これがAIの「学習」の、最も純粋な姿だ。第19章では、これをニューラルネットに適用する。


学習率という「一歩の幅」

学習率 η\eta の設定は、味付けの「一つまみの量」と同じで、繊細なさじ加減が要る。

学習率が大きすぎる          学習率が適切          学習率が小さすぎる
  ╲    ╱╲    ╱             ╲          ╱          ╲          ╱
   ╲  ╱  ╲  ╱               ╲  ↓一歩  ╱            ╲ ·······  ╱
    ╲╱    ╲╱                 ╲______╱               ╲________╱
  飛び越えて発散              スッと谷底へ           遅々として進まない
η 大⇒発散リスク,η 小⇒学習が遅い\eta\ \text{大} \Rightarrow \text{発散リスク}, \qquad \eta\ \text{小} \Rightarrow \text{学習が遅い}

適切な学習率を見つけるのは、機械学習の実務で最も基本的なチューニングだ。実際には、最初は大きく、徐々に小さくする「学習率スケジューリング」や、パラメータごとに自動調整する Adam などの改良手法が使われる。だが根っこは、すべてこの「傾きと逆向きに、適切な幅で進む」という一点にある。

局所解という落とし穴

現実の損失の地形は、なだらかな一つの谷ではなく、いくつもの窪みがある複雑な地形だ。勾配降下法は「足元の傾き」しか見ないため、本当の最深部(大域的最小)ではなく、途中の小さな窪み(局所的最小)で止まってしまうことがある。霧の中の下山者が、小さな水たまりを谷底と勘違いするようなものだ。この問題への対処(確率的な揺らぎを与える、など)も、現代の学習手法の重要なテーマになっている。


まとめ — 「おまじない」の消し方

  1. 学習=誤差の最小化:予測と正解のズレ(損失 LL)を、最小にするパラメータを探す最適化問題
  2. 微分は坂の傾き:「パラメータを増やすと損失がどう変わるか」を表す。逆向きに動けば損失は減る
  3. 勾配は最急降下の方向:全パラメータの偏微分を並べたベクトル。その逆向きが最短の下り坂
  4. 更新式が学習の心臓:w←w−η∂L∂ww \leftarrow w - \eta \frac{\partial L}{\partial w} を繰り返すだけで、AIは賢くなる
  5. 学習率が命:大きすぎれば発散、小さすぎれば遅い。味付けの「一つまみ」と同じさじ加減

「AIが学習するとは何をしているのか」——その答えは、誤差の山を、傾きだけを頼りに一歩ずつ下る旅だった。これでPart 6——AIを支えるハードと数学の基盤——を一巡した。

ついに役者は揃った。データを表すベクトル(第17章)、それを変換する行列(第17章)、そして正しく調整する勾配降下法(本章)。次のPart 7では、これらを組み上げて、自分の手でニューラルネットを動かす。AIの「知能」が生まれる瞬間へ。


「賢さとは、一足飛びに答えに至る才能ではない。今いる場所の傾きを正しく読み、正しい方向へ、地道に一歩を刻み続ける営みだ。AIも、そして人も、そうやって少しずつ谷を下っていく。」