教師あり学習 入門

9 件の家、1 件につき 1 つの数値、そして訓練という営みのすべて。このページはその 9 件の成約の上で 3 つのことを示す。モデルとは自分で選んだ関数族から取り出した 1 つの関数であること、訓練とはある傾きがゼロになるまで同じ算術規則を繰り返すこと、そして手元のデータで完璧な当てはめは、手元にないデータでは役に立たないことの最も確実な兆候であること。

01

ラベルが買ってくれるもの

9 件の家が売れ、それぞれの床面積と価格が分かっている。教師あり学習とは、その 9 つの事実をまだ売れていない家の価格に変える仕事だ。

教師あり問題はいつも対でやってくる。各サンプルは特徴量—— 答えが分かる前に測れるもの —— とラベル、つまり答えそのものを持つ。ここでは特徴量が床面積、ラベルが成約価格で、ちょうど 9 対ある。

スライダーは一度に 1 つの面積を尋ねる。実際に成約のあった 9 つの面積ではラベルがそこにあって読める。この問い合わせを別の場所へ動かすと、もう無い:

1,500 ft² → 1,070k

与えられているものがどれだけ少ないかに注目してほしい。9 つの価格、その間には何もない。 では図が疑問符を出す。そんな成約が存在しないからだ。この入門のどの手法もすき間に何を置くかへの別々の答えであり、どれもこれ以上のデータは持たない。

いちばん安い答えは、直線を 1 本引いて価格をその線から読むこと。直線は ŷ = w·x + b。ここでは b を固定し、スライダーはw、つまり 1 平方フィート増えるといくらかだけを動かす:

w = 200 $/ft² · rmse 592k

右側の数字を見てほしい。それが学習誤差—— 二乗平均平方根なので、価格と同じくドル単位だ。w = 200 では直線は 1 件あたり $592k ずれている。 まで動かすと $74k まで下がり、そこがこの関数族の限界になる。

b を固定したのは都合であって法則ではない。2 つ目のパラメータは傾きを変えずに直線全体を持ち上げる。だから直線そのものをつかむ:左右で傾き、上下で高さだ:

w 200 · b 700k. 直線をドラッグ:左右で傾き、上下で高さ。矢印キーで微調整、Home で最初の直線に戻る
w 200 · b 700k · rmse 338k

つまみが 2 つとも動くので、探索は直線の 1 列ではなく平面の上を進む。その平面で最良の点はw = 484、b = $377kで、誤差は$74k。数値は 2 つ。最前線の言語モデルは 1 兆個ほど持つが、探索は同じ探索だ。

関数族は世界の形についての賭けであり、賭けは負けうる。スイッチは同じ9 件の成約の上で、当てはめた関数を 4 つの族の間で入れ替える:

0 次 · 学ぶ数値は 1 個

水平は 1 つの数値をどう調整しても$448kを割れない。その族には「面積が増えれば価格も上がる」と言う手段が無いからだ。これが未学習で、族の性質になる。波打ちは 9 つの数値で誤差を 0 にする。§04 は、なぜそちらが悪いのかの話だ。

つまり教師ありモデルとは順序の決まった 3 つの決定だ。何を測るか、どの族を探索するか、何を良い当てはめと呼ぶか。1 つ目は手元のデータが決めてしまう。2 つ目は上の賭け。3 つ目が次の節になる。

02

「間違い」の値段

当てはめを良くするには、まず点数が要る。どの点数を選ぶかが、どの物件なら外してよいかを決めてしまう。

1 件の物件についてなら、間違いの名前は簡単だ。モデルの予測と実際の成約価格のずれである。設計上の問題は、それが一度に 9 個やってくるときに何をするかだ。

ずれは各成約と直線の間にぶら下がっている。スライダーが直線を動かすと、 9 本が同時に変わる:

w = 300 $/ft² · ずれ 341k

右の数字はそれらの素直な平均で、w = 300 のとき $341k だ。ずれを等しい重みで足すと平均絶対誤差になる。立派な損失だが、ほとんど誰の既定値でもない —— どれだけ大きく外していても、1 件 1 票だからだ。

既定のやり方は、まず各ずれを 2 乗する。これは形式ではない。2 乗されたずれは面積であり、損失は9 つの正方形が覆う総面積そのものだ。スライダーは同じ傾き:

w = 300 $/ft² · mse 149,965

ドラッグしながら最悪の 1 件を見てほしい。2 乗は罰を間違いより速く育てるので、 でさえ9 件のうち 1 件が損失の 21% を占める。これが平均二乗誤差の性格だ。1 回大きく外すくらいなら、9 回小さく外すほうを選ぶ。

