3.6. 汎化¶
2人の大学生が期末試験に向けて熱心に勉強しているとしよう。 一般に、その準備では、過去の試験問題を解いて自分の実力を確かめる。 しかし、過去の試験で高得点を取れたからといって、 本番でも優れた成績を収められるとは限らない。 たとえば、Extraordinary Ellie という学生がいて、 彼女は過去の試験問題の解答をひたすら暗記することだけに専念したとする。 Ellie が並外れた記憶力を持ち、 これまでに見たことのあるどの問題の答えも 完全に思い出せるとしても、 これまでに見たことのない新しい問題に直面すれば、 途方に暮れるかもしれない。 これに対して、Inductive Irene という別の学生を考えよう。 彼女の暗記力は同じ程度に低いが、 パターンを見抜くのが得意だとする。 もし試験が本当に過去問の焼き直しばかりなら、 Ellie は Irene を容易に上回るだろう。 Irene が見いだしたパターンに基づく予測精度が 90% であっても、 100% 思い出せる Ellie には及ばない。 しかし、試験が完全に新しい問題だけで構成されているなら、 Irene は平均して 90% 程度を維持できるかもしれない。
機械学習研究者の目標は、 パターンを発見することである。 しかし、単にデータを暗記したのではなく、 真に一般化可能なパターンを見いだしたと、 どうすれば確信できるのだろうか。 多くの場合、予測が役に立つのは、 モデルがそのようなパターンを発見したときに限られる。 予測したいのは昨日の株価ではなく、明日の株価である。 すでに診断済みの患者について、 既知の病気を再認識したいわけではない。 むしろ、これまで見たことのない患者に対して、 まだ診断されていない病気を見つけたいのである。 この問題、すなわち 汎化 するパターンをどう発見するかは、 機械学習の根本問題であり、 おそらく統計学全体の根本問題でもある。 さらに言えば、科学全体にまたがる より大きな問いの一部ともみなせる。 すなわち、個別の観測から より一般的な主張へ飛躍することが、 いつ正当化されるのかという問いである。
現実には、有限個のデータを用いて モデルを適合させなければならない。 その規模は分野によって大きく異なる。 多くの重要な医療問題では、 利用できるデータ例は数千件程度に限られる。 希少疾患を研究する場合には、 数百件得られれば幸運かもしれない。 これに対して、ラベル付き画像からなる最大級の公開データセット、 たとえば ImageNet (Deng et al., 2009) には、 数百万枚の画像が含まれている。 また、Flickr YFC100M データセットのような ラベルなし画像コレクションはさらに大規模で、 1億枚を超える画像を含む (Thomee et al., 2016)。 しかし、このような極端な規模であっても、 利用可能なデータ例の数は、 メガピクセル解像度で考えられる あらゆる画像の空間と比べれば、 ごくわずかにすぎない。 有限サンプルを扱う以上、 訓練データにはよく適合したものの、 汎化可能なパターンの発見には失敗した、 という危険を常に意識しなければならない。
訓練データへの適合が、 背後にある真の分布への適合よりも良くなってしまう現象を 過学習 と呼ぶ。 また、過学習に対処する技法はしばしば 正則化 手法と呼ばれる。 ここでの議論は統計的学習理論への本格的な入門の代わりにはならないが (Boucheron et al. (2005), Vapnik (1998) を参照)、 出発点として十分な直感は与える。 本書では、さまざまな章で汎化を繰り返し取り上げ、 さまざまなモデルにおける汎化の原理について 何が分かっているかを探るとともに、 実用上重要なタスクで (経験的に)汎化性能の向上につながることが 知られているヒューリスティックな手法も紹介する。
3.6.1. 訓練誤差と汎化誤差¶
標準的な教師あり学習の設定では、 訓練データとテストデータは 同一 の分布から 独立に 抽出されると仮定する。 これは一般に IID 仮定 と呼ばれる。 この仮定は強いが、 これを置かなければ、 そもそも議論の出発点を失ってしまうことに注意すべきである。 分布 \(P(X,Y)\) からサンプルされた訓練データが、 異なる分布 \(Q(X,Y)\) から生成されたテストデータに対する 予測方法を教えてくれると、 なぜ信じられるのだろうか。 このような飛躍には、 \(P\) と \(Q\) がどのように関係しているかについての 強い仮定が必要になる。 後ほど、分布の変化を許すいくつかの仮定を議論するが、 まずは \(P(\cdot) = Q(\cdot)\) である IID の場合を理解する必要がある。
まず、訓練誤差 \(R_\textrm{emp}\) と 汎化誤差 \(R\) を区別しなければならない。 前者は訓練データセット上で計算される 統計量 であり、 後者は基礎となる分布に関する 期待値 である。 汎化誤差は、同じ基礎データ分布から抽出された 追加のデータ例が無限に流れてくる状況で モデルを適用したときに観測される量だと考えられる。 形式的には、訓練誤差は(3.1 章 と同じ記法で)和 として表される。
一方、汎化誤差は積分として表される。
問題は、汎化誤差 \(R\) を正確に計算することは決してできない点にある。 密度関数 \(p(\mathbf{x}, y)\) の正確な形は未知である。 さらに、無限に続くデータ例の流れをサンプルすることもできない。 したがって実際には、訓練集合から取り分けておいた ランダムに選ばれた例 \(\mathbf{X}'\) とラベル \(\mathbf{y}'\) からなる独立なテスト集合にモデルを適用することで、 汎化誤差を 推定 しなければならない。 これは、経験的訓練誤差を計算するときに用いたのと 同じ式を、テスト集合 \(\mathbf{X}', \mathbf{y}'\) に対して適用することに相当する。
重要なのは、テスト集合で分類器を評価するとき、 扱っているのは 固定された 分類器だという点である (その分類器はテスト集合のサンプルに依存しない)。 したがって、その誤差の推定は単なる平均値の推定問題である。 しかし、訓練集合については同じではない。 最終的に得られるモデルは訓練集合の選び方に明示的に依存するため、 訓練誤差は一般に、母集団における真の誤差の 偏った推定値になる。 したがって汎化の中心的な問いは、 訓練誤差がいつ母集団誤差 (したがって汎化誤差)に近いと期待できるか、 ということである。
3.6.1.1. モデルの複雑さ¶
古典的な理論では、単純なモデルと十分なデータがあるとき、 訓練誤差と汎化誤差は近くなりやすい。 しかし、より複雑なモデル、あるいは より少ない例で学習するときには、 訓練誤差は下がる一方で 汎化ギャップは大きくなると予想される。 これは不思議ではない。 任意の \(n\) 個のデータからなるデータセットに対して、 ランダムに割り当てられたラベルであっても 完全に当てはめられるパラメータ集合を見つけられるほど 表現力の高いモデルクラスを想像してみよ。 このとき、訓練データに完全に適合したとしても、 汎化誤差について何が言えるだろうか。 分かっている限りでは、汎化誤差は ランダム推測と大差ないかもしれない。
一般に、モデルクラスに何の制約もなければ、 訓練データに適合したという事実だけから、 モデルが汎化可能なパターンを発見したとは 結論できない (Vapnik et al., 1994)。 一方で、モデルクラスが 任意のラベルに適合できないなら、 そこには何らかのパターンが発見されているはずである。 モデルの複雑さに関する学習理論の考え方は、 科学哲学者カール・ポパーの発想から いくらか着想を得ている。 彼は反証可能性の基準を定式化した。 ポパーによれば、あらゆる観測を説明できる理論は、 そもそも科学理論ではない。 結局のところ、あらゆる可能性を排除しないなら、 その理論は世界について何を教えてくれるのだろうか。 要するに、必要なのは、 考えうるどんな観測も説明できるわけではないが、 実際に得られた観測とは たまたま整合している仮説なのである。
では、何が適切なモデル複雑度の概念なのかというと、 これは容易ではない問題である。 しばしば、パラメータ数が多いモデルほど、 より多くの任意に割り当てられたラベルに 適合できる。 しかし、これは常に真ではない。 たとえば、カーネル法は無限個のパラメータを持つ空間で動作するが、 その複雑さは別の方法で制御される (Schölkopf and Smola, 2002)。 しばしば有用な複雑度の概念の一つは、 パラメータが取りうる値の範囲である。 この観点では、パラメータが任意の値を取ることを許されたモデルの方が、 より複雑だと言える。 この考え方は次節で、 最初の実用的な正則化手法である 重み減衰 を導入するときに再び現れる。 なお、著しく異なるモデルクラス同士 (たとえば決定木とニューラルネットワーク)で 複雑さを比較するのは難しいことがある。
ここで、深層ニューラルネットワークを導入するときに 再び重要になる点を強調しておく。 モデルが任意のラベルに適合できる場合、 訓練誤差が小さいことは必ずしも 汎化誤差が小さいことを意味しない。 しかし、汎化誤差が大きいことを意味するわけでもない。 確実に言えるのは、 訓練誤差が小さいという事実だけでは 汎化誤差が小さいことの証明にはならない、 ということだけである。 深層ニューラルネットワークはまさにそのようなモデルである。 実際にはよく汎化するが、 訓練誤差だけを根拠に多くを結論づけるには 表現力が強すぎる。 このような場合には、事後的に汎化を確認するために、 ホールドアウトデータにより強く依存しなければならない。 ホールドアウトデータ、すなわち検証集合での誤差は、 検証誤差 と呼ばれる。
3.6.2. 過少適合か過学習か?¶
訓練誤差と検証誤差を比較するときには、 2つの典型的な状況に注意する必要がある。 まず、訓練誤差と検証誤差の両方が大きいのに、 その差が小さい場合である。 モデルが訓練誤差を下げられないなら、 モデルが単純すぎる (すなわち表現力が不十分である)ために、 捉えるべきパターンを表現できていないのかもしれない。 さらに、訓練誤差と汎化誤差の間の 汎化ギャップ(\(R_\textrm{emp} - R\))が小さいので、 より複雑なモデルを使う余地があると考えられる。 この現象は 過少適合 として知られている。
一方、上で述べたように、 訓練誤差が検証誤差よりもかなり小さい場合、 深刻な 過学習 を示している。 ただし、過学習が常に悪いわけではないことに注意されたい。 とくに深層学習では、 最良の予測モデルがしばしば ホールドアウトデータよりも訓練データで はるかに良い性能を示す。 最終的に通常関心があるのは 汎化誤差を下げることであり、 ギャップはその目的の妨げになる限りにおいてのみ 問題になる。 訓練誤差がゼロなら、 汎化ギャップは汎化誤差そのものに等しくなり、 前進するにはギャップを減らすしかない。
3.6.2.1. 多項式曲線当てはめ¶
過学習とモデル複雑度に関する 古典的な直感を示すために、 次の問題を考える。 単一の特徴量 \(x\) と、それに対応する実数値ラベル \(y\) からなる 訓練データが与えられたとき、 次数 \(d\) の多項式
を見つけてラベル \(y\) を推定しようとする。 これは単なる線形回帰問題であり、 特徴量は \(x\) のべき乗で与えられ、 モデルの重みは \(w_i\) で与えられ、 バイアスは \(w_0\) で与えられる。なぜなら、すべての \(x\) について \(x^0 = 1\) だからである。 単なる線形回帰問題なので、 損失関数として二乗誤差を用いることができる。
高次の多項式関数は低次の多項式関数よりも複雑である。 なぜなら、高次多項式の方がパラメータ数が多く、 モデル関数の選択肢も広いからである。 訓練データセットを固定すると、 高次の多項式関数は低次の多項式よりも 常に低い(少なくとも同等の)訓練誤差を達成するはずである。 実際、各データ例が異なる \(x\) の値を持つなら、 データ例の数に等しい次数の多項式関数は 訓練集合に完全に適合できる。 多項式の次数(モデル複雑度)と 過少適合・過学習の関係は 図 3.6.1 に示す。
図 3.6.1 モデル複雑度が過少適合と過学習に与える影響。¶
3.6.2.2. データセットサイズ¶
上の図がすでに示しているように、 もう一つの重要な要因はデータセットサイズである。 モデルを固定すると、訓練データセットに含まれるサンプルが少ないほど、 過学習は起こりやすくなり、また深刻にもなりやすい。 訓練データの量を増やすと、 通常、汎化誤差は減少する。 さらに一般に、データが多いことはまず損にならない。 固定されたタスクとデータ分布に対しては、 モデル複雑度はデータ量よりも 急速に増加すべきではない。 より多くのデータがあれば、 より複雑なモデルを当てはめたくなるかもしれない。 十分なデータがなければ、単純なモデルの方が かえって手強いことがある。 多くのタスクでは、深層学習が線形モデルを上回るのは、 数千件以上の訓練例が利用できる場合に限られる。 現在の深層学習の成功の一因は、 インターネット企業、安価なストレージ、接続されたデバイス、 そして経済活動の広範なデジタル化から生じる 巨大データセットの豊富さに大きく支えられている。
3.6.3. モデル選択¶
通常、最終的なモデルは、 さまざまな点で異なる複数のモデル (異なるアーキテクチャ、学習目的、 選択した特徴量、データ前処理、 学習率など)を評価した後にのみ選ぶ。 多くのモデルの中から選ぶことは、 適切にも モデル選択 と呼ばれる。
原則として、すべてのハイパーパラメータを選び終えるまでは テスト集合に触れるべきではない。 モデル選択の過程でテストデータを使ってしまうと、 テストデータに過学習する危険がある。 そうなると厄介である。 訓練データに過学習したとしても、 テストデータでの評価があるので その問題を検出できる。 しかし、テストデータに過学習したら、 どうやってそれに気づけるだろうか。 複雑さを厳密に制御できるモデルでさえ、 これがいかにばかげた結果につながるかについては Ong et al. (2005) を参照されたい。
したがって、モデル選択にテストデータを 決して用いるべきではない。 とはいえ、モデルの訓練に使った まさにそのデータ上で汎化誤差を推定することはできないので、 モデル選択を訓練データだけに頼ることもできない。
実際の応用では、状況はもっと曖昧になる。 理想的にはテストデータには一度だけ触れ、 最良のモデルを評価したり、 少数のモデル同士を比較したりするだけにしたい。 しかし、現実のテストデータは一度使っただけで捨てられることはめったにない。 実験のたびに新しいテスト集合を用意する余裕は、通常ない。 実際、ベンチマークデータを何十年も再利用することは、 たとえば 画像分類 や 光学文字認識 の アルゴリズムの発展に大きな影響を与えてきた。
テスト集合で学習してしまう 問題に対処する一般的な方法は、 データを3分割し、 訓練データセットとテストデータセットに加えて 検証集合 を設けることである。 その結果、検証データとテストデータの境界が 気がかりなほど曖昧になる、という厄介な状況が生じる。 特に断りがない限り、本書の実験では実際には、 真のテスト集合ではなく、 正しくは訓練データと検証データと呼ぶべきものを扱っている。 したがって、本書の各実験で報告される精度は、 真のテスト集合精度ではなく、 実際には検証精度である。
3.6.3.1. 交差検証¶
訓練データが乏しい場合には、 適切な検証集合を構成するのに十分なデータを 取り分ける余裕すらないかもしれない。 この問題に対する広く用いられる解決策の一つが、 \(K\)分割交差検証 である。 ここでは、元の訓練データを 重ならない \(K\) 個の部分集合に分割する。 その後、モデルの訓練と検証を \(K\) 回実行し、 毎回 \(K-1\) 個の部分集合で訓練し、 残りの1つの部分集合(その回の訓練には使わないもの)で検証する。 最後に、\(K\) 回の実験結果を平均することで、 訓練誤差と検証誤差を推定する。
3.6.4. まとめ¶
この節では、機械学習における 汎化の基礎となる考え方をいくつか見てきた。 これらの考え方の一部は、 より深いモデルへ進むにつれて複雑になり、 直感に反することもある。 そこでは、モデルはデータに激しく過学習しうる一方で、 関連する複雑度の概念は 暗黙的で直感に反することがあり (たとえば、より多くのパラメータを持つ大きなアーキテクチャの方が よりよく汎化するなど)、 単純な見方では捉えきれない。 最後に、いくつかの経験則を挙げる。
モデル選択には検証集合(または \(K\)分割交差検証)を使う。
より複雑なモデルには、しばしばより多くのデータが必要である。
関連する複雑度の概念には、パラメータ数と、それらが取りうる値の範囲の両方が含まれる。
他の条件が同じなら、データが多いほど汎化はほぼ常に良くなる。
汎化に関するこの議論全体は、IID 仮定を前提としている。訓練時とテスト時の間で分布が変化することを許すなら、さらに別の(おそらくより弱い)仮定がない限り、汎化については何も言えない。
3.6.5. 演習¶
多項式回帰の問題を正確に解けるのはいつであるか。
確率変数が依存しているために、問題を IID データとして扱うのが不適切になる例を少なくとも5つ挙げよ。
訓練誤差がゼロになることはあるか。どのような状況で汎化誤差がゼロになるか。
\(K\) 分割交差検証の計算コストが非常に高いのはなぜであるか。
\(K\) 分割交差検証の誤差推定値に偏りがあるのはなぜであるか。
VC 次元は、関数クラスの関数によって任意のラベル \(\{\pm 1\}\) で分類できる点の最大数として定義される。なぜ関数クラスの複雑さを測るのに適切でないのだろうか。ヒント:関数の大きさを考えよ。
上司から、現在のアルゴリズムの性能があまり良くない難しいデータセットを渡されたとする。もっとデータが必要だと上司にどう説明するか。ヒント:データを増やすことはできないが、減らすことはできる。