第 3 章 微積分¶
まえがき — 変化を測るレンズ¶
走っている車の「今この瞬間の速さ」って、どうやって測るの? 山の斜面の「面積」って、曲がっていてもどうやって求めるの? AI はどうやって膨大なパラメータを「自動で調整」しているの?
これらの質問にすべて答えを与えるのが 微積分 (calculus) です。
微積分は「変化と累積を扱う数学」。瞬間の動き(微分)と、その積み重ね(積分)の 2 つで世界を捉えます。物理の運動方程式、グラフィックスの曲線、機械学習の学習アルゴリズム――すべての裏側で微積分が動いています。
🎯 章の目標
- 微分が「瞬間の変化率」「接線の傾き」だと幾何的に分かる
- 積分が「面積」「累積量」だと分かる
- 連鎖律で複雑な関数の微分ができる
- 多変数の勾配・ヘッセ行列という機械学習の必須道具を扱える
- 勾配降下法で AI の学習がなぜ動くか説明できる
中学・高校の数学(関数のグラフ、極限の感覚)があれば十分追いつけます。
3.1 なぜ CS で微積分?¶
「微積分は物理の道具では?」と思うかもしれません。実は CS でも至るところに登場します。
| 場面 | 微積分の使い方 |
|---|---|
| 機械学習 | 損失関数を最小化(勾配降下法) |
| ニューラルネット | 誤差逆伝播 = 連鎖律 |
| グラフィックス | 曲線・曲面を滑らかにつなぐ(ベジエ曲線、スプライン) |
| シミュレーション | 微分方程式を数値で解く |
| 信号処理 | フーリエ変換は積分 |
| 確率論 | 連続分布の密度・期待値は積分 |
| 暗号 | 楕円曲線の群法則は微分幾何 |
| 自動運転 | 車両の運動学は微分方程式 |
特に ChatGPT や画像生成 AI を支える勾配降下法は、微積分そのもの。これが分かれば、AI が「なぜ学習できるのか」原理から理解できます。
3.2 極限と連続¶
3.2.1 極限とは¶
「\(x\) が \(a\) にどんどん近づくとき、\(f(x)\) がどこに近づくか」を \(\lim_{x \to a} f(x)\) と書きます。
例: - \(\lim_{x \to 2} (x^2 + 1) = 5\) - \(\lim_{x \to 0} \frac{\sin x}{x} = 1\)(高校の三角関数で習う有名な極限)
数列の極限も同じ: - \(\lim_{n \to \infty} \frac{1}{n} = 0\) - \(\lim_{n \to \infty} \left(1 + \frac{1}{n}\right)^n = e \approx 2.718\)(自然対数の底)
3.2.2 厳密な定義 (ε-δ)¶
「\(x\) を \(a\) に十分近づければ、\(f(x)\) を \(L\) にいくらでも近づけられる」を厳密に言うと:
「どんな \(\varepsilon\)(許容誤差)が来ても、それより誤差を小さくできる \(\delta\)(近さ)を返せる」――これが厳密な極限の意味です。
最初は難しく見えますが、後の証明で何度も使います。プログラム検証の停止性議論にも近い構造です。
3.2.3 連続¶
関数 \(f\) が点 \(a\) で 連続 ⇔ \(\lim_{x \to a} f(x) = f(a)\)。
直感的には「グラフが切れていない」。でも厳密には ε-δ の定義が必要。
不連続関数の例: $\(f(x) = \begin{cases} 1 & (x \geq 0) \\ 0 & (x < 0) \end{cases}\)$ \(x = 0\) で「ジャンプ」する。
3.3 微分 — 瞬間を捉える¶
3.3.1 動機: 「瞬間の速さ」¶
時刻 \(t\) における車の位置を \(f(t)\) とします。区間 \([t, t+h]\) の 平均速度 は: $\(\frac{f(t+h) - f(t)}{h}\)$
これは中学数学。「瞬間 の速度」は、\(h\) をどんどん小さくした極限: $\(f'(t) = \lim_{h \to 0} \frac{f(t+h) - f(t)}{h}\)$
これが 微分 (derivative) の定義。「ある瞬間における関数の変化率」。
3.3.2 接線の傾き¶
幾何的には「\(x = t\) における接線の傾き」。
「接線がどれくらい急か」がその瞬間の変化率。スキー場の斜面の傾きと同じ感覚です。
平均変化率の極限が、その点での接線の傾き。これがニュートンとライプニッツの大発見でした (17 世紀)。
3.3.3 微分公式(最低限これだけ)¶
| \(f(x)\) | \(f'(x)\) |
|---|---|
| \(c\) (定数) | \(0\) |
| \(x^n\) | \(n x^{n-1}\) |
| \(\sin x\) | \(\cos x\) |
| \(\cos x\) | \(-\sin x\) |
| \(e^x\) | \(e^x\)(自分自身!) |
| \(\ln x\) | \(1/x\) |
| \(a^x\) | \(a^x \ln a\) |
3.3.4 計算ルール¶
- 和の微分: \((f + g)' = f' + g'\)
- 積の法則: \((fg)' = f'g + fg'\)
- 商の法則: \(\left(\dfrac{f}{g}\right)' = \dfrac{f'g - fg'}{g^2}\)
- 連鎖律 (chain rule): \(\dfrac{d}{dx} f(g(x)) = f'(g(x)) \cdot g'(x)\)
連鎖律は AI の心臓。必ず腑に落とすこと。
3.3.5 連鎖律 = 「玉ねぎを剥く」¶
\(f(g(x))\) は「外側 \(f\) と内側 \(g\) の合成」。微分は外側を先に微分し、続けて内側を微分して掛ける。
例: \(h(x) = \sin(x^2)\) を微分。 - 外側: \(\sin u\) → \(\cos u\) (u は内側) - 内側: \(x^2\) → \(2x\) - 連鎖律: \(h'(x) = \cos(x^2) \cdot 2x = 2x\cos(x^2)\)
3 重・4 重の入れ子も同じ要領で展開できます。
なぜ連鎖律が AI の心臓か¶
ニューラルネットは関数の合成: \(\mathbf{y} = f_n(f_{n-1}(\cdots f_1(\mathbf{x})\cdots))\)。これを学習するには損失 \(L\) を \(\mathbf{x}\) や各層のパラメータで微分する必要があります。
連鎖律で「バケツリレー的に」勾配を伝えていけるからこそ、何百層のネットでも勾配計算が線形時間で済みます。これが 誤差逆伝播 (backpropagation) の正体です。
graph LR
X[x 入力] -->|順伝播| H1[層1]
H1 -->|順伝播| H2[層2]
H2 -->|順伝播| H3[層3]
H3 -->|順伝播| Y[出力]
Y -->|順伝播| L[損失 L]
L -.->|逆伝播 ∂L/∂y| Y
Y -.->|∂L/∂h3| H3
H3 -.->|∂L/∂h2| H2
H2 -.->|∂L/∂h1| H1
H1 -.->|∂L/∂x| X
style L fill:#ffeb3b
style X fill:#c5e1a5
実線が順伝播(予測を計算)、点線が逆伝播(勾配を計算)。連鎖律が成立しなければ、ChatGPT も画像生成 AI も学習できません。
3.3.6 平均値の定理¶
\(f\) が \([a, b]\) で連続、\((a, b)\) で微分可能なら、ある \(c\) で $\(f'(c) = \frac{f(b) - f(a)}{b - a}\)$
「ある瞬間に必ず平均速度ちょうどの瞬間速度になる」という主張。直感的にも自然。
応用: アルゴリズムの正当性証明、ニューラルネットの収束証明、計算誤差の評価。
3.4 積分 — 累積を捉える¶
3.4.1 動機: 「曲線下の面積」¶
関数 \(f(x)\) の \(a\) から \(b\) までの曲線下面積:
長方形の幅をどんどん細くした極限で面積を求めるのが リーマン積分:
3.4.2 微積分学の基本定理¶
「微分と積分は逆操作」という驚くべき事実 (17 世紀の発見)。
つまり積分は「原始関数を見つけて両端の差を取る」だけで計算できる。これが微積分の革命でした。
3.4.3 主要技法¶
置換積分¶
\(x = g(t)\) と置き換える。
例: \(\int 2x \cdot e^{x^2} dx\) を \(u = x^2\) で置換。\(du = 2x\,dx\) なので \(\int e^u du = e^u = e^{x^2}\)。
部分積分¶
例: \(\int x e^x dx\)。\(u = x\), \(dv = e^x dx\) で \(du = dx\), \(v = e^x\)。 $\(\int x e^x dx = x e^x - \int e^x dx = x e^x - e^x + C = (x-1)e^x + C\)$
3.4.4 数値積分¶
紙で解けない積分は コンピュータで近似 します。
- 矩形近似(簡単、精度悪い)
- 台形公式
- シンプソン則
- ガウス求積
機械学習や物理シミュレーションで欠かせない技術。
3.5 級数とテイラー展開¶
3.5.1 級数 = 無限和¶
\(\sum_{n=1}^\infty a_n\) が収束するか。
代表例: - 等比級数: \(\sum_{n=0}^\infty r^n = \frac{1}{1-r}\) (\(|r| < 1\)) - 調和級数: \(\sum_{n=1}^\infty \frac{1}{n}\) は 発散 する(驚き) - \(\sum_{n=1}^\infty \frac{1}{n^2} = \frac{\pi^2}{6}\) (バーゼル問題、オイラーが解いた)
3.5.2 テイラー展開¶
「滑らかな関数を多項式で近似」する魔法: $\(f(x) \approx f(a) + f'(a)(x-a) + \frac{f''(a)}{2!}(x-a)^2 + \frac{f'''(a)}{3!}(x-a)^3 + \cdots\)$
例: \(e^x\) を \(a = 0\) で展開: $\(e^x = 1 + x + \frac{x^2}{2!} + \frac{x^3}{3!} + \cdots\)$
これで電卓の exp(x) ボタンの中身が分かります。コンピュータは三角関数も対数も指数も、テイラー展開(または類似手法)で計算しています。
3.5.3 ニュートン法¶
\(f(x) = 0\) の解を反復で求める。
接線で関数を近似し、接線の零点を次の近似解とする。
応用: 平方根の高速計算、最適化、機械学習の Newton-Raphson 法。
3.6 多変数微分¶
3.6.1 偏微分¶
複数変数の関数 \(f(x, y)\) について、片方を固定して微分:
例: \(f(x, y) = x^2 y + 3y\) - \(\partial f / \partial x = 2xy\) - \(\partial f / \partial y = x^2 + 3\)
「他の変数は今は触らない」という気持ちで普通に微分。
3.6.2 勾配¶
すべての偏微分を並べたベクトル: $\(\nabla f = \left(\frac{\partial f}{\partial x_1}, \frac{\partial f}{\partial x_2}, \ldots, \frac{\partial f}{\partial x_n}\right)\)$
幾何的には「\(f\) がもっとも急に増加する方向」。
3.6.3 ヘッセ行列¶
2 階偏微分を並べた対称行列: $\(H_{ij} = \frac{\partial^2 f}{\partial x_i \partial x_j}\)$
固有値で「極小 / 極大 / 鞍点」を判定: - すべて正 → 極小(お椀型) - すべて負 → 極大(山型) - 混在 → 鞍点(峠型)
最適化、物理シミュレーション、ニューラルネットの 2 次最適化で必須。
3.6.4 多変数のテイラー展開¶
「ある点まわりで関数を 2 次関数で近似」する。ニュートン法・最適化のすべてがここから派生します。
3.7 最適化と勾配降下法¶
3.7.1 凸関数 — 「お椀型」のありがたさ¶
任意の \(0 \leq t \leq 1\) で: $\(f(t\mathbf{x} + (1-t)\mathbf{y}) \leq tf(\mathbf{x}) + (1-t)f(\mathbf{y})\)$
直線で結んだ点が、関数の値以上にある。
凸関数は「極小 = 大域最小」。線形回帰の二乗誤差・ロジスティック回帰の対数尤度・SVM のヒンジ損失はすべて凸。
3.7.2 勾配降下法 (Gradient Descent)¶
「関数を最小化したい? 勾配の逆方向に進めばよい」
\(\eta\) は 学習率 (learning rate)。一歩の大きさ。
f(x)
^
|●
| \
| ●
| \
| ●
| \
| ● ← 1 ステップごとに下る
| \
| ●
| \_●__●__● ← 谷 (最小値) に収束
+─────────────────────────→ x
O
「山を下る」というイメージそのもの。傾きが急なほど大きく下り、平坦になったら停止。
例: \(f(x) = x^2\) で勾配降下¶
\(\nabla f = 2x\), \(\eta = 0.1\), \(x_0 = 5\) から始める: - \(x_1 = 5 - 0.1 \cdot 10 = 4\) - \(x_2 = 4 - 0.1 \cdot 8 = 3.2\) - \(x_3 = 3.2 - 0.1 \cdot 6.4 = 2.56\) - ... 0 へ収束
学習率の調整¶
- 大きすぎると発散
- 小さすぎると遅い
- 適応的学習率: AdaGrad, RMSProp, Adam(モダン手法)
3.7.3 確率的勾配降下法 (SGD)¶
データが何百万件あるとき、全部使って勾配を計算するのは重い。ランダムなミニバッチ で勾配を近似する。これがディープラーニングの主流。
3.7.4 ニュートン法(最適化版)¶
ヘッセ逆行列を使う。収束が速いが、\(H^{-1}\) の計算が重いのが欠点。
3.8 微分方程式入門¶
3.8.1 例: 人口モデル¶
「人口は今の人口に比例して増える」を式に: $\(\frac{dP}{dt} = kP\)$
解: \(P(t) = P_0 e^{kt}\)
これが指数関数的成長の正体。
3.8.2 解法¶
- 変数分離法: \(dy/dx = g(x) h(y)\)
- 線形 1 階: 積分因子法
- 数値解法: オイラー法、ルンゲ・クッタ法
3.8.3 応用¶
- 物理シミュレーション(運動方程式)
- 強化学習の連続時間版
- 生体モデル(神経)
- 暗号の楕円曲線
- ディープラーニング (Neural ODE)
3.9 連鎖律と自動微分¶
3.9.1 自動微分¶
PyTorch や JAX が「勝手に」勾配を計算してくれるのは魔法ではなく、プログラムの実行履歴をたどって連鎖律を機械的に適用 しているだけ。
import torch
x = torch.tensor(2.0, requires_grad=True)
y = x**2 + 3*x + 1
y.backward()
print(x.grad) # 7.0 (= 2x + 3 at x=2)
これがニューラルネット学習の正体。手で連鎖律を書く必要は実務ではほぼありません。しかし原理を知らないと、勾配が消える / 爆発するなどの問題に対応できません。
3.9.2 グラフベースの計算¶
計算を 計算グラフ で表現し、ノードごとに微分を計算する。
各エッジで「上流からの勾配」と「ローカル微分」を掛けて伝播。これが backprop の実装。
3.10 数値計算上の注意¶
3.10.1 浮動小数点の罠¶
- \(1 + 10^{-16} = 1\) になる(精度の限界)
- 大きい数の引き算で 桁落ち
- \(\log(1+x)\) は \(x\) が小さいと精度が落ちる →
log1p(x)を使う - ソフトマックスでオーバーフロー →
log-sum-expトリック
3.10.2 勾配の問題¶
- 勾配消失: 深いネットで 0 に近づきすぎる → 残差接続、ReLU で対処
- 勾配爆発: 発散する → 勾配クリッピング
3.11 演習問題¶
- \(f(x) = x^3 - 6x^2 + 9x + 2\) の極値を求めよ。
- \(\int_0^1 x e^x dx\) を部分積分で計算せよ。
- \(\sin x\) のテイラー展開を \(x = 0\) まわりで 5 次まで求めよ。
- \(f(x, y) = x^2 + xy + y^2\) の勾配・ヘッセ行列を求め、\((0, 0)\) での極値判定をせよ。
- 平均値の定理を用いて、\(|\sin a - \sin b| \leq |a - b|\) を示せ。
- 学習率 \(\eta = 0.1\) で \(f(x) = x^2\) に勾配降下法を適用し、\(x_0 = 5\) から 5 ステップの軌跡を計算せよ。
- ニュートン法で \(\sqrt 2\) を求める漸化式を書き、\(x_0 = 1\) から 3 ステップ計算せよ。
- ニューラルネットの簡単な合成 \(L = (y - f(g(x)))^2\) について連鎖律で \(\partial L / \partial x\) を求めよ。
- 微分方程式 \(dy/dx = -2y\), \(y(0) = 1\) を解け。
- PyTorch で \(f(x, y) = x^2 y + \sin(xy)\) の \((x=1, y=2)\) における勾配をコードで求めよ。
3.12 この章のまとめ¶
微積分は「変化と累積」を捉える数学。
| 概念 | 意味 | CS での出番 |
|---|---|---|
| 微分 | 瞬間の変化率 | 機械学習、最適化 |
| 積分 | 累積、面積 | 確率、信号処理 |
| 連鎖律 | 合成関数の微分 | 誤差逆伝播 |
| 勾配 | 最も急な増加方向 | 勾配降下法 |
| ヘッセ行列 | 2 階導関数 | 極値判定、Newton 法 |
| 凸性 | お椀型の関数 | 学習が収束する保証 |
| テイラー展開 | 多項式近似 | 数値計算、最適化 |
「ChatGPT がなぜ学習できるか」の答えは、突き詰めれば連鎖律 + 勾配降下法。本章を理解した瞬間、AI は「魔法」ではなくなります。
3.13 次に読むもの¶
- 動画: 3Blue1Brown『Essence of Calculus』
- 教科書:
- Stewart, Calculus
- 高木貞治『解析概論』(古典)
- Spivak, Calculus(理論派)
- 応用:
- Boyd & Vandenberghe, Convex Optimization
- Nocedal & Wright, Numerical Optimization
- AI 関連:
- Goodfellow et al., Deep Learning
🌟 メッセージ 微積分は「公式を覚える科目」ではなく「変化を捉えるレンズ」。グラフを描き、極限を直感的に追い、連鎖律を手で展開する。これを繰り返せば、AI 論文の数式が突然「読める」ようになります。