darkmocha.dev
Back to Home
2026-06-03機械学習, 深層学習, 勾配降下法, 損失関数, AI学習11 min read

機械学習 学習記録Part1

AIと対話しながら機械学習の基礎を学んだ記録。損失関数・勾配降下法・バックプロパゲーションまで、自分の直感から積み上げた。

機械学習初学者なので0から学び始めてみる。
テキストを読んでも「なんとなくわかった気」になるだけで、すぐ忘れる。そこで試しにClaudeに聞いてみたら、答えを教えてくれるんじゃなくて、逆にこちらに質問してきた。気づいたら自分でほとんど全部導き出していた。
その対話の記録をそのまま残しておく。

機械学習の3分類

まず「機械学習って何?」というところから入った。
Claude: 「学習する」ってどういうことだと思いますか?人間が何かを学ぶとき、どんなパターンがあるか考えてみてください。
少し考えてみると、3つくらいに整理できた。
  • 先生に「これが正解」と教えてもらいながら学ぶ
  • 自分でデータをじっと眺めて、パターンに気づく
  • 試しにやってみて、うまくいったら続ける・失敗したらやめる
Claude: その3つが、そのまま機械学習の3分類に対応しています。
  • 教師あり学習 ― 正解ラベルありで学習。スパム判定・価格予測など
  • 教師なし学習 ― 正解なしでパターンを自力発見。顧客分類・異常検知など
  • 強化学習 ― 報酬を頼りに試行錯誤。ゲームAI・AlphaGoなど
3つの本質的な違いは「何を使って正しい方向を知るか」だ。
この記事では教師あり学習の中の回帰(連続値予測)、つまり「数値を予測する」タスクを中心に深掘りしていく。

まず用語の整理から

回帰を学ぶうえで最初に混乱したのが、同じ概念にやたら名前が多いことだった。
Claude: 「特徴量」「予測変数」「目的変数」「応答変数」…これらが混乱する原因は何だと思いますか?
よく見ると、分野によって呼び方が違うだけで、中身は同じ概念だった。
概念機械学習での呼び方統計学での呼び方
モデルへの入力特徴量予測変数・説明変数
予測したい値目的変数応答変数・従属変数
たとえば家の価格を予測するなら、「面積・駅距離・築年数」が特徴量、「価格」が目的変数になる。この例を頭に置きながら読み進めると理解しやすい。

損失関数:「どれだけ外れているか」を数値にする

Claude: 家の価格予測モデルが「2,800万円」と予測したとして、実際が「3,200万円」だった。このズレをモデルはどうやって知ると思いますか?
自分: 引き算することでズレを知るよね。
Claude: 完璧です!では3件のデータがある場合、単純に足し合わせると何が問題になりますか?
データズレ
家A−400万
家B+500万
家C−500万
自分: ダメだと思う。+と−が混ざると相殺されて、実際はズレてるのに合計が0になってしまう。
Claude: まさにそこが問題の核心です。「負の数を正にする」方法って何がありますか?
自分: 二乗すればいいんじゃない?
Claude: 大正解!これが**MSE(平均二乗誤差)**です。では二乗することのデメリットは何だと思いますか?
自分: ズレが大きいデータの影響が、二乗のせいで極端に大きくなってしまう。
Claude: その通りです。外れ値が1件あるだけでモデル全体が引きずられてしまう。では「負の数を正にする」もう一つの方法は?
自分: 絶対値。
これがMAE(平均絶対誤差)。2つの使い分けはこんな感じ。
MSEMAE
ズレの扱い二乗絶対値
外れ値への感度高い(影響を受けやすい)低い(外れ値に強い)
向いている場面データが比較的きれいなとき外れ値が多いとき
この「ズレを数値で表す関数」のことを損失関数と呼ぶ。名前は難しそうだけど、要は「モデルがどのくらい間違えているかを測る物差し」だ。

勾配降下法:ズレを減らすようにパラメータを動かす

損失がわかったとして、次は「じゃあどうやってモデルを改善するの?」という話になる。
Claude: モデルの「何を」補正すると思いますか?y = ax + b の式を思い浮かべてみてください。
自分: a, bじゃない?
Claude: 正解です!それをパラメータと呼びます。
パラメータを変えながら損失を最小にするのが目標だ。損失とパラメータの関係をグラフにするとU字カーブになる。谷底が「損失が最小の点」で、そこに向かってパラメータを少しずつ動かしていくのが勾配降下法
「ボールが坂を転がって谷底へ向かう」イメージが一番わかりやすかった。
Claude: 「少しずつ」の量はどうやって決めると思いますか?
それを決めるのが学習率というパラメータ。
Claude: 学習率が大きすぎると何が起きそうですか?
自分: 振動するかな。谷底を飛び越えて行ったり来たりしそう。
Claude: まさに。では小さすぎると?
自分: 学習スピードが遅くなる。
学習率何が起きるか
大きすぎる振動・発散して収束しない
小さすぎる収束は安全だが遅すぎる
適切スムーズに谷底へたどり着く
ちなみに「微分して0になる点を直接求めれば速いのでは?」という疑問も出てきたんだけど、
Claude: パラメータが100万個あったら方程式も100万個になります。計算量はどうなりますか?
自分: 膨大になって現実的じゃない……なるほど。

