Chapter 08

偏微分と勾配

変数が複数あるとき、一つの変数だけ動かして微分するのが偏微分、その偏微分を並べたベクトルが勾配です。勾配降下法の基礎です。

home.mathDiagramTitle

home.mathDiagramDescription

xだけ動かしたときの傾き、yだけ動かしたときの傾きが偏微分です。その二つを合わせた向き勾配です。

横矢印=xだけ変えたときの傾き、縦=yだけ変えたときの傾き。斜めが二つを合わせた勾配 — 最も速く増える方向です。

  • 横矢印: yy を固定して xx だけ動かしたときの傾き → 偏微分 fx\frac{\partial f}{\partial x}
  • 縦矢印: xx を固定して yy だけ動かしたときの傾き → 偏微分 fy\frac{\partial f}{\partial y}
  • 斜め矢印: 二つの偏微分を合わせた向き勾配 f\nabla f(最も速く増える方向)

偏微分と勾配とは

変数が2つ以上の関数で、一つの変数だけを動かし他を定数として微分するのが偏微分です。勾配は偏微分をベクトルに並べたものです。式は一つ:f=(fx,fy)\nabla f = (\frac{\partial f}{\partial x}, \frac{\partial f}{\partial y})
ディープラーニングでは損失は無数の重みの関数です。学習は「各重みを少し変えたとき損失がどう変わるか」を求め、損失が減る方向に重みを更新する過程です。
勾配は「各重みについての偏微分を並べたベクトル」です。重みが何千・何万もあるので一つの変数だけを変えたときの影響を見る偏微分が必要で、逆伝播(Ch07 連鎖律)がこの勾配を効率的に一括計算します。Ch06・Ch07のあと、ここで多変数に広げると勾配降下法と SGD が理解できます。
偏微分・勾配は多変数最適化の基本言語です。損失を各重みで微分した値が勾配の成分で、新パラメータ=前 − 学習率×勾配のように一歩ずつ更新するのがディープラーニングの学習です。ここまでで Ch09 積分へつながります。
入力が複数ある関数で「一つの変数だけ変えたときの変化率」を見るときに偏微分を使います。勾配降下法は勾配の逆方向に少し進んで損失を減らす方法です。経済学(需要が価格・所得に依存するとき)や物理学(圧力・温度・体積が互いに効くとき)でも、偏微分で「一つの要因だけ変えたときの影響」を扱います。
状況使うもの
損失を減らすとき「この重みを少し増やすと、損失は上がる?下がる?」がその重みでの偏微分です。それらを並べたベクトルが勾配です。
勾配降下の一歩新パラメータ = 前 − (学習率 × 勾配)。損失が減る向き(勾配の逆方向)に一歩進むことです。
データを少しずつ使って学習するときデータ全体を一度に使わず、小さなまとまり(ミニバッチ)だけ見て勾配を求め、パラメータを一度更新します。これを繰り返すと速く学習できます。(このやり方を SGD とも呼びます。)
結果が x と y の両方に依存しているとき「x だけ少し増やすとどれだけ変わる?」を見るのが xx での偏微分です。yy だけを変えるときは yy での偏微分を同じように見ればよいです。
AI 学習では PyTorch・TensorFlow が逆伝播で勾配を自動計算します。「偏微分を並べたベクトル=勾配」「勾配降下=勾配の逆方向」だけ理解すれば十分です。画像分類(物体認識)、言語モデル(ChatGPT など)、レコメンド(Netflix・YouTube)、翻訳音声認識など、すべての教師あり学習がこの構造の上にあります。重みが数万個あっても、勾配を求めて逆方向に一歩ずつ更新するのが学習です。
偏微分するときは微分する変数だけを変数とみて、他は定数にします。勾配は偏微分を順にベクトルに並べたものです。コツfx\frac{\partial f}{\partial x}yy を数とみて xx だけで微分します。