Upgrade to Pro — share decks privately, control downloads, hide ads and more …

SGDって本当に効果的なの?

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

 SGDって本当に効果的なの?

Avatar for じろう2

じろう2

May 27, 2026

Other Decks in Programming

Transcript

  1. (S)GDとは Gradient Descent (勾配降下法 ) 機械学習 (ニューラルネットワーク, NN) の学習において、モデ ルのパラメータ

    θ を更新する最適化手法。 前提 θ に依存する損失関数 L(x; θ) というものがあり、これを最小 化するような θ を探したい (x は入力/訓練データ) 手法 現在のパラメータ θ_old を用いた時の、訓練データ x 地点で の損失関数の勾配を計算し、勾配の逆方向に向かってパラ メータを更新し、θ_new を得る (左式参照) これは、勾配が「その地点において損失関数の値を最も減ら す方向ベクトル 」と解釈できるから有効。 https://10-5.jp/blog-tenfive/3725/
  2. 焼きなまし法 https://qiita.com/take314/items/7eae18045e989d7eaf52 最適化手法の一種で、局所最適解にはまることなく効率的に大域最適解を見つけることができる。AHC (AtCoder Heuristic Contest) などでよく使っています。 具体的には、現在いる場所からランダムに パラメータを変 動させ、探索の最初の方であれば損失関数が少し大きく

    なっても一定の確率で (常にではない) 採用する。拒否す ることもある。 逆に、探索の最後の方は損失関数を少なくなるような変 更しか採用しないようにする。 こうすることで、「初めは幅広くパラメータ空間を探索しつ つ、最後の方は良さげな部分を掘り下げて最適解を求 める」という挙動を実現できる!
  3. 学習率 (μ) SGD では、学習率 (μ) というものをもちいて「どのくらいパラメータを更新するか」を操作している。 一般的には、この学習率を学習が進むにつれて下げていく (だんだん更新幅を小さくしていく) などして、学 習の収束を助ける。

    → 一見「探索」になっていそうだが、そもそもの「更新の方向 (勾配)」が常に局所最適解の方向を向いてい るので、依然として谷の部分に詰まってしまいそう...?
  4. ミニバッチ (B) そもそも、損失関数 L(x; θ) を最小化したい訓練データ x は、一つではなく普通はたくさんある → 全ての学習データにおける勾配の平均値が真のパラメータ更新方向

    と言える しかし、全ての訓練データに対して勾配を計算するの は時間🕐とお金💰がかかってしまう ので、訓練デー タの中から一部をランダムに抜き出し (ミニバッチ )、 その部分においての勾配の平均値を用いる方法が 一般的。 → ミニバッチの役割は計算資源節約のためだけなのか?
  5. 「ノイズ」としてのミニバッチの役割 ミニバッチを用いたパラメータ更新は、フルバッチの真の勾配 (g) の推定値 (ĝ) にすぎない → 悪そう → しかし、「推定」=

    「真の値からのノイズ (ϵ)」とも解釈できる → このノイズが、焼きなましでいう「悪い方向にもたまに進む」という探索の役割を担ってい のではないか?と思った ĝ = g + ϵ, ϵ ∼ noise分布 θ ← θ − η⋅ĝ = θ − η(g+ϵ) = θ − ηg - ηϵ この ηϵ の項が探索になっていそう ノイズ = (決定的ではなく) 確率的なの で、ミニバッチを用いた GD を SGD (確率的勾配降下法 ) という
  6. 焼きなましみたいにできる? ノイズは (バッチサイズが小さいほど真の値からのずれが大きくなるので) バッチサイズ |B| に反比例する ので、学習が進むごとにバッチサイズを上げていけば実質ノイズが小さくなっていって焼きなましみたいに なるんじゃないか?と思った → 既に同じことを言っている論文があった

    (学習率↓もバッチサイズ↑も焼きなましと解釈できる) 学習率を減衰させるとき、それは SGDのダイナミクスにおけるランダムな揺らぎ のスケール g も同時に減衰させることになる。 学習率の減衰はシミュレーテッ ド・アニーリングとして解釈できる。 我々は代替的な手法を提案する。 学習率を減衰させる代わりに、訓練中に バッチサイズを増加させるという方法である。この戦略は、同じエポック数で学 習した場合にテスト性能がほぼ同等でありながら、パラメータ更新回数を大幅 に削減できる。 Smith et al. (2018) "Don't Decay the Learning Rate, Increase the Batch Size"
  7. ミニバッチのノイズの性質 ミニバッチのノイズは |B| を上げていくと焼きなましっぽい挙動になる → 納得はしたけど、依然、焼きなましはランダムなノイズを加え、ミニバッチは勾配方向に偏っ たノイズを加えているという点で違いがある → (最初の探索時だけでも) 普通にランダムにノイズを加えつつ焼きなましみたいにした方が

      効果的なのでは? この疑問を解決するために、以下の3つが重要だった: ① 理想的な過パラメータ化された二ューラルネットワークにおいては、パラメータの探索空間に 「悪い局所解 (八方塞がり) は存在しない」ということが示されている ② ミニバッチのノイズは、「勾配が大きい場所では大きくなり、平らな場所では少なくなる」 という性質を持っている ③ そもそも ML 学習のゴールは、訓練データにおける厳密な「最適値」を探すことではなく、   テストデータに適用しても汎用性が担保される & 損失関数が小さくなるような θ を探すこと
  8. ① 過パラメータ化NNにおける探索空間 過パラメータとは、「モデルの表現能力 ≥ 訓練データを完全にフィットするのに必要な能力」になっている状 態のことで、現代のニューラルネットはほぼそうなっている (スケーリング則) Nguyen & Hein

    (2018) "On the loss landscape of a class of deep neural networks with no bad local valleys" において以下が示されている: 我々は、標準的な活性化関数とクロスエントロピー損失を用いた過剰パラメータ化され た深層ニューラルネットワークの一クラスを特定する。このクラスのネットワークは、 悪 い局所的な谷(bad local valley)を持たないことが厳密に示される。ここでいう意味 は、パラメータ空間内の任意の点から出発して、損失が単調に増加しない連続的な 経路が存在し、その経路上でクロスエントロピー損失を任意に 0に近づけることができ る、ということである。 つまり現代の NN においては、勾配に従って SGD で損失関数を減らしていけば、「悪い局 所解」にはまることなく大域局所解に到達でき る (という傾向がある) → このNNパラメータの探索空間の性質   が通常の最適化問題との最も大きな差  と言える
  9. ② ミニバッチのノイズは平坦な極小値を好む 実は、ミニバッチのノイズにはそれ自身に平坦な極小値を好むという性質があるらしい これは、このノイズが Hessian (損失関数の2階微分 = 曲率) に比例しているためで、つまり •

    鋭い極小値付近では曲率が大きい → ノイズが大きい → 探索 • 平坦な極小値付近では曲率が小さい → ノイズが小さい → 収束 という挙動になるから Zhu et al. (2019) "The Anisotropic Noise in SGD Does Help Generalization" で説明されている: 我々の知る限り、本研究は初めて、以下のことを理論的・実験的に示した。 SGDでは、 確率的勾配ノイズの共分散がヘッセ行列に依存していることにより、 鋭い(sharp)極 小値よりも平坦な(flat)極小値が指数的に選ばれやすくなる。一方で、白色ノイズを 加えた勾配降下法( GD)では、平坦な極小値が鋭い極小値よりも選ばれやすくはなる ものの、その差は多項式的な程度にとどまる。
  10. ③ 平坦な地形 = モデルの汎化性能が高い そもそも機械学習における訓練の目的は、学習データの損失関数の値を最小にすることだけではなく、訓 練されたパラメータをテストデータに適用した時にも同じような汎化性能を示すようにすること 。 → だとすると、そもそも通常の最適化問題のような「厳密な最適解を見つける」ための手法が常  

    に有効とは限らない。ではどのようなパラメータが「汎化性能が高い」と言えるのか? → 一つの指標として、探索空間におけるそのパラメータ付近の地形が平坦である ことが挙げられる。こ れはこの記事でもよく説明されているし、下の図からも直感的。 Keskar et al. (2017) "On Large-Batch Training for Deep Learning: Generalization Gap and Sharp Minima"
  11. まとめ これら3つの点をまとめると、SGD がニューラルネットワークの訓練において効果的なのは、自動的に損 失関数の最小化と汎化性能を担保するようにパラメータを更新できるから、と言える (?) ① 現代の NN では、探索空間 に八方塞がりになるような「悪

    い極小値」が少ない ② ミニバッチ SGD は、平坦の 極小値に収束しやすい ③ 平坦な極小値は、機械学習 モデルの汎化性能を担保する SGD は局所最適解に陥らず広域最 適解を見つけられる/やすい そして、その収束する先は平坦な地 形 = 汎化性能が高くなりやすい 損失関数の最小化 汎化性能の担保