機械学習の検証データ(dev、valid)はなぜ必要か

機械学習

機械学習の勉強を始めると「検証データ」や「devセット」「validセット」といった言葉を必ず目にします。
一般的には学習データ(trainセット)や評価データ(testセット)という言葉と一緒に導入される専門用語ですが、教材によってはこれらがなぜ必要かについて導入されないこともあります。
この記事では、検証データ(devセット、validセット)の意味や必要性について説明します。

検証・dev・validの言葉に違いはない

記事の冒頭では、「検証データ」の別の呼び方として「devセット」や「validセット」という言葉を紹介しました。
これらはすべて同じものを指しているため、名前による意味の違いはありません
そのため、この記事では基本的に「検証データ」と呼ぶことにします。

機械学習の初学者にとって検証データを理解しづらい理由の一つに、その呼び方が複数あるという点が挙げられます。
validセットのvalidは「validation(検証)」に由来しており、日本語の検証データもvalidationという言葉に由来しています。
一方でdevセットのdevは「development(開発)」に由来しています。
教材によってはdevelopment dataを直訳して「開発データ」を検証データと同じ意味として使うことがあります。

こうした用語の表記揺れの背景には、機械学習がさまざまな分野で使用されているというものがあります。
ある分野では検証データのことをvalidation setのように呼び、またほかの分野ではdevelopment setと呼んでいたという慣例があったために、現在も複数の呼び方が残っています。

validやdev、あるいは検証や開発に意味の違いはありませんが、どちらのほうが多く使われるかについては、いまでも分野に依存するようです。

検証データの必要性

機械学習のためには、学習を行うための学習データ(training set)と、評価を行うための評価データ(test set)があれば十分に思えます。
なぜ検証データが必要なのだろうか、というのは機械学習の初学者が抱いて当然の疑問です。
この疑問を、具体例を挙げながら解消していきましょう。

まず、機械学習の大前提として「評価データでモデルを学習してはいけない」というものがあります。
評価データは機械学習モデルの汎化性能を確かめるものなので、評価データで学習してしまっては意味がありません。

具体的な例として、学校での学力テストを考えてみましょう。
生徒の学力を評価するために学力テストを行います。
この時、テストの内容が生徒にバレてしまっていると、学力が低い生徒も問題の対策ができてしまうので、正しく学力の評価ができません。

この例において、生徒を機械学習モデルと考えると、評価データで学習を行うことはモデルにカンニングさせているのと同じになってしまいます。
そのため、評価データでの学習は絶対に行ってはいけないのです。

ところで、この例において「クラスで生徒を一人選抜して学力テストを受けさせ、その成績をクラス全体の成績にする」というコンペが開かれたとしましょう。
当然、クラスの中で最も成績が良い生徒を選抜したいですよね。
そのためには、どのように生徒を選抜したらよいでしょうか。
ひとつの案として、「クラス内で学力テストを行い、最も点数が高かった生徒を選抜する」という選抜方法が考えられます。
クラス内で行う学力テストは当然、本番の学力テストとは異なるものですが、ある程度性質が似たテストであればクラス内の学力を調べるには十分だと言えます。

このクラス内での学力テストが、機械学習における検証データが担う役割です。
機械学習を行う時、機械学習モデルやハイパーパラメーターなどが異なる複数のモデルを作成することが一般的です。
これら複数のモデルのうち、最も評価データでの性能が高くなると期待されるモデルを選択するために、検証データを使います

「評価データでの性能が高いモデルが欲しいなら評価データでモデルを選択すればいいのでは?」と思うかもしれませんが、これは「評価データで学習をしてはいけない」という機械学習の鉄則に反してしまいます。
先の例では、本番の校内テストを使ってクラス内のテストを行ってしまうのと同じになります。
これでは、校内学力テストのコンペの意味がありませんよね。

検証データが無いとどうなる?

検証データを使用せずに、学習データと評価データだけで機械学習を行うとどうなるでしょうか。
もちろん、学習データと評価データだけでモデルの性能を計測することはできます。
このとき、評価データで最も性能が高いモデルは「本当に性能が高いモデル」なのでしょうか
もしかしたら、偶然評価データに適合しているだけで、実際に運用してみたら全くうまく働かないモデルかもしれません。

一方で、検証データで性能が高いモデルを選択してから評価を行えば、「偶然検証データに適合してしまったモデル」の真の性能を確かめることができます。

このように、検証データを使用することで「偶然性能がよく見えるだけのモデル」を正しく選別することができるのです。

まとめ

この記事では検証データの必要性について説明しました。
実際のビジネスで機械学習モデルを用いるとき、そのモデルが真に評価されるときは実際に生データで運用されるときです。
より性能が高い機械学習モデルを選ぶためにも、評価データと検証データの違いをよく理解し、汎化性能の高いモデルを正しく評価・選択することが重要です。

機械学習
1
自然言語処理に出てくるn-gramとはなに?

  授業や業務などで自然言語処理について学ぶと、当然の知識として「n-gram」あるいは「 …

python
3
ニューラルネットで時系列データを学習しよう【Chainer入門】

株や仮想通貨の予測のためには、時系列データの取り扱いが重要です。 今回は、Chainerを用いて時系 …

python
3
ニューラルネットでsin波を学習してみよう【Chainer入門】

Chainerを用いて単純なニューラルネットワークを構築し、sin波を学習してみましょう! とりあえ …