修行の場

知人が言っていました。これは修行だと。

5.2 モデルをデータに合わせる:Capacity, Overfitting, Underfitting

ディープラーニング.2

モデルの選択、データセットの収集をする際に必要になる基礎的な話でした。

モデルの表現力であるCapacity、回帰タスクに下げる対象であるGeneralization誤差、テストデータセットのサイズの関係とそれぞれの詳細について述べられています。

ディープラーニングのモデルの性能を改善させていくために参考になる基礎知識だと思います。データセットを増やすべきか、モデルを変更すべきか、どのモデルに帰るべきか判断する際の参考になると思います。

 

統計的機械学習に置かれている仮定

f:id:sam_yusuke:20181209042134p:plain

機械学習で置かれている仮定は「訓練データと評価データはi.i.d」ということで、この過程が満たされていることで訓練データを使って未知データに対応できるモデルを学習できます。(本書内のtest errorの定義がわかりませんが、アプリを適用する先の未知のデータもi.i.dであると仮定しているはずです)i.i.dを仮定することで、

  • 同じパラメータのモデルの訓練誤差と評価誤差の期待値は同じ
    • → 十分に多いデータがあれば、両方の誤差平均はほぼ同じ
  • 評価誤差と未知のデータに対する誤差の期待値はほぼ同じ

回帰タスクの文脈で書かれている章なので、誤差という言葉が使われていましたが、accuracyF scoreでも同様です。

 

underfittingoverfitting

実際のモデルの学習では、訓練誤差を計算し、訓練誤差を下げるようにパラメータを少し調整するということを繰り返しをし、(SGDなどの最適化手法)、調整のたびに評価誤差を記録していく、評価誤差は訓練誤差よりも大きくなるとのことです。(理由不明。i.i.dならパラメタ調整後の評価誤差のほうが低くなりそうですが、おそらく、標本を使うことから来る誤差が原因?)

 

この訓練誤差と評価誤差の差が大きい状態をoverfitging, 訓練誤差が大きい状態をunderfittingと呼びます。

  • underfittingを防ぐにはタスクの複雑さにあったCapacityのモデルを選択する
  • overfittingを防ぐには訓練データの量にあった大きすぎないCapacityを選び、必要に応じてデータ収集が必要になります。

訓練誤差の差には下限があり、モデルのcapacityと訓練データの数によって決まってくるとのことです。また、モデルのcapacityはタスクの複雑さによって決まるらしいです。

従来ディープラーニングでは、非凸最適化の理論的な理解が難しかったことが原因でモデルの実効表現力が低かったのが問題でCapacityの選択が困難でした。(学習ができないのにCapacityの選択ができるはずがない。)

 

データ量、CapacityOverfittingUnderfittingの関係

これらの関係に関する面白い図があったので載せておきます。

 f:id:sam_yusuke:20181209042300p:plain

多項式モデルで次数を大きくする(Capacityを大きくするに相当)と、評価誤差はU字を描く。(おそらく)このU次は似たようなモデルのCapacityを変更場合に成り立ち、このCapacityの選択と(同じCapacityでも構造が違うネットワークの選択)がモデルを選択する作業となる。

 

f:id:sam_yusuke:20181209042241p:plain

データを十分に集めると訓練誤差は上がり、評価誤差は下がる。

双方ともベイズ誤差に近づく。

この中でも、Capacityやモデルの選択に関しては、ベイズ最適化や強化学習で自動化する手法が出てきていてGoogleはAutoML、オープンソースのものではAutokerasが出てきている。また、学習についてもOverfittingが発生した時点で学習をやめる方法などもある。まだ自動化がされていないのはデータ収集の必要、不要の判断な気がします。(調査必要)