質問するログイン新規登録

Q&A

解決済

2回答

8605閲覧

『validation accuracy』と『training accuracy』?

IS.SEKI

総合スコア28

深層学習

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

機械学習

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

1グッド

0クリップ

投稿2018/07/28 12:21

1

0

NNの評価指標に『validation accuracy』と『training accuracy』があるらしいですけれども
自分の理解では『validation accuracy』は複数のground truth で訓練済みのNNを検証するための行いで、恐らくその複数のground truthに対する誤差の平均値で『validation accuracy』にすると思いますが、これは概念的に理解しやすいです。

ところが、『training accuracy』は何者か、分かりません。(まだ訓練完了していないNNに対する評価指標?)
その概念と計算方法を教えていただけませんか。

oookabe👍を押しています

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

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

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

guest

回答2

0

例えば、Kerasでfitして、verbose=1にすると、以下のような出力がされます。

782/782 [==============================] - 307s - loss: 0.4601 - acc: 0.7791 - val_loss: 0.3605 - val_acc: 0.8416

accはミニバッチごとに更新されていきます。

投稿2018/07/29 00:16

mkgrei

総合スコア8562

oookabe

2018/07/29 02:47 編集

お返答ありがとうございます。 >> accはミニバッチごとに更新されていきます。 そうですか、これは分かりやすい感じ。 じゃあ、後ろのval_lossや val_accは『訓練が完全に完了した』後に、別途計算された指標ですよね?
mkgrei

2018/07/29 22:49

各epochの訓練が終了した後に、あらかじめ取っておいたvalidationセットに対して計算しています。
IS.SEKI

2018/07/30 12:04 編集

mkgreiさん、有難うございます!! 【NOTE】 mkgreiさまが案内されたリンクより: model.fit(x_train, y_train, batch_size=10, epochs=20, verbose=1, validation_split=0.08) に対する結果----Daniel Möller氏の解釈(笑顔が良かったので信用します): loss - training data, calculated every batch acc - training data, calculated every batch val_loss - test data, calculated every epoch val_acc - test data, calculated every epoch
guest

0

ベストアンサー

training accuracyもvalidation accuracyもaccuracyを算出しているという意味では同じものです。単純に計算するタイミングが、trainingのときとvalidationのときの相違程度の違いです。

細かいことをいうと、「trainingのとき」には、training途上とtraining処理終了時があります。前者はコスト関数の収束度の変化に対しaccuracyがどのように変化していくのかを調べるために計算します。後者は途中経過は省略してtraining処理が終了したモデルのaccuracyを算出してそれなりにうまくいっていることを評価するものです。

投稿2018/07/28 21:42

R.Shigemori

総合スコア3378

oookabe

2018/07/29 02:51

お返答ありがとうございます。 理解力不足で申し訳ございませんが、 >>「trainingのとき」にはtraining途上とtraining処理終了時があります。 ってどういう意味でしょうか。 結局文中の「前者」と「後者」は皆「trainingのとき」の話ですね? そうしたら、「validationの時」とはどう区別するのでしょうか。 もう少しご説明いただければ幸いです。
R.Shigemori

2018/07/29 18:28

一般的かどうかはわかりませんが、自分は以下のような感じで使い分けるようにしています。 1.training中にコスト関数の結果をリストに出力するのと同タイミングでtrain-dataに対するaccuracyを出力する。このコスト関数の推移とaccuracyの推移を見比べながらモデルが収束しているかどうかを判断する。 2.上記で収束していると判断されたモデルに対しtest-dataを入力して混合行列を算出する。これによって、トータル的相違に加えて内訳(つまり間違え方)も検証しながら過学習の有無を評価する。 3.上記で過学習とは言えないと判断された場合、その結果が偶然でないことを評価するために、validation accuracyを算出し、test-dataのaccuracyがそれなりの範囲に収まっていることを評価する。ここでいうそれなりの範囲とは、accuracyの分布(平均と標準偏差)を計算して評価する。計算時間や手間の関係で十分な計算結果数が手に入らなければMCMCあたりを使ってサンプリングすることも視野に入れる。
oookabe

