見出し画像

G検定 学習ノート|Day 25

日付: 2026-04-25(土)
参考テキスト: 「ディープラーニング G検定公式テキスト 第3版」
範囲: 第4章 4-4「最適化手法」p.186-196
ステータス: #G検定 #ディープラーニング #最適化手法 #勾配降下法 #SGD #ミニバッチ #モーメンタム #Adam #early_stopping


📋 タスク

  • ⬜︎ 勾配降下法の考え方を説明できる

  • ⬜︎ バッチ勾配降下法・確率的勾配降下法・ミニバッチ勾配降下法の違いを説明できる

  • ⬜︎ 学習率・イテレーション・エポック・バッチサイズの意味を説明できる

  • ⬜︎ 局所最適解・大域最適解・鞍点・プラトーを説明できる

  • ⬜︎ モーメンタムやAdamなどの改善手法の役割を説明できる

  • ⬜︎ early stopping とハイパーパラメータ探索の考え方を説明できる


はじめに

前回(Day 24)では、正則化 によって過学習を防ぐ考え方を学びました。

今回はその続きとして、

👉 「誤差をどうやって実際に小さくしていくのか?」

を学びます。

ニューラルネットワークは、ただ作っただけでは賢くなりません。
誤差関数を見ながら、重みやバイアスを少しずつ更新していく 必要があります。

この「更新のしかた」こそが 最適化手法 です。


結論(先に読む)

最適化手法 = 誤差関数を小さくするようにパラメータを更新する方法。
基本は 勾配降下法
実務では ミニバッチ勾配降下法 が主流で、さらに モーメンタム・Adam などの改善手法 を組み合わせることが多い。


📖 学習内容


🟥 第1節:最適化とは

ニューラルネットワークの学習とは、誤差関数(損失関数)を最小化すること でした。

本来なら、誤差関数をパラメータで微分して、微分値が 0 になる点を解けばよさそうです。
でも実際のニューラルネットワークは、入力の次元も高く、パラメータ数も膨大です。

そのため、

  • 解析的にきれいな解を出すのは難しい

  • アルゴリズムで少しずつ探索する必要がある

という状況になります。

つまり、学習とは

誤差を計算
   ↓
どちらに動けば誤差が減るか調べる
   ↓
パラメータを少し更新
   ↓
これを何度も繰り返す

という作業です。

🧠 重要キーワード(この節)

  • 最適化(Optimization) :誤差関数をできるだけ小さくすること 

  • 誤差関数 / 損失関数 : 予測と正解のズレを数値化したもの 

  • パラメータ : 学習で更新される値。重みやバイアスなど 

  • 解析解 : 数式として直接求まる解。深層学習では難しいことが多い 


🟥 第2節:勾配降下法(Gradient Descent)

最適化の基本となるのが 勾配降下法 です。
考え方はとても直感的です。

  • 誤差関数を「山の地形」だと思う

  • 今いる場所から、より低い方向 に進む

  • それを繰り返して谷底(最小値)を目指す

という方法です。

図で理解:勾配降下法のイメージ

            山
           /  \
          /    \
         /      \
        /        \
      ●           \
       \           \
        \           \
         \        ★ 最小値
          \      /
           \    /
            \__/

● = 現在地
★ = 目指したい最小値

ここで使う「どちらに下ればいいか」の情報が 勾配 です。

  • 勾配 = 傾き

  • 傾きが大きいほど、急な坂

  • 傾きが 0 に近づくほど、平らな場所

勾配降下法では、この傾きの反対方向へ進んでいきます。

更新式のイメージ

新しいパラメータ
 = 今のパラメータ - 学習率 × 勾配

つまり、

  • 勾配が示す方向を見て

  • 学習率で歩幅を決めて

  • 少しずつ更新する

ということです。

