📊

中学生でもわかる機械学習の基礎【第5回】〜ニューラルネットワーク最適化〜

に公開

中学生でもわかる機械学習の基礎【第5回】

ニューラルネットワーク最適化

こんにちは!機械学習の学習を進めている皆さん、お疲れ様です。

これまで「ニューラルネットワークとは何か」「どうやって予測するのか」を学んできましたね。でも、ここで大事な質問が出てきます:

「じゃあ、ニューラルネットワークの中にある『重み』ってどうやって決めるの?」

これまでは「重みがすでに決まっている」という前提で学んでいました。でも実は、この重みを決めるプロセスがあります。それが**「最適化」(さいてきか)**です。

この記事では、複雑な数学を使わずに、ニューラルネットワークがどうやって学ぶのかを理解します。

第1章:ゴール地点を探す冒険

ケース1:迷った登山者の話

想像してください。あなたは山頂を目指す登山者です。でも、今は濃い霧の中にいて、周りが見えません。

     山頂 🏔️
     ^^
    ^^^^
   ^^^^^^
  ^^^^^^^^ ← ここだ!見えないけど...
 ^^^^^^^^^^
 ^^^^^^^^^^

あなたができることは何でしょう?

  • 足元を確認する
  • 「ここから上り坂か、下り坂か」を判断する
  • 上り坂の方へ歩いていく
  • また足元を確認する
  • これを繰り返す

つまり、山頂がどこにあるか見えなくても、「今いる場所から上へ進む」をくり返せば、いつかは山頂に着くということです。

ニューラルネットワークも同じ

ニューラルネットワークの重みも、同じような方法で決まります。

最初:重みはテキトー
    ↓
「現在の重みで、どれくらい間違っているか」を計算
    ↓
「少し上手くなる方向」を見つける
    ↓
重みを調整
    ↓
繰り返し!

この「最初から始めて、何度も繰り返して、だんだんよくなっていく」プロセスが**「最適化」**です。


第2章:「間違い具合」を測る

学校のテストで考えてみましょう

あなたが数学のテストを受けました。

  • 問題1:正解 ✓
  • 問題2:正解 ✓
  • 問題3:間違い ✗
  • 問題4:正解 ✓

先生は「4問中3問正解だから、75点です」と言いますね。

でも機械学習では、もう少し詳しく測ります。

問題1の答え「5」
正解「5」
差:0(完璧!)

問題2の答え「12」
正解「12」
差:0(完璧!)

問題3の答え「8」
正解「10」
差:2(ちょっと外れた)

問題4の答え「15」
正解「15」
差:0(完璧!)

全部の差を合わせると:0 + 0 + 2 + 0 = 2
この「2」が「どれくらい間違っているか」の目安

「損失」(ロス)という考え方

この「差の合計」のことを、機械学習では**「損失」(そんしつ)**と呼びます。

記号では L(Loss の L)と書きます。

L = 間違い具合の合計

L が小さい  → よく予測できている ✓
L が大きい  → 予測がはずれている ✗

なぜこんなことするの?

機械学習の目的は「予測を当てる」ことです。そのためには「今の予測がどれくらいはずれているか」を数字で知る必要があります。その数字が「損失」です。

犬の体型分析で考えてみましょう

前回の記事で「犬の体型を予測する」例をやりましたね。

ある犬について:

入力(入れるもの):
  体重:15kg  身長:50cm  年齢:3歳

ニューラルネットワークの予測:
  「この犬は、太り気味です」 → 数字では「0.6」

実際の答え(獣医さんが診断):
  「太り気味です」 → 数字では「0.7」

損失の計算:
  差 = |0.6 - 0.7| = 0.1
L = 0.1

これが小さいほど、予測が当たっているということです。


第3章:方向を探す(勾配?なんですか?)

ピザ屋の売上で考えよう

あなたがピザ屋を経営しています。重要な決定があります。

「明日のピザの値段、いくらに設定しようか?」

