質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.39%
深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Q&A

1回答

2307閲覧

テストデータを使ってハイパーパラメータを決めていないことを証明する方法はありますか?

faker

総合スコア51

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

0グッド

0クリップ

投稿2021/01/25 07:28

機械学習の勉強を勧めていくにあたり、検証データでハイパーパラメータを調節することがわかりました。
しかし、いくつかの論文を見ると、テストデータのみの精度を示している論文が見つけられます。
本来、テストデータでハイパーパラメータを調節することってダメですよね?これを証明する方法ってどうするのですか?

自分の中では、検証データでベストな結果になるように調節してからテストデータの結果を出すのが基本なのかなと思っていたのですが、認識が間違っていたら申し訳ないです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2021/01/25 08:00

> 検証データでハイパーパラメータを調節することがわかりました。 > 検証データでベストな結果になるように調節してから 質問者さんが上記の考えになった参考資料は提示できますでしょうか?
faker

2021/01/25 08:22

書籍になるのですが、「Python機械学習プログラミング 達人データサイエンティストによる理論と実践」の167ページのホールドアウト法の概要説明からです。 そこでホールドアウト法の解説図とともに「さまざまなパラメータ値を使ってトレーニングを行ったあと、検証データセットを使って繰り返し評価していることがわかる。パラメータ値のチューニング結果に満足したら、テストデータセットでのモデルの汎化誤差を評価する。」という説明がされていたので、そうだと思いました。
meg_

2021/01/25 12:04

そちらの書籍は手元にないので詳細は分かりませんが、上記説明によると「検証データセットを使って繰り返し評価」であり、質問者さんのいう”検証データでハイパーパラメータを調節する”とは違うのではないでしょうか?(評価≠調節だと思うのですが)
faker

2021/01/25 17:47

