学習曲線において精度の意味

16 ビュー (過去 30 日間)
陽太 黒尾
陽太 黒尾 2022 年 11 月 8 日
コメント済み: Hiro Yoshino 2022 年 11 月 11 日
ヘルプセンターの「深層学習を使用したsequence-to-sequence分類」の例を少しいじりました。
この例ではもともとスマートフォンから得られる加速度データを使用して、[座る→立つ→歩く→走る→踊る]という1連の流れを1つのデータにしています。この1つのデータに含まれる5つの動作を1動作づつ切り出して、1動作を1データとして作成しました。
図1 (5動作6個の加速度データ)   図2 (図1の2行目のセル配列のデータ5動作を1動作づつに分けたもの)
図1の通りにセル配列として5動作のデータを1つのデータとして格納されているのを、図2のように1動作づつを5つのデータに分けて作成し、ネットワークに学習させました。ラベルもセル配列として同じように格納しています。
図3
図4
もともとこの例にあったような構成である図1の5つの動作データが1つのデータとなっているものを学習させたところ、図3のような結果になり、学習精度は100%ですが、図2の1動作づつを5つのデータに分けて作成したものを学習させたところ、図4のように学習精度100%にはならず、精度は落ちてしまいました。
学習条件はMATLABの例をそのまま使いました。エポック数を60→100に変更しただけです。
この原因が分からずに悩んでいるのですが何かお分かりでしょうか?
また、この図3,4の青色のグラフの縦軸にある精度とは何を表しているのかを教えていただけると幸いです。
よろしくお願い致します。

採用された回答

Hiro Yoshino
Hiro Yoshino 2022 年 11 月 9 日
恐らく悩んでいるポイントは、時系列のデータを"全部並べて学習する"のと、"分けてそれぞれ学習する" ことで結果が異なるのは何故なのか?という事だと思うんですが、それで良いですか?
そうだと仮定して、2つの場合で比較します:
[全部並べて学習する]
trainNetwork の sequences を見ていただくと分かりますが、1つの cell に入った系列データは、一続きのデータとして見なされます。従って、全データを素直に使って学習を実行することになります (図3に相当)。この場合は全データがメモリに収まるサイズであることが必要です。ディープラーニングで学習する場合は、全データがメモリに収まる場合だけではないので、"データを分割する"アイディアがあります。(もしくは、モデルの過学習を防ぐためにあえて分割するというアイディアもありますがそれはここでは、言及しません)
[データを分けてそれぞれ学習する]
データを分割して、分割されたデータ毎にネットワークパラメータを更新します。この分割単位が trainingOptions で既定される、"MiniBatchSize" です。デフォルトですと 128 なので、今回の分割5は場合は、パラメータの更新の方法としては全データを使った学習のタイミングと同じになり、見かけ上は [全部並べて学習する] と差が無いように見えます。しかし、実は MiniBatch に分けることで (今回は5) 、trainingOptions の SequenceLength の設定が適用されて、元のデータに一部 "0" の値が入って学習が進みます。MiniBatch は同じ方式でデータを処理していくため、5つに分けたデータの長さがそれぞれ異なる場合、0 等を入れて長さを揃えてしまいます(padding と言います) 。デフォルトだと一番長いデータに合わせて、短いデータには 0 が入っています。この部分が結果を悪くしているのでは?と思います。図2を見ると、5つの時系列データの長さが異なっているので、短いデータの右側に "0" が挿入されて学習が進んでいると思われます。
グラフの学習精度は今回は分類問題なので、正解率になります。正しく分類出来た数 / 全データ数 です。
損失はデフォルトでは、分類問題では一般的なクロスエントロピーです (この辺に解説があります)。
  6 件のコメント
陽太 黒尾
陽太 黒尾 2022 年 11 月 11 日
ありがとうございます。
すみません最後の質問なんですけど
図9
図9のように動作データを全て並べたデータを複数学習させた場合、sequenceの長さはそれぞれバラバラですが学習精度は100%でした。デフォルトで条件は"longest"に合わせているのでデータが足りない分0で埋め合わせされているはずなのですが...
Hiro Yoshino
Hiro Yoshino 2022 年 11 月 11 日
それも有り得るかと思います。
図2 と 図9 の大きな違いは、データ長さのバラつきです。図2 の方は "0" padding になる部分が余りに多くて、恐らく破綻したのだと思います。一方 図9 だとバラつきが少ないです。その場合はpadding の影響が少なくなる方向に作用します。今回のお使いのモデルは LSTM だと思うので、都度都度のデータだけを見て判断をしている訳ではなく、過去のデータポイントを参考にしながら判断を行っています。そこが LSTM が精度が良い理由でも有ります。恐らく学習の次点で、"0" padding がある場合、ある程度直前のデータの情報を引き継ぐように学習されたのでは?と思われます。
そもそも、"0" padding がデフォルトで適用されるという事は、この手法がある程度”使える”手法であり、極端にデータの長さが異なる状況で無ければ実用的であるということだと思います。注意点は、極力データバッチ毎のサイズを近づけるという事です。

サインインしてコメントする。

その他の回答 (1 件)

Hernia Baby
Hernia Baby 2022 年 11 月 9 日
Q1. 学習条件はMATLABの例をそのまま使いました。エポック数を60→100に変更しただけです。
この原因が分からずに悩んでいるのですが何かお分かりでしょうか?
A1. エポック数とは、「一つの訓練データを何回繰り返して学習させるか」の数です。
今回はやりすぎて過学習を起こし、精度が悪くなったと考えられます。
Q2. 図3,4の青色のグラフの縦軸にある精度とは何を表しているのか。
A2. 分類において精度とはクラスAと判断したすべてのデータのうち、実際にAであった割合です。

カテゴリ

Help Center および File Exchangeイメージを使用した深層学習 についてさらに検索

製品


リリース

R2022a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!