ここではモデルの自由な数値が 1 つなので、損失も 1 変数の関数になる —— そして 1 変数の関数はそのまま描ける。スライダーは同じw、曲線はありえた学習誤差のすべてだ:

w = 300 $/ft² · mse 149,965

モデルが線形で損失が 2 乗なので、この曲線はちょうど放物線になる。おおよそではなく、ちょうどだ。その最下点はw = 484にある。訓練とはその点の探索にほかならない。損失は 1,006,452 と読め、谷底では 5,516 になる。

2 乗には失敗の仕方があり、しかも自分の手で起こせる。1 件の成約価格が手の中にある。上へドラッグして、2 乗誤差の直線が追いかけ、絶対誤差の直線が無視するのを見てほしい:

1,333k. 上下にドラッグしてこの物件の成約価格を変える。矢印キーで微調整、Home で実価格に戻る
1,333k · 2 乗 w 484

2 乗の微分はずれとともに大きくなるので、1 つの悪いラベルが当てはめ全体を自分のほうへ引く。絶対誤差の直線は、いったん逆側に立った時点でどれだけ外れているかを気にしなくなる。現実のデータには悪いラベルがある。2 乗誤差は正しい既定値であり、無検討で使ってよい既定値ではない。

ラベルがいつも数値とは限らない。答えがクラスのときはモデルがそれに確率を出し、コストはその確率の対数の符号を反転したものになる —— 確率はスライダーで決める:

p = 0.50 · 0.69 nats

非対称性に注目してほしい。当たっているときのコストはほぼゼロ、自信を持って外したときのコストは上限なしだ。 でコストは 4.61 nats、コイン投げの 0.69 のおよそ 7 倍になる —— この上限のなさが、言語モデルに危うく落としかけたトークンを気にさせる。

本当に気にしている数値は、たいてい降りられる数値ではない。スライダーは 8 件の採点済みサンプルの上でバイアスを 1 つ動かし、0/1 損失と交差エントロピーが同時に見ている:

しきい値 0.00 · 0/1 損失 0.25 · 交差エントロピー 0.49

0/1 損失は数えるだけなので階段になる。どこでも平らで、動く場所では未定義。たどる方向が無い。交差エントロピーは良し悪しの判断が 0/1 と一致する滑らかな代役で、訓練が実際に降りているのはこちらだ。

損失は後付けのスコアボードではなく、オプティマイザが歩く面そのものだ。2 乗誤差はそれを放物線にし、交差エントロピーはスコアについて凸にする。正解率は階段にする —— 誰もそれで訓練しない理由だ。

03

谷底までの降り方

ここまで何ひとつ訓練していない。訓練とは、損失の形をパラメータの次の値に変える 1 つの規則のことだ。

一般には谷底を解いて求められない —— 線形の当てはめには閉じた式があるが、ニューラルネットには無い —— だから実務の方法は局所的になる。どちらが下り坂かを測り、1 歩踏み出す。

この鉢が前節の損失だ。上をドラッグすると接線がついてくる —— その傾きが勾配であり、訓練のすべてがこの 1 つの数値で動いている:

w = 200 $/ft². 左右にドラッグして曲線上を動く。矢印キーで微調整、Home で最初の点に戻る
w 200 · 曲線の傾き:-2,427

符号だけで進む向きが決まる。傾きが負なら右へ。w = 200 では −2,427 と読め、この鉢の谷底では 0 と読める —— 偶然ではなく、それが谷底の定義だ。

大きさが距離を決める。1 歩は w ← w − η·傾きであり、η—— 学習率、スライダーの上にある —— が、この規則のうち自分で選べる唯一の部分だ:

η 0.020 · w 100 → 166

η = 0.020 の矢印を見てほしい。w = 100 から踏み出して 166 に着き、損失は 635,423 から 438,344 へ落ちる。届かないのは、傾きを歩き始めた場所で測ったからだ。 まで押すと、1 歩で距離の大半が消える。

繰り返してよいなら、届かないことは問題ではない。再生ボタンが 20 歩を走らせ、2 つ目のスライダーがηを決める。この走行は w = 0、つまり水平な直線から始まる:

20 歩中 0 歩目 · w 0

各ステップが残りの距離に同じ係数を掛けるので、収束は線形ではなく幾何的だ。η = 0.020 では 20 歩かけてまだ 472、η = 0.050 なら 12 歩で 483 に届く。η を 2 倍にすると歩数はおおむね半分になる —— ある点までは。

その点は正確に決まり、好みの問題ではない。ηをそこより先へ押すと、さっきまで収束していた同じ規則が鉢を登り始める:

η = 0.100

