ホーム›Part 2 機械学習の基礎›2.3

Part 2 · 機械学習の基礎

2.3 勾配降下法

坂を下って最適解を探す

読了目安 10分前提:2.2 線形回帰と損失関数、0.2 数式の読み方(微分)▶ 動画(約5分)

この回で分かること

  • 勾配降下法 が「坂の傾きを見て、下る向きに少しずつ進む」方法であることを説明できる
  • 更新の式を使って、パラメータを1歩分動かす計算ができる
  • 学習率 の大きさの影響と、ミニバッチ・局所解・乱数による学習結果のばらつきを説明できる

直感で理解する

霧の深い山で、谷底(いちばん低い所)を探すことを考えてみましょう。遠くは見えませんが、足元の地面がどちらに傾いているかは分かります。そこで「足元が下っている向きに一歩進む」をくり返せば、やがて谷底にたどり着けます。これが 勾配降下法 です。

機械学習では、山の高さが損失(2.2 の MSE)、地図の上の位置がパラメータにあたります。損失が最も小さくなる位置を、坂の傾き(勾配)を手がかりに探すのです。2.2 の直線は式で一度に求まりましたが、ニューラルネットワークのように式では解けないモデルでも、この方法なら探せます。

2.2 の空走距離の例で、切片を b = 0.47 に固定し、傾き a だけを探してみます。計算を見やすくするため、速度は 10 km/h 単位で表します(時速40km なら 4.0)。すると、いちばん良い傾きは約2.0 になります。

損失(MSE) 0 20 40 60 0 1 2 3 4 傾き a(10 km/h あたりの空走距離 m) スタート(a = 0) 1歩目 谷底(a ≈ 2.0)
傾き a を変えたときの損失(MSE)の曲線と、学習率 η = 0.02 で勾配降下法を進めたときの位置(黒い点、5歩目まで)。坂が急な所では大きく進み、谷底に近づくと坂がゆるやかになるので、歩幅も自然に小さくなる。切片 b は 2.2 の値(0.47)に固定。

スタートの a = 0 では坂が急なので、1歩で a ≈ 1.28 まで大きく進みます。谷底に近づくと坂がゆるやかになって歩幅も小さくなり、5歩で a ≈ 1.98 とほぼ谷底に落ち着きます。

数式で確かめる

① 更新の式

$$\theta \leftarrow \theta - \eta\,\frac{\partial L}{\partial \theta}$$

← は「左のものを右の値で置き換える」という意味です(記号表)。\(\partial L / \partial \theta\) は、θ を少しだけ動かしたときの損失 L の変化の割合、つまり坂の傾きです(0.2 の偏微分)。傾きが正(右上がり)なら θ を減らし、負(右下がり)なら θ を増やすので、いつも下る向きに進みます。η(イータ)は 学習率 で、1歩の大きさを決めます。

② 例で1歩ずつ計算する

MSE を a で微分すると、傾きは次の式になります。

$$\frac{d\,\mathrm{MSE}}{da} = -\frac{2}{n}\sum_{i=1}^{n} x_i\,(y_i - a x_i - b)$$

a = 0 のとき、この値は約 −64.2(右下がりの急な坂)です。学習率 η = 0.02 なら、

$$a \leftarrow 0 - 0.02 \times (-64.2) \approx 1.28$$

次の a = 1.28 では傾きが約 −22.9 なので、a ← 1.28 + 0.02 × 22.9 ≈ 1.74。これをくり返します。パラメータが複数あるときは、それぞれの偏微分を並べた勾配 \(\nabla L\)(0.2)を使って、すべてのパラメータを同時に動かします。

$$\boldsymbol{\theta} \leftarrow \boldsymbol{\theta} - \eta\,\nabla L$$

③ 学習率の選び方

同じ a = 0 から、学習率だけを変えて進めた結果です(いちばん良い値は a ≈ 1.99)。

学習率 η1歩後2歩後3歩後10歩後様子
0.0050.320.590.821.65小さすぎて、なかなか進まない
0.021.281.741.901.99ちょうど良い
0.053.211.252.451.98行き過ぎて、左右に揺れながら近づく
0.074.49−1.145.92−17.1行き過ぎがどんどん大きくなる(発散)