🧠 重要キーワード(この節)

  • 勾配(Gradient) : 各パラメータに関する誤差関数の傾き 

  • 勾配降下法 : 勾配に沿って誤差が小さくなる方向へ進む最適化手法 

  • 更新式 : パラメータを次にどう変えるかを表した式 

  • 最小化 : 誤差関数の値を小さくしていくこと 


🟥 第3節:学習率(Learning Rate)

勾配降下法でとても重要なのが 学習率 です。

学習率は、

👉 「1回の更新でどれくらい進むか」

を決めるハイパーパラメータです。

図で理解:学習率が小さすぎる / 大きすぎる

[学習率が小さすぎる]
● → → → → → ★
到達まで時間がかかる

[学習率が大きすぎる]
● ─────→  ★  ←─────
      飛び越える、振動する

[適切な学習率]
● → → ★
ほどよく近づく

小さすぎると

  • 更新が少しずつすぎる

  • 収束まで時間がかかる

  • 学習がなかなか進まない

大きすぎると

  • 最小値を飛び越える

  • 右へ左へ振動する

  • 発散してしまうこともある

なので、学習率は大きければいいわけでも、小さければいいわけでもない のがポイントです。

🧠 重要キーワード(この節)

  • 学習率(Learning Rate) : 更新幅を決める値 

  • ハイパーパラメータ : 学習前に人間が決める設定値 

  • 収束 : 最適解に近づいて安定すること 

  • 発散 : 更新が不安定になり、解に近づかないこと 


🟥 第4節:バッチ勾配降下法

最も基本的なのが バッチ勾配降下法 です。

これは、

👉 全訓練データの誤差をまとめて計算してから、1回パラメータを更新する方法

です。

学習の流れ

全データの誤差を計算
   ↓
勾配を求める
   ↓
1回更新
   ↓
また全データの誤差を計算

特徴

  • 更新方向が安定しやすい

  • 理論的にはわかりやすい

  • でも毎回全データを見るので重い

データ数が少ないなら扱いやすいですが、ディープラーニングのようにデータ数が大きい場合は、メモリ不足や計算コストの大きさ が問題になります。

🧠 重要キーワード(この節)

  • バッチ勾配降下法 : 全データを使って1回更新する方法 

  • バッチ学習 : バッチ勾配降下法による学習 

  • 最急降下法 : バッチ勾配降下法の別名として使われることがある 

  • メモリ使用量 : 全データを扱うため大きくなりやすい 


🟥 第5節:確率的勾配降下法(SGD)

次に出てくるのが 確率的勾配降下法 です。
英語では Stochastic Gradient Descent、略して SGD と呼ばれます。

これは、

👉 データを1件ずつ取り出し、その誤差だけで更新する方法

です。

イメージ

データ1件 → 更新
データ1件 → 更新
データ1件 → 更新
...

特徴

  • 1回の計算が軽い

  • メモリ不足になりにくい

  • ただし、1件だけで判断するので更新方向がぶれやすい

つまり、軽いけれどノイズが多い 方法です。

バッチ学習との違い

例として全データ数が 1000 件ある場合、

  • バッチ学習:1000件を見て 1回更新

  • SGD:1件を見て 1000回更新

となります。

イテレーションとエポック

ここで大事なのが イテレーションエポック の区別です。

  • イテレーション = 更新式を1回計算した回数

  • エポック = 全訓練データを1通り使い切った回数

たとえばデータ数 1000 で SGD を使うと、

  • 1エポック = 1000イテレーション

になります。

🧠 重要キーワード(この節)

  • 確率的勾配降下法(SGD) : データ1件ごとに更新する方法 

  • オンライン学習 : SGD のように逐次更新していく学習方法 

  • イテレーション : パラメータ更新を1回行うこと 

  • エポック : 全データを1通り学習に使い切ること 

  • ノイズ : 更新方向のばらつき。悪い面もあるが局所解を抜ける助けになることもある 


🟥 第6節:ミニバッチ勾配降下法