値段 500円  → 売上:5,000円
値段 600円  → 売上:5,500円  ← 少し上がった!
値段 700円  → 売上:5,300円  ← あれ、下がった

では、600円から 700円に上がるときは
上がるのか?下がるのか?

このとき「売上がどっち方向に進むのか」を知りたいですね。

値段 600円で売上 5,500円
値段 610円で売上 5,480円

「値段が上がると、売上は下がる」
つまり、売上を増やしたいなら「値段を下げるべき」

ニューラルネットワークでも同じ

ニューラルネットワークの重みも「どっち方向に変えると、損失が減るか」を知りたいのです。

現在の重み:w = 0.5
このときの損失:L = 0.8

重みを少し増やす:w = 0.6
損失がどうなる?→ L = 0.75 になった
(損失が 0.8 から 0.75 に減った!少し上手くなった)

重みを少し減らす:w = 0.4
損失がどうなる?→ L = 0.85 になった
(損失が 0.8 から 0.85 に増えた。悪くなった)

結論:
「重みを増やす方向」→ 損失が減る ✓
「その方向に進もう」

「勾配」という言葉の意味

勾配(こうばい)という難しい言葉が出てきます。でも、意味は簡単です。

勾配 = 「今いるところから、どっち方向に進むと
        目標に近づくか」

記号の説明

勾配を表す記号は (ナブラ)または ∂L/∂w(デルエルデルダブリュー)と書きます。

∂ は「少し変わったら」という意味です。
L は「損失」、w は「重み」です。

つまり:

∂L/∂w = 「重みが少し変わったら、
         損失がどれくらい変わるか」

なぜこんなことするの?

目の前に山があって、山頂へ向かいたいのに、霧がかかっていて見えない状況を思い出してください。そのとき、足元の傾きから「ここは上り坂か、下り坂か」を判断しますよね。

それが「勾配を見つける」ということです。


第4章:実際に進んでみる(勾配降下法)

「下り坂を探して、下る」の繰り返し

今、ニューラルネットワークの重みが決まっていない状態です。

Step 1:初めの重みをテキトーに決める

w = 2.0(テキトーな値)

Step 2:このときの損失を計算

L = 5.0(かなり大きい。悪い)

Step 3:「どっち方向に進むと損失が減るか」を調べる

勾配を計算すると:
「w を少し小さくする方向へ進むといいよ」

Step 4:その方向へ、少しだけ進む

w = 2.0 → 1.8(少し減らした)

Step 5:また損失を計算

L = 4.2(さっきより小さくなった!)

Step 6:またやる

w = 1.8 → 1.6
L = 3.5

何度も繰り返す...

w = 2.0  → L = 5.0
w = 1.8  → L = 4.2
w = 1.6  → L = 3.5
w = 1.4  → L = 2.9
w = 1.2  → L = 2.4
w = 1.0  → L = 2.0
w = 0.8  → L = 1.7
w = 0.6  → L = 1.5
w = 0.4  → L = 1.4  ← だんだん損失が減ってきた!
w = 0.2  → L = 1.35
w = 0.1  → L = 1.34
w = 0.05 → L = 1.34

最後のほう、減り方が小さくなってきました。これが**「最適な重みに近づいている」**という合図です。

ゲームキャラで例えてみましょう

RPGゲームのキャラクターをコントロールしている状況を想像してください。

   ゴール(最適な重み)🎁

   ^^
  ^^^^
 ^^^^^^  ← キャラがここにいる
^^^^^^^^^
^^^^^^^^^  ← 霧の中

キャラ「ゴールがどこかわからない...」

そんなときのAI:
「足元が下り坂だから、その方向に1歩進もう」

1歩進む
    ↓
「また足元を確認して...」

また下り坂
    ↓
「その方向に1歩」

何度も繰り返す
    ↓
やがてゴールに到着!

この方法の名前

この「勾配を見つけて、その方向に進む」を繰り返す方法を、**「勾配降下法」(こうばいこうかほう)**と言います。

英語では Gradient Descent(グラディエント・ディセント)です。

