学習の仕組み — 重みはどうやって決まるのか
ニューラルネットには 数百万〜数千億のパラメータ(重み) があります。 人間が手で決めるのは絶対無理。これらは 「学習」というアルゴリズム でデータから自動的に決まります。 この章では「学習」とは何かを、数式とインタラクティブなアニメーションで完全に理解します。
この章の全体像
「学習」とは、たった1つの考え方で動いています:
誤差を測る
予測 $y$ と正解 $t$ のズレを 損失関数 $L$ として数値化。これが小さいほど良い予測。
誤差が減る方向を探す
損失 $L$ をパラメータで微分(勾配)。「どっちにパラメータを動かせば $L$ が小さくなるか」が分かる。
少しずつ動かす
勾配の逆方向にパラメータを少しずらす(勾配降下法)。これを何百万回も繰り返すと、$L$ が最小になるパラメータに到達。
💡 核心: ニューラルネットの学習は、「巨大な凸凹地形のなかで、最も低い谷を探す」最適化問題です。 その地形を歩く道具が勾配(傾き情報)、効率的に勾配を計算する技が 誤差逆伝播法。
1. 学習とは何か — 出発点
1.1 ニューラルネットの問題設定
第3章 で見たように、ニューラルネットは パラメータ化された関数です:
- $x$ : 入力
- $\theta$ : パラメータ全体(全ての重みとバイアス)
- $y$ : 予測出力
そもそも $\theta$ って何? — イメージで理解する
$\theta$(シータ)と書くと数学的で難しく見えますが、要は 「ネット内の全部の調整つまみを1つの大きな袋に入れたもの」 です。
イメージ:巨大な調整つまみの集まり
θ = (
w₁₁, w₁₂, w₁₃, ..., ← 第1層の重み(数千〜数百万個)
b₁, b₂, b₃, ..., ← 第1層のバイアス
w₂₁, w₂₂, w₂₃, ..., ← 第2層の重み
b₂, b₂, b₃, ..., ← 第2層のバイアス
... ← 全層の重みとバイアス
)
↑ これが全部「1つのベクトル」 = θ
例えば NNUE は約 1050万個、ChatGPT 級は数千億個 のつまみが束ねられている。
🎚️ たとえ話:ステレオの音響イコライザでイメージする(クリックで展開)
音楽プレイヤーのイコライザを思い出してください:低音、中音、高音…と つまみがたくさん ある。 それぞれを動かすと音が変わります。
ニューラルネットの $\theta$ は、このイコライザのつまみを途方もなく多くしたものと思ってください。 「θ を動かす」 = 「ネットの全つまみを少しずつ動かす」という意味になります。
📐 なぜ「ベクトル」と呼ぶのか — 数学的な背景(クリックで展開)
数学的には、複数の数値を順序付きで並べたものを ベクトル と呼びます:
- 2次元ベクトル:$(x, y)$ — 例:地図上の座標
- 3次元ベクトル:$(x, y, z)$ — 例:3D空間の位置
- 1050万次元ベクトル:$(\theta_1, \theta_2, \ldots, \theta_{10{,}500{,}000})$ — それが NNUE のθ
人間は3次元までしか直感的に見えませんが、数学的にはどんな高次元でも扱えます。θ は「1050万次元空間の中の1点」と見なせるわけです。
問題は、$\theta$ の値(つまみの組み合わせ)をどう決めるか。
1.2 手で決めるのは不可能
NNUEは約1050万個のパラメータを持ちます。1日1個決めても 2万8千年 かかる計算。 ChatGPT級なら 数千億〜兆 個。手作業は完全に論外です。
しかも各パラメータを単独で評価することもできない。「W[1][1] = 0.5237 が良いか?」は、 残りの数千万のパラメータが全部決まって初めて評価できる。
⚠️ パラメータは全員同時に決める必要がある。だから、データから自動で最適な組み合わせを見つける仕組み = 学習が必須。
1.3 「学習」を最適化問題として定式化
学習を数学的に書くとこうなります:
問題:データセット $D = \{(x_1, t_1), (x_2, t_2), \ldots, (x_N, t_N)\}$ が与えられたとき、 パラメータ $\theta$ を変数として、損失関数 $L(\theta)$ を最小化する $\theta^*$ を求めよ。
この数式の意味を分解する
機械学習の論文や教科書で 必ず登場する 1行。記号ごとに意味を分解しましょう。
| 記号 | 意味 | ひと言で |
|---|---|---|
| $\theta$ | パラメータ全体(重みとバイアスの束) | 「ネットのつまみの集まり」 |
| $L(\theta)$ | θ を入れると「予測のズレ」がスカラー値で返る関数 | 「θ がどれくらい悪いか」 |
| $\min\limits_{\theta} L(\theta)$ | θ を動かしたときの L の 最小値そのもの(数値) | 「最も小さくなった L の値」 |
| $\arg\min\limits_{\theta} L(\theta)$ | L が最小になるときの θ の値 | 「最小を取るときのつまみ位置」 |
| $\theta^*$ | 「最適な θ」を表す慣例的な記号(上付きの *) 読み方:「シータスター」 |
「これが探し求めるθ」 |
📢 読み方と記号の慣例
- $\theta^*$ は 「シータスター」(または「シータアスタリスク」)と読みます
- 上付きの 「*」(アスタリスク)は数学・最適化分野で 「最適値」「optimum」 を表す慣例
- 類似の記号:$x^*$(最適なx)、$w^*$(最適な重み)、$\pi^*$(最適方策、強化学習)
- 機械学習論文で スター記号 = 最適解 は世界共通の慣例
関連表記:$\hat{\theta}$(推定値、シータハット)、$\bar{\theta}$(平均、シータバー)、$\tilde{\theta}$(変形値、シータチルダ)、$\theta'$(プライム、別の値や微分)
📐 補足:$\min$ と $\arg\min$ の違い — 高校数学の復習(クリックで展開)
似ているけど結果が違います。1次元の例で確認:
$L(\theta) = (\theta - 3)^2 + 1$ という放物線を考えると…
- $\min\limits_{\theta} L(\theta) = 1$(最小値そのもの = 1。縦軸の値)
- $\arg\min\limits_{\theta} L(\theta) = 3$(最小を取るときの θ = 3。横軸の値)
学習で知りたいのは 「最小値が何点か」ではなく「どのθで最小になるか」。 だから $\arg\min$ を使い、その答えを $\theta^*$(最適解)と呼びます。
🏔️ 補足:「凸凹地形のなかで最も低い谷を探す」イメージ(クリックで展開)
この数式を絵で見ると、「巨大な凸凹地形のなかで、最も低い谷の位置を探す」 問題になります:
ただし注意:実際は θ が 1050万次元なので、地形は人間には可視化できないほど複雑。 それでも数学的な「最も低い谷を探す」問題として定式化できる、というのがこの1行の意味です。
💡 ひと言で覚えるなら: $\theta^* = \arg\min\limits_{\theta} L(\theta)$ = 「Lを最小にするθを θ* と呼ぶ」 = 「学習の目標は、損失を最小にするパラメータの組み合わせを見つけること」
ここからは、$L(\theta)$ をどう定義するか(損失関数)と、それをどう最小化するか(勾配降下法)の話になります。
2. 損失関数 — 「正解とのズレ」を数値化する
学習の第1歩は、「予測 $y$ と正解 $t$ がどれくらい違うか」を 1つのスカラー値 で表すこと。これを 損失関数(loss function) と呼びます。
📢 記号 $y$ と $t$ の意味
| 記号 | 意味 | 由来 |
|---|---|---|
| $y$ | モデル(ニューラルネット)の 予測出力 | output(出力)の慣例的記号 |
| $t$ | データに付いている 正解ラベル(教師データ) | target(目標)/ true(真値)/ teacher(教師信号)の頭文字 |
📚 表記の流派:機械学習の文献では2つの書き方があります。
- $y$ と $t$(本サイト):予測 $y$、正解 $t$(target)。古典的なNN教科書スタイル
- $\hat{y}$ と $y$(最近の論文):予測 $\hat{y}$(y-hat)、正解 $y$。統計学の流派
- `y_pred` と `y_true`(コード):scikit-learn、PyTorchで一般的
どの流派でも意味は同じ:「モデルの予測」 vs 「データの正解」のズレを測る。
2.1 二乗誤差(MSE) — 回帰の定番
📢 MSE = Mean Squared Error(平均二乗誤差)
| 文字 | 元の単語 | 意味 |
|---|---|---|
| M | Mean | 平均(ラテン語 medianus「真ん中の」が語源) |
| S | Squared | 二乗された(square「正方形」の過去分詞、$a \times a = a^2$ が正方形の面積になることから) |
| E | Error | 誤差(ラテン語 errare「さまよう、間違う」が語源) |
順番に分解すると:Error(差) → Squared Error(差の2乗) → Mean Squared Error(全データの平均)
出力が連続値(数値予測)のとき、最も使われる損失関数:
※ 上の式は1点ぶんの二乗誤差(Squared Error)。データセット全体で平均すると本来の MSE になります(§2.3 で扱います):
具体例:
- 予測 $y = 250$、正解 $t = 280$ → $L = (250 - 280)^2 = 900$
- 予測 $y = 250$、正解 $t = 251$ → $L = 1$(ほぼ正解)
- 予測 $y = 250$、正解 $t = -100$ → $L = 122{,}500$(大ハズレ)
2乗する理由:
- 符号を消す($y > t$ と $y < t$ を同等に扱う)
- 大きなズレほど強くペナルティ(差が10倍になると損失は100倍)
- 微分しやすい(後の勾配計算で効く)
📚 関連略語(誤差系の指標:RMSE / MAE / SSE / L2)(クリックで展開)
| 略語 | 正式名 | MSEとの違い |
|---|---|---|
| MSE | Mean Squared Error | 標準形(このセクションの主役) |
| RMSE | Root Mean Squared Error | $\sqrt{\text{MSE}}$。平方根を取って元の単位(m, kgなど)に戻す |
| MAE | Mean Absolute Error | 2乗の代わりに絶対値 $|y-t|$。外れ値に強い |
| SSE | Sum of Squared Errors | 合計(平均しない、Σのみ) |
| L2 loss | L2ノルム損失 | MSEと数学的に等価。ベクトルの長さの2乗 |
2.2 交差エントロピー — 分類の定番
📚 コラム:対数(log)とは何か(クリックで展開)
交差エントロピーで使う $\log(y)$ という関数。本筋から少し脱線しますが、ここでじっくり「対数」を確認しておきましょう。
1. 対数の定義 — 「指数の逆」
対数は 「ある数 $x$ を作るために、底 $a$ を何回掛けるか」 を返す関数:
底 10 の例(常用対数):
| $x$ | 計算 | $\log_{10}(x)$ |
|---|---|---|
| 1 | $10^0 = 1$ | 0 |
| 10 | $10^1 = 10$ | 1 |
| 100 | $10^2 = 100$ | 2 |
| 1000 | $10^3 = 1000$ | 3 |
| 1,000,000 | $10^6$ | 6 |
桁数を表す関数、と思うと直感的。
2. 底の種類
| 記法 | 底 | 名称 | 主な用途 |
|---|---|---|---|
| $\log_{10}$(一般工学) | 10 | 常用対数 | 工学、科学(地震・pH等) |
| $\ln$ または $\log$(ML文脈) | $e \approx 2.718$ | 自然対数 | 機械学習・微分積分の標準 |
| $\log_2$ | 2 | 二進対数 | 情報理論、ビット数 |
機械学習で $\log$ と書いてあるとき、ほぼ自然対数(底 $e$) です。微分が綺麗($\frac{d}{dx}\ln(x) = \frac{1}{x}$)だから。
📐 コラム・イン・コラム:自然対数の e(ネイピア数)の正体
$e \approx 2.71828\ldots$ という、円周率 $\pi$ と並ぶ数学の超有名定数。なぜこれが「自然」と呼ばれ、機械学習で標準なのか。
1. e の正体は「複利計算の極限」
最も直感的な定義は、銀行の利息計算。
100万円を年利 100% で1年運用する とき:
| 複利の頻度 | 計算式 | 結果 |
|---|---|---|
| 年1回(複利なし) | $100 \times (1+1)$ | 200万 |
| 半年に1回 | $100 \times (1+0.5)^2$ | 225万 |
| 月1回 | $100 \times (1+1/12)^{12}$ | 261万 |
| 日1回 | $100 \times (1+1/365)^{365}$ | 271.4万 |
| 瞬間ごと(連続複利) | $100 \times e$ | 271.8万 |
「連続的に複利で増える」上限が $e$。数式で書くと:
2. 複利の極限が e に収束する様子(グラフ)
n を大きくしていくと、$e \approx 2.718$ の上限値に漸近。これが「自然界の連続成長率の限界」と呼ばれる所以。
3. もう一つの定義:級数(無限和)
$1 + 1 + 0.5 + 0.1667 + 0.0417 + 0.0083 + \cdots \approx 2.71828$
4. なぜ「自然」と呼ばれるか — 微分の魔法
$e^x$ は「自分を微分しても自分のまま」唯一の関数:
d/dx (eˣ) = eˣ ← e のときだけシンプル!
d/dx (2ˣ) = ln(2) × 2ˣ ← 余分な係数 ln(2) ≈ 0.693
d/dx (10ˣ) = ln(10) × 10ˣ ← 同じく ln(10) ≈ 2.303
$a^x$ を微分すると $\ln(a) \times a^x$。$a = e$ のときだけ $\ln(e) = 1$ で係数が消える。
自然対数 $\ln(x)$ も微分が綺麗:
d/dx ln(x) = 1/x ← 自然対数だけシンプル
d/dx log₁₀(x) = 1/(x × ln(10)) ← 余分な係数
機械学習では誤差逆伝播で大量の微分計算 をするので、係数が出ない $e$ ベースが断然便利。これが「機械学習で `log` と書いたら自然対数 `ln`」の理由。
5. オイラーの公式 — e の偉大さ
数学で最も美しいとされる式:
5つの基本定数($e$, $i$(虚数), $\pi$, $1$, $0$)を1つに繋ぐ。これが $e$ の特別さの究極の証拠。
6. 機械学習で e が出る場面
| 場面 | 数式 |
|---|---|
| Sigmoid関数 | $\sigma(z) = \dfrac{1}{1 + e^{-z}}$ |
| Softmax | $\text{softmax}(z_i) = \dfrac{e^{z_i}}{\sum_j e^{z_j}}$ |
| 交差エントロピー | $-\log(y)$(自然対数) |
| ガウス分布 | $\dfrac{1}{\sqrt{2\pi}\sigma} e^{-(x-\mu)^2/2\sigma^2}$ |
すべて 「微分すると綺麗になる」 から $e$ が選ばれている。
7. 歴史
| 年 | 出来事 |
|---|---|
| 1683年 | ヤコブ・ベルヌーイが複利計算で初めて発見 |
| 1731年 | レオンハルト・オイラーが文字 `e` を採用("exponential" の頭文字) |
| 1748年 | オイラーが $e^{i\pi} + 1 = 0$ を発見 |
| 以降 | 微積分・確率論・物理学で標準定数 |
「e」は オイラー(Euler)の頭文字でもあるが、本人は exponential(指数)の頭文字として導入した。「ネイピア数」はジョン・ネイピア(対数の発見者)にちなむ別名。
💡 ひと言で: $e$ は「連続的な成長の限界」「微分しても変わらない唯一の数」。 機械学習で log や exp が出てきたら、ほぼすべて底は e と思って間違いない。
3. 自然対数 $\ln(x)$ のグラフ
重要な特徴:
- $x = 1$ で $y = 0$(緑点)— 「1を作るには $e$ を 0回掛ける」
- $x \to 0$ で $y \to -\infty$ — 急激に負の無限大へ落ちる
- $x \to \infty$ で $y \to \infty$、ただしゆっくり増える
- $x \le 0$ では定義されない
4. log の3つの魔法の性質
- 掛け算 → 足し算:$\log(a \times b) = \log(a) + \log(b)$
- べき乗 → 掛け算:$\log(a^n) = n \times \log(a)$
- 割り算 → 引き算:$\log(a/b) = \log(a) - \log(b)$
これらにより、確率の 掛け算(アンダーフローしやすい) を 足し算(安定) に変換できる。機械学習・統計で log が頻出するのはこのため。
5. なぜ機械学習で $-\log(y)$ を使うのか
確率 $y$ は 0〜1 の範囲。log を取ると:
- $y = 1$ → $\log(1) = 0$
- $y = 0.5$ → $\log(0.5) \approx -0.69$
- $y = 0.01$ → $\log(0.01) \approx -4.6$
- $y \to 0$ → $\log(y) \to -\infty$
確率が小さいほど log は 大きな負の数。マイナス記号を付ければ正の損失 として扱える:
- $y = 1$ → $-\log(1) = 0$(罰なし)
- $y = 0.01$ → $-\log(0.01) = 4.6$(大きな罰)
- $y \to 0$ → $-\log(y) \to +\infty$(無限の罰)
これが「予測が外れるほど罰が指数的に増える」仕組み。
6. 身近な「対数スケール」の例
| 現象 | スケール | 意味 |
|---|---|---|
| 地震マグニチュード | $\log_{10}$ | M7 は M6 の 10倍のエネルギー |
| デシベル(音圧) | $\log_{10}$ | 10dB 増 = 10倍の音圧 |
| pH(酸性度) | $-\log_{10}$ | pH3 は pH4 の 10倍酸性 |
| 音楽の音程 | $\log_2$ | 1オクターブ上 = 周波数2倍 |
| 計算量(バイナリサーチ) | $\log_2$ | $n=1024 \to \log_2(1024)=10$ 回 |
人間の感覚(音、光、酸性度)は 対数的 に世界を捉えている。だから「log で測る」のが自然な場面が多い。
7. プログラマ的に:log は exp の逆関数
import math
# 指数関数
exp_5 = math.exp(5) # e^5 ≈ 148.4
# その逆(自然対数)
math.log(exp_5) # 5(元に戻る)
# 性質1の確認
math.log(2 * 3) # ≈ 1.79
math.log(2) + math.log(3) # ≈ 1.79(同じ)
$\exp$ と $\log$ は 互いに逆関数:
- $\exp(\log(x)) = x$
- $\log(\exp(x)) = x$
出力が確率(0〜1)のとき。NNUEや画像分類でも使われる:
この式全体をグラフで見る
まずは $t = 0$ と $t = 1$ のそれぞれで、$y$ を動かしたときに損失 $L$ がどう変化するか を1つのグラフに重ねて見てみましょう。
💡 このグラフが伝えること:
🔴 t=1 のカーブは y → 0 で無限大(正解が「猫」なのに「猫じゃない」と高確率で予測した誤り)。
🔵 t=0 のカーブは y → 1 で無限大(正解が「猫じゃない」なのに「猫」と高確率で予測した誤り)。
正解側に近い予測(緑の点)はほぼ罰ゼロ、正解と真逆の高確率予測(赤の点)は無限大の罰になります。
この数式を1つずつ分解する
一見複雑ですが、これは 2値分類(正解が 0 または 1)の条件分岐を1行にまとめた ものです。
記号の確認
| 記号 | 意味 | 値の範囲 |
|---|---|---|
| $t$ | 正解ラベル(target) | 0 または 1 |
| $y$ | モデルの予測確率 | $0 \leq y \leq 1$ |
| $\log$ | 自然対数(底 $e$) | — |
2つの項に分解
L(y, t) = -[ t · log(y) + (1-t) · log(1-y) ]
└────┬───┘ └──────┬──────┘
項A: 項B:
「t=1のとき」用 「t=0のとき」用
ケース1:正解 $t = 1$ のとき
$$L = -[1 \cdot \log(y) + (1-1) \cdot \log(1-y)] = -\log(y)$$
項B が消えて $-\log(y)$ だけ残る:
- $y = 1$(完璧)→ $-\log(1) = 0$(罰なし)
- $y = 0.01$(大ハズレ)→ $-\log(0.01) \approx 4.6$(大罰)
- $y \to 0$(正解と真逆を高確率で予測)→ $\infty$
ケース2:正解 $t = 0$ のとき
$$L = -[0 \cdot \log(y) + (1-0) \cdot \log(1-y)] = -\log(1-y)$$
項A が消えて $-\log(1-y)$ だけ残る:
- $y = 0$(完璧)→ $-\log(1) = 0$(罰なし)
- $y = 0.99$(大ハズレ)→ $-\log(0.01) \approx 4.6$(大罰)
- $y \to 1$(正解と真逆を高確率で予測)→ $\infty$
つまり:t は「スイッチ」
┌─ t=1 のとき → -log(y) を使う
L(y,t) ┤
└─ t=0 のとき → -log(1-y) を使う
- $t=1$ → 項Aだけ生かす、項Bは $0$ で消える
- $t=0$ → 項Aは $0$ で消える、項Bだけ生かす
なぜ1つの式にまとめるのか
- コードがシンプル:`if t == 1: ... else: ...` という分岐がいらない
- 微分しやすい:1つの数式として自動微分(PyTorch等)できる
- 数学的に美しい:場合分けより本質を表現できる
# Pythonでの実装:分岐なしで1行
def binary_cross_entropy(y, t):
return -(t * math.log(y) + (1 - t) * math.log(1 - y))
📝 具体例で確認 — 「猫かどうか」判定タスク(4ケース)(クリックで展開)
ピンと来ない場合は、具体例で考えるのが一番。「画像が猫かどうかを判定する」タスクで見ていきましょう。
記号の意味を再確認
- $t$(正解ラベル):データの真実
- $t = 1$ → 「実際に猫」
- $t = 0$ → 「実際は猫じゃない」
- $y$(予測確率):モデルが 「猫である」と思う確率(0〜1)
- $y = 0.99$ → 「確率99%で『猫』」と予測(モデルは「ほぼ猫だ」と判断)
- $y = 0.01$ → 「確率1%で『猫』」=「確率99%で『猫じゃない』」と予測
4つのケースで見ていくと:
ケース1:$t=1$(実は猫)かつ $y=0.99$(モデルも「ほぼ猫」と予測)
→ 正解側に高確率で予測できた → $L \approx 0.01$(ほぼ罰なし)
ケース2:$t=1$(実は猫)かつ $y=0.01$(モデルは「ほぼ猫じゃない」と予測)
→ 正解と真逆を高確率で予測した → $L \approx 4.6$(大ハズレ)
ケース3:$t=0$(実は猫じゃない)かつ $y=0.01$(モデルも「ほぼ猫じゃない」と予測)
→ 正解側に高確率で予測できた → $L \approx 0.01$(ほぼ罰なし)
ケース4:$t=0$(実は猫じゃない)かつ $y=0.99$(モデルは「ほぼ猫」と予測)
→ 正解と真逆を高確率で予測した → $L \approx 4.6$(大ハズレ)
表でまとめる
| 実際 ($t$) | 予測 ($y$) | モデルの判断 | 結果 | 損失 $L$ |
|---|---|---|---|---|
| 1(猫) | 0.99 | 「確率99%で猫」 | 正解 🎯 | 0.01 |
| 1(猫) | 0.01 | 「確率99%で猫じゃない」 | 誤り ❌ | 4.6 |
| 0(非猫) | 0.01 | 「確率99%で猫じゃない」 | 正解 🎯 | 0.01 |
| 0(非猫) | 0.99 | 「確率99%で猫」 | 誤り ❌ | 4.6 |
💡 ポイント:
$y$ は 常に「クラス1(猫)である確率」。
$t$ がどちらでも、$y$ が 正解側に近い
($t=1$ なら $y \to 1$、$t=0$ なら $y \to 0$)と損失は小さい。
逆に 正解から離れた強い予測($t=1$ なのに $y \to 0$、$t=0$ なのに $y \to 1$)は大ハズレで $L \to \infty$。
この関数は、確率分布の「距離」を測る情報理論的な根拠を持ちます。次のコラムで、なぜ「交差エントロピー」という名前なのか、その由来を解説します。
📚 コラム:なぜ「交差エントロピー」という名前なのか(クリックで展開)
Cross-Entropy = 交差 + エントロピー
| 単語 | 意味 |
|---|---|
| Cross | 交差、交わる、組み合わせる |
| Entropy | エントロピー(不確実さ、無秩序の度合い) |
1. まず「エントロピー」とは
19世紀に 物理学 で登場した概念で、元々は「無秩序さ・混沌の度合い」を表す量。
これを 情報理論 に持ち込んだのが、1948年の クロード・シャノン。 確率分布の「不確実さ」を測る量として定式化しました:
例で見ると:
- 公平なコイン投げ:表50% / 裏50% → エントロピー高い(予測しにくい、混沌)
- イカサマコイン:表99% / 裏1% → エントロピー低い(ほぼ表と分かっている)
「分布がどれくらい予測不可能か」の指標です。
📐 コラム・イン・コラム:「予測不可能か」をもう少し詳しく — 驚き量と平均
「予測不可能」と言われてもピンと来ない人へ。 エントロピーは 「次に何が起こるかの平均的な意外性(驚き量)」 と読み替えると一気に分かります。
① まず「驚き量」を定義する
ある事象(例:「表が出た」)の 確率が $p$ のとき、それが実際に起きたときの 驚き を次の値で測ります:
- $p = 1$(必ず起きる)→ $-\log 1 = 0$(0驚き。「だろうね」)
- $p = 0.5$(半々)→ $-\log 0.5 \approx 0.69$(中ぐらい)
- $p = 0.01$(めったに起きない)→ $-\log 0.01 \approx 4.6$(大きな驚き。「マジか!」)
ポイント:めったに起きないことが起きた時ほど、驚き量は大きい。「$\log$」を使うのは、「2倍珍しい」が「1段階驚き」に対応するように調整されているから。
② エントロピー = 驚き量の「平均値」
シャノンのエントロピー $H(p) = -\sum p_i \log p_i$ は、各事象の 驚き量 $-\log p_i$ を、その事象の発生確率 $p_i$ で重み付けして平均 しているだけです。
つまり 「次のコイン投げで平均してどれくらい驚かされるか」 がエントロピー。
③ コインの例で数値計算
| コイン | 表($p_1$) | 裏($p_2$) | 計算 | $H$(平均驚き) |
|---|---|---|---|---|
| 公平 | 0.5 | 0.5 | $0.5 \times 0.69 + 0.5 \times 0.69$ | 0.69(高い) |
| 少し偏り | 0.8 | 0.2 | $0.8 \times 0.22 + 0.2 \times 1.6$ | 0.50(中) |
| イカサマ | 0.99 | 0.01 | $0.99 \times 0.01 + 0.01 \times 4.6$ | 0.056(低い) |
| 確定(イカサマ振り切り) | 1.0 | 0 | $1 \times 0 + 0 \times \infty$ | 0(驚きゼロ) |
④ なぜ公平コインが最大?
- 公平コイン(50/50):表でも裏でも「半々だったし、まあそうかな」と 毎回そこそこ驚く → 平均が高い
- イカサマ(99/1):99%は「予想通り(驚きゼロに近い)」、1%は「マジか!」だが滅多にない → 平均すると ほとんど0
- 確定(100/0):いつも予想通り → 驚きゼロ。完全な無秩序ゼロ=混沌の対極
⑤ グラフで見る:2値分布のエントロピー
💡 p = 0.5(公平)で山の頂上。両端(p=0 or 1)で H=0。 偏れば偏るほど「次は何が出るか予測できる」 = エントロピーが下がる = 平均驚き量が小さい。
💡 1行まとめ: エントロピー = 「次に何が起こるか分かりにくいほど大きい」。 数学的には 「驚き量 $-\log p_i$ の期待値」。
2. 「交差」エントロピー:2つの分布の組み合わせ
通常のエントロピー $H(p)$ は 1つの分布 $p$ の不確実さ。 交差エントロピー $H(p, q)$ は 2つの分布 $p$ と $q$ を掛け合わせた 量:
ここで:
- $p$:真の分布(データの正解)
- $q$:予測の分布(モデルの出力)
- $p_i \log q_i$ で 2つの分布が掛け合わされている → これが「交差」の由来
📐 コラム・イン・コラム:$H(p, q) = -\sum p_i \log q_i$ のイメージを掴む
一見ややこしい式ですが、「$p$ の世界に住んでいる人が、$q$ を信じたときの平均驚き量」と読めばストンと入ります。
① 部品を1つずつ意味付け
H(p, q) = − Σᵢ pᵢ · log qᵢ
↑ ↑
真の発生確率 その事象を「qで信じた」ときの予測確率
(現実の世界) (モデルが思っている確率)
$-\log q_i$ は、「モデルが事象 $i$ に確率 $q_i$ を割り当てていたとき、実際に $i$ が起きたら『どれくらい驚くか』」。 それを、現実での発生確率 $p_i$ で重み付けして平均しています。
② 1ステップで意味を組み立てる
- モデルは「クラス $i$ の確率は $q_i$ だろう」と予測している
- もし本当にクラス $i$ が起きたら、モデルは $-\log q_i$ ぶん驚く($q_i$ が小さいほど大ハズレ)
- 現実でクラス $i$ が起きる確率は $p_i$
- これらを全クラスについて足し合わせ=$p$ の世界でモデルが感じる平均の驚き=損失
③ 具体例で計算してみる(2クラス分類)
正解の分布 $p = (1, 0)$(クラス1が確定)として、3つのモデル $q$ で比べる:
| モデル | $q = (q_1, q_2)$ | 計算 | $H(p, q)$ |
|---|---|---|---|
| A:自信あり正解 | (0.99, 0.01) | $-1 \times \log 0.99 - 0 \times \log 0.01$ | ≈0.01(ほぼ罰なし) |
| B:迷っている | (0.5, 0.5) | $-1 \times \log 0.5 - 0 \times \log 0.5$ | ≈0.69(中ぐらい) |
| C:真逆を確信 | (0.01, 0.99) | $-1 \times \log 0.01 - 0 \times \log 0.99$ | ≈4.6(大ハズレ) |
$p_2 = 0$ なので 2項目は全て消える。 残る $-p_1 \log q_1 = -\log q_1$ が「正解クラスにどれだけ確率を割り当てたか」を測る損失になります。
④ なぜ「平均」が損失になるのか
機械学習では正解 $p$ がワンホット(例:$(1,0)$)なので、$H(p,q)$ は実質「正解クラスに割り当てた確率 $q_{\text{正解}}$ の対数の符号反転」になります。
- 正解に高い確率を割り当てた → $-\log q_{\text{正解}}$ は小さい → 損失小
- 正解に低い確率しか割り当てない → $-\log q_{\text{正解}}$ は大きい → 損失大
💡 1行まとめ: $H(p, q)$ は 「現実は $p$ なのに $q$ で予想したら、どれだけ驚かされるかの平均」。 予想が良ければ驚きが少なく=損失が小さい。
3. 直感的な意味
「真の答えが $p$ の世界で、もし $q$ を使って情報を符号化したら、どれくらいムダ(=損失)が出るか」
- $p$ と $q$ が 完全に一致 → 損失最小
- $p$ と $q$ が 大きくズレる → 損失大きい
つまり、2つの確率分布の "ズレ" を測る指標。
📐 コラム・イン・コラム:なぜ「$p$ と $q$ が一致 → 損失最小」なのか
数学的には ギブスの不等式 という事実があり、
つまり $H(p, q)$ は $q = p$ のときに最小化され、その最小値は $H(p)$ です。 ここでは「なぜそうなるか」を機械学習の文脈で具体的に見ていきます。
① 分類タスクでは $p$ がワンホット(確定)
「実際は猫」というラベルは、$p = (1, 0)$(猫の確率100%、猫じゃない確率0%)のように 正解クラスだけ1で他は0 のベクトルになります(これを ワンホット と呼ぶ)。
このとき $H(p) = 0$(驚きゼロ。正解は確定しているから)。だから 損失の理論最小値は0。
② 「一致」とは「モデルも100%確信」
- 正解 $p = (1, 0)$
- 完璧なモデル $q = (1, 0)$ ←これが「一致」
- 損失 $H(p,q) = -1 \times \log 1 - 0 \times \log 0 = 0 - 0 = 0$
$\log 1 = 0$ なので、正解クラスに100%の確率を割り当てた瞬間に 損失がぴったり0 になります。
③ ズレるほど損失が増える
| 正解 $p$ | 予測 $q$ | ズレ具合 | 損失 $H(p,q) = -\log q_{\text{正解}}$ |
|---|---|---|---|
| (1, 0) | (1.00, 0.00) | 完全一致 | 0.00(最小!) |
| (1, 0) | (0.99, 0.01) | 少しだけズレ | 0.01 |
| (1, 0) | (0.80, 0.20) | 結構ズレ | 0.22 |
| (1, 0) | (0.50, 0.50) | 大きくズレ(迷い) | 0.69 |
| (1, 0) | (0.01, 0.99) | 完全に逆 | 4.60(大ハズレ) |
④ 直感での「なぜ最小?」
② の式 $H(p,q) = -\log q_{\text{正解}}$ を $q_{\text{正解}}$ を動かして眺める と:
- $q_{\text{正解}} = 1$(最大可能値)→ $-\log 1 = 0$
- $q_{\text{正解}}$ がそれより小さい値 → $-\log q_{\text{正解}} > 0$(必ず正の値)
つまり $-\log$ は単調減少関数なので、$q_{\text{正解}}$ を限界まで大きくすることが損失最小化と等価。 その「限界」が「正解クラスに確率 $1$ を割り当てる」 = $q = p$。
⑤ ワンホットじゃない場合(一般化)
$p$ がワンホットでなくても(例:知識蒸留やラベル平滑化では $p = (0.9, 0.1)$ のような分布)、ギブスの不等式から $q = p$ で最小になることが保証されます。
$p = (0.9, 0.1)$ の例で確認:
- $q = (0.9, 0.1)$ → $H(p, q) = -0.9 \log 0.9 - 0.1 \log 0.1 \approx 0.325$(これが $H(p)$)
- $q = (0.5, 0.5)$ → $H(p, q) = -0.9 \log 0.5 - 0.1 \log 0.5 = 0.693$(増えた)
- $q = (0.1, 0.9)$ → $H(p, q) = -0.9 \log 0.1 - 0.1 \log 0.9 \approx 2.08$(大きく増えた)
💡 1行まとめ: $-\log$ は 確率が1に近いほど0、0に近いほど∞ の関数。 「正解の確率に1を割り当てる」 = 「$-\log$ の入力を最大化」 = 損失最小。 これが $p = q$ で最小化される機械学習的な意味。
4. 機械学習での対応
| 数式の意味 | 機械学習で言うと |
|---|---|
| $p$(真の分布) | 正解ラベル $t$ |
| $q$(予測の分布) | モデルの予測 $y$ |
| $H(p, q)$ | 損失関数 |
2値分類なら:
- $p = (t, 1-t)$(正解が1なら $(1, 0)$、0なら $(0, 1)$)
- $q = (y, 1-y)$(予測が $y$)
これを $H(p, q)$ に代入すると:
これがまさに2値交差エントロピーの式。
5. なぜ「交差」と呼ぶのか — 図で
「自分の log」を取らずに「相手の log」を取る から「交差」:
6. 関連概念:KL ダイバージェンス
交差エントロピーと深い関係にある概念が KLダイバージェンス(Kullback-Leibler divergence):
つまり:交差エントロピー − 自己エントロピー = KLダイバージェンス。 KLは「2つの分布の距離」を厳密に測る指標で、機械学習・統計学の中核概念。
機械学習では $H(p)$ は 正解 $p$ だけで決まる定数 なので、$H(p, q)$ を最小化することは、$D_{KL}$ を最小化することと等価。 だから「交差エントロピーを最小化 = 真の分布に予測を近づける」と解釈できる。
7. 歴史的背景
- 1865年:クラウジウスが熱力学でエントロピーを導入
- 1948年:シャノンが情報理論にエントロピーを持ち込む("A Mathematical Theory of Communication")
- 1951年:Kullback と Leibler が KL ダイバージェンスを提案
- 1980年代以降:機械学習・ニューラルネットの分類問題で交差エントロピーが標準的な損失関数に
💡 ひと言で: 交差エントロピーは 「真の分布と予測分布のズレ」を、情報理論的に正しく測る指標。 $p$ と $q$ を 掛け合わせて(交差させて) エントロピーを計算するから「交差エントロピー」と呼ばれる。
なぜ確率出力では MSE ではなく交差エントロピーを使うのか?
よくある疑問:「数値予測でMSEを使うなら、確率予測でもMSEでよくない?」 実は、確率出力でMSEを使うと 3つの問題 があります。
⚠️ MSEを確率に使うとダメな3つの理由
- 「正解と真逆を高確率で予測した誤り」を強く罰せない(最大ペナルティが頭打ち)
- 勾配消失を起こす(Sigmoid + MSE は学習が遅い)
- 確率の意味を尊重していない(情報理論的に不自然)
📊 補足:$-\log(y)$ という関数の形をもう一度単独で確認(クリックで展開)
上の「式全体をグラフで見る」で既に2本のカーブを見ましたが、$-\log(y)$ 単独でも形を確認しておきます。 交差エントロピーの中身は $-\log(y)$(マイナス・ログ・y)。
💡 このグラフの読み方:
横軸 $y$ は予測値(0=完全な誤り、1=完璧な正解)。
$y = 1$(正解)のとき → $L = 0$(罰なし)
$y = 0.5$(迷い)のとき → $L \approx 0.69$(中程度の罰)
$y \to 0$(正解と真逆を高確率で予測)のとき → $L \to \infty$(無限の罰!)
$-\log(y)$ が「罰」として優れている理由
$-\log(y)$ には決定的な特徴があります:
- 正解($y=1$)のとき罰ゼロ — 当然
- 誤りに近づくほど指数的に罰が増える
- $y = 0$ で罰が無限大に発散 — 「絶対に許さん」という意思表示
この「無限大に発散する」性質が、「正解と真逆を高確率で予測した誤り」を厳しく罰する ことを可能にします。
理由1:「正解と真逆を高確率で予測した誤り」を強く罰せない(MSEとの比較)
さて、ここで MSE: $(1-y)^2$ と CE: $-\log(y)$ を 同じグラフに重ねて 比較してみましょう。 これで MSE が「弱すぎる罰」だということが目で見て分かります。
💡 このグラフが示すこと:
正解は $y=1$(右端)。左に行くほど誤予測。
🔵 MSE:左端でも損失は最大1(緑の頭打ち)
🔴 CE(交差エントロピー):左に行くほど 急激に上昇、$y \to 0$ で無限大に発散
数値で確認
| 予測 $y$ | 状態 | 🔵 MSE: $(1-y)^2$ | 🔴 CE: $-\log(y)$ |
|---|---|---|---|
| 0.99 | ほぼ正解 | 0.0001 | 0.01 |
| 0.5 | 迷っている | 0.25 | 0.69 |
| 0.01 | 大ハズレ | 0.98 | 4.6(≒5倍!) |
| $y \to 0$ | 確信を持って間違い | 最大1.0で頭打ち | 無限大に発散 |
MSEは最大でも 1.0 で頭打ち。一方、交差エントロピーは $-\log(y)$ なので $y \to 0$ で 無限大に発散。 これが「確信を持って間違えるな」という強い学習圧力をかける仕組みです。
理由2:勾配消失を防ぐ(実践上もっとも重要)
ニューラルネットの最終層は通常 Sigmoid(0〜1に押し込める)を通します。 その後ろの損失関数として何を使うかで、勾配の流れが激変します。
勾配は「パラメータをどっちに動かすか」を決める情報。 勾配が大きい = 速く学習、勾配が小さい = 学習が止まる、という関係です。
💭 よくある疑問:分類で「0.5と0.6」が連続的につながっているって本当?(クリックで展開)
素朴な疑問: 「数値予測なら 0.5 の隣に 0.6 があるのは分かる。でも分類だと 0.5 = 犬、0.6 = 猫 みたいに、隣り合う数値でも全く違う意味を持つはず。それで勾配がうまく機能するの?」
結論: その直感には1つだけ大きな誤解があります。
ニューラルネットの出力 $y$ は 「ラベル番号」ではなく「クラス1である確率」。
だから 0.5 → 0.6 は連続的な確率の変化であって、「犬から猫に切り替わる」ような離散ジャンプは起きません。
📌 「猫 or 犬」を例に、$y$ の意味を厳密に
- $y = 0.1$ → 「猫である確率 10%」(=「犬である確率 90%」)
- $y = 0.5$ → 「猫である確率 50%」(=「犬である確率 50%」… 完全に迷っている)
- $y = 0.6$ → 「猫である確率 60%」(=「犬である確率 40%」… 少し猫寄り)
- $y = 0.99$ → 「猫である確率 99%」(ほぼ猫)
$y$ は「猫っぽさのメーター」です。0.5 と 0.6 はどちらも同じメーターの近接した目盛り。 意味は連続的に変化します。
📌 「離散」になるのは推論時の閾値判定だけ
学習中 → y は連続な確率(0〜1 のなめらかな値)
↓ 損失と勾配はこの連続値の上で計算
推論時(=ラベルを出す時) → y > 0.5 なら「猫」、それ以外は「犬」 ← ここだけ離散化
離散化(閾値処理)は予測ラベルを出す最後の一瞬だけ。 学習中はずっと連続的な確率を扱うので、損失関数も滑らかな関数になり、勾配が綺麗に流れます。
📌 数値予測との対比
| 数値予測(回帰) | 2値分類 | |
|---|---|---|
| $y$ の意味 | 予測したい数値そのもの(例:価格250円) | クラス1である確率(例:猫である確率0.6) |
| $y$ の連続性 | 連続値そのもの | 連続値(0〜1の確率) |
| $y$ の隣り合う値の意味 | 250 と 251 は「ほぼ同じ価格」 | 0.5 と 0.6 は「ほぼ同じ猫っぽさ」(どちらも迷い気味) |
| 損失の滑らかさ | $L = (y - t)^2$ で滑らか | $L = -\log(y)$ で滑らか |
| 勾配が流れるか | OK | OK(連続な確率の上で計算するから) |
📌 多クラス(犬・猫・鳥・…1000種類)の場合
ImageNet のような多クラス分類でも考え方は同じです。出力 $y$ は 1個の数値ではなく1000個の確率ベクトル:
y = [0.02, 0.85, 0.01, ..., 0.03] ← 1000個の確率(合計1)
犬 猫 鳥 ... その他
↑ 「猫である確率0.85」
各クラスごとに 「そのクラスである確率」 が連続的に動きます。 交差エントロピーは「正解クラスの確率を 1 に近づける」方向に勾配を生成 — やはり連続値上の滑らかな最適化です。
💡 まとめ:「分類だから離散」というのは 入力ラベル ($t \in \{0, 1\}$) や最終的な予測ラベルだけの話。 モデルが内部で扱う $y$ は 常に連続な確率。 だから勾配は普通の連続関数のように滑らかに流れる ── これがニューラルネット分類の核心です。
💡 このグラフの読み方:
横軸 z は Sigmoid 前の値(-10 = 大ハズレ、+10 = ほぼ正解)。
🔴 CE 勾配(赤):左端で勾配が 1に近い大きさ → 学習がガッツリ進む
🔵 MSE 勾配(青):左端でも勾配が ほぼ0 → 学習が止まる!
これが「勾配消失問題」の正体。MSEを確率に使うと、間違えても学習しない。
Sigmoid + MSE の組み合わせ → 勾配消失
MSEを z で微分すると:
ここで $y(1-y)$ が問題。$y$ が 0 か 1 に近いと、ほぼ 0 になります。
- $y = 0.99$ のとき:$y(1-y) = 0.99 \times 0.01 = 0.0099$
- $y = 0.01$ のとき:$y(1-y) = 0.01 \times 0.99 = 0.0099$
大ハズレでも勾配がほぼゼロ → 学習が止まる。
Sigmoid + 交差エントロピー → 勾配が綺麗に消える
交差エントロピーを z で微分すると、数式の魔法のような結果に:
驚くほどシンプル! 厄介な $y(1-y)$ の項が消える。
- $y = 0.01$, $t = 1$ のとき:勾配 $= 0.01 - 1 = -0.99$(大きい!)
- 間違いが大きいほど勾配も大きい → 速く学習できる
これが Sigmoid + 交差エントロピーが現代の分類タスクの標準 になっている数学的な理由です。
📐 補足:理由3 — 情報理論的に正しい(やや上級)(クリックで展開)
交差エントロピーは 「確率分布間の距離」 を測る情報理論的な指標。 最尤推定(Maximum Likelihood Estimation)と数学的に等価 で、確率を扱う統計学的に自然な選択です。
一方MSEは「数値の差」を測る指標で、確率の意味を尊重していません。 「予測 $0.7$ と正解 $1$ の差は $0.3$」と言うとき、これが「距離」として意味があるのは確率分布の文脈では微妙、というニュアンス。
使い分けの大原則
| 出力タイプ | 損失関数 | 例 |
|---|---|---|
| 連続値(数値予測、回帰) | MSE(二乗誤差) | 住宅価格、評価値、温度 |
| 確率(0〜1、2値分類) | 二値交差エントロピー | スパム判定、勝率予測 |
| 多クラスの確率分布 | 交差エントロピー(カテゴリカル) | 画像分類、次のトークン予測 |
💡 覚えるべきは1つ: 「確率出力には交差エントロピー」。 MSEを使うと正解と真逆を高確率で予測した誤りを強く罰せず、Sigmoidとの組み合わせで勾配消失する。 これは深層学習の常識として、ほぼすべての分類タスクで採用されています。
2.3 データセット全体の損失
実際は、データ1点ずつではなく、全データの平均を取ります:
ここで $y_i = f(x_i; \theta)$。$L_{\text{total}}$ は パラメータ $\theta$ の関数 として見るのがポイント。 学習は $L_{\text{total}}(\theta)$ を最小化する $\theta$ を見つける 問題になります。
3. 勾配降下法 — 損失の谷を下りる
$L_{\text{total}}(\theta)$ を最小化する $\theta$ を、どう見つけるか? 勾配降下法(Gradient Descent) という単純で強力なアルゴリズムを使います。
3.1 1次元での直感
まずは1変数で考えます。$L(w)$ のグラフが次のような谷型だとします:
L(w)
│
│ ● ●
│ ╲ ╱
│ ╲ ╱
│ ╲ ╱
│ ╲ ╱
│ ╲__╱
│ ● ← ここが最小値(求めたい w*)
└──────────── w
w*
現在の点が $w_0$ にあるとき、「坂を下る方向」 に動けば $L$ は減ります。 坂の傾きは 微分 で測れます:
- $\dfrac{dL}{dw} > 0$(右上がり)→ $w$ を 減らす と $L$ が下がる
- $\dfrac{dL}{dw} < 0$(右下がり)→ $w$ を 増やす と $L$ が下がる
🎳 直感:「曲線の上にボールを置く」と考える
曲線をそのまま「丘の断面」だと思って、点 $w_0$ に ボール を置いてみてください。 重力でボールは 低い方へ 転がります。 その「転がる向き」が、まさに $L$ を下げる $w$ の動かし方です。
💡 覚えるべき1行:
ボールが転がる向き = $L$ を下げたい向き = $-\dfrac{dL}{dw}$ の符号。
右上がりの坂 → ボールは 左へ($w$ を減らす)/ 右下がりの坂 → ボールは 右へ($w$ を増やす)。
📐 なぜ「傾きの符号と逆方向」に動かすと下がるのか — 言葉で詰める(クリックで展開)
「微分(傾き)」とは 「$w$ を1だけ右にずらすと $L$ がどれだけ増えるか」 を表す数字です。
- $\dfrac{dL}{dw} = +4$ → 「$w$ を $+1$ ずらすと $L$ が $+4$ 増える」
つまり 右に行くと損する。逆に 左 ($w$ を減らす) に行けば $L$ は $-4$ 減る。 - $\dfrac{dL}{dw} = -4$ → 「$w$ を $+1$ ずらすと $L$ が $-4$ 減る」
つまり 右 ($w$ を増やす) に行くと $L$ が減って得!
「微分の符号」は 「右に動いたときの損益サイン」 と読み替えてください。
損益が「+」なら左に逃げる、「−」ならそのまま右に進む — これが 「$-\dfrac{dL}{dw}$ の方向に動かす」 の本質です。
数式の上では「新しい $w$ = 古い $w$ − 学習率 × 傾き」だけ覚えれば、 符号が自動的に「ボールが転がる向き」に揃います。
まとめると、$w$ を $-\dfrac{dL}{dw}$ の方向に動かせば $L$ は必ず減る。これを式にすると:
ここで $\eta$(イータ)は 学習率(learning rate)。「1ステップでどれくらい動くか」を決める正の小さい数(典型的には 0.001〜0.1)。
「$-\dfrac{dL}{dw}$ の方向」を分解して理解する
この言い回し、最初は混乱しやすいので具体例で確認しましょう。
$L(w) = w^2$ という単純な放物線で実験:
例1:現在地が $w = 2$ のとき
$L(2) = 4$、$\dfrac{dL}{dw} = 2w = 4$(正、右上がり)
- 右へ動かす($w$ を増やす)→ $L$ が 増える(ダメ)
- 左へ動かす($w$ を減らす)→ $L$ が 減る(正解)
ここで $-\dfrac{dL}{dw} = -4$(負)。これは 「$w$ を減らす方向」 を意味する。
✅ 「$-\dfrac{dL}{dw}$ の方向 = $w$ を減らす方向 = $L$ が減る方向」が一致。
例2:現在地が $w = -2$ のとき
$L(-2) = 4$、$\dfrac{dL}{dw} = 2w = -4$(負、右下がり)
- 左へ動かす($w$ をさらに減らす)→ $L$ が 増える(ダメ)
- 右へ動かす($w$ を増やす)→ $L$ が 減る(正解)
ここで $-\dfrac{dL}{dw} = -(-4) = +4$(正)。これは 「$w$ を増やす方向」 を意味する。
✅ 「$-\dfrac{dL}{dw}$ の方向 = $w$ を増やす方向 = $L$ が減る方向」が一致。
両ケースで言えること
| 状況 | $\dfrac{dL}{dw}$ | $-\dfrac{dL}{dw}$ | $w$ を動かす方向 |
|---|---|---|---|
| 右上がり($w = 2$) | $+4$ | $-4$(負) | 減らす ← $L$が減る |
| 右下がり($w = -2$) | $-4$ | $+4$(正) | 増やす ← $L$が減る |
いつでも、$-\dfrac{dL}{dw}$ の方向に動けば $L$ が減る。これが勾配降下法の核心です。
式 $w_{\text{new}} = w_{\text{old}} - \eta \cdot \dfrac{dL}{dw}$ の意味
w_new = w_old - η × dL/dw
↑ ↑ ↑
現在地 学習率(ステップ幅)
(-勾配方向に動かす)
- $-\eta \times \dfrac{dL}{dw}$ は「$-\dfrac{dL}{dw}$ の方向に $\eta$ だけ動く」という意味
- これを 何百万回も繰り返す と、徐々に $L$ が小さい場所(=最適な $w$)に到達する
数値で更新を追ってみる
$L(w) = w^2$、現在地 $w=2$、学習率 $\eta=0.1$ で実際に動かしてみると:
| 回 | $w$ | $L = w^2$ | $\dfrac{dL}{dw} = 2w$ | 更新 |
|---|---|---|---|---|
| 1 | 2.00 | 4.00 | 4.00 | $2 - 0.1 \times 4 = 1.6$ |
| 2 | 1.60 | 2.56 | 3.20 | $1.6 - 0.1 \times 3.2 = 1.28$ |
| 3 | 1.28 | 1.64 | 2.56 | $1.28 - 0.1 \times 2.56 = 1.024$ |
| 4 | 1.02 | 1.05 | 2.05 | ... |
| ... | $\to 0$ | $\to 0$ | $\to 0$ | 最適点に収束! |
$L$ の値が 4 → 2.56 → 1.64 → 1.05 → ... → 0 と着実に減っていく。これが「学習」の正体。
💡 直感まとめ:
「$-$勾配の方向」 = 「$L$ が減る方向」 = 「下り坂の方向」。
微分が「上り方向」を教えてくれるので、マイナスを付ければ下り方向 になる。
これが「勾配降下法(Gradient Descent=下降)」と呼ばれる理由です。
3.2 インタラクティブデモ:勾配降下法を体感する
「学習率」と「開始位置」を変えて、勾配降下が どう谷を下りるか を観察してください。学習率が大きすぎると振動・発散、小さすぎると収束が遅い。
関数の形
💡 試してみる:
- 学習率 0.05 → 収束は遅いが安定
- 学習率 1.0 → 行き過ぎて振動
- 学習率 1.5 → 発散(無限大に)
- 「2つの谷」で開始位置を変えると、局所最適に捕まることがある
3.3 多次元への拡張 — 勾配ベクトル
実際のニューラルネットでは、$\theta$ は数百万次元のベクトル。 各パラメータごとに 偏微分 を取ります:
これを 勾配(gradient)、$\nabla L$(ナブラ L)と書きます。 勾配ベクトルは空間の各点で 「$L$ が最も急に増える方向」 を指し、その逆方向 $-\nabla L$ が 最も急に減る方向。
多次元の勾配降下法:
式の形は1次元と同じ。違いは「$\theta$ がベクトルなので、ベクトル全体を一気に更新する」点。
3.4 学習率の重要性
| 学習率 $\eta$ | 挙動 |
|---|---|
| 大きすぎる(例 1.0+) | 谷を飛び越えて振動・発散。学習が壊れる |
| 適切(例 0.001〜0.1) | 順調に谷を下りる |
| 小さすぎる(例 1e-7) | 進みが遅く、局所最適に捕まりやすい |
実用上は 学習率を学習中に変化させる のが普通(学習率スケジューリング)。最初は大きめで、徐々に小さくする。
4. 誤差逆伝播法 — 多層NNでの勾配計算
§3で「勾配さえあれば谷を下れる」と言いました。問題は、ニューラルネットは何層にも重なった巨大な合成関数であり、深いところにある重み(例えば1層目の $W_1$)が損失 $L$ にどう影響するかは、間に挟まる全部の層を経由するという点。
核心の問い: 「$W_1$ をちょっと動かすと、$h_1$ が変わり、それで $h_2$ が変わり、それで $y$ が変わり、それで $L$ が変わる」 — この 多段の影響の伝わり方 を、どうやって 全パラメータ分・効率的に 計算するか?
これを劇的に効率化するのが 誤差逆伝播法(backpropagation)。1986年に再発見された、深層学習の根本技術です。
4.1 連鎖律(Chain Rule)の復習
合成関数の微分公式。$y = f(g(x))$ のとき:
「外側の微分」×「内側の微分」。3段の合成 $y = f(g(h(x)))$ なら:
ニューラルネットは多層の合成関数なので、連鎖律がそのまま使えます。
4.2 多層NNでの勾配計算 — ドミノ倒しのイメージ
3層NN を例にします(入力 $x$ → 重み $W_1, W_2, W_3$ を通って出力 $y$):
h_1 = σ(W_1 · x + b_1) ← 中間層1の出力
h_2 = σ(W_2 · h_1 + b_2) ← 中間層2の出力
y = W_3 · h_2 + b_3 ← ネットの最終出力
L = (y - t)² ← 損失(出力と正解とのズレ)
まず「$W_1$ の勾配」は何を意味するか
$\dfrac{\partial L}{\partial W_1}$ は、ひと言で言うと 「1層目の重み $W_1$ をほんの少し動かしたら、最後の損失 $L$ はどれくらい変わるか」。
ところが $W_1$ は $L$ に 直接 影響しません。間に $h_1$、$h_2$、$y$ が挟まっている:
W_1 を動かす
↓ (これが h_1 を変える)
h_1 が変わる
↓ (これが h_2 を変える)
h_2 が変わる
↓ (これが y を変える)
y が変わる
↓ (これが L を変える)
L が変わる
連鎖律は、この「リレー」を 各段の影響率を掛け算する ことで効率的に計算する仕組み:
各項の意味を1つずつ言語化すると:
| 記号 | 位置 | 意味(〜が1動くと〜はどれくらい動く?) |
|---|---|---|
| ① $\dfrac{\partial L}{\partial y}$ | 出力層 | 「$y$ が1動くと $L$ がどれくらい動くか」 |
| ② $\dfrac{\partial y}{\partial h_2}$ | 出力層付近 | 「$h_2$ が1動くと $y$ がどれくらい動くか」 |
| ③ $\dfrac{\partial h_2}{\partial h_1}$ | 中間層 | 「$h_1$ が1動くと $h_2$ がどれくらい動くか」 |
| ④ $\dfrac{\partial h_1}{\partial W_1}$ | 入力層付近 | 「$W_1$ が1動くと $h_1$ がどれくらい動くか」 |
具体例で実感する(簡単な数字で)
仮に各「影響率」が次の値だったとします:
- ① $\dfrac{\partial L}{\partial y} = 2$($y$ が1増えると $L$ は2増える)
- ② $\dfrac{\partial y}{\partial h_2} = 3$($h_2$ が1増えると $y$ は3増える)
- ③ $\dfrac{\partial h_2}{\partial h_1} = 0.5$($h_1$ が1増えると $h_2$ は0.5増える)
- ④ $\dfrac{\partial h_1}{\partial W_1} = 4$($W_1$ が1増えると $h_1$ は4増える)
すると $W_1$ を1増やしたら、ドミノ倒しでこんな伝わり方をします:
つまり $\dfrac{\partial L}{\partial W_1} = 2 \times 3 \times 0.5 \times 4 = 12$。 連鎖律は 「各段の影響を順番に掛け算するだけ」 のシンプルな操作です。
🎮 インタラクティブデモ:ドミノを動かしてみる
各層の 影響率(傾き)を変えると、最終的な勾配 $\partial L/\partial W_1$ がどう変わるか体感できます:
影響率を調整
伝播の様子
☝️ どれかの影響率が 0 になると → 全体も 0(情報が消える)
☝️ どれかが 負 になると → 結果も逆向きに
なぜ「出力側から計算する」のか
「掛ける順番はどっちからでもいいのでは?」 — 数学的には可換ですが、計算の効率が桁違いに変わります。鍵は $\dfrac{\partial L}{\partial h_k}$ を共有して使い回せる こと。
実際の各層の重み $W_k$ の勾配を全部書き出すと:
∂L/∂W_3 = ∂L/∂y · ∂y/∂W_3
∂L/∂W_2 = ∂L/∂y · ∂y/∂h_2 · ∂h_2/∂W_2
↑─同じ
∂L/∂W_1 = ∂L/∂y · ∂y/∂h_2 · ∂h_2/∂h_1 · ∂h_1/∂W_1
↑─同じ ↑─────同じ
共通部分が大量にある。これを毎回ゼロから計算するのは無駄。 出力側から順に 「ここまで分の影響率」 を計算しておけば、各層の勾配は 1掛け算追加するだけ で求まる。
これが 誤差逆伝播法 の中心的アイデア=「出力で計算した $\dfrac{\partial L}{\partial y}$ を、層を逆順に1段ずつ拡張して伝播していく」。だから 逆 伝播と呼びます。
4.3 順伝播 + 逆伝播の流れ
学習の1ステップは、必ず 「左から右」→「右から左」 の2パス構成になります。
① Forward pass(順伝播):左から右へ
入力 $x$ を流して、各層の出力 $h_1, h_2, y$ と損失 $L$ を計算します。
x → [W_1] → h_1 → [W_2] → h_2 → [W_3] → y → L
入力 層1 中間 層2 中間 層3 出力 損失
ここで 各層の出力 ($h_1, h_2, y$) を覚えておく のがポイント。逆伝播で再利用します。
② Backward pass(逆伝播):右から左へ
出力側から順に「ここまでの影響率 $\dfrac{\partial L}{\partial h_k}$」を計算し、その都度 その層の重みの勾配 $\dfrac{\partial L}{\partial W_k}$ を取り出します。
💡 4ステップで全層の勾配が出る。各ステップでは前のステップの結果(影響率 $\dfrac{\partial L}{\partial h_k}$)に 1つの偏微分を掛けるだけ。
各ステップで何が起きているか、文章でも書くと:
- Step 1:出力層で $\dfrac{\partial L}{\partial y}$ を計算。これは損失関数を直接微分するだけ。MSEなら $2(y - t)$。
- Step 2:$\dfrac{\partial L}{\partial h_2} = \dfrac{\partial L}{\partial y} \cdot \dfrac{\partial y}{\partial h_2}$ を計算。ついでに $\dfrac{\partial L}{\partial W_3}$ が決定する。
- Step 3:$\dfrac{\partial L}{\partial h_1} = \dfrac{\partial L}{\partial h_2} \cdot \dfrac{\partial h_2}{\partial h_1}$ を計算。ついでに $\dfrac{\partial L}{\partial W_2}$ が決定する。
- Step 4:$\dfrac{\partial L}{\partial W_1} = \dfrac{\partial L}{\partial h_1} \cdot \dfrac{\partial h_1}{\partial W_1}$ を計算。これで 全層の重み勾配が完成。
各層で連鎖律を1ステップずつ適用するだけ。実装上は 行列演算の連続 に落ちます。
🎮 インタラクティブデモ:4ステップで逆伝播を進めてみる
「次へ」ボタンで 1ステップずつ逆伝播 を実行。各層の勾配がどう計算されるかを目で追えます。
4.4 何がすごいのか — 素朴な方法との比較
「順伝播の数倍で勾配が出る」と言われてもピンと来ないので、もし誤差逆伝播がなかったら どう計算するかを並べてみます。
素朴な方法:数値微分
微分の定義に立ち返ると:
つまり「$W_k$ を少しだけ動かして、$L$ がどれくらい変わったか測る」。これを 1つのパラメータごとに やるしかありません。
| 方法 | 勾配1回ぶんの計算 | 1050万パラメータでは |
|---|---|---|
| 素朴な数値微分 | 1パラメータごとに 順伝播1回 | 順伝播 1050万回 |
| 誤差逆伝播 | 全パラメータをまとめて | 順伝播1回 + 逆伝播1回(順伝播の数倍) |
どれくらい速くなるか — 桁で考える
仮に1回の順伝播が 10ms かかるとすると:
- 素朴な数値微分:10ms × 1050万回 = 約29時間(1データ点の勾配を出すだけで!)
- 誤差逆伝播:10ms × 2 = 約20ms(1データ点の勾配)
その差は 約500万倍。「29時間 vs 20ミリ秒」と並べると衝撃。
💡 誤差逆伝播の本質: 単に「速い」のではなく、「全パラメータの勾配を1パスでまとめて」 計算できるところがすごい。 これは「各層で計算した中間結果($\partial L / \partial h_k$)を使い回す」というアルゴリズム的工夫の賜物です。
なぜまとめて計算できるのか
§4.2 で見たように、各層の勾配は 共通部分 を大量に含んでいました:
∂L/∂W_3 = (∂L/∂y) · ∂y/∂W_3
∂L/∂W_2 = (∂L/∂y · ∂y/∂h_2) · ∂h_2/∂W_2
∂L/∂W_1 = (∂L/∂y · ∂y/∂h_2 · ∂h_2/∂h_1) · ∂h_1/∂W_1
└─────── 使い回せる部分 ───────┘
逆伝播は この共通部分(カッコ内)をメモリに置いて、1段ずつ右から左に伸ばしていく 戦略。 数値微分は毎回ゼロからやり直すので、同じ計算を1050万回繰り返す羽目になります。
1050万パラメータでも、1データ点あたり数十ms程度で勾配が出る。 これがなければ深層学習はそもそも実用化されていません。
💡 歴史的補足: 誤差逆伝播法は 1986年に Rumelhart, Hinton, Williams によって再発見 され、ニューラルネット研究に火がついた。 しかし当時はGPUもデータも足りず、本格的な開花は2012年以降に持ち越し。
5. 実用上の工夫
純粋な勾配降下法だけでは、現代のディープラーニングは動きません。実用上はいくつかの工夫が必須です。
5.1 ミニバッチ勾配降下法
問題:全データで勾配計算するのは重すぎる
§2.3 で見たように、本当は損失は 全データの平均:
勾配 $\nabla L_{\text{total}}$ も「全データに対する勾配の平均」になります。 これを毎ステップ計算するとどうなるか — 具体例で見てみましょう:
NNUEの学習データ:約50億局面。1局面の勾配計算に 0.01ms かかるとして、1ステップ=50億 × 0.01ms ≈ 14時間。
これを 数十万ステップ 回すと…数百年。絶対に終わらない。
解決策:データから少数だけ抽出して近似する
全データの勾配 ≒ ランダムに選んだ少数データの勾配の平均、で近似してしまおう、というアイデア。
ランダム抽出した $B$ 個のデータの平均勾配 ≒ 全データの平均勾配(統計的に大数の法則で成立)。 これを ミニバッチ勾配降下法(Mini-batch SGD)と呼びます。
3つのモードを比較で理解する
データの使い方には3つの極端があります:
| 方式 | 1ステップで使うデータ | 1ステップの計算 | 軌跡の特徴 |
|---|---|---|---|
| Batch GD(バッチ勾配降下) | 全データ N 個 | 重い(NNUEなら不可能) | 滑らか、正確、超遅い |
| SGD(確率的勾配降下) | 1個だけ | 軽い | ジグザグ、ノイジー、収束しにくい |
| ミニバッチ SGD | $B$ 個(数百〜数万) | 軽い + GPUで並列化 | 中間。実用的なバランス |
「軌跡」を絵で見ると違いが一目でわかります。下の図は損失の等高線(同じ高さの線)の上を歩く様子:
💡 読み方:
同心の楕円は 損失の「等高線」(同じ高さ)。中心の緑点が最小点。
① Batch はまっすぐ降りるが毎回が超重い/② SGD は1個ずつなのでノイジー/③ ミニバッチ はその中間で実用的。
バッチサイズ・イテレーション・エポックの違い
学習を回すうえで、この3つの用語の関係をはっきりさせておきます:
💡 覚え方:「バッチサイズ × イテレーション数 = 1エポックぶんのデータ量」。
例:1000サイズで10回イテレーション → 10000データ全部見た → 1エポック完了。
通常は数十〜数百エポック回します。
🎮 インタラクティブデモ:バッチサイズを動かして軌跡を見る
「バッチサイズ」スライダーを動かすと、勾配降下法の 軌跡(ノイズの量)が劇的に変わる のを目で確認できます:
設定
- B=1(SGD):軌跡がジグザグ激しい
- B=50〜200:そこそこ滑らか、実用的
- B=1000(Batch):ほぼ直線、でも各ステップ重い
損失地形と軌跡
ステップ数:0 / 現在の損失:—
5.2 オプティマイザの進化
純粋な勾配降下法には、2つの困りごと があります:
- 細長い谷で振動する:勾配の急な方向では行ったり来たり、緩やかな方向では進みが遅い
- パラメータごとに「進みやすさ」が違う:同じ学習率を全パラメータに使うと、ある方向は急ぎすぎ・ある方向は遅すぎ、になる
これを改善する オプティマイザ が、次のように発明されてきました:
🚀 Momentum
過去の勾配の 慣性 を持たせる。谷の振動を抑え、平坦地でも進む。
🚀 コラム:Momentum をボールの慣性で理解する(クリックで展開)
① 何が問題なのか — 細長い谷の振動
損失の地形が 細長い谷(横方向は急峻、縦方向は緩やか)だと、純粋なSGDは横方向に行ったり来たり振動し、縦方向(=最小点に向かう本筋)はほとんど進みません:
② ボールの慣性メタファー
純粋なSGDは 「毎ステップ、その瞬間の勾配の方向に瞬間移動する人」。前のステップで何をしたかは無視。
Momentum は 「斜面を転がる重いボール」。前のステップで動いていた方向の慣性を持ったまま、今の勾配で速度を少し修正する:
- 毎回同じ向きに引っ張られる方向(細長い谷の縦方向)→ 慣性で どんどん加速 → 速く進む
- 毎回逆向きに引っ張られる方向(横方向のジグザグ)→ 慣性同士が打ち消し合う → 振動が消える
③ 数式を分解
更新式は2行。$v$ は「速度」を覚えておく変数。
- $\beta$(典型値 0.9):慣性の強さ。1に近いほど過去をよく覚えている
- $v$:過去の勾配たちの「加重平均」。同じ方向に勾配が続けば $v$ は大きく育ち、向きが揺れる方向は0付近に収まる
④ 具体例で実感
$\beta = 0.9$、各ステップの勾配が $(\nabla L)_t = 1$(毎回同じ方向)のとき:
v_0 = 0
v_1 = 0.9 × 0 + 1 = 1 ← ステップ1
v_2 = 0.9 × 1 + 1 = 1.9 ← 速度が大きく育つ
v_3 = 0.9 × 1.9 + 1 = 2.71
v_4 = 0.9 × 2.71+ 1 = 3.44
... → 最終的に v ≈ 10 まで加速(= 同じ向き勾配の累積効果)
逆に勾配が $+1, -1, +1, -1, \ldots$ と振動すると:
v_1 = 1
v_2 = 0.9 × 1 − 1 = −0.1 ← 大きく相殺
v_3 = 0.9 × −0.1+1 = 0.91
... → 振動方向の v はほぼ 0 付近で抑制される
💡 1行まとめ: Momentum は 「勾配の指数移動平均」。一貫した向きは加速、振動する向きは抑制。
📊 RMSProp
パラメータごとに学習率を自動調整。頻繁に大きな勾配が来るところは学習率を下げる。
📊 コラム:RMSProp を「パラメータごとに歩幅を変える」で理解する(クリックで展開)
① 何が問題なのか — パラメータごとの「進みやすさ」
全パラメータに同じ学習率 $\eta$ を使うと、こんな不公平が起きます:
- パラメータ $\theta_A$:勾配が毎回 $\nabla L \approx 10$(急峻)→ 学習率 0.01 でも歩幅が 0.1 で 大きすぎ=振動
- パラメータ $\theta_B$:勾配が毎回 $\nabla L \approx 0.001$(緩やか)→ 学習率 0.01 でも歩幅が 0.00001 で 小さすぎ=動かない
1つの学習率では 「Aを抑える」と「Bが止まる」、「Bを動かす」と「Aが暴れる」 のジレンマ。
② 解決:パラメータごとの「過去の勾配の大きさ」を覚えて、それで割る
各パラメータについて、勾配の2乗の指数移動平均 $s$ を別々に持ちます:
そして更新時は $\sqrt{s}$ で割る:
③ 何が起きるか
- 勾配が大きいパラメータ:$s$ が育つ → $\sqrt{s}$ が大きい → 実効学習率 $\eta/\sqrt{s}$ が小さくなる=歩幅を縮める
- 勾配が小さいパラメータ:$s$ が小さい → 実効学習率が大きくなる=歩幅を伸ばす
つまり 「パラメータごとに、それまでの勾配の大きさに応じて歩幅を自動調整」。
④ 具体例で実感
$\beta = 0.9$、$\eta = 0.1$ として:
| 勾配 $\nabla L$ | $s$ の蓄積(収束時) | $\sqrt{s}$ | 実効歩幅 $\eta\nabla L / \sqrt{s}$ | |
|---|---|---|---|---|
| $\theta_A$(急峻) | 10 | 100 | 10 | $0.1 \times 10 / 10 = 0.1$ |
| $\theta_B$(緩やか) | 0.001 | $10^{-6}$ | $10^{-3}$ | $0.1 \times 0.001 / 0.001 = 0.1$ |
勾配の絶対値が違っても、実効歩幅がほぼ同じに揃う。これがRMSPropの魔法です。
⑤ 「RMS」の意味
Root Mean Square = 二乗 → 平均 → 平方根、の順で計算する量。 勾配の「大きさの典型値」を測るのに使うので RMSProp(Root Mean Square Propagation)と名付けられました。
💡 1行まとめ: RMSProp は 「パラメータごとに、過去の勾配の大きさで割って歩幅を揃える」 オプティマイザ。 急なところは慎重に、緩いところは大胆に。
⚡ Adam(現代の主流)
Momentum + RMSProp のハイブリッド。実用上ほぼデフォルト。 ChatGPTやNNUEの学習でも使われている。
⚡ コラム:Adam = Momentum + RMSProp の合体技(クリックで展開)
Adam(Adaptive Moment Estimation)は2014年に発表され、瞬く間に 事実上のデフォルト になりました。 ChatGPT、Stable Diffusion、NNUE — どれもAdam(またはその派生)で学習されています。
① 数式を3つに分解
m ← β₁·m + (1−β₁)·∇L ← Momentum の役割(1次モーメント = 平均)
v ← β₂·v + (1−β₂)·(∇L)² ← RMSProp の役割(2次モーメント = 分散)
θ ← θ − η · m / (√v + ε) ← 両方を組み合わせて更新
- $m$:勾配の指数移動平均(向き)。Momentum と同じ役割で「慣性」を生む
- $v$:勾配の二乗の指数移動平均(大きさ)。RMSProp と同じ役割で「歩幅調整」
- $m / \sqrt{v}$:「向きの慣性」を「大きさ」で正規化 → 安定した方向に揃った歩幅で進む
② いいとこ取りの利点
- Momentum 単体:振動は抑えるが、急峻方向では暴れがち
- RMSProp 単体:歩幅は揃うが、慣性がないので平坦地で進まない
- Adam:両方の弱点を同時に克服
③ デフォルトハイパーパラメータ
- $\eta = 0.001$(学習率)
- $\beta_1 = 0.9$(Momentumの慣性)
- $\beta_2 = 0.999$(RMSPropの平滑化)
- $\varepsilon = 10^{-8}$(ゼロ割防止)
多くの場合、このまま使うだけでまともに学習できてしまう。これがAdamの偉大さです。
💡 1行まとめ: Adam は 「勾配の向き(=Momentum)と大きさ(=RMSProp)の両方を覚えながら歩く」 ハイブリッドオプティマイザ。 現代深層学習のほぼ標準装備。
🎮 インタラクティブデモ:4つのオプティマイザを並べて比較
細長い谷の損失地形で、SGD / Momentum / RMSProp / Adam の4つを並列に走らせて軌跡を比較。 「同じスタート地点・同じ学習率」でも軌跡が劇的に違うのが目で見て分かります:
設定
凡例
- 谷を細くする → SGDが大暴れ、Momentumは滑らか
- Adamが最速で収束することが多い
損失地形と4つの軌跡
| 手法 | ステップ数 | 現在の損失 |
|---|---|---|
| ● SGD | 0 | — |
| ● Momentum | 0 | — |
| ● RMSProp | 0 | — |
| ● Adam | 0 | — |
5.3 過学習と汎化
学習の目的は 「学習データで精度を出すこと」ではなく、「未知データに対しても正しく予測すること」。これを 汎化(generalization) と呼びます。
⚠️ 過学習(overfitting)
学習データに過剰適応して、未知データへの予測精度が落ちる現象。 深いNNほど起きやすい。パラメータが多すぎて、訓練データを「丸暗記」してしまう状態。
5.4 過学習対策
- 訓練/検証/テスト分割:データを3分割。検証データで汎化を監視、テストデータで最終評価
- 早期停止(Early Stopping):検証損失が悪化し始めたら学習を止める
- L2正則化(重み減衰):パラメータの大きさにペナルティ $L \leftarrow L + \lambda \|\theta\|^2$
- Dropout:訓練時にランダムにニューロンを無効化、特定パスへの依存を防ぐ
- データ拡張:訓練データを人工的に増やす(画像なら左右反転、回転など)
まとめ
- 学習とは「損失関数 $L(\theta)$ を最小化する $\theta$ を見つける最適化問題」
- 損失関数は予測と正解のズレを数値化(MSE、交差エントロピー)
- 勾配降下法:勾配 $-\nabla L$ の方向にパラメータを少しずつ動かす
- 誤差逆伝播法:連鎖律を使って、出力側から入力側へ勾配を効率的に計算
- ミニバッチ + Adam:実用上の標準的な学習プロセス
- 過学習対策:早期停止、L2正則化、Dropout、データ拡張など
💡 核心まとめ: ニューラルネットの学習は 「巨大な凸凹地形を、勾配を頼りに歩いて、最も低い谷を探す」 行為。 それを高次元で、しかも自動で、しかも効率よくやる仕組みが揃ったから、現代の深層学習が成立しています。
次の章
ここまでで 「ネットの中身」と「学習の仕組み」 の基礎が揃いました。 次は、用途別に進化した深いNNの代表アーキテクチャ CNN(画像) と Transformer(自然言語) を見ていきます。 畳み込みカーネルが画像をスライドする様子と、Self-Attentionで単語間の関係が見えるインタラクティブデモ付きです。