実際のディープラーニングで最もよく使われるのが ミニバッチ勾配降下法 です。

これは、

👉 全データを小さなグループ(ミニバッチ)に分け、そのグループごとに更新する方法

です。

図で理解

全データ 1000件
↓
[50件] [50件] [50件] ... [50件]
   ↓      ↓      ↓
 更新   更新   更新

バッチ勾配降下法と SGD のちょうど中間にあたる方法です。

良いところ

  • 全データを一度に持たなくてよいのでメモリ効率がよい

  • 1件だけで更新するより方向が安定しやすい

  • GPU との相性がよい

  • 実務では最も一般的

バッチサイズ

ミニバッチ1個に何件入れるかを バッチサイズ と呼びます。

例:

  • 全データ数 = 1000

  • バッチサイズ = 50

なら、

  • ミニバッチ数 = 20

  • 1エポック = 20イテレーション

になります。

比較まとめ

| 手法              | 使うデータ  | 更新回数 | 特徴                     |
| バッチ勾配降下法    | 全データ    | 少ない  | 安定だが重い               |
| SGD              | 1件        | 多い    | 軽いがぶれやすい           |
| ミニバッチ勾配降下法 | 小グループ  | 中間    | 速度と安定性のバランスが良い |

🧠 重要キーワード(この節)

  • ミニバッチ勾配降下法 :小さなデータ集合ごとに更新する方法 

  • バッチサイズ : 1回の更新で使うデータ数 

  • ミニバッチ学習 :ミニバッチ勾配降下法による学習 

  • GPUとの相性 : 並列計算しやすく、実務で使いやすい 


🟥 第7節:勾配降下法の問題点

勾配降下法は便利ですが、いつもきれいに最適解へ行けるわけではありません。

ここで重要なのが、局所最適解・大域最適解・鞍点・プラトー です。

1. 局所最適解と大域最適解

  • 大域最適解:本当にいちばん低い最適解

  • 局所最適解:周囲だけ見れば低いが、全体では最良でない解

図で理解

         山
        /  \
   ☆   /    \___
     \_/         \____ ★

☆ = 局所最適解
★ = 大域最適解

局所最適解に入ると、「勾配が 0 だからここで止まっていい」と勘違いしてしまいます。


2. 鞍点(あんてん:Saddle Point)

さらに厄介なのが 鞍点 です。

これは、

👉 ある方向から見ると谷底、別の方向から見ると山頂

のような点です。

つまり、「完全な最小値ではないのに、勾配が小さくなって進みにくい場所」です。

図で理解

     /\
   /    \
  |  ●   |
   \    /
     \/

● = 鞍点

高次元では、局所最適解よりも 鞍点に引っかかる問題 のほうがむしろ多いと考えられています。


3. プラトー(Plateau)

鞍点の周辺には、勾配がほとんど 0 に近い平らな領域ができます。
これを プラトー と呼びます。

プラトーでは、

  • 勾配が小さい

  • どちらへ進めばいいか分かりにくい

  • 学習が止まったように見える

という問題が起きます。

🧠 重要キーワード(この節)

  • 大域最適解: 全体で最も良い解 

  • 局所最適解 :周囲では良さそうだが全体最良ではない解 

  • 鞍点(Saddle Point) :方向によって極小にも極大にも見える点 

  • プラトー :勾配が小さく平坦な領域。学習が停滞しやすい 


🟥 第8節:勾配降下法の改善手法

こうした問題を減らすために、さまざまな改善手法が考えられてきました。

1. モーメンタム(Momentum)

モーメンタムは、物理の慣性 の考え方を使った手法です。

イメージとしては、

  • 今まで進んできた方向の勢いを少し残す

  • ただのその場の勾配だけでなく、流れを使って進む

という方法です。

メリット

  • 小さな凹凸に振り回されにくい

  • 停滞しにくい

  • 鞍点やプラトーを抜けやすくなる

図で理解

