コンテンツにスキップ

第 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\) にいくらでも近づけられる」を厳密に言うと:

\[\forall \varepsilon > 0,\, \exists \delta > 0:\, 0 < |x - a| < \delta \Rightarrow |f(x) - L| < \varepsilon\]

どんな \(\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\) における接線の傾き」。

   y
   ^                       /
   |                ● ____/  ← 接線 (傾き = f'(t))
   |             /(t, f(t))
   |          /
   |       /
   |    /
   | /
   +─────────────────→ x
   O                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\) までの曲線下面積:

y = f(x)
    ___
   /   \____
  /         \
 /■■■■■■■■■■■\
+──────────────→ x
 a              b

長方形の幅をどんどん細くした極限で面積を求めるのが リーマン積分:

\[\int_a^b f(x)\,dx = \lim_{n \to \infty} \sum_{i=1}^n f(x_i) \Delta x\]

3.4.2 微積分学の基本定理

微分と積分は逆操作」という驚くべき事実 (17 世紀の発見)。

\[\int_a^b f'(x)\,dx = f(b) - f(a)\]

つまり積分は「原始関数を見つけて両端の差を取る」だけで計算できる。これが微積分の革命でした。

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 u\,dv = uv - \int v\,du\]

例: \(\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\) の解を反復で求める。

\[x_{n+1} = x_n - \frac{f(x_n)}{f'(x_n)}\]

接線で関数を近似し、接線の零点を次の近似解とする。

応用: 平方根の高速計算、最適化、機械学習の Newton-Raphson 法。


3.6 多変数微分

3.6.1 偏微分

複数変数の関数 \(f(x, y)\) について、片方を固定して微分:

\[\frac{\partial f}{\partial x} = \lim_{h \to 0} \frac{f(x+h, y) - f(x, y)}{h}\]

例: \(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\) がもっとも急に増加する方向」。

標高 f(x, y) の地図:

   ////  ← 高い
  /高い/
 /    /    ← 勾配 ∇f はここから
/    /       「最も急な上り」を指す
低い

3.6.3 ヘッセ行列

2 階偏微分を並べた対称行列: $\(H_{ij} = \frac{\partial^2 f}{\partial x_i \partial x_j}\)$

固有値で「極小 / 極大 / 鞍点」を判定: - すべて正 → 極小(お椀型) - すべて負 → 極大(山型) - 混在 → 鞍点(峠型)

最適化、物理シミュレーション、ニューラルネットの 2 次最適化で必須。

3.6.4 多変数のテイラー展開

\[f(\mathbf{x}+\mathbf{h}) \approx f(\mathbf{x}) + \nabla f^T \mathbf{h} + \frac{1}{2}\mathbf{h}^T H \mathbf{h}\]

ある点まわりで関数を 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})\)$

直線で結んだ点が、関数の値以上にある。

凸関数のグラフ:

  y                  __
  |          __     /
  |        /  \  /
  |      /    \/  
  |    /       \
  |  /           
  +─────────→ x

接線が常にグラフの下にある = 凸

凸関数は「極小 = 大域最小」。線形回帰の二乗誤差・ロジスティック回帰の対数尤度・SVM のヒンジ損失はすべて凸。

3.7.2 勾配降下法 (Gradient Descent)

関数を最小化したい? 勾配の逆方向に進めばよい

\[\mathbf{x}_{k+1} = \mathbf{x}_k - \eta \nabla f(\mathbf{x}_k)\]

\(\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 ニュートン法(最適化版)

\[\mathbf{x}_{k+1} = \mathbf{x}_k - H^{-1} \nabla f\]

ヘッセ逆行列を使う。収束が速いが、\(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 グラフベースの計算

計算を 計算グラフ で表現し、ノードごとに微分を計算する。

x ─→ □^2 ─→ + ─→ y
       3x ─↗

各エッジで「上流からの勾配」と「ローカル微分」を掛けて伝播。これが 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 演習問題

  1. \(f(x) = x^3 - 6x^2 + 9x + 2\) の極値を求めよ。
  2. \(\int_0^1 x e^x dx\) を部分積分で計算せよ。
  3. \(\sin x\) のテイラー展開を \(x = 0\) まわりで 5 次まで求めよ。
  4. \(f(x, y) = x^2 + xy + y^2\) の勾配・ヘッセ行列を求め、\((0, 0)\) での極値判定をせよ。
  5. 平均値の定理を用いて、\(|\sin a - \sin b| \leq |a - b|\) を示せ。
  6. 学習率 \(\eta = 0.1\)\(f(x) = x^2\) に勾配降下法を適用し、\(x_0 = 5\) から 5 ステップの軌跡を計算せよ。
  7. ニュートン法で \(\sqrt 2\) を求める漸化式を書き、\(x_0 = 1\) から 3 ステップ計算せよ。
  8. ニューラルネットの簡単な合成 \(L = (y - f(g(x)))^2\) について連鎖律で \(\partial L / \partial x\) を求めよ。
  9. 微分方程式 \(dy/dx = -2y\), \(y(0) = 1\) を解け。
  10. 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 論文の数式が突然「読める」ようになります。