曲線が曲率 8.553 の放物線なので、各ステップは谷底までの距離に |1 − η·8.553| を掛ける。したがって η が 0.234 未満のときだけ収束し、超えると発散する。 では何も警告してくれない。損失が数百歩あとに NaN になるだけだ。

そして 0.234 は問題の性質ではなく、単位の性質だ。スイッチは同じ 9 つの面積を 4 つの異なる単位で測り直し、まだ収束するステップ幅の範囲を描き直す:

÷ 1 · η < 2.34e-7

軸は対数で、1 目盛が 10 倍。だから帯の長さは比として読む。生の平方フィートでは η の上限は 2.34e−7、面積を 1,000 で割ると 0.234 で、100 万倍大きい。曲率が特徴量の2 乗を担ぐからだ。パイプラインが 1 歩目の前に正規化する理由になる。

この節の 2 つは、以後のどのオプティマイザにも生き残る。1 歩は勾配に比例するので平らな領域は遅い。そして安全な 1 歩は曲率に縛られる —— Adam が 10 億個に 1 つの η でなくパラメータごとのスケールを推定する理由だ。

04

当てはめは学習ではない

学習誤差ゼロは何も証明しない。重要な問いは 1 つ、見せていない物件でモデルが何をするかだ。

その問いには実際に答えられる。同じ市場の同じ期間にもう 9 件が成約しており、そのすべてを当てはめから外してあるからだ。

取り置いた成約は輪で描いてあり、当てはめ —— ただの直線 —— はその 1 件も見ていない。1 件ずつ図に引き込んでみてほしい:

取り置き 0 件

図はいま 1 つではなく 2 つの数値を持つ。学習したは直線を作った 9 件で測った値、未知は作るのに使わなかった 9 件で測った値だ。直線なら $74k と $76k に落ちる。近い —— それが直線の取り柄のすべてになる。

ここで容量を使ってみる。開始は同じ直線で、スライダーが当てはめた多項式の次数を決める —— 0 次で水平、8 次で全訓練成約をちょうど通る:

1 次 · 学習した 74k · 未知 76k

学習したが最後まで落ち続け、 で $0 になるのを見てほしい。一方未知は 4 次で向きを変え、$220k で終わる。モデルは市場を学ばなかった。9 件を暗記し、その間は好きに埋めただけだ。

2 つの数値を、すべての次数に対して一度に描く。学習したは落ち、未知は向きを変え、スライダーの次数が両方を貫いている:

1 次 · 学習した 74k · 未知 76k

縦軸は対数で、ラベルは 1 つ下の 2 倍になっている。だから学習したと未知の間に読み取るのは比だ。2 本は 4 次まで一緒に走り、その先で離れる。この離れ方が汎化ギャップであり、この節が持つ唯一の診断になる。

ギャップには形があり、手で触れる。尋ねる面積は軸に沿ってドラッグできる。最後の成約より先では、8 次の当てはめは何の根拠もなく答えている:

2,000 ft². 左右にドラッグして尋ねる面積を動かす。矢印キーで微調整、Home でデータの中に戻る
2,000 ft² → 1,391k

—— 見たことのある最大の物件より 500 ft² 先 —— で、この当てはめは $81,854k と予測する。データ中で最も高い物件の 40 倍を超える。エラーも出さず、自信が低いとも言わない。ただ数値を返し、下流のシステムはそれを使う。

出口は 2 つあり、1 つ目はいつでも買えるとは限らないほうだ。スライダーは訓練集合を 8 件から 400 件まで増やす。容量は 4 次で固定してある:

8 件 · 未知 108k

2 本とも動き、向きは逆になる。学習したは上がる。8 点は喜ばせやすく はそうではないからだ。未知は $69k まで落ちて平らになる。その床がノイズ —— 1 つの特徴量に入りきらない価格の部分、1 件あたり約 $70k —— であり、データを増やしても動かない。

失敗はもう 1 つあり、実際に本番へ出るのはそちらだ。スライダーは取り置きの成約の一部を、当てはめに既にある物件の複製に変える。同じ掲載を 2 度登録した状態だ:

重複 0 件 · 報告値 220k · 正直な値 220k

報告される誤差が落ちる一方、正直な誤差はまったく動かない。9 件中 9 件が複製のとき、報告は「一度も見ていない」データで $12k だと主張する。その 9 件はすべて暗記した物件だ。リークは静かに失敗する。

不変条件は 1 文だ。当てはめに触れたものは採点に現れてはならない。その行も、近い複製も、それを使って計算した特徴量もだ —— 分割前に全体で正規化した列は、すでにテスト集合の平均を漏らしている。

05

引き戻す