局所最小値問題とSGD

Claude: U字カーブの例は単純でしたが、複雑なモデルだとグラフの形はどうなりそうですか?
自分: 谷がいくつもあるような複雑な形になる?
Claude: そうです。ボールが最初にはまった浅い谷で止まってしまうとどうなりますか?
自分: 本当の最低点まで到達できない……これが局所最小値(ローカルミニマム)問題か。
Claude: 対策として「ランダム性を加える」という発想があります。浅い谷にはまったボールに「ランダムにブレた力」を加えると何が起きそうですか?
自分: ブレのおかげで壁を乗り越えられることがある、か。
これが確率的勾配降下法(SGD)。全データではなく、ランダムに選んだ少量データで勾配を計算することで、毎ステップにブレが生まれて浅い谷から抜け出せる。
Claude: でも「適切な大域最小値にたどり着けるの?」という疑問はありませんか?
自分: パラメータが100万個あれば、全方向が上り坂になる点はほぼ存在できないよね。どこか1方向には必ず抜け道がある。
なるほど、高次元だと局所最小値自体がそもそも生まれにくいのか。
実用上は全データと1件の中間、ミニバッチ(32〜256件ずつ)を使うのが主流。計算量とランダム性のバランスが良い。

バックプロパゲーション:100万個のパラメータを効率よく更新する

勾配降下法でパラメータを更新するとして、パラメータが100万個あったらどうやって全部の勾配を計算するの?という疑問が出てくる。
Claude: 「各パラメータを少し動かして→損失を計算して→戻す」を100万回繰り返すとしたらどうなりますか?
自分: 計算量が膨大になるよね。
Claude: 工場の生産ラインで不良品が出たとき、どの工程から調べますか?最初から全部?
自分: 完成品に近い工程から遡って調べる方が効率いいよね。
Claude: まさにそれが**バックプロパゲーション(誤差逆伝播法)**の発想です。
損失が出たら、後ろの層から順に「この層のせいでどのくらい損失が増えたか」を計算して前に伝えていく。各層の勾配を「再利用」しながら計算するので、1回の処理で全パラメータの勾配が求まる。
学習の1ステップをまとめると、
① ミニバッチを取り出す
② 順伝播 → 予測値を出す
③ 損失を計算する
④ 逆伝播 → 後ろから勾配を計算・伝播
⑤ 全パラメータを更新
↻ 繰り返す(パラメータは引き継がれ少しずつ賢くなる)

勾配消失問題とReLU

バックプロパゲーションにも弱点がある。
Claude: 逆伝播で層を通るたびに勾配の値はどうなると思いますか?
自分: 小さくなる?
Claude: そうです。よく使われるシグモイド関数は両端で傾きがほぼ0になります。勾配が0.1の層が4つ続くとどうなりますか?
自分: 0.1 × 0.1 × 0.1 × 0.1 = 0.0001になって、最初の層はほとんど更新されなくなる。
これが勾配消失問題。層が深いほど最初の方の層に勾配がほとんど届かなくなって、学習が止まってしまう。
解決したのがReLUという活性化関数。
x > 0 のとき → そのまま x(傾き = 1)
x ≤ 0 のとき → 0(傾き = 0)
正の領域では傾きが常に1なので、1 × 1 × 1 × 1 = 1 で勾配が消えない。シンプルだけど強力。
Claude: ただしReLUにも弱点があります。0以下では傾きが完全に0になる。どう解決できそうですか?
自分: 負の値のときも0にせず、0.01とか極小の傾きを残す。
それがLeaky ReLU。0以下でも0.01xのほんわずかな傾きを残すことで、ニューロンが「完全に死ぬ」のを防ぐ。

全体の流れを整理すると

損失関数(MSE・MAE)でズレを測る
    ↓
勾配降下法でパラメータを調整する
    ↓
SGD・ミニバッチで効率化&局所最小値対策
    ↓
バックプロパゲーションで全パラメータを一括更新
    ↓
ReLU・Leaky ReLUで勾配消失を防ぐ
どれも「こういう問題があって、こう解決した」というストーリーになっていて、個別に覚えるより流れで追うほうが断然頭に入ってくる。

振り返って

今回の対話でおもしろかったのは、Claudeがほとんど何も教えてくれなかったこと。
自分で導き出した主なもの:
  • +−が相殺されるから引き算だけではダメだとわかる
  • 二乗か絶対値で解決できると気づく
  • 外れ値への影響の違いを自分で言語化する
  • a, bがパラメータだと気づく
  • 学習率が大きすぎると振動、小さすぎると遅くなるトレードオフ
  • 局所最小値で止まってしまう問題の存在
  • バックプロパゲーションは「後ろから調べる」発想
  • 勾配消失の原因と、Leaky ReLUによる対策
答えを教えてもらうより、質問されながら自分で考える方が圧倒的に頭に残る。AIをうまく使うコツの一つかもしれない。
次は「なぜ層を重ねると表現力が上がるのか」と「CNN・RNN・Transformer」を学ぶ予定。
Thanks for reading.