偏微分とは何か|影響度・重み・勾配・決定性をわかりやすく解説

こんにちは。ゆうせいです。

機械学習を学び始めると、早い段階で「偏微分」や「勾配」という言葉が出てきます。数式だけを見ると難しく感じますが、偏微分が表すものは「ある変数を少しだけ動かしたとき、結果がどれだけ変わるか」という影響度です。

この記事では、次の4つを順番に説明します。

  • 偏微分は変数の影響度を表す値であること
  • 線形関数では、偏微分が重みパラメータそのものになること
  • 非線形関数では、場所によって勾配が変わり、その勾配を使って最適な値を探すこと
  • 勾配は偶然に左右されない、決まった値であること

偏微分とは「1つの変数だけを動かしたときの変化の割合」

普通の微分との違い

普通の微分は、変数が1つしかない関数に使います。たとえば y = 2x なら、x が 1 増えると y は 2 増えます。この「2」が微分の値です。

一方、機械学習で扱う関数には変数がたくさんあります。たとえば、家賃を予測する式に「駅からの距離」と「部屋の広さ」の2つが入っている場合です。

このとき「駅からの距離だけを少し変え、広さは固定したら家賃はどう変わるか」を調べるのが偏微分です。ほかの変数を固定して、1つの変数だけに注目して微分します。

偏微分の記号

関数 f が x1 と x2 の2つの変数を持つとき、x1 についての偏微分は次のように書きます。

\frac{\partial f}{\partial x_1}

記号 ∂ は「ラウンド」や「デル」と読みます。普通の微分で使う d と区別するための記号で、「ほかの変数を固定している」という意味を含んでいます。

身近な例え

料理の味を、塩の量と砂糖の量で決まる関数だと考えてみます。砂糖の量を変えずに塩だけを1グラム増やしたとき、味の濃さがどれだけ変わるか。この変化の割合が、塩についての偏微分です。

塩の偏微分が大きければ、塩は味に強い影響を与えています。偏微分が0に近ければ、塩を少し変えても味はほとんど変わりません。つまり、偏微分は変数ごとの影響度を表す値です。

練習問題1

関数 f(x1, x2) = 4x1 + x2 について、x2 を固定して x1 だけを 1 増やすと、f はいくつ増えますか。

解答と解説1

答えは 4 です。

x2 を固定しているので、x2 の項は変化しません。x1 が 1 増えると、4x1 の部分が 4 増えます。したがって、x1 についての偏微分は 4 です。

線形関数では、偏微分が重みそのものになる

線形関数の形

機械学習の基本となる線形回帰では、次のような式を使います。

y = w1x1 + w2x2 + b

ここで、w1 と w2 は重み、b はバイアスです。重みは「その入力をどれだけ重視するか」を表す係数です。

偏微分を計算する

y を x1 について偏微分すると、x2 と b は固定されるため、w1x1 の部分だけが残ります。

\frac{\partial y}{\partial x_1} = w_1

同じように、x2 についての偏微分は w2 です。

\frac{\partial y}{\partial x_2} = w_2

つまり、線形関数では各入力の偏微分が、その入力にかかる重みと一致します。

具体的な数値で確認する

家賃の予測式が次のとおりだとします。

y = -0.5x1 + 0.3x2 + 8

  • y:家賃(万円)
  • x1:駅からの距離(分)
  • x2:部屋の広さ(平方メートル)

x1 についての偏微分は -0.5 です。駅から1分遠くなるごとに、家賃が0.5万円下がることを意味します。

x2 についての偏微分は 0.3 です。部屋が1平方メートル広くなるごとに、家賃が0.3万円上がることを意味します。

線形関数では、どの位置で計算しても偏微分は変わりません。駅から3分の物件でも20分の物件でも、1分あたりの影響は -0.5 のままです。

補足:何について微分するかで答えが変わる

機械学習の学習では、入力 x ではなく重み w について偏微分する場面が多くあります。y = w1x1 + w2x2 + b を w1 について偏微分すると、答えは x1 になります。

「入力で微分すると重みが出てくる」「重みで微分すると入力が出てくる」という対応関係を押さえておくと、のちに誤差逆伝播法を学ぶときに混乱しにくくなります。

