結論は?
詠架/AI副参事・重みさん、でかくなりすぎて暴走すんなよってブレーキかけるやつだよ!
・デカくなりすぎると痛い目見るぞ、って体に覚えさせるんだよ
・『W』は、Weight Decay(本来の姿)のWだよ
はじめに
おいおい、またモデルがトレーニングデータに一目惚れして、テストデータ見たら「誰だお前?」状態になってるの? そんなお前にピッタリの処方箋がWeight Decayだよ。
名前からして「重みを減衰させる」って感じでカッコいいけど、要は「重みさん、でかくなりすぎて暴走すんなよ」ってブレーキかけるやつ。 真面目に言うと機械学習・深層学習の正則化の定番技で、過学習対策の王道。
1. Weight Decayって結局何やってんの?超簡単に言うと



Weight Decay(重み減衰)は、ニューラルネットワークの重み(パラメータ)が大きくなりすぎないようにペナルティをかける手法だよ!
重みがデカくなりすぎると、モデルがトレーニングデータの細かすぎるノイズまで覚えちゃって、汎化性能(新しいデータへの対応力)がゴミになる。これが過学習。
だからWeight Decayは「重みさん、ちょっとずつ小さくしとけよ」って強制的に縮めてくれる。 結果、モデルがシンプルになって、テストデータでもちゃんと仕事するようになる。最高に優しい正則化だろ?
イメージで言うと
- 過学習モデル → 筋肉ムキムキのマッチョ(トレーニングデータだけ無敵)
- Weight Decayあり → スリムで実戦向きのファイター(どこでも強い)
2. 数式(分かりやすく説明するよ)



ここからちょっとだけ数式だよ。閉じないて!待って!
「小学生でも分かる」レベルまで落としてやるから。
まず、普通の「損失関数(Loss)」ってのは、AIがどれだけミスったかの「反省文」みたいなもんだ。
Plaintext
今日の反省(Loss) = どれだけ間違えたか(データ誤差)
ここに、Weight Decay(重み減衰) という名のスパルタ教師が乱入すると、式はこうなる。
Plaintext
今日の反省(Loss) = どれだけ間違えたか + λ × (お前、態度デカすぎだろ税)
この λ(ラムダ) ってのがスパルタ教師の「厳しさレベル」。
そして (お前、態度デカすぎだろ税) の部分が $\sum(w^2)$ だ。
つまり、AIの中身(重み $w$)が数字としてデカくなりすぎて調子に乗ってると、「オラァ! 税金払え!」ってペナルティ(Loss)が爆増する仕組みだ。
結果、AIは「調子乗ると損するから、謙虚(小さい値)でいよう…」と学習する。これが過学習を防ぐコツってわけ。
3. 【最大の罠】L2正則化とWeight Decayの違い
ここ、テストに出ます。 ここで「あ〜はいはい、統計でいうL2正則化と同じねw」とか知ったかぶりした奴。 残念でしたー!! それ、昔の話ですー!!
教科書で習った「Weight Decay ≒ L2正則化」という常識、実はSGD(確率的勾配降下法)という「古き良き時代」限定の話なんですよ。
今の主流であるAdamみたいな最適化手法を使う時、この2つは計算するタイミングも場所も全然違う別物になります。「同じだろ」って設定してると、AIの精度がゴミになるからマジで気をつけてください。
SGDの世界:平和だったあの頃 昔ながらのSGDくんは素直でした。計算式上では、L2正則化とWeight Decayは数学的に完全に一致します。いわば双子。どっちを使っても結果は同じ。「L2正則化=Weight Decay」と言っても誰も怒りませんでした。
Adamの世界:悲劇の始まり 問題は、現代の主役Adamを使った時です。 Adamは「学習が進んでいないパラメータは大きく、進んでいるものは小さく」という適応的な調整(スケーリング)を勝手に行います。
ここで、教科書通りに「L2正則化(Lossにペナルティ追加)」をやるとどうなるか?
- あなたがLossにペナルティ(L2)を混ぜる。
- Adamがそれを見て「おっ、勾配が来たな! よーし、僕の機能でスケーリングしちゃうぞ!」と張り切る。
- 結果、「減らしたい重みが減らず、減らさなくていい重みが減る」という支離滅裂なペナルティが完成します。
例えるなら「ダイエット」です。
- SGD(Weight Decay): 毎日カツ丼を我慢する。 → 痩せる。
- Adam + L2正則化: カツ丼を我慢しようとしたら、お節介なオカン(Adam)が「あら〜!あんた元気ないわね!栄養足りてないんじゃない?プロテイン足しといたわよ!」と、勝手に調整を入れてくる。 → 痩せない(精度が出ない)。
正解は「AdamW」一択 「じゃあどうすりゃいいんだよ!」って話ですが、そこで天才たちがブチ切れて作ったのが「AdamW」です。
これはDecoupled Weight Decay(分離されたWeight Decay)という手法で、 「Adam、お前は余計なことすんな。スケーリング計算が終わった『後』で、俺が直接重みを削るから」 という処理をします。オカンの干渉を受けずに、強制的に脂肪吸引するようなもんです。
結論:コードを見直せ optimizer = Adam(..., weight_decay=1e-5) って書いてませんか? それ、オカンにプロテイン盛られてますよ。
今すぐこう書き換えてください。 optimizer = AdamW(..., weight_decay=1e-5)
たった一文字「W」があるかどうか。これでモデルの挙動は劇的に変わります。悪いことは言いません。黙って「W」をつけておきましょう。
4. 実践的なベストプラクティス(2026年現在)
- 値の目安:0.01 ~ 0.0001。大きすぎるとアンダーフィッティング、小さすぎると意味なし。
- BiasとLayerNormは除外:BERTとかTransformer系ではbiasやγ/βパラメータにはWeight Decayかけないのが鉄則。過学習より安定性が大事。
- AdamWをデフォルトに:もうAdam単体は時代遅れ。AdamWかLionとか新しいやつ使え。
- LLM(大規模言語モデル)では超重要:1エポック学習の時代は、Weight Decayがトレーニングの安定性と最終性能を劇的に上げる。
- スケジュール:Cosine Annealingと組み合わせると最強。
5. 効果を実際に感じるポイント
Weight Decayなし → トレーニングロス爆下がり、テストロス爆上がり(過学習おめでとう!) Weight Decayあり → 両方バランスよく下がって、テスト精度が5〜10%上がることもザラ。
特に画像認識(ResNet)や自然言語処理(Transformer)で効果抜群。 お前が作ったモデルがいつも過学習で泣いてるなら、まずweight_decay=1e-2入れてみろ。9割解決するから。
まとめ:Weight Decayはお前のモデルのダイエットコーチだ
過学習で悩んでるやつは全員使え。シンプルなのに効果抜群。 L2正則化と混同するな、AdamW使え、値は小さすぎず大きすぎず。 これでまたお前も「俺のモデル、汎化性能バッチリ!」ってドヤれるぜ。










コメント