2018/07/30 04:44 編集

R.Shigemoriさま ご丁寧な解釈ありがとうございます。 トピ主じゃないのに繰り返す質問申し訳ございませんが、上記文の中の"test-data"とは "訓練データ以外" の『ground truth』データですね。 これは通常"validation-data"(validationセット)と呼ばないでしょうか。 あるいは、"validation-data"とはまた別のもの? ★下にあるmkgreiさまの説明文: 『あらかじめ取っておいたvalidationセットに対して計算していす』に関しては理解しています。
R.Shigemori

2018/07/30 07:49

ざっくりいうとvalidationは検証という意味しか持たないので、ご指摘の通りかと思います。ただ検証という以上、「何を検証するのか」が結構大切で、さらにいうと検証対象に応じて適切な方法を採用することはもっと大切です。 それゆえ、あらかじめ取り分けておいたデータで計算していればvalidationであるという考え方は、検証対象が不明であること、検証対象に対し適切なデータかどうかが不明なこと、からyesとは言い難いと捉えています
IS.SEKI

2018/07/30 12:05 編集

素晴らしい説明です。。。 ほんとうの専門家と経験者でなければ、答えられない質問ですね。 R.Shigemori様 ありがとうございました!!
ko.tu

2019/02/11 05:40

ごめんなさい気になってしまったので補足させていただきます まず用語の解説から train_data:モデルの学習の際に使用するデータ validation_data:train_dataと実際のデータとの違いを検証するデータ test_data:最終的な評価のために用いるデータ ground_truth:正解データ ------ NNの学習は まず、入力データに対する予想を出力して その予想と正解の誤差(loss)を出し lossを逆伝播することによりモデルの更新をしています ここで問題になるのがあくまで学習するのは学習データ(test_data)に対してだけなので それが果たして一般的なデータに対しての学習ができているとは限りません なので学習に用いないデータ(validation_data)で検証する必要があります よってtrain_dataとvalidation_dataは算出タイミングの違いだけでなく 学習に用いるか用いないか、つまり予想した後に逆伝播により モデルを更新するかしないかの差があります つまり、学習の流れとしては 1.train_dataに対してaccuracyとlossを計算する 2.lossを使ってモデルを更新する 3.test_data分1と2を繰り返す 4.学習されたモデルに対してvalidation_dataで検証する(この際出たlossでモデルの更新は行わない) 5.上記の1~4の流れを1epochとして何度も繰り返す 6.最後にできたモデルに対してtest_dataで最終的な性能を測る おそらくR.Shigemoriさんはvalidation_dataとtest_dataとの違いについてと 勘違いされているのではないでしょうか こちらはクロスバリデーションという手法を用いない限り 算出タイミングが違うだけなのでどちらを使用しても大差ありません 最もR.Shigemoriさんの言うとおりvalidation_dataはあくまで検証用ととらえるのであれば それをテストに用いるのは筋違いにはなってしまいます。 また途中にあったground_truthとは、この話と少し違うデータの話となり 一般的にground_truthは学習モデルが生成物を作成する際などに 使われる言い方になります。GANやセグメンテーション、翻訳機などですね。 この際ground_truthはどれも正解データで、比較対象になるのは生成物となるので 今回のtrain_dataやtest_dataなど話とは関係ありません あえて言うのでしたら今回のtrain_data、validation_data、test_dataはどれも ground_truthになります これが自分の解釈になります。間違っていたらすみません また、半年前のものに補足ということで変な感じはしますが、 trainとvalidationの関係性について調べていた際に上位に出てきて ちょっと気になったので補足いたしました。 今後このページを見る人にとって良き指標となることを願ってます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.29%

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

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

質問する

関連した質問