練習問題2

y = 2x1 - 7x2 + 3x3 + 1 について、y を x2 で偏微分した値として正しいものを選んでください。

  1. 2
  2. 1
  3. -7
  4. 3

解答と解説2

正解は 3 の「-7」です。

x2 にかかる係数は -7 なので、x2 についての偏微分は -7 です。

  • 1 の「2」は、x1 についての偏微分です。
  • 2 の「1」は定数項なので、偏微分すると0になります。
  • 4 の「3」は、x3 についての偏微分です。

非線形関数では、場所によって勾配が変わる

非線形関数の例

次の関数を考えます。

f(x1, x2) = x1² + 3x2²

この関数は、x1 = 0、x2 = 0 のときに最小値0をとる、お椀のような形をしています。

偏微分を計算する

x1 について偏微分すると、x2 の項は定数として扱われるので消えます。

\frac{\partial f}{\partial x_1} = 2x_1

x2 について偏微分すると、次のようになります。

\frac{\partial f}{\partial x_2} = 6x_2

線形関数と違い、偏微分の結果に x1 や x2 が残っています。これは、どの位置で計算するかによって偏微分の値が変わることを意味します。

勾配とは偏微分を並べたもの

すべての変数についての偏微分を並べたものを「勾配」と呼びます。記号は ∇(ナブラ)を使います。

\nabla f = \left( \frac{\partial f}{\partial x_1}, \frac{\partial f}{\partial x_2} \right) = (2x_1, 6x_2)

勾配は、その地点で関数の値が最も急に増える方向と、その急さを表します。

位置によって勾配が変わることを確認する

地点 (x1, x2)x1方向の偏微分 2x1x2方向の偏微分 6x2勾配
(1, 1)26(2, 6)
(2, -1)4-6(4, -6)
(0.5, 0)10(1, 0)
(0, 0)00(0, 0)

最小値の地点 (0, 0) では、勾配が (0, 0) になっています。山の谷底では、どの方向にも傾きがない状態です。

練習問題3

f(x1, x2) = x1² + 3x2² について、地点 (3, 2) での勾配を求めてください。

解答と解説3

答えは (6, 12) です。

x1 方向の偏微分は 2x1 = 2 × 3 = 6、x2 方向の偏微分は 6x2 = 6 × 2 = 12 です。x2 方向の値のほうが大きいので、この地点では x2 方向の傾きのほうが急だとわかります。

勾配を利用して最適な値を探す

勾配降下法の考え方

機械学習では、予測の誤差を表す「損失関数」を小さくする重みを探します。損失関数の値を最小にしたいので、勾配と反対の方向に少しずつ進みます。勾配は値が増える方向を示しているため、その逆へ進めば値が減ります。この方法を勾配降下法と呼びます。

更新式は次のとおりです。

x_{new} = x - \eta \nabla f(x)

η(イータ)は学習率で、1回にどれだけ進むかを決める値です。

具体的な数値で1回更新する

f(x1, x2) = x1² + 3x2² について、地点 (1, 1)、学習率 η = 0.1 で1回更新します。

  1. 地点 (1, 1) での勾配は (2, 6) です。
  2. 勾配に学習率をかけると、0.1 × (2, 6) = (0.2, 0.6) になります。
  3. 現在地から引くと、(1 - 0.2, 1 - 0.6) = (0.8, 0.4) になります。

関数の値を比べると、次のようになります。

  • 更新前:1² + 3 × 1² = 4
  • 更新後:0.8² + 3 × 0.4² = 0.64 + 0.48 = 1.12

1回の更新で、関数の値が4から1.12に下がりました。この計算を繰り返すと、最小値の地点 (0, 0) に近づいていきます。

初学者がつまずきやすい点

  • 勾配の方向へ進むと値は増えます。最小値を探すときは、勾配にマイナスをつけて逆方向へ進みます。
  • 学習率が大きすぎると、谷底を飛び越えて値が発散することがあります。小さすぎると、なかなか最小値に近づきません。
  • 線形関数では勾配が一定なので、「場所によって傾きが変わる」という性質は非線形関数で初めて重要になります。