学習率が大きすぎると、谷を飛び越えて反対側の坂に行き、揺れたり、どんどん遠ざかったり(発散)します。小さすぎると安全ですが、時間がかかります。実際の学習では、はじめは大きめにして、だんだん小さくするといった工夫をします。

④ ミニバッチ(確率的勾配降下法)

データが数百万枚の画像になると、1歩ごとに全データで傾きを計算するのは重すぎます。そこで、毎回ランダムに選んだ一部のデータ(ミニバッチ、たとえば32枚)だけで傾きを見積もって進みます。これを 確率的勾配降下法(SGD)と呼びます。傾きの見積もりにはばらつきがありますが、1歩が軽いので、全体としては速く谷底に近づけます。データ全体を1周することを、1エポック と数えます。

⑤ 谷がたくさんある地形(局所解)

線形回帰の損失はきれいなお椀の形で、谷底は1つだけです。ところがニューラルネットワークの損失は、谷や平らな所がたくさんある複雑な地形になります。周りの中では最も低いけれど、全体で最も低いとは限らない谷を 局所解 と呼びます。どの谷に落ち着くかは、スタート地点(パラメータの初期値)やミニバッチの選ばれ方(乱数)で変わります。そのため、同じデータ・同じ設定で学習しても、少しずつ違うモデルができることがあります。

自動運転との接点

  • 認識AIの学習はこのくり返し:カメラ画像から物体を見つけるモデルなどは、数百万〜数十億のパラメータを、ミニバッチの勾配降下法で何十万歩も動かして作られます。
  • 学習は毎回同じ結果になるとは限らない:初期値や乱数で、できるモデルが少しずつ変わります。安全の説明では、どのデータ・設定・乱数の種で学習したかを記録し(構成管理)、何回か学習し直して性能のばらつきを確かめることが大切です。→ 5.9 AIコンポーネントの安全、5.10 セーフティケース
  • 損失が下がる ≠ 安全になる:損失はデータ全体の平均的なずれです。数の少ない危険な場面(夜間の歩行者など)のずれは、平均に埋もれやすくなります。重要な場面に重みを付ける、場面ごとに分けて評価する、といった工夫が要ります。→ 2.7 評価指標
  • いつ学習を止めるか:訓練データでの損失が下がり続けても、新しいデータでの性能は途中から悪くなることがあります。学習に使わないデータで性能を見ながら、止めどきを決めます。→ 2.6 過学習と正則化

まとめ

  • 勾配降下法は、損失の傾き(勾配)を見て、下る向きに少しずつパラメータを動かし、損失が最も小さい所を探す方法
  • 更新は「θ ← θ − η × 傾き」。学習率 η が小さすぎると遅く、大きすぎると揺れたり発散したりする
  • 大量のデータではミニバッチで進める(SGD)。複雑なモデルでは初期値や乱数で結果が変わるので、記録と複数回の確認が大切

確認クイズ

Q1. 損失の傾き ∂L/∂θ が正(右上がり)のとき、θ は増やす?減らす?

減らします。右上がりなら、左(θ を減らす向き)に進むと損失が下がるからです。更新の式の「−」が、この向きを決めています。

Q2. θ = 2、傾き = 4、学習率 η = 0.1 のとき、1歩後の θ は?

θ ← 2 − 0.1 × 4 = 1.6 です。

Q3. 学習を始めたら、損失が下がるどころか、どんどん大きくなりました。まず疑うべきことは?

学習率が大きすぎることです。谷を飛び越えるたびに反対側の高い所へ行ってしまい、発散しています。学習率を小さくして試します。

Q4. 同じデータ・同じ設定で2回学習したら、検出率 91.2% と 90.5% のモデルができました。なぜ?安全上どうする?

パラメータの初期値やミニバッチの選ばれ方が乱数で決まるため、落ち着く谷が少し変わるからです。どのデータ・設定・乱数で学習したかを記録し、複数回の学習で性能のばらつきを確かめたうえで、ばらつきも含めて評価します。

もっと知りたい人へ