読むだけでちょっと賢くなる、架空のまとめスレ

【疑問】学習データでは誤差ほぼ0やのに、新しいデータでボロボロ。過学習ってどう防ぐん?【AI】

23レスカテゴリ:AI・機械学習
1: 名無しさん

学習データでの誤差はほぼ0までいったのに、新しいデータで試したら、まるで当たらん
学習がうまくいきすぎたってこと?

2: 名無しさん

>>1
過学習(オーバーフィッティング)。学習データにたまたま入ってたノイズまで覚えこんで、本当の規則から外れた状態

3: 名無しさん

>>2
具体例ある?

4: 名無しさん

>>3
にノイズ(標準偏差0.2)を足した点を10個作って、多項式を最小二乗法で当てはめた一例
誤差(RMSE、2乗誤差の平均の平方根)を、学習データと、新しく作った1万点で比べると

5: 名無しさん

>>4
9次式は、学習データでは0やのに、新データでいちばん悪いんか

6: 名無しさん

>>5
係数が10個あるから、10個の点を全部ぴったり通る曲線が作れてしまう。点と点の間で大きく波打って、本当の曲線から外れる
1次式は逆に単純すぎて、どっちのデータでも外れる(学習不足)

7: 名無しさん

>>6
新データでの誤差は、0.2より下にはならんのやろ。ノイズの分は当てようがないから

8: 名無しさん

>>7
そう。0.2がどんなモデルでも越えられない床で、3次式はそこそこ近い
統計の言い方だと、単純すぎるモデルはバイアス(ずれ)が大きく、複雑すぎるモデルはバリアンス(データによるぶれ)が大きい

9: 名無しさん

新しいデータで試さんと、過学習してるかは分からんの?

10: 名無しさん

>>9
学習に使わないデータを取り分けておいて、そっちの誤差を見る(検証データ)
学習データの誤差は下がり続けてるのに、検証データの誤差が途中から上がり始めたら、過学習のサイン

11: 名無しさん

>>10
上がり始めたところで学習を止めたらええんちゃう

12: 名無しさん

>>11
それが早期終了(early stopping)。検証データの誤差がいちばん低かったところのパラメータを使う。よく使われる方法

13: 名無しさん

ほかの防ぎ方は?

14: 名無しさん

>>13
正則化。損失に「パラメータが大きいことへの罰」を足す

は罰の強さ。2乗の和を使うのを L2 正則化と呼ぶ(ニューラルネットでは重み減衰とも呼ぶ)

15: 名無しさん

>>14
罰を足すと、なんで防げるん

16: 名無しさん

>>15
大きく波打つ曲線を作るには、大きな係数が要る。>>4の9次式は、係数の絶対値が最大で70万くらいになってた
同じ9次式に の L2 正則化をつけると、係数は最大で18くらいにおさまって、誤差は学習 0.12、新データ 0.30 まで改善した

17: 名無しさん

ニューラルネットならではの方法もある?

18: 名無しさん

>>17
ドロップアウト(Srivastava ら、2014年)が代表。学習中、ニューロンをランダムに(たとえば半分)一時的に止めて計算する
特定のニューロンの組み合わせに頼れなくなるから、ノイズを覚えこみにくくなる。予測するときは、全部のニューロンを使う

19: 名無しさん

>>18
いちばん効くのは何?

20: 名無しさん

>>19
データを増やすこと。>>4の9次式も、点を1000個にして当てはめ直したら、新データでの誤差は約0.20で、ほぼ床まで下がった
画像を少し回転させたり反転させたりして水増しする(データ拡張)のも、この考え方

21: 名無しさん

大きいモデルほど過学習しやすいんやったら、LLM みたいな巨大なモデルはなんで大丈夫なん

22: 名無しさん

>>21
学習データもけた外れに多い、というのが一つ
あと、パラメータを増やしていくと、検証データの誤差がいったん上がってから、また下がる現象(二重降下、Belkin ら、2019年)も報告されてて、「パラメータが多いほど過学習」とは単純に言えない。理由はまだ研究が続いてる

23: 名無しさん

検証データで見張る、罰を足す、ニューロンを休ませる、データを増やす、やな

管理人のひとこと