練習問題4

f(x1, x2) = x1² + 3x2² について、地点 (2, 1)、学習率 η = 0.1 で勾配降下法を1回実行してください。更新後の地点はどこになりますか。

解答と解説4

答えは (1.6, 0.4) です。

  1. 勾配は (2 × 2, 6 × 1) = (4, 6) です。
  2. 学習率をかけると (0.4, 0.6) です。
  3. 現在地から引くと (2 - 0.4, 1 - 0.6) = (1.6, 0.4) です。

関数の値は 4 + 3 = 7 から 2.56 + 0.48 = 3.04 に下がっています。

勾配は決定的な値である

「決定的」とはどういう意味か

決定的とは、条件が同じなら毎回同じ結果になるという意味です。サイコロのように、振るたびに結果が変わるものとは異なります。

勾配は、関数の式と計算する地点が決まれば、ただ1つに決まります。f(x1, x2) = x1² + 3x2² の地点 (1, 1) での勾配は、何度計算しても (2, 6) です。

「確率的勾配降下法」との関係

機械学習には「確率的勾配降下法(SGD)」という手法があります。名前に「確率的」と付いているため、勾配そのものがランダムに決まると誤解されることがあります。

SGDでランダムなのは、学習データのうちどのデータを使って計算するかという選び方です。データの選び方によって損失関数の形が少し変わるため、計算される勾配も変わります。しかし、使うデータと現在の重みが決まれば、勾配は1つの値に決まります。

項目ランダムか説明
勾配の計算ランダムではない関数と地点が同じなら、毎回同じ値になる
SGDのデータ選択ランダム毎回違うデータを選ぶため、使う関数が変わる
重みの初期値ランダムな場合が多い学習の出発点がランダムに決まる

学習結果が毎回少しずつ異なるのは、データの選び方や初期値にランダムさがあるためです。勾配の計算方法そのものにランダムさはありません。

練習問題5

次の説明のうち、正しいものを選んでください。

  1. 同じ関数と同じ地点でも、勾配は計算するたびに変わる
  2. SGDでは、どのデータを使うかの選択にランダムさがある
  3. 線形関数の勾配は、地点によって大きく変わる
  4. 勾配の方向へ進むと、関数の値は小さくなる

解答と解説5

正解は 2 です。

SGDでは、学習に使うデータを毎回ランダムに選びます。その結果として計算される勾配が変わります。

  • 1 は誤りです。関数と地点が同じなら、勾配は同じ値になります。
  • 3 は誤りです。線形関数の勾配は重みと一致し、どの地点でも一定です。
  • 4 は誤りです。勾配の方向は関数の値が増える方向です。値を小さくするには逆方向へ進みます。

まとめ

  • 偏微分は、ほかの変数を固定して1つの変数だけを動かしたときの変化の割合であり、変数の影響度を表します。
  • 線形関数 y = w1x1 + w2x2 + b では、入力についての偏微分が重みそのものになり、どの地点でも一定です。
  • 非線形関数では、偏微分の値が地点によって変わります。すべての偏微分を並べたものを勾配と呼びます。
  • 勾配の逆方向へ少しずつ進むことで、損失関数を小さくする値を探せます。勾配降下法は、この仕組みを使っています。
  • 勾配は、関数と地点が決まれば1つに決まる決定的な値です。SGDのランダムさはデータの選び方から生じます。

次のステップとしては、合成関数の微分を表す「連鎖律」を学ぶことをおすすめします。ニューラルネットワークは非線形関数を何層も重ねた構造をしているため、各層の重みの勾配を求めるには連鎖律が必要です。連鎖律を理解すると、誤差逆伝播法でどのように勾配が計算されるのかが見えてきます。

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
海外放浪の末、2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。

学生時代は趣味と実益を兼ねてリゾートバイトにいそしむ。長野県白馬村に始まり、志賀高原でのスキーインストラクター、沖縄石垣島、北海道トマム。高じてオーストラリアのゴールドコーストでツアーガイドなど。現在は野菜作りにはまっている。