学習が進む原理——損失関数・勾配降下・逆伝播
レッスン4:学習が進む原理——損失関数・勾配降下・逆伝播
このレッスンで学ぶこと
- 損失関数を「どれくらい間違っているかの物差し」として直観的に理解する
- 平均二乗誤差と交差エントロピーの使い分けを、回帰と分類の対比で押さえる
- 勾配降下法を「山下り」の比喩で、学習率を「歩幅」の比喩で理解する
- 逆伝播を「誤差を後ろから配る」比喩で、連鎖律のイメージとともに把握する
- 過学習・汎化性能・Dropout といった「学習の質を保つ工夫」を理解する
前回のレッスン 3 では、機械学習の 3 分類(教師あり・教師なし・強化学習)を俯瞰しました。今回は「学習が具体的にどう進むか」の原理に踏み込みます。ニューラルネットワークが重みを少しずつ調整して「賢くなっていく」プロセスを、損失関数・勾配降下法・逆伝播の 3 つの部品で説明します。数式は極力使わず、山下りと連鎖律の比喩で理解していきます。
学習は「間違いを減らす作業」
ニューラルネットワークの学習を一言で言うと、「予測の間違いを、重みを少しずつ調整して減らしていく作業」です。この一言のなかに、3 つの部品が含まれています。
- 損失関数(loss function):「どれくらい間違っているか」を数値で表す物差し
- 勾配降下法(gradient descent):損失を小さくする方向に重みを動かす方法
- 逆伝播(backpropagation):勾配を効率よく計算する仕組み
損失関数で「今どれくらい間違っているか」を測り、勾配降下法で「どちらに重みを動かせば間違いが減るか」を決め、逆伝播でその調整量を効率的に計算する——この 3 段構えが、学習の心臓部です。
損失関数——間違いを数値で表す物差し
損失関数は、モデルの予測と正解の「ずれ」を 1 つの数値に変換する関数です。損失(loss)が小さいほど予測が正解に近く、大きいほど遠いことを意味します。学習はこの損失を最小化する方向で進みます。
損失関数の設計は、タスクの性質に合わせて選びます。ここでは代表的な 2 つを比喩で押さえます。
平均二乗誤差——回帰タスクの定番
平均二乗誤差(mean squared error、MSE)は、回帰タスクで最もよく使われる損失関数です。予測値と正解の「差の 2 乗の平均」を取ります。差を 2 乗する理由は、正負の打ち消し合いを防ぎ、大きな間違いをより強く罰するためです。
例えば、明日の気温を予測するモデルで、正解が 25 度、予測が 27 度なら、差は 2 度、2 乗すると 4 になります。予測が 20 度なら、差は 5 度、2 乗すると 25 で、間違いが大きいほど損失が急激に増える性質を持ちます。
交差エントロピー——分類タスクの定番
交差エントロピー(cross entropy)は、分類タスクで最もよく使われる損失関数です。「予測した確率分布と、正解の確率分布の食い違い」を数値化します。例えば、犬・猫・鳥の 3 分類で、正解が犬(確率 100 パーセント)のときに、モデルが「犬 90 パーセント・猫 5 パーセント・鳥 5 パーセント」と予測すれば損失は小さく、「犬 30 パーセント・猫 60 パーセント・鳥 10 パーセント」なら損失は大きくなります。
💡 ポイント 損失関数の数式そのものは覚える必要はありません。「予測と正解のずれを数値化する物差しであること」「タスクによって適切な物差しが違うこと」「回帰なら平均二乗誤差、分類なら交差エントロピーが定番であること」を押さえておけば十分です。
勾配降下法——山下りで最小値を目指す
損失関数が「今どれくらい間違っているか」を教えてくれても、それだけでは学習は進みません。「どちらに重みを動かせば損失が減るか」を知る必要があります。この方向を教えてくれるのが勾配(gradient)で、勾配を使って重みを更新する手法が勾配降下法(gradient descent)です。
山下りの比喩
勾配降下法は、「霧の立ちこめた山の中で、いちばん低い谷を目指す」比喩でよく説明されます。周囲が霧で見えなくても、足元の傾きはわかります。もっとも急な下り方向に少しずつ足を進めていけば、いずれ谷底にたどり着きます。
flowchart TB
A[高い位置<br/>損失大] --> B[足元の傾きを調べる]
B --> C[下り方向へ少し進む<br/>= 重みを更新]
C --> D{谷底に着いたか?}
D -->|まだ| B
D -->|着いた| E[学習完了<br/>損失最小]
損失関数の値を「地形の高さ」、重みの調整を「地形上の移動」と考えれば、勾配降下法は「損失を最小化する重みの組を探す旅」と言えます。
学習率——歩幅の設計
山下りで「一歩の大きさをどうするか」を決める設計値が、学習率(learning rate)です。学習率が小さすぎると、谷底までたどり着くのに時間がかかりすぎます。逆に大きすぎると、谷底を飛び越えて反対側の山を登ってしまうこともあります。
適切な学習率を選ぶのは実務でも難しく、経験と試行錯誤が必要です。近年は、学習の進行に応じて学習率を自動調整する仕組み(Adam などの最適化アルゴリズム)が主流になっています。
📝 補足 Adam(Adaptive Moment Estimation)は 2014 年に発表され、深層学習の実務で広く使われている最適化アルゴリズムです。名前だけ押さえておけば、実務で「Adam を使っています」と言われたときに、勾配降下法の一種として位置づけられます。
ミニバッチ SGD——現実的な山下りの方法
理論上の勾配降下法は「すべての訓練データを一度に使って勾配を計算する」ものですが、大規模データセットではこれは現実的ではありません。実際には、データを小分けにして少しずつ学習を進めるミニバッチ SGD(Mini-batch Stochastic Gradient Descent、確率的勾配降下法)が使われます。「バッチ」というのは「一度に処理するデータのかたまり」を指す言葉で、例えば 32 件・64 件などの小さな束で勾配を計算し、重みを更新していきます。
逆伝播——誤差を後ろから配る
勾配降下法が「どちらに動かすか」を決める枠組みだとすると、その「勾配」を効率よく計算する仕組みが逆伝播(backpropagation)です。逆伝播は、多層ニューラルネットの学習を実用化した中核アルゴリズムです。
「後ろから配る」の直観
逆伝播の名前は「後ろから前へ、誤差を伝えていく」ことに由来します。ニューラルネットは入力層から出力層へ「順伝播(forward propagation)」で計算を進めます。出力が出たら、正解との差(誤差)を損失関数で計算します。この誤差を、今度は出力層から入力層へ「後ろ向きに」伝えていくのが逆伝播です。
各層では、「その層の重みが、最終的な誤差にどれだけ寄与したか」を計算し、その寄与に応じて重みを調整します。層が浅くなるにつれて、誤差の情報が徐々に「配られて」いくイメージです。
flowchart LR
I[入力] -->|順伝播| H1[隠れ層1]
H1 -->|順伝播| H2[隠れ層2]
H2 -->|順伝播| O[出力]
O -.->|逆伝播で誤差を配る| H2
H2 -.->|逆伝播で誤差を配る| H1
H1 -.->|逆伝播で誤差を配る| I
連鎖律——微分の連鎖で計算を回す
逆伝播の数学的な骨格は、微分の連鎖律(chain rule)です。「A の変化が B に影響し、B の変化が C に影響する」ときに、「A の変化が C に与える影響」を、途中の影響の積で計算する規則です。
数式そのものは省きますが、比喩としては「バケツリレーで情報を後ろから前へ渡す」イメージが近いです。1 個 1 個の受け渡し(1 層分の微分)は単純ですが、それを層数分だけ連ねることで、深い NN でも勾配を計算できます。
逆伝播の意義
逆伝播が広く知られる形にまとめられたのは、1986 年のラメルハート・ヒントン・ウィリアムズによる『Nature』論文でした。それ以前にも類似のアイデアはありましたが、この論文が多層 NN の学習を実用化する大きな契機になりました。逆伝播がなければ、多層のニューラルネットワークを効率的に学習させることはできず、現在のディープラーニングも Transformer も存在しなかったと言えます。
⚠️ 注意 逆伝播は「魔法」ではなく、あくまで勾配を効率よく計算するための計算手続きです。学習が本当に進むかどうかは、損失関数の設計・データの質・学習率の選び方・モデルの表現力など、多くの要因に左右されます。逆伝播だけで学習が上手くいくわけではありません。
過学習と汎化性能——「覚えすぎ」を避ける工夫
学習が進めば進むほど、モデルは訓練データを正確に予測できるようになります。しかし、これが行き過ぎると、モデルは訓練データを「丸暗記」してしまい、新しいデータで性能が落ちる現象が起きます。これが過学習(overfitting、過剰適合)です。
過学習の見分け方
過学習は、訓練データでの損失は下がり続けているのに、検証データ(学習に使っていない別のデータ)での損失が途中から上がり始める形で現れます。訓練データで 99 パーセントの精度が出ているのに、実運用では 60 パーセントしか当たらない——こういう症状は、過学習の典型です。
汎化性能——新しいデータでも当たる力
私たちがモデルに求めているのは、訓練データでの高精度ではなく、「見たことのないデータでも予測が当たる能力」です。これを汎化性能(generalization)と呼びます。汎化性能を高く保つには、過学習を避ける工夫が必要になります。
Dropout——ランダムにニューロンを無効化する
過学習を緩和する代表的な手法が、Dropout です。学習中にランダムに一部のニューロンを「無効化」し、その分だけほかのニューロンで補うように学習を進めます。特定のニューロンに頼りきりの構造ができるのを防ぎ、より頑健な学習を促します。AlexNet でも Dropout が使われ、深層学習実務の標準的な部品になりました。
その他にも、L2 正則化(重みの大きさを抑える制約)、データ拡張(元データを回転・反転・切り抜きなどで水増しする)、早期打ち切り(Early Stopping、検証損失が上がり始めたら学習を止める)など、多くの工夫があります。実務では複数を組み合わせて使うのが普通です。
LLM の学習でも同じ原理が働いている
ここまでの「損失関数・勾配降下・逆伝播・過学習対策」は、パーセプトロン時代から続く原理で、現代の LLM でもそのまま使われています。LLM の事前学習では、次の単語を予測する交差エントロピーを損失関数とし、Adam 系の最適化アルゴリズムで勾配降下し、逆伝播で数千億〜数兆のパラメータを更新していきます。
規模が桁違いに大きくなり、計算資源も桁違いに必要になりましたが、学習の心臓部は昔から変わっていません。この安定した原理の上に、Transformer という新しいアーキテクチャと、Web 上の大量テキストという豊富なデータが組み合わさって、現代の LLM が生まれています。
まとめ
このレッスンでは、以下のことを学びました。
- ニューラルネットの学習は、損失関数・勾配降下・逆伝播の 3 部品で進むこと
- 損失関数は「どれくらい間違っているか」の物差しで、回帰では平均二乗誤差、分類では交差エントロピーが定番であること
- 勾配降下法は「山下りで谷底を探す」比喩で理解でき、学習率が歩幅の設計値になること
- ミニバッチ SGD が実務での現実的な山下り方法で、Adam などが学習率を自動調整すること
- 逆伝播は「誤差を後ろから配る」仕組みで、連鎖律の連なりで多層 NN の勾配を効率よく計算すること
- 過学習を避けるための工夫として、Dropout・L2 正則化・データ拡張・早期打ち切りなどがあること
- これらの原理はパーセプトロン時代から変わらず、現代の LLM でもそのまま働いていること
次のレッスンでは、いよいよ Transformer の中身に踏み込みます。2017 年の「Attention Is All You Need」から始まった、Self-Attention と QKV の仕組みを、検索と情報取り出しの比喩で解説していきます。
確認クイズ
このレッスンの理解度をチェックしましょう。