勾配(grad)の意味を手計算で理解する なぜ勾配降下法は勾配の逆向きに進むのか
こんにちは。ゆうせいです。
ディープラーニングを学ぶと、必ず勾配降下法が出てきます。
重みを更新する式は、次のように書かれます。
ここで疑問が残ります。なぜマイナスなのか。なぜ勾配の逆向きに進むと、損失が最も速く減るのか。
この疑問に答えるには、勾配そのものの意味を理解する必要があります。
この記事では、ベクトル解析で学ぶ勾配(gradient、グラディエント)の意味を、手計算と証明の両方で確認します。電卓を使わずに計算できる数値を選んでいます。
高校の微分までを学んだ方を想定しています。偏微分から説明しますので、初めての方でも読み進められます。
結論
先に結論を3つ示します。
| 番号 | 結論 |
|---|---|
| 1 | 勾配はベクトルである。その向きは、関数の値が最も急激に増加する方向を指す |
| 2 | 勾配の大きさは、その方向に進んだときの増加の度合いを表す |
| 3 | 勾配降下法のマイナス符号は、最も急激に減少する方向を選ぶためにある |
この3つを、順番に確かめていきます。
スカラー場とは何か
勾配は、スカラー場に対して定義される演算です。
したがって、まずスカラー場が何かを押さえる必要があります。勾配でつまずく方の多くは、ここが曖昧なまま先に進んでいます。
定義
スカラー場とは、空間上の1点を指定すると、値が1つ決まるようなものです。
たとえば3次元空間なら、x、y、zの3つの数を与えると、値が1つ返ってきます。
部屋の明るさで考える
分かりやすい例として、オフィスの明るさを考えます。
窓が1つある部屋を想像してください。部屋の中のある場所を指定すると、その場所の明るさが1つ決まります。明るさは照度と呼ばれ、ルクスという単位で測ります。
| 場所 | 照度の値 |
|---|---|
| 窓際 | 3000ルクス |
| デスク周辺 | 700ルクス |
| 部屋の奥の隅 | 200ルクス |
このように、各点に1つの数値が住んでいる状態が、スカラー場です。
照度のほかにも、気圧、標高、濃度、Wi-Fiの電波強度などがスカラー場の例になります。
ベクトル場との違い
比較すると理解が深まります。
| 種類 | 各点に住んでいるもの | 例 |
|---|---|---|
| スカラー場 | 1つの数値 | 照度、気圧、標高 |
| ベクトル場 | 向きと大きさを持つ量 | 風、磁場、人の流れ |
照度は数値1つなのでスカラー場です。風は向きと強さを持つのでベクトル場です。
先に結論を予告しておく
この記事の結論を、明るさの例で言い換えます。
部屋のある地点に立ったとき、どちらを向いて1歩進めば最も明るくなるでしょうか。直感的には、窓のほうです。
勾配は、まさにその方向を計算で求めるものです。
練習問題
次のうち、スカラー場の例として適切なものを選んでください。
| 番号 | 選択肢 |
|---|---|
| 1 | 各地点における風の向きと風速 |
| 2 | 各地点における海面からの標高 |
| 3 | 各地点における水の流れる方向 |
| 4 | 各地点にはたらく重力の向きと強さ |
解答 2
解説します。
2 が適切です。標高は、地図上の1点を指定すると値が1つ決まります。各点に数値が1つ住んでいる状態であり、スカラー場の定義に合致します。
1 は風の向きと風速です。向きを含むため、ベクトル場です。
3 も水の流れる方向であり、向きを持つのでベクトル場です。
4 も重力の向きと強さであり、ベクトル場です。
補足します。1、3、4はいずれも「向き」という言葉が入っています。向きが含まれていればベクトル場だと判断できます。ただし、風速の大きさだけを取り出せばスカラー場になります。何を取り出すかで変わる点に注意してください。
偏微分とは何か
勾配の定義には偏微分が使われます。ここを先に押さえます。
1方向だけ動かす
変数が1つの関数、たとえばy = f(x)の微分は、xを少し動かしたときにyがどれだけ変わるかを表します。
変数が複数ある関数では、どの変数を動かすかを決めなければなりません。
偏微分とは、ほかの変数を固定したまま、1つの変数だけを動かしたときの変化率です。
記号と読み方
偏微分には専用の記号を使います。
この記号は、ラウンドディー、またはパーシャルと読みます。授業では「ラウンド」と略されることが多いです。
通常の微分のdではなく、丸みを帯びたこの記号を使うことで、偏微分であることを示します。
計算のしかた
やり方は簡単です。注目する変数以外を定数だと思って微分します。
例として、次の関数を考えます。
f(x, y) = 3x + 4y
xで偏微分する場合、yは定数だと思います。すると4yの部分は定数なので微分すると0になります。
yで偏微分する場合は、xを定数だと思います。
もう1つの例
次の関数でも確認します。
f(x, y) = x2y + 5y
xで偏微分します。yは定数なので、x2の微分である2xにyが掛かります。5yは定数なので0です。
yで偏微分します。x2は定数と見なすので、x2yの偏微分はx2です。5yの偏微分は5です。
練習問題
f(x, y, z) = 2x + 6y2 + z について、3つの偏微分を求めてください。
解答
解説します。
xで偏微分するとき、6y2とzは定数と見なします。よって2xの微分である2だけが残ります。
yで偏微分するとき、6y2の微分は12yです。2xとzは定数なので0になります。
zで偏微分するとき、zの微分は1です。ほかの項は定数なので0です。
つまずきやすい点を補足します。偏微分の結果に変数が残ることがあります。yで偏微分した結果が12yであるように、答えが数値にならない場合は正常です。その点における変化率が、yの値によって変わるという意味です。
記号の読み方一覧
この記事で使う記号を、先にまとめます。
| 記号 | 読み方 | 何の略か、何を表すか | この記事での具体例 |
|---|---|---|---|
| f | エフ | function(関数) | f(x, y) = 3x + 4y |
| ∇ | ナブラ | gradient を表す演算子の記号 | ∇f = (3, 4) |
| ∂ | ラウンド、パーシャル | partial derivative(偏微分) | ∂f/∂x = 3 |
| Δ | デルタ | 小さな変化量 | Δx = 0.01 |
| θ | シータ | 2つのベクトルのなす角 | θ = 0 |
| η | イータ | learning rate(学習率) | η = 0.01 |
| L | エル | loss(損失) | L(w) |
| w | ダブリュー | weight(重み) | w = 0.5 |
∇はナブラと読みます。古代の竪琴の形に由来する記号です。
grad fと書いても∇fと書いても、同じ意味です。この記事では両方を使います。
勾配の定義
定義
スカラー場fに対する勾配は、各変数の偏微分を成分として並べたベクトルです。
重要なのは、入力はスカラー場なのに、出力はベクトルだという点です。
| 項目 | 内容 |
|---|---|
| 入力 | スカラー場(各点に数値1つ) |
| 出力 | ベクトル場(各点に向きと大きさ) |
明るさの分布から、向きを持つ量が生まれます。この「向き」が何を意味するのかが、この記事の主題です。
手計算してみる
2変数の例で計算します。
f(x, y) = 3x + 4y
偏微分はすでに求めました。並べるだけです。
∇f = (3, 4)
この関数の場合、どの点でも勾配は(3, 4)です。場所によらず一定になります。1次関数なので、傾きがどこでも同じだからです。
練習問題
f(x, y) = 5x + 12y の勾配を求め、その大きさも計算してください。
解答
∇f = (5, 12)
解説します。
偏微分はそれぞれ5と12です。並べて(5, 12)が勾配になります。
大きさはピタゴラスの定理で求めます。5と12と13は直角三角形の辺の比として有名な組み合わせです。
このあと使いますので、勾配の大きさを求める計算に慣れておいてください。
勾配の向きは何を意味するか
ここが本題です。
直感から入る
f(x, y) = 3x + 4y を見てください。
ある点から、距離1だけ動くとします。どの方向に動けば、fの値が最も増えるでしょうか。
まず、x方向とy方向を比べます。
xを1増やすと、fは3増えます。yを1増やすと、fは4増えます。
係数が大きいのはyです。したがって、y方向に動くほうが増えそうです。
しかし、y方向が最善ではない
ここで立ち止まってください。
y方向だけに進むと、xの係数3をまったく使っていません。少しだけxの方向にも進めば、その分も上乗せできるはずです。
一方で、動ける距離は1に固定されています。xに振り分けた分、yに使える距離は減ります。
つまり、xとyにどう振り分けるのが最適かという問題になります。
数値で確かめる
距離1の移動を、いくつかの方向で試します。
| 移動の方向 | 移動ベクトル | fの増加量 |
|---|---|---|
| x方向のみ | (1, 0) | 3 |
| y方向のみ | (0, 1) | 4 |
| 斜め45度 | (0.707, 0.707) | 約4.95 |
| 勾配の方向 | (0.6, 0.8) | 5 |
計算を示します。
x方向のみの場合、増加量は 3×1 + 4×0 = 3 です。
y方向のみの場合、3×0 + 4×1 = 4 です。
斜め45度の場合、各成分は 1/√2 すなわち約0.707です。増加量は 3×0.707 + 4×0.707 = 7×0.707 で、約4.95になります。
勾配の方向の場合を見てください。勾配は(3, 4)、その大きさは5です。長さを1にそろえると(3/5, 4/5)、すなわち(0.6, 0.8)になります。増加量は 3×0.6 + 4×0.8 = 1.8 + 3.2 = 5 です。
勾配の方向が、最大の5を与えています。
ここで分かること
表から2つのことが読み取れます。
一つ目は、y方向だけに進むのが最善ではないことです。4より5のほうが大きいからです。
二つ目は、適当に斜めに進めばよいわけでもないことです。45度では約4.95にとどまります。3対4という比率で振り分けたときに、ちょうど最大になります。
その比率を与えているのが、勾配です。
定理としてまとめる
以上を言葉にします。
勾配∇fの向きは、関数fの値が最も急激に増加する方向と一致します。
これが、勾配の向きの意味です。
練習問題
f(x, y) = 5x + 12y について、ある点から距離1だけ動くとき、fの増加量が最大になる移動ベクトルを求めてください。またその最大増加量も答えてください。
解答
移動ベクトルは (5/13, 12/13)、最大増加量は13です。
解説します。
勾配は(5, 12)、大きさは13でした。向きを変えずに長さを1にそろえると、各成分を13で割って(5/13, 12/13)になります。
増加量は 5×(5/13) + 12×(12/13) = (25 + 144)/13 = 169/13 = 13 です。
ここで注目してください。最大増加量13は、勾配の大きさと同じ値になっています。これは偶然ではありません。次の節で証明します。
証明 なぜ勾配の向きが最大なのか
ここまでは例で確かめただけです。本当に最大なのかを証明します。
証明の道具は、テイラー展開の1次近似と、内積の性質の2つです。
設定
3次元空間のある点を考えます。その位置ベクトルをrとします。
r = (x, y, z)
この点から、少しだけ動きます。その微小な移動をΔrとします。
Δr = (Δx, Δy, Δz)
移動する距離、すなわちΔrの大きさは固定します。動かすのは向きだけです。
さらに、勾配∇fとΔrのなす角をθとします。
手順1 変化量を式で書く
移動によってfがどれだけ変わるかを、Δfと書きます。
Δf = f(r + Δr) - f(r)
成分で書けば次のようになります。
Δf = f(x + Δx, y + Δy, z + Δz) - f(x, y, z)
手順2 テイラー展開で1次近似する
Δx、Δy、Δzは微小量です。そこでテイラー展開の1次近似を使います。
3変数のテイラー展開は、1変数の場合とほぼ同じ形です。1次の項までを残すと、次のように書けます。
右辺の第1項が、もとのf(x, y, z)です。これがΔfの式で引かれるため、打ち消されます。
残るのは次の3項です。
2次以降の項は無視しています。Δx、Δy、Δzが十分に小さいという前提があるからです。この前提は後で重要になります。
手順3 内積の形に書き直す
右辺を見てください。
前半の3つは、∇fのx成分、y成分、z成分です。後半の3つは、Δrのx成分、y成分、z成分です。
成分同士を掛けて足し合わせています。これは内積の定義そのものです。
関数の微小な変化は、勾配と移動ベクトルの内積として書けます。
手順4 内積のもう1つの定義を使う
内積には2つの表し方があります。
| 表し方 | 式 |
|---|---|
| 成分による定義 | 各成分の積の和 |
| 幾何的な定義 | 2つのベクトルの大きさの積に、なす角のコサインを掛けたもの |
後者を使います。
手順5 最大になる条件を求める
この式を眺めます。
|∇f|は、その点における勾配の大きさです。移動の向きを変えても変わりません。
|Δr|は、移動する距離です。最初に固定すると決めました。
したがって、θによって変わるのはcos θだけです。
cos θが最大になるのは、θ = 0 のときです。そのときcos θ = 1 になります。
θ = 0 とは、Δrが∇fと同じ向きであることを意味します。
結論
以上より、Δfが最大になるのは、移動の向きが勾配と一致するときです。
勾配の向きは、関数の値が最も急激に増加する方向である。これが証明されました。
練習問題
上の証明の式を使って、Δfが最小になる、つまり負の方向に最も大きく変化するときのθを答えてください。また、そのときの移動の向きを言葉で説明してください。
解答
θ = π(180度)です。移動の向きは、勾配の逆向きになります。
解説します。
cos θが最小になるのは θ = π のときで、cos π = -1 です。
このときΔfは次の値になります。
負の値のなかで絶対値が最大、つまり最も大きく減少します。
θ = π とは、Δrが∇fとちょうど逆を向いている状態です。
この結論が、勾配降下法のマイナス符号の正体です。次の節で詳しく扱います。
なお、θ = π/2(90度)のときはcos θ = 0 となり、Δfは0になります。勾配と垂直な方向に動くと、関数の値は変わりません。等高線に沿って歩いている状態です。
勾配の大きさは何を意味するか
向きの意味は分かりました。大きさの意味も確認します。
最大の変化量そのもの
θ = 0 を代入します。cos θ = 1 なので、次のようになります。
ここで移動距離|Δr|を1とすれば、Δfは|∇f|に等しくなります。
つまり、勾配の大きさは、単位距離だけ最適な方向に進んだときの増加量を表します。
先ほどの例で確認
f(x, y) = 5x + 12y のとき、勾配の大きさは13でした。
そして距離1を最適な方向に進んだときの増加量も13でした。一致しています。
大きさが意味すること
| 勾配の大きさ | 意味 |
|---|---|
| 大きい | その点の近くで、関数が急激に変化する |
| 小さい | その点の近くで、関数はあまり変化しない |
| ゼロ | 周囲のどの方向に動いても、ほぼ変化しない |
最後の行が重要です。勾配がゼロになる点では、どの方向に動いても値が変わりません。
山の頂上、谷の底、そして鞍点がこれにあたります。機械学習の最適化で勾配がゼロに近づくと学習が止まるのは、この性質によります。
ディープラーニングとの接続
ここまでの内容が、機械学習の勾配降下法にどうつながるかを示します。
更新式を読み直す
勾配降下法の更新式は次の形でした。
| 記号 | 意味 |
|---|---|
| w | 重み(weight) |
| L(w) | 損失(loss)。重みwに対する誤差の大きさ |
| ∇L(w) | 損失の勾配 |
| η | 学習率(learning rate) |
マイナス符号の意味
損失Lは、小さくしたい量です。最大化ではなく最小化が目的です。
証明の練習問題で確かめたとおり、Lが最も急激に減少する方向は、勾配の逆向きです。
したがって、勾配に マイナス を付けます。
| 目的 | 進む方向 |
|---|---|
| 関数を最大にしたい | 勾配の向き |
| 損失を最小にしたい | 勾配の逆向き |
勾配降下法という名前の「降下」は、ここから来ています。英語ではgradient descentです。
学習率の意味
更新式のηは、1歩の大きさを決めています。
証明のなかで、移動距離|Δr|を固定すると決めました。その|Δr|に対応するのがηです。
勾配は向きを教えてくれますが、どれだけ進むべきかは教えてくれません。そこを人間が決めるのが学習率です。
学習率が大きすぎると発散する理由
ここが、この記事で最も伝えたい点です。
証明の手順2で、テイラー展開の1次近似を使いました。そのとき、Δx、Δy、Δzが十分に小さいという前提を置きました。
2次以降の項を無視したからです。
ηが大きいと、この前提が崩れます。1歩が大きすぎて、1次近似が成り立ちません。
| ηの大きさ | 起きること |
|---|---|
| 適切 | 近似が成り立ち、損失が減る |
| 大きすぎる | 1次近似が崩れ、損失が増えることがある。発散する |
| 小さすぎる | 近似は正確だが、1歩が小さく学習が遅い |
「学習率を大きくすると発散する」という現象は、経験則として語られることが多いです。しかし理由は明確です。勾配が保証しているのは、あくまで微小な移動に対する最急の方向だからです。
遠くまで進んだ先の地形について、勾配は何も語っていません。
練習問題
勾配降下法について、適切な説明を選んでください。
| 番号 | 選択肢 |
|---|---|
| 1 | 勾配は、損失が最小になる重みの値を直接示している |
| 2 | 学習率を大きくすれば、常に速く最小値に到達できる |
| 3 | 勾配がゼロに近い点では、どの方向に動いても変化が小さい |
| 4 | 勾配の向きに進むことで、損失を減らすことができる |
解答 3
解説します。
3 が適切です。勾配の大きさは変化の度合いを表します。ゼロに近いということは、周囲のどの方向に動いても値がほとんど変わらない状態です。極小点、極大点、鞍点がこれにあたります。
1 は誤りです。勾配が示すのは、現在の点における方向と変化の度合いだけです。最小値がどこにあるかは分かりません。だからこそ、少しずつ進むという反復計算が必要になります。
2 も誤りです。学習率を大きくすると、テイラー展開の1次近似が成り立たなくなります。損失が増えることも、発散することもあります。
4 は向きが逆です。勾配の向きは損失が増える方向です。減らすには逆向きに進みます。更新式のマイナス符号がその役割を担っています。
補足します。1 の誤解は初学者に非常に多く見られます。勾配は地図ではなく、足元の傾きを測る道具です。目的地の位置を教えるものではありません。
3変数の例で総復習
最後に、3変数の例で全体を確認します。
f(x, y, z) = 2x + 3y + 6z
勾配を求める
偏微分をそれぞれ計算します。
xで偏微分すると、残るのは2です。
yで偏微分すると、3です。
zで偏微分すると、6です。
∇f = (2, 3, 6)
勾配の大きさを求める
ピタゴラスの定理を3次元に拡張して計算します。
ちょうど7になります。2と3と6と7は、3次元で整数になる組み合わせです。
直感を確認する
係数を見ると、zが最も大きい6です。zを少し動かすだけで、値は6倍されて変化します。
したがって、z方向に進むのが最善に思えます。
計算で検証する
距離1だけ動く場合を比べます。
| 移動の方向 | 移動ベクトル | fの増加量 |
|---|---|---|
| z方向のみ | (0, 0, 1) | 6 |
| 3方向に均等 | (0.577, 0.577, 0.577) | 約6.35 |
| 勾配の方向 | (2/7, 3/7, 6/7) | 7 |
計算を確認します。
z方向のみの場合、2×0 + 3×0 + 6×1 = 6 です。
3方向に均等の場合、各成分は 1/√3 で約0.577です。増加量は (2 + 3 + 6)×0.577 = 11×0.577 で、約6.35になります。
勾配の方向の場合、長さを1にそろえると各成分を7で割って(2/7, 3/7, 6/7)になります。増加量は次のとおりです。
2×(2/7) + 3×(3/7) + 6×(6/7) = (4 + 9 + 36)/7 = 49/7 = 7
勾配の方向が最大の7を与えました。そして、この7は勾配の大きさと一致しています。
この例から分かること
z方向のみでは6、均等に進むと約6.35、勾配の方向で7になりました。
z方向が最も有利な軸であることは正しいのですが、それだけでは最善になりません。xとyの寄与も、適切な比率で取り込むことで初めて最大になります。
その比率が 2対3対6 であり、これが勾配の成分そのものです。
なお、係数の差が極端に大きい場合、たとえば1つの係数が他の100倍であれば、勾配の向きはその軸にほぼ一致します。しかし厳密な最大は、やはり勾配の向きにあります。
実際の機械学習では、パラメータが数百万個あります。1つ1つの寄与は小さくても、すべてを最適な比率で考慮することで最大の効率が得られます。勾配がその比率を与えています。
つまずきやすい点と講師向けの補足
研修や勉強会でこのテーマを扱う方に向けて、注意点を整理します。
受講者がつまずく4つの箇所
| つまずき | 対処 |
|---|---|
| スカラー場の意味が分からない | 明るさなど身近な例から始める。先に定義を示さない |
| 偏微分で、ほかの変数をどう扱うか迷う | 定数と見なすと明示し、計算例を3つ以上示す |
| 勾配がベクトルであることを忘れる | 入力はスカラー場、出力はベクトルと表で対比する |
| 勾配降下法の符号が逆に覚えられる | 「降下」という語と θ = π を結びつける |
3番目が最も多く見られます。
勾配という言葉が「傾き」を連想させるため、数値1つだと思い込む受講者が出ます。grad fと書けばベクトルであることが見えにくいため、∇fと併記するほうが伝わります。
説明の順序についての提案
この記事では、直感、数値での検証、証明の順に並べました。
この順序を推奨します。先に証明から入ると、何を示したいのかが伝わりません。
とくに有効なのが、数値で検証する段階です。f(x, y) = 3x + 4y を使い、x方向で3、y方向で4、45度で約4.95、勾配方向で5という表を示すと、「y方向が最善ではない」という点が納得されます。
45度の場合をあえて含めることが重要です。斜めに進めばよいという雑な理解を防げます。
3変数の例では、2x + 3y + 6z を使うと勾配の大きさが7になります。電卓を使わずに検算できるため、演習に適しています。
時間配分の目安
90分の勉強会で扱う場合の例です。
| 時間 | 内容 |
|---|---|
| 10分 | スカラー場とベクトル場の区別 |
| 20分 | 偏微分の計算演習 |
| 15分 | 勾配の定義と手計算 |
| 20分 | 数値で検証(3x + 4y の表を各自で埋める) |
| 15分 | 証明 |
| 10分 | 勾配降下法との接続 |
20分の検証パートを、受講者自身に計算させてください。表を埋める作業そのものが理解につながります。
まとめ
勾配について、確認した内容を整理します。
勾配は、スカラー場に対して定義される演算です。各変数の偏微分を成分として並べたベクトルになります。入力はスカラー場、出力はベクトルです。
勾配の向きは、関数の値が最も急激に増加する方向を指します。これは直感ではなく証明できる事実です。微小変化を内積の形に書き直し、なす角のコサインが最大になる条件を求めることで示されます。
勾配の大きさは、その方向に単位距離だけ進んだときの増加量です。大きければ急激に変化し、ゼロに近ければほとんど変化しません。
そして勾配降下法のマイナス符号は、最も急激に減少する方向を選ぶためにあります。θ = π のとき、コサインは-1となり、変化量が最小になるからです。
最後に1点、強調しておきます。勾配が保証しているのは、微小な移動に対する最急の方向だけです。テイラー展開の1次近似が前提にあるため、1歩が大きすぎると保証は失われます。学習率の調整が必要になる理由はここにあります。
次の学習ステップ
3つを提案します。
一つ目は、自分で例を作って手計算することです。f(x, y) = 8x + 15y のように、勾配の大きさが整数になる組み合わせを選ぶと検算が楽になります。8と15と17も直角三角形の辺の比です。
二つ目は、1次関数ではない例に進むことです。f(x, y) = x2 + y2 の勾配を求めてみてください。勾配が(2x, 2y)となり、点によって向きと大きさが変わります。原点で勾配がゼロになることも確認できます。これが極小点です。
三つ目は、方向微分へ進むことです。この記事では「勾配の方向が最大」という結論を扱いました。任意の方向に進んだときの変化率を一般的に表すのが方向微分です。勾配との内積で定義されるため、今回の内容がそのまま使えます。
機械学習の学習アルゴリズムを理解するうえで、勾配の意味を押さえておくことは土台になります。誤差逆伝播法も、結局は勾配を効率よく計算する手順です。
ディープラーニングの数学、E資格対策、新人エンジニア向けの技術研修についてのご相談は、セイ・コンサルティング・グループ株式会社までお問い合わせください。
投稿者プロフィール