Gradient = 勾配(どっち方向に進むか)
Descent = 降下(下り坂に向かって進む)

なぜこんなことするの?

ニューラルネットワークの重みを完璧に決める数学的な式はないんです(複雑すぎるから)。だから「少しずつ調整していく」という方法を使うんです。

これは、フットボールの試合で「完璧なシュートを打つ」のではなく、「ボールを少しずつシュート方向に動かしていく」ようなものです。


第5章:実際の流れを見てみよう

ピザの値段設定の例(完全版)

ピザ屋の経営者として、最適な値段を見つけるプロセスを見てみましょう。

目的:売上を最大にする値段を見つける

売上 = 顧客数 × 1枚あたりの利益

顧客数と値段は関係がある
- 値段が安い → 客が多く来る
- 値段が高い → 客が少なくなる

損失 = 最大売上 - 現在の売上
損失が小さい = 良い経営

初期状態

試行1:値段 1000円
      売上:2,000円(むしろ客がいない...)
      損失:大きい

勾配を見つける

「値段を100円下げたら、売上がどう変わるか見てみよう」

値段 900円 → 売上 3,500円
値段 1000円 → 売上 2,000円

差 = 3,500 - 2,000 = 1,500

勾配 = 「値段を下げると、売上が増える」

少し下げてみる

試行2:値段 900円
      売上:3,500円(さっきより良い!)
      損失:小さくなった

また勾配を見つける

値段 800円 → 売上 4,200円
値段 900円 → 売上 3,500円

「さらに下げるといい」

また下げる

試行3:値段 800円
      売上:4,200円(さらに良い!)
      損失:さらに小さい

こうやって何度も何度も繰り返して、最適な値段を見つけるんです。

試行1:1000円 → 損失大
試行2:900円  → 損失中
試行3:800円  → 損失小
試行4:700円  → 損失中(あれ?上がった)
試行5:750円  → 損失小(ここが最適!)

複数の重みがある場合

実は、ニューラルネットワークの重みは1個ではなく、たくさんあります。

重み1:w₁ = 0.3
重み2:w₂ = -0.5
重み3:w₃ = 0.8
重み4:w₄ = 1.2
...

このすべての重みについて、同時に「勾配を見つけて、調整する」をやります。

w₁の勾配 → w₁を調整
w₂の勾配 → w₂を調整
w₃の勾配 → w₃を調整
w₄の勾配 → w₄を調整

すべての重みを少しずつ調整 → 1回の反復(はんぷく)完了
1回目の反復後:
w₁ = 0.25, w₂ = -0.48, w₃ = 0.85, w₄ = 1.15
損失 = 2.3

2回目の反復後:
w₁ = 0.22, w₂ = -0.46, w₃ = 0.87, w₄ = 1.10
損失 = 2.1

3回目の反復後:
w₁ = 0.20, w₂ = -0.45, w₃ = 0.88, w₄ = 1.06
損失 = 1.9

...何度も繰り返す...

最終的に、損失が小さくなり続ける限界に到達します。そこが最適な重みです。


第6章:大事なポイント(つまずきやすいところ)

ポイント1:「完璧な重み」は存在しない

完璧な重み = 損失が 0 になる重み

でも実際には...
損失は 1.2 とか 0.8 とかで止まります。

それは OK!

なぜ? ニューラルネットワークは確率的なもので、100%の予測はできないんです(天気予報だって完璧じゃありませんよね)。

ポイント2:進む量の決め方が大事

進む量が大きすぎたら
w = 1.0 → w = -0.5
ジャンプし過ぎて、最適な値を飛び越す
進む量が小さすぎたら
w = 1.0 → w = 0.99 → w = 0.98 → ...
いつまでたっても進まない

この「進む量」を「学習率」(がくしゅうりつ)と呼びます。

英語では Learning Rate です。記号では α(アルファ)と書きます。

学習率が大きい   → 速く進むけど、行き過ぎる可能性
学習率が小さい   → 遅いけど、安全

バランスが大事!