普通の勾配降下:
右へ 左へ 右へ 左へ とぶれやすい

モーメンタム:
勢いを保ちながら前へ進みやすい

2. 代表的な改善手法

教科書で挙がっている代表例は次の通りです。

  • AdaGrad(Adaptive Gradient Algorithm):過去の経験(勾配の履歴)を活かして、賢く歩幅を調整しながら坂を下るアルゴリズム

  • Adadelta:AdaGradの『途中で力尽きてしまう』という弱点を克服し、より安定して坂を下り続けられるように改良されたアルゴリズム

  • RMSprop:過去の失敗(学習の停滞)を教訓に、常に適切な歩幅で最適解を目指せるように調整されたアルゴリズム

  • Adam(Adaptive Moment Estimation):過去のアルゴリズムを統合し、より効率化を追求した「集大成」的な手法。現在主流

  • AdaBound:Adamのスピード感と、従来手法(SGD)の着実さを兼ね備え、より確実に最適解を目指せるように調整された最新鋭のアルゴリズム

  • AMSBound:Adamの速さと、SGDの安定した質の高さを両立しつつ、さらに最新の理論で学習の『ブレ』を抑えた最適化アルゴリズム

これらは細かいアルゴリズムは違いますが、共通しているのは

👉 学習率や進む方向をうまく調整して、より効率よく収束させる

という目的です。

特に Adam は、現在でも非常によく使われる最適化手法です。

初学者の覚え方

  • モーメンタム:勢いをつける

  • AdaGrad / RMSprop:学習率を調整する

  • Adam:モーメンタム + 学習率調整の強力版

🧠 重要キーワード(この節)

  • モーメンタム: 慣性を利用して学習を加速する手法 

  • AdaGrad :パラメータごとに学習率を調整する考え方を持つ手法 

  • RMSprop:AdaGrad を改良した代表的手法 

  • Adam :実務で非常によく使われる高性能な最適化手法 

  • 収束 :解が安定して最適値に近づくこと 


🟥 第9節:early stopping(早期終了)

最適化を長く続ければ良い、というわけでもありません。
なぜなら、学習を続けすぎると 過学習 が起こるからです。

典型的には、

  • 訓練データに対する誤差:どんどん下がる

  • テストデータに対する誤差:途中から上がる

という現象が起きます。

この「上がり始めたところ」で学習を止めるのが early stopping(早期終了) です。

図で理解

誤差
↑
|\
| \        テスト誤差
|  \__/\__
|   \
|    \________________ 訓練誤差
+------------------------→ エポック

テスト誤差が悪化し始めた所で止める

early stopping はシンプルですが、とても強力です。
どんなモデルにも比較的使いやすく、無料で効く正則化 のように扱われることもあります。

ただし注意

近年は 二重降下現象(double descent) も知られており、
一度悪くなったあと、もう一度良くなるケースもあります。
そのため、「どこで止めるか」は機械的すぎず、慎重に見る必要もあります。

🧠 重要キーワード(この節)

  • early stopping : テスト誤差が悪化し始めたら学習を止める手法 

  • 過学習:訓練データに合わせすぎて未知データに弱くなること 

  • 二重降下現象(double descent) :一度悪化した性能が、さらに学習を進めると再び良くなる現象 

  • エポック:全データを一通り使い切る単位 


🟥 第10節:ハイパーパラメータの探索

パラメータは勾配降下法で学習できますが、ハイパーパラメータは自動では決まりません

たとえば、

  • 層の数

  • 各層のニューロン数

  • 学習率

  • バッチサイズ

  • ドロップアウト率

  • L1 / L2 正則化の強さ

などは、自分で決める必要があります。

この調整を ハイパーパラメータチューニング と呼びます。


1. グリッドサーチ

候補をあらかじめ決めて、その全組み合わせを試す方法です。

学習率: [0.1, 0.01, 0.001]
バッチサイズ: [16, 32, 64]