データを増やすのが正直な解決で、たいてい手に入らない解決でもある。もう一方の道は、9 件で小さなモデルを買うことだ。

8 次が悪いのは係数が 9 個あるからではなく、係数を巨大にしてよいことになっているからだ。訓練点の間のあの波打ちこそ、 48,365 という係数が買うものになる。

なら大きさに課金する。当てはめはいま 2 乗誤差に λ 掛ける係数の 2 乗和を足したものを最小化し、スライダーがλをほぼゼロから引き上げる:

λ = 1.0e-7 · 学習した 11k · 未知 174k

曲線がほぐれていくのを見てほしい。学習したは最後まで悪化する —— 罰則付きの当てはめは定義上もう最良の当てはめではない —— 一方未知は まで良くなってから、こちらも悪化に転じる。関数族は何も変わっていない。変わったのはそれを使う値段だけだ。

罰則はすべての係数に同時に効くので、正直に描くなら 8 本すべてになる。スライダーは同じだ。最大のものを実線で、残り 7 本を灰色で描いてある:

λ = 1.0e-7 · max |c| 48,365

ここでは両軸とも対数で、ラベルは 1 つ前の 100 倍になっている。だからこの図の直線的な下りはべき則を意味する。最大の係数はこの掃引のあいだに 48,365 から 25 まで下がる。当てはめは曲がる能力を失うのではなく、急に曲がる能力を失う。

この取引には最良点があり、見つけ方は §04 で 4 次を見つけたときと同じだ ——取り置き誤差だけを見て、学習誤差は見ない。スライダーはまた λ だ:

λ = 1.0e-7 · 未知 174k

未知の最小値 —— λ = 0.010 のときの $69k —— は、4 次がすでに与えていた値と 1,000 ドル以内の差しかない。つまり罰則はよく選ばれた関数族に勝ったのではなく、選んでおく必要そのものを取り除いた。手で数え上げられないほど族が多いとき、これは非常に大きい。

3 つのうち最も安い正則化は、そもそも罰則ではない。以下は同じ 8 次の当てはめを、全ゼロの係数から勾配降下で当てはめたもので、スライダーは何歩まわしたかだ:

0 歩目 · 学習した 1,351k · 未知 1,394k

降下は易しい方向から先に閉じるので、当てはめは暗記へ向かう途中で良いモデルを通過する。未知は で $65k まで下がり、2,048 歩では $78k に戻る。早く止めるのは無料の正則化で、ここでは他の 2 つに勝つ。

3 つの手はどれも当てはめが届いてよい関数の集合を縮める。weight decay はこの罰則の別名で、dropout、データ拡張、小さなモデルも同じ手だ。つまみは常に取り置きデータで選ぶ。

06

1 ステップを端から端まで

ここまでのすべてが 1 つのループだ。それを 9 件の成約の上で回し、生まれる数値をすべて画面に出す。

実際の訓練は毎ステップで全データを使わない。ミニバッチ —— ここでは 9 件のうち 3 件 —— を取る。同じ計算量なら、正確な勾配 1 回よりノイズのある勾配 30 回のほうが勝つからだ。

再生ボタンは 1 ステップを 5 段階に分けて歩く。対象はバッチで、w は 300 から、η は 0.05 だ:

5 段階中 1 段目 · バッチを取る

第 4 段の勾配に注目してほしい。このバッチでは −1,698、9 件すべてでは −1,572 になる。バッチは 8% 間違えており、その誤差こそ全データを見ないことの代価のすべてだ —— 3 倍の歩数を踏めるぶん、十分に取り返せる。

for batch in loader:            # 1
    yhat = model(batch.x)       # 2
    loss = mse(yhat, batch.y)   # 3
    g    = grad(loss, w)        # 4
    w   -= eta * g              # 5

その 8% は 1 回の引きにすぎない。スイッチは同じ 9 件を 1 件、3 件、9 件に分け、各バッチの推定と厳密な傾きを描く:

バッチ 9 件 · ばらつき ±0

バッチ 9 件なら推定は 1 つで厳密。3 件なら ±311、1 件なら ±1,716 で、傾きそのものより大きい。平均が精度を買い戻す。

この 5 行が教師あり学習だ。変わるのは大きさだけ。2 行目は 1 兆パラメータ、3 行目は語彙上の交差エントロピー、4 行目は誤差逆伝播、eta はスケジュール —— GPT-3 の 1,750 億パラメータの学習は η = 6 × 10⁻⁵ を頂点とし、最初の 3.75 億トークンでウォームアップした(Brown ら、2020)。問いは変わらない。取り置き損失は下がっているか、バッチへ何か漏れていないか。