ポイント3:何回繰り返すか?

繰り返す回数 = エポック(Epoch)

1エポック = すべての訓練データを1回見ること

100エポック = 訓練データを100回見ること

多いほどいい?いいえ。

1エポック後:  L = 5.0
10エポック後: L = 2.0
50エポック後: L = 0.5  ← 良い!
100エポック後:L = 0.50 ← ほぼ変わらない
200エポック後:L = 0.51 ← あれ?悪くなった?

これを「過学習」(かがくしゅう)と言います。

なぜ悪くなるの?

何度も何度も同じデータで学ぶと、そのデータに特別に合わせた重みになってしまいます。すると、新しいデータに対しては予測が外れます。

学校での模擬試験に特化した勉強をしすぎると、
実際の試験では点数が下がることがあるのと同じ。

第7章:野菜の値段表で、全体を理解しよう

野菜の値段から、売上の利益を予測

野菜屋さんのデータ:

ニンジン:100円 → 売上:12,000円
キャベツ:80円  → 売上:15,000円
トマト:  150円 → 売上:8,000円

最適な値段はどれでしょう?

目標:売上を最大にする

試行1(初期状態):
  ニンジン120円、キャベツ100円、トマト170円
  合計売上:25,000円

損失を計算:
  L = 理想的な最大売上 - 現在の売上
    = 40,000 - 25,000 = 15,000

勾配を見つける:
  「ニンジンの値段を 10円 下げたら、売上が増える」
  「キャベツも下げると良さそう」
  「トマトは逆に上げた方がいい」

調整する:
  ニンジン120円 → 115円
  キャベツ100円 → 95円
  トマト170円 → 165円

試行2:
  合計売上:28,000円
  損失:L = 40,000 - 28,000 = 12,000(減った!)

またやる:
  ニンジン115円 → 110円
  キャベツ95円  → 92円
  トマト165円   → 163円

試行3:
  合計売上:30,500円
  損失:L = 40,000 - 30,500 = 9,500(さらに減った!)

...何度も何度も...

試行50:
  ニンジン105円、キャベツ85円、トマト140円
  合計売上:38,500円
  損失:L = 40,000 - 38,500 = 1,500(かなり小さい!)

ほぼ最適な値段に達した!

第8章:まとめと次へ

ニューラルネットワーク学習の流れ(最終版)

【初期化】
重みをテキトーに決める
      ↓
【反復開始】
      ↓
現在の重みで「損失」を計算
      ↓
「どっち方向に進むと損失が減るか」を見つける(勾配)
      ↓
その方向に、決められた量だけ進む(学習率 × 勾配)
      ↓
重みが更新される
      ↓
【反復終了?】
      ↓
繰り返す or 終わる
      ↓
【完成】
最適な重みが決定される

用語チェック

用語 意味 記号
損失 予測がどれくらい外れているか L
勾配 どっち方向に進むといいか ∇ または ∂L/∂w
勾配降下法 勾配を見つけて進むを繰り返す方法 -
学習率 1回に進む量 α
エポック 全データを何回見るか -
過学習 データに特化しすぎて、新しいデータに弱くなる -

なぜ重みの最適化が必要なのか?(もう一度)

もし重みを勝手に決めたら:
  予測が外れまくり ✗

勾配降下法で最適化したら:
  予測がまあまあ当たる ✓

でも完璧ではない(損失は 0 ではない):
  これが現実。だから、データを集めたり、
  モデルを工夫したり、永遠に改善し続けるんです。

最後に

ニューラルネットワークの重みを決めるプロセスは、実は私たちが何か新しいことを学ぶときのプロセスと似ています。

「何かに挑戦する」
      ↓
「失敗して、『今の方法の何が悪いか』を見つける」
      ↓
「改善する」
      ↓
「何度も繰り返す」
      ↓
「だんだん上手くなる」

ニューラルネットワークも、同じことをしているんです。


最後まで読んでいただき、ありがとうございました。質問や感想は、コメント欄でお待ちしています!

Discussion