→ 3 × 3 = 9通り全部試す

特徴

  • わかりやすい

  • 候補が絞れているときに便利

  • 組み合わせ爆発しやすい


2. ランダムサーチ

候補を固定せず、範囲を決めてランダムに試す方法です。

学習率: 0.0001 ~ 0.1 の範囲
バッチサイズ: 16 ~ 128 の範囲
↓
ランダムに値を選んで試す

特徴

  • 値の見当がつかないときに使いやすい

  • 広い範囲を探索しやすい

  • グリッドサーチより効率がよいことも多い


3. その他の探索

教科書では、

  • ベイズ最適化(Bayesian Optimization):過去の結果から次に試すべき値を確率的に予測する。非常に効率的。

  • 遺伝的アルゴリズム:生物の進化のように「良い設定」を組み合わせて進化させる。

なども挙げられています。

ただし、どれも 探索に時間がかかる のが難点です。

🧠 重要キーワード(この節)

  • ハイパーパラメータチューニング:ハイパーパラメータを調整して性能を上げること 

  • グリッドサーチ : 候補値の全組み合わせを試す方法 

  • ランダムサーチ :範囲内からランダムに選んで試す方法 

  • ベイズ最適化 :過去の結果を利用しながら効率よく探索する方法 

  • 組み合わせ爆発:候補が増えると試す数が急増すること 


🟥 全体まとめ

誤差関数を小さくしたい
        ↓
勾配を見る
        ↓
勾配降下法で更新
        ↓
バッチ / SGD / ミニバッチを使い分ける
        ↓
局所最適解・鞍点・過学習に注意
        ↓
モーメンタム / Adam / early stopping で改善
        ↓
ハイパーパラメータ探索で性能を詰める

✅ 試験直前チェック

  • 勾配降下法とは?:勾配に沿って誤差を小さくする方向へ進む手法 

  • 学習率とは? :1回の更新幅 

  • バッチ勾配降下法とは?:全データで1回更新 

  • SGDとは? :1件ごとに更新 

  • ミニバッチとは? :小グループごとに更新。実務で主流 

  • イテレーションとは? :更新回数 

  • エポックとは?:全データを1周した回数 

  • 局所最適解とは?:周囲では良いが全体最良ではない解 

  • 鞍点とは? :方向によって極小にも極大にも見える点 

  • モーメンタムとは?:慣性で学習を加速する手法 

  • Adamとは? : よく使われる高性能な最適化手法 

  • early stoppingとは?: テスト誤差が悪化し始めたら止める 

  • グリッドサーチとは? :候補値の全組み合わせを試す 

  • ランダムサーチとは?: 範囲からランダムに試す 


🧠 30秒暗記フレーズ

「最適化の基本は勾配降下法。全データならバッチ、1件ならSGD、実務はミニバッチ。
学習率が歩幅。
局所最適解や鞍点には注意し、モーメンタムやAdamで改善。
止め時は early stopping、設定値はグリッドサーチやランダムサーチで探す。」


💬 感想

最適化手法は一見むずかしそうですが、やっていることの本質はかなりシンプルでした。

  • どちらへ進めば誤差が減るかを見る

  • どれくらい進むかを決める

  • 少しずつ更新を繰り返す

この3つです。

ただし、現実のディープラーニングでは

  • データが多い

  • パラメータが多い

  • 地形が複雑

  • 過学習も起きる

ので、基本の勾配降下法だけでは足りません。
だからこそ ミニバッチ・Adam・early stopping・チューニング が重要になる、という流れで理解すると整理しやすいです。


🔜 次回予告

Day 26:第4章 4-5「誤差逆伝播法」
👉 「勾配をどうやって効率よく計算するのか?」という、ディープラーニング学習の中核に入ります。


いいなと思ったら応援しよう!

hal1956 よろしければ応援お願いします! いただいたチップはクリエイターとしての活動費に使わせていただきます!