機械学習の勉強を勧めていくにあたり、検証データでハイパーパラメータを調節することがわかりました。
しかし、いくつかの論文を見ると、テストデータのみの精度を示している論文が見つけられます。
本来、テストデータでハイパーパラメータを調節することってダメですよね?これを証明する方法ってどうするのですか?
自分の中では、検証データでベストな結果になるように調節してからテストデータの結果を出すのが基本なのかなと思っていたのですが、認識が間違っていたら申し訳ないです。
> 検証データでハイパーパラメータを調節することがわかりました。
> 検証データでベストな結果になるように調節してから
質問者さんが上記の考えになった参考資料は提示できますでしょうか?
書籍になるのですが、「Python機械学習プログラミング 達人データサイエンティストによる理論と実践」の167ページのホールドアウト法の概要説明からです。
そこでホールドアウト法の解説図とともに「さまざまなパラメータ値を使ってトレーニングを行ったあと、検証データセットを使って繰り返し評価していることがわかる。パラメータ値のチューニング結果に満足したら、テストデータセットでのモデルの汎化誤差を評価する。」という説明がされていたので、そうだと思いました。
そちらの書籍は手元にないので詳細は分かりませんが、上記説明によると「検証データセットを使って繰り返し評価」であり、質問者さんのいう”検証データでハイパーパラメータを調節する”とは違うのではないでしょうか?(評価≠調節だと思うのですが)
申し訳ないです、引用してくる文章が悪かったです
「検証データセットでの性能は、モデル選択(パラメータの最適な値を選択する分類問題)に使用される」という記述などもあります
図を見ると一目瞭然なんですけどさすがに著作権でダメですよね?
あとは松尾研の講座の説明などでしょうか(https://colab.research.google.com/github/matsuolab-edu/dl4us/blob/master/lesson0/lesson0_exercise.ipynbより、「(厳密には、テスト用は評価のみを行う場合を、検証用(validation)データセットは評価をモデル選択(ハイパーパラメータの調整等)に生かす場合を指します。検証用とテスト用を別途用意し、検証用の評価でモデルを選択したのち、テスト用の評価を計測します。)」)
他にもCS231nって講義での説明です。「幸い、ハイパーパラメータを調整する正しい方法があり、テストセットにはまったく触れません。アイデアは、トレーニングセットを2つに分割することです。少し小さいトレーニングセットと、検証セットと呼ばれるものです。」(https://cs231n.github.io/classification/)(英語苦手なので翻訳文)
> いくつかの論文を見ると、テストデータのみの精度を示している論文が見つけられます。
テストデータにて凡化性能を示しているのではないでしょうか?
今回の質問は、データを訓練用、検証用、テスト用に分ける手法についてのものかと思われます。そのように分けない手法もあるのでその旨追記した方が良い回答が得られるかもしれません。
データを訓練用、検証用、テスト用に分ける手法が勝手に一般的なものだと思っていました、ありがとうございます
ということは大多数の人は訓練用とテスト用にしか分けないのでしょうか?
>テストデータにて凡化性能を示しているのではないでしょうか?
訓練用、検証用、テスト用に分ける手法でテストデータでハイパーパラメータ調節したところでそれは汎化性能ではなくテスト用にハイパーパラメータ調節しただけだよね、それって汎化性能とは言わないですよね?っていうのを聞きたかったんです
説明がわかりづらく申し訳ないです・・・
> ということは大多数の人は訓練用とテスト用にしか分けないのでしょうか?
書籍にも載っているかと思いますが、交差検証などの手法もありますよという意味でコメントしました。
一般的には訓練データで訓練して、検証データでそのモデルの性能を確認するかと思います。複数モデルがある場合には訓練データと検証データの結果から一番良いモデルを選択して、テストデータで最終的な性能を確認するかと思います。
> 訓練用、検証用、テスト用に分ける手法でテストデータでハイパーパラメータ調節したところでそれは汎化性能ではなくテスト用にハイパーパラメータ調節しただけだよね、それって汎化性能とは言わないですよね?っていうのを聞きたかったんです
論文中で「テストデータでハイパーパラメータ調節した」と明記されていたのでしょうか?
>論文中で「テストデータでハイパーパラメータ調節した」と明記されていたのでしょうか?
明記はされていないです。ただ、それを証明する方法ってあるのかなと疑問に思い、質問させていただきました。
「論文に記載されている「性能はこんなですぜ」っていう評価値を算出する際に用いたデータというのが,学習に用いたデータではないことを どうやって証明するのか?」 という話?
その論文書いた人がその研究に用いた全データを公開しているとかじゃない限りは証明のしようが無いのでは?と想像しますが,どうなんでしょう.
(つーか,疑うならば,そもそもその論文記載の仕事ってのは本当に行われたのか?っていう話から疑うことになるのでは.)
> 検証データでハイパーパラメータを調節することがわかりました。
> 検証データでベストな結果になるように調節してから
言葉の意味が気になりましたので。上記での「調節」とは具体的には検証データを用いて何をどうすることを言っているのでしょうか?
>(つーか,疑うならば,そもそもその論文記載の仕事ってのは本当に行われたのか?っていう話から疑うことになるのでは.)
論文の中にはGithubのURLを記載してて、公開されているデータセットもあるので手元で確認できるのもあります
ただ確かに、研究全体で考えたときにはそんなの確認しようがないですね
ありがとうございます
>言葉の意味が気になりましたので。上記での「調節」とは具体的には検証データを用いて何をどうすることを言っているのでしょうか?
検証データを用いて、学習しているモデルのハイパーパラメータ(学習率、バッチサイズ、最適化アルゴリズムなど)を調節して、損失を小さくすることを言っています