logo

機械学習における訓練/検証/テストセット 📂機械学習

機械学習における訓練/検証/テストセット

定義

訓練中に使われるデータセット:

  • モデルのパラメータを最適化するために使われるデータセットをトレーニングセットと言う。
  • モデルのハイパーパラメータを最適化するために使われるデータセットをバリデーションセットと言う。

訓練後に使われるデータセット:

  • 訓練が終わってモデルの性能を評価するために使われるデータセットをテストセットと言う。

トレーニング/バリデーション/テストセットについての損失関数の関数値をトレーニング/バリデーション/テストロスと言う。

説明

**トレーニングセット:**その名の通り、トレーニングセットはトレーニングに使われるセットで、バックプロパゲーションによってパラメータを最適化するために使われる。

**バリデーションセット:**設計したモデルをトレーニングセットで最適化するとき、うまく訓練されてるかを確認するために使われるのがバリデーションセットだ。だからバックプロパゲーションには影響しない。もしエポックが十分に経過して、トレーニングセットに対する性能が十分高いのにバリデーションセットに対する性能が低かったら、層やノードの数を変えて再度訓練を行う。つまりバリデーションセットとは、大それた話ではモデルのデザイン、素朴な話ではハイパーパラメータを最適化するために使われるセットだ。だから厳密にはモデルの訓練に関わっている。パラメータ最適化には使われなくとも、訓練に使われないと言うのは難しい。実際にディープラーニングをするとき、バリデーションセットに対する性能を追跡しながら、それが十分に高くなるまでハイパーパラメータを色々変えてみることになる。結果的にバリデーションセットに対する性能が高くなるまでモデルのデザインをずっと修正することになるので、バリデーションセットに対する性能がいいのは当然だ。だから、モデルの最終性能を評価するために使われるデータが別に必要だ。

**テストセット:**トレーニングセットがモデルのパラメータを、バリデーションセットがモデルのハイパーパラメータを最適化するのに関わったので、性能を測るには適していない。だから、トレーニングセットにも、バリデーションセットにも属していないデータで最終的にモデルの性能を測る。このときに使われるデータをテストセットと言う。

各データセットがどう使われるかは、疑似コードで示すと、

$$ \begin{align*} &\text{{\bf for} $1 \le$epoch$\le N$ {\bf do}} \\ &\qquad \text{training loss $\leftarrow$ LOSS(model($x_{train}$), $y_{train}$)} \\ &\qquad \text{backprogation for training loss} \\ &\qquad \text{validation loss $\leftarrow$ LOSS(model($x_{valid}$), $y_{valid}$)} \\ &\qquad \text{print and check training and validation losses } \\ &\textbf{end for} \\ &\text{test loss $\leftarrow$ LOSS(model($x_{test}$), $y_{test}$)} \end{align*} $$