申し訳ないです、引用してくる文章が悪かったです 「検証データセットでの性能は、モデル選択(パラメータの最適な値を選択する分類問題)に使用される」という記述などもあります 図を見ると一目瞭然なんですけどさすがに著作権でダメですよね? あとは松尾研の講座の説明などでしょうか(https://colab.research.google.com/github/matsuolab-edu/dl4us/blob/master/lesson0/lesson0_exercise.ipynbより、「(厳密には、テスト用は評価のみを行う場合を、検証用(validation)データセットは評価をモデル選択(ハイパーパラメータの調整等)に生かす場合を指します。検証用とテスト用を別途用意し、検証用の評価でモデルを選択したのち、テスト用の評価を計測します。)」) 他にもCS231nって講義での説明です。「幸い、ハイパーパラメータを調整する正しい方法があり、テストセットにはまったく触れません。アイデアは、トレーニングセットを2つに分割することです。少し小さいトレーニングセットと、検証セットと呼ばれるものです。」(https://cs231n.github.io/classification/)(英語苦手なので翻訳文)
meg_

2021/01/26 00:39

> いくつかの論文を見ると、テストデータのみの精度を示している論文が見つけられます。 テストデータにて凡化性能を示しているのではないでしょうか? 今回の質問は、データを訓練用、検証用、テスト用に分ける手法についてのものかと思われます。そのように分けない手法もあるのでその旨追記した方が良い回答が得られるかもしれません。
faker

2021/01/26 02:25

データを訓練用、検証用、テスト用に分ける手法が勝手に一般的なものだと思っていました、ありがとうございます ということは大多数の人は訓練用とテスト用にしか分けないのでしょうか? >テストデータにて凡化性能を示しているのではないでしょうか? 訓練用、検証用、テスト用に分ける手法でテストデータでハイパーパラメータ調節したところでそれは汎化性能ではなくテスト用にハイパーパラメータ調節しただけだよね、それって汎化性能とは言わないですよね?っていうのを聞きたかったんです 説明がわかりづらく申し訳ないです・・・
meg_

2021/01/26 11:05

> ということは大多数の人は訓練用とテスト用にしか分けないのでしょうか? 書籍にも載っているかと思いますが、交差検証などの手法もありますよという意味でコメントしました。 一般的には訓練データで訓練して、検証データでそのモデルの性能を確認するかと思います。複数モデルがある場合には訓練データと検証データの結果から一番良いモデルを選択して、テストデータで最終的な性能を確認するかと思います。 > 訓練用、検証用、テスト用に分ける手法でテストデータでハイパーパラメータ調節したところでそれは汎化性能ではなくテスト用にハイパーパラメータ調節しただけだよね、それって汎化性能とは言わないですよね?っていうのを聞きたかったんです 論文中で「テストデータでハイパーパラメータ調節した」と明記されていたのでしょうか?
faker

2021/01/27 04:45

>論文中で「テストデータでハイパーパラメータ調節した」と明記されていたのでしょうか? 明記はされていないです。ただ、それを証明する方法ってあるのかなと疑問に思い、質問させていただきました。
fana

2021/01/27 10:51 編集

「論文に記載されている「性能はこんなですぜ」っていう評価値を算出する際に用いたデータというのが,学習に用いたデータではないことを どうやって証明するのか?」 という話? その論文書いた人がその研究に用いた全データを公開しているとかじゃない限りは証明のしようが無いのでは?と想像しますが,どうなんでしょう. (つーか,疑うならば,そもそもその論文記載の仕事ってのは本当に行われたのか?っていう話から疑うことになるのでは.)
meg_

2021/01/27 11:25

> 検証データでハイパーパラメータを調節することがわかりました。 > 検証データでベストな結果になるように調節してから 言葉の意味が気になりましたので。上記での「調節」とは具体的には検証データを用いて何をどうすることを言っているのでしょうか?
faker

2021/02/04 06:49

>(つーか,疑うならば,そもそもその論文記載の仕事ってのは本当に行われたのか?っていう話から疑うことになるのでは.) 論文の中にはGithubのURLを記載してて、公開されているデータセットもあるので手元で確認できるのもあります ただ確かに、研究全体で考えたときにはそんなの確認しようがないですね ありがとうございます >言葉の意味が気になりましたので。上記での「調節」とは具体的には検証データを用いて何をどうすることを言っているのでしょうか? 検証データを用いて、学習しているモデルのハイパーパラメータ(学習率、バッチサイズ、最適化アルゴリズムなど)を調節して、損失を小さくすることを言っています
guest

回答1

0

質問表題は「証明する方法はありますか?」ですが、それは無いと思います。

質問意図としては、「テストデータでハイパーパラメータを調節することの是非」だと思いますので、それに回答すると、「一般的には非だけど、ケースバイケース」です。

私個人としてはハイパーパラメータ調整をするのであれば、そこにはテストデータは使わないようにしています(質問者様と同様の考えです)。

しかし、結局は、汎化性能を得られるかどうか、に依存します。

経験上、ハイパーパラメータ調整にテストデータを使っても、汎化性能は下がりにくいように思います。むしろ、訓練・検証データに無い特性がテストデータの中に隠れていたら、テストデータまで使って調整したほうが、汎化性能は高まる可能性があります。逆に、テストデータが訓練・検証データの特性とそっくりであれば、テストデータの意味はありません。

また、Google(末尾のTIPS)によると、たとえテストデータを分割していても、結局はテスト結果を見てモデルの良い悪いを判断してしまう以上、テストデータの「劣化」、すなわちオーバーフィッティングのリスクは発生すると、書かれています。ですので、テストデータを隔離しているから安心、というものでもありません。

このあたりの領域は、白黒つけにくいようです。ま、それでも、常識感としては、ハイパーパラメータ調整は検証データで行って、テストデータは分離する、だと思います。

投稿2021/01/30 01:39

toast-uz

総合スコア3266

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

faker

2021/02/04 06:57

ありがとうございます 私は学習や検証、テストといった意味にこだわっていましたが、汎化性能を得られるかという最終的な目的を考えると厳格に定義する必要もない気がしてきました 「最終的に解くべきタスクが解けるかどうかが大事で、データの分け方はその一要素に過ぎないくらい」って考え方でもいいんでしょうか?
toast-uz

2021/02/04 08:49

そう思います。大まかな取るべき手法は決まっているものの、具体的にはタスクに応じた調整が必要です。機械学習=エンジニアリング(匠の技による細かい調整)の重要性が高い、と思います。
fana

2021/02/04 09:34 編集

質問の内容は,「俺の学習機が何らかの良い性能を得る方法の話」ではなくて,「性能を対外的に?示すやり方としての可否」みたいな話なのだと思っていたのですが,違う感じですか? で,有限個のデータしか持ち合わせていない状況において,性能評価値を対外的に示すところまでをやらなきゃならないから→データを複数のグループに分ける. ということなのに, 「テストデータ」を「調整」に使うってのは,グループの用途として間違ってるんじゃないの? みたいな趣旨の話なのかと. (「俺の学習機が何らかの良い性能を得る」ところだけをやるのならば,そりゃ,手持ちのデータを好きなように使えばいいだけの話に思える. よくわからないけども,「テストデータ」を「調整」に用いたならば,それは手持ちのデータを 「学習」「検証」「テスト」に分けたんじゃなくて, 「学習」「検証1」「検証2」に分けて使った,という意味になるのでは?)
faker

2021/02/05 02:05

>>「テストデータ」を「調整」に用いたならば~ そのとおりだと思います。 自分もそう思って質問させていただきました。 >>「性能を対外的に?示すやり方としての可否」みたいな話なのだと思っていたのですが 「解くべきタスクが決まっている」場合には回答していただいたように「一般的には非だけど、ケースバイケース」であると、現状納得しています。実務的な点で見た場合の、性能を評価する考え方を答えていただいたのかなと思います。 一方で、fanaさんがおっしゃっているのは「解くべきタスクが決まっておらず、体外的に公表する」場合のテストデータを使ったパラメータの調節の可否についてだと思っていたということですよね?(間違っていたら申し訳ないです)自分の中でも質問するときに明確にそこまで考えずに文章を書いたため、わかりづらく申し訳ないです。 これについては自分の中で正直まだ良くわかっていないです。 ただここまでの回答から、テストデータでパラメータ調整していることを証明する方法がないみたいなので、結局どのモデルもテストデータでハイパーパラメータ調節しているという前提で比較しているのなら、ある意味公平に性能の比較ができている気がします。 あと良ければ聞きたいのですが、「調節」って言い方って変でしょうか?一般的にはチューニングって言いますか?
fana

2021/02/05 02:50 編集

質問内に「論文」という語が見えたので,「体外的に公表~」の側の話かと捉えました. 「俺はこんな方法(アルゴリズムとか?)を考え出したぜ → その性能はこんな感じになったんだぜ」という話での「性能」を示す方法論の話. そういうことじゃなくて,実務で用いるものを作っているのであれば,"性能の評価値" はそれを用いる実環境で走らせたデータを収集して測るなりすればよいのではないでしょうか. (その結果データを踏まえて再度調整なりを何回やろうが構わないわけで,そこに何らかの型にはまった方法論みたなのを持ち込まずとも良いような?) 実用性能を見る際に,「学習/調整 の際に用いたデータと完全に同一なデータに出くわす」ことは想像し難いので,そこには「証明」する事柄自体が存在しない感. > 「調節」って言い方って変でしょうか?一般的にはチューニングって言いますか? 私にはわかりません.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.39%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問