みんなのAI
機械学習AI論文
Loading...

学ぶ

🏅マイ実績

Chapter 08

偏微分と勾配:多変数の世界、勾配降下の方向

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

チャプター別 数学図

チャプターを選ぶと、下の図がそのチャプターの内容に切り替わります。基礎数学の流れを一覧で確認できます。

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

xy(1, 1)xだけyだけ∇f(合わせた向き)

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

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

偏微分と勾配とは

変数が2つ以上の関数で、一つの変数だけを動かし他を定数として微分するのが偏微分です。勾配は偏微分をベクトルに並べたものです。式は一つ:∇f=(∂f∂x,∂f∂y)\nabla f = (\frac{\partial f}{\partial x}, \frac{\partial f}{\partial y})∇f=(∂x∂f​,∂y∂f​)。
直感的な例:山を登るとき(高さ zzz、平面の座標 x,yx,yx,y)、東(xxx)に一歩進んだときの高さの変化と北(yyy)に一歩進んだときの高さの変化は違います。東向きの傾き(xxx での偏微分)と北向きの傾き(yyy での偏微分)を別々に求めるのが偏微分です。勾配 ∇f=(∂f∂x,∂f∂y)\nabla f = (\frac{\partial f}{\partial x}, \frac{\partial f}{\partial y})∇f=(∂x∂f​,∂y∂f​) は、この二つを並べたベクトルで、「頂上への最も急な方向」を矢印で表したものです。
例:f(x,y)=x2+y2f(x,y)=x^{2}+y^{2}f(x,y)=x2+y2 のとき xxx だけで微分すると yyy を定数として 2x2x2x、yyy だけで 2y2y2y。よって ∇f=(2x,2y)\nabla f = (2x, 2y)∇f=(2x,2y)。
勾配は「関数値が最も速く増える方向」を指します。逆方向に進むと最も速く減ります。勾配降下法では勾配の逆方向にパラメータを更新します。
数で見る例:f(x,y)=x+2yf(x,y)=x+2yf(x,y)=x+2y とすると、xxx が 1 増えると fff は 1 増え(xxx での偏微分 1)、yyy が 1 増えると fff は 2 増えます(yyy での偏微分 2)。勾配は (1,2)(1, 2)(1,2)。山で xxx 方向より yyy 方向が 2 倍急という意味で、(1,2)(1, 2)(1,2) の向きに進むと最も速く頂上に着きます。
ディープラーニングモデルの学習原理そのものだからです。AIモデルには数千万・数億個のパラメータ(重み w1,w2,...w_1, w_2, ...w1​,w2​,...)があります。「どの重みをどう調整すれば誤差が減るか」を知りたいのですが、数億個の変数をいっぺんに考えるのは無理です。偏微分によって「他の重みは固定して w1w_1w1​ だけ変えたときの影響」を一つずつ切り出して分析できます。
勾配は、すべての重みに対する修正指示です。「w1w_1w1​ は少し増やし、w2w_2w2​ は大きく減らせ」といった情報をまとめたベクトル ∇L\nabla L∇L を求めれば、AIは一度の計算で数億個の重みを正しい方向に同時に更新できます。
偏微分と勾配は多変数最適化の基本言語です。損失関数の勾配を求め、その逆方向に一歩ずつ進むのが勾配降下法であり、これでAIは複雑なデータの中でも正解への道を見つけます。
勾配降下法(Gradient Descent)のエンジンとして使います。目隠しで山を下るとき、足元の傾きのうちいちばん下がる方向に一歩踏み出すのと同じです。勾配は「値が最も速く増える」方向を指すので、誤差を減らすにはその逆方向(マイナス)に進む必要があります。式では 新パラメータ = 前パラメータ − (学習率 ×\times× 勾配) で実装されます。マイナスがつくのは誤差を減らす方向に進むためです。
  • 状況誤差を減らす
  • 使うもの損失関数 LLL を各重み www で偏微分(∂L∂w\frac{\partial L}{\partial w}∂w∂L​)し、その重みが誤差の主因かどうかを調べます。
  • 状況最適な方向を見つける
  • 使うもの全パラメータの偏微分を並べた勾配を求め、その逆方向に進んで「誤差の谷底」を目指します。
  • 状況効率的な大規模学習
  • 使うものデータ全体を使わずミニバッチだけ見ておおよその勾配を求め、素早く更新するSGD(確率的勾配降下法)で使います。
  • 状況多変数の影響分析
  • 使うもの経済学で需要が価格と所得の両方に依存するとき、「所得は固定して価格だけ上げるとどうなるか」のように、一要因の影響だけを取り出します。
状況使うもの
誤差を減らす損失関数 LLL を各重み www で偏微分(∂L∂w\frac{\partial L}{\partial w}∂w∂L​)し、その重みが誤差の主因かどうかを調べます。
最適な方向を見つける全パラメータの偏微分を並べた勾配を求め、その逆方向に進んで「誤差の谷底」を目指します。
効率的な大規模学習データ全体を使わずミニバッチだけ見ておおよその勾配を求め、素早く更新するSGD(確率的勾配降下法)で使います。
多変数の影響分析経済学で需要が価格と所得の両方に依存するとき、「所得は固定して価格だけ上げるとどうなるか」のように、一要因の影響だけを取り出します。
AI自動学習:PyTorchやTensorFlowで `loss.backward()` を呼ぶと、内部で全重みについての偏微分が行われ、勾配ベクトルが計算されます。この勾配があるからオプティマイザが重みを更新できます。ChatGPTのような大規模言語モデルから画像認識AIまで、現代のAIはすべてこの勾配に沿って賢くなります。
偏微分するときは微分する変数だけを変数とみて、他は定数にします。勾配は偏微分を順にベクトルに並べたものです。コツ:∂f∂x\frac{\partial f}{\partial x}∂x∂f​ は yyy を数とみて xxx だけで微分します。
いちばん簡単な例:f=3x+2yf=3x+2yf=3x+2y。xxx だけで微分するとき yyy を定数とみる → ∂f/∂x=3\partial f/\partial x = 3∂f/∂x=3。yyy だけで微分するとき xxx を定数とみる → ∂f/∂y=2\partial f/\partial y = 2∂f/∂y=2。よって ∇f=(3,2)\nabla f = (3, 2)∇f=(3,2)。点 (1,1)(1,1)(1,1) での勾配も (3,2)(3, 2)(3,2) です。
易しい例から表にまとめました。一変数だけ見れば Ch06 導関数と同じ公式です。
  • 問題f=3x+2yf=3x+2yf=3x+2y、∂f/∂x\partial f/\partial x∂f/∂x
  • 解答yyy 定数 → 3
  • 問題f=3x+2yf=3x+2yf=3x+2y、∂f/∂y\partial f/\partial y∂f/∂y
  • 解答xxx 定数 → 2
  • 問題f=x2yf=x^{2}yf=x2y、∂f/∂x\partial f/\partial x∂f/∂x
  • 解答yyy 定数 → 2xy2xy2xy
  • 問題f=x2+y2f=x^{2}+y^{2}f=x2+y2、∇f\nabla f∇f
  • 解答(2x,2y)(2x, 2y)(2x,2y)
問題解答
f=3x+2yf=3x+2yf=3x+2y、∂f/∂x\partial f/\partial x∂f/∂xyyy 定数 → 3
f=3x+2yf=3x+2yf=3x+2y、∂f/∂y\partial f/\partial y∂f/∂yxxx 定数 → 2
f=x2yf=x^{2}yf=x2y、∂f/∂x\partial f/\partial x∂f/∂xyyy 定数 → 2xy2xy2xy
f=x2+y2f=x^{2}+y^{2}f=x2+y2、∇f\nabla f∇f(2x,2y)(2x, 2y)(2x,2y)
問題タイプ別の解法
  • タイプxxx で偏微分
  • 説明∂f∂x\frac{\partial f}{\partial x}∂x∂f​
  • 答えの求め方yyy を定数とみて xxx だけで微分。一次式なら xxx の係数、x2yx^2 yx2y なら 2xy2xy2xy。
  • タイプyyy で偏微分
  • 説明∂f∂y\frac{\partial f}{\partial y}∂y∂f​
  • 答えの求め方xxx を定数とみて yyy だけで微分。
  • タイプ勾配
  • 説明∇f=(∂f∂x,∂f∂y)\nabla f = (\frac{\partial f}{\partial x}, \frac{\partial f}{\partial y})∇f=(∂x∂f​,∂y∂f​)
  • 答えの求め方二つの偏微分を順にベクトルに。点 (a,b)(a,b)(a,b) では x=ax=ax=a、y=by=by=b を代入。
タイプ説明答えの求め方
xxx で偏微分∂f∂x\frac{\partial f}{\partial x}∂x∂f​yyy を定数とみて xxx だけで微分。一次式なら xxx の係数、x2yx^2 yx2y なら 2xy2xy2xy。
yyy で偏微分∂f∂y\frac{\partial f}{\partial y}∂y∂f​xxx を定数とみて yyy だけで微分。
勾配∇f=(∂f∂x,∂f∂y)\nabla f = (\frac{\partial f}{\partial x}, \frac{\partial f}{\partial y})∇f=(∂x∂f​,∂y∂f​)二つの偏微分を順にベクトルに。点 (a,b)(a,b)(a,b) では x=ax=ax=a、y=by=by=b を代入。

例(x で偏微分)
f=3x+2yf=3x+2yf=3x+2y のとき ∂f∂x\frac{\partial f}{\partial x}∂x∂f​ と点 (1,1)(1,1)(1,1) での値を求めなさい。
解答
yyy を定数とみると ∂f/∂x=3\partial f/\partial x=3∂f/∂x=3。(1,1)(1,1)(1,1) でも 3。→ 答 3

例(y で偏微分)
f=3x+2yf=3x+2yf=3x+2y のとき ∂f∂y\frac{\partial f}{\partial y}∂y∂f​ と点 (1,1)(1,1)(1,1) での値を求めなさい。
解答
xxx を定数とみると ∂f/∂y=2\partial f/\partial y=2∂f/∂y=2。(1,1)(1,1)(1,1) でも 2。→ 答 2

例(勾配)
f=x2+y2f=x^2+y^2f=x2+y2 のとき ∇f\nabla f∇f と点 (1,2)(1,2)(1,2) での勾配を求めなさい。
解答
∂f/∂x=2x\partial f/\partial x=2x∂f/∂x=2x、∂f/∂y=2y\partial f/\partial y=2y∂f/∂y=2y。よって ∇f=(2x,2y)\nabla f=(2x,2y)∇f=(2x,2y)。(1,2)(1,2)(1,2) で (2,4)(2,4)(2,4)。→ 答 (2, 4) または成分で 2、4