AI Navigate

[R] この論文はナンセンスか? [DCdetector: 時系列データに対する異常検知のためのデュアルアテンション・コントラスト表現学習]

Reddit r/MachineLearning / 2026/3/23

💬 オピニオンIdeas & Deep AnalysisModels & Research

要点

  • この投稿は、DCdetector 論文『Dual Attention Contrastive Representation Learning for Time Series Anomaly Detection』について論じており、深層学習を用いた異常検知分野での顕著さと KDD 2023 での採択を指摘している。
  • 著者は公開されている GitHub コードを実行し、元の実装には損失のログが取られていない点を指摘して、それをローカルで記録するようにしている。
  • 観測された訓練ログには、系列ごとに損失値が繰り返し現れ、損失がゼロになり、検証で NaN が出る、という現象が見られ、訓練の安定性やロギングの忠実度に問題がある可能性を示唆している。
  • 本稿は、報告された結果の信頼性について疑問を投げかけ、公開された機械学習研究におけるロギングと評価の透明性を高める必要性を訴えている。

タイトルが示す通りです。これは深層学習の異常検知分野において非常に重要な論文で、国際会議「知識発見とデータマイニング(KDD 2023)」で受理され、数百の参考文献があります。[arxiv]

彼らのソースコードをクローンして実行したところ、モデルは正常に動作しているようでしたが、コードと結果を詳しく見ると疑問が生じました。

元のソースコードは損失の進行状況をログに記録していなかったため、私は自分でログを取り始めました。その結果は非常に興味深いものでした。

==================== トレーニング ===================
スピード: 0.6970s/iter; 残り時間: 3098.7351s
スピード: 0.6970s/iter; 残り時間: 3098.7351s
シリーズ損失: 17.188232421875, 前の損失: 17.188232421875, 損失: 0.0
スピード: 0.3407s/iter; 残り時間: 1480.7512s
スピード: 0.3407s/iter; 残り時間: 1480.7512s
シリーズ損失: 19.67855453491211, 前の損失: 19.67855453491211, 損失: 0.0
スピード: 0.3405s/iter; 残り時間: 1445.5816s
スピード: 0.3405s/iter; 残り時間: 1445.5816s
シリーズ損失: 20.960140228271484, 前の損失: 20.960140228271484, 損失: 0.0
スピード: 0.3406s/iter; 残り時間: 1412.3307s
スピード: 0.3406s/iter; 残り時間: 1412.3307s
シリーズ損失: 21.283531188964844, 前の損失: 21.283531188964844, 損失: 0.0
スピード: 0.3404s/iter; 残り時間: 1377.3572s
スピード: 0.3404s/iter; 残り時間: 1377.3572s
シリーズ損失: 21.437604904174805, 前の損失: 21.437604904174805, 損失: 0.0
スピード: 0.3405s/iter; 残り時間: 1343.4382s
スピード: 0.3405s/iter; 残り時間: 1343.4382s
シリーズ損失: 21.535520553588867, 前の損失: 21.535520553588867, 損失: 0.0
スピード: 0.3406s/iter; 残り時間: 1309.8116s
スピード: 0.3406s/iter; 残り時間: 1309.8116s
シリーズ損失: 21.596588134765625, 前の損失: 21.596588134765625, 損失: 0.0
スピード: 0.3405s/iter; 残り時間: 1275.4794s
スピード: 0.3405s/iter; 残り時間: 1275.4794s
シリーズ損失: 21.639469146728516, 前の損失: 21.639469146728516, 損失: 0.0
スピード: 0.3414s/iter; 残り時間: 1244.8077s
スピード: 0.3414s/iter; 残り時間: 1244.8077s
シリーズ損失: 21.66444969177246, 前の損失: 21.66444969177246, 損失: 0.0
エポック: 1, コスト時間: 520.156s
vali 1 損失: 0.0, vali 2 損失: nan
スピード: 2.4402s/iter; 残り時間: 8630.9654s
スピード: 2.4402s/iter; 残り時間: 8630.9654s
シリーズ損失: 21.682228088378906, 前の損失: 21.682228088378906, 損失: 0.0
スピード: 0.3417s/iter; 残り時間: 1174.2999s
スピード: 0.3417s/iter; 残り時間: 1174.2999s
シリーズ損失: 21.693164825439453, 前の損失: 21.693164825439453, 損失: 0.0
スピード: 0.3431s/iter; 残り時間: 1144.8169s
スピード: 0.3431s/iter; 残り時間: 1144.8169s
シリーズ損失: 21.697399139404297, 前の損失: 21.697399139404297, 損失: 0.0
スピード: 0.3453s/iter; 残り時間: 1117.8676s
スピード: 0.3453s/iter; 残り時間: 1117.8676s
シリーズ損失: 21.699926376342773, 前の損失: 21.699926376342773, 損失: 0.0
スピード: 0.3406s/iter; 残り時間: 1068.4710s
スピード: 0.3406s/iter; 残り時間: 1068.4710s
シリーズ損失: 21.702926635742188, 前の損失: 21.702926635742188, 損失: 0.0
スピード: 0.3222s/iter; 残り時間: 978.5355s
スピード: 0.3222s/iter; 残り時間: 978.5355s
シリーズ損失: 21.698776245117188, 前の損失: 21.698776245117188, 損失: 0.0
スピード: 0.3220s/iter; 残り時間: 945.7742s
スピード: 0.3220s/iter; 残り時間: 945.7742s
シリーズ損失: 21.703542709350586, 前の損失: 21.703542709350586, 損失: 0.0
スピード: 0.3222s/iter; 残り時間: 913.9631s
スピード: 0.3222s/iter; 残り時間: 913.9631s
シリーズ損失: 21.700130462646484, 前の損失: 21.700130462646484, 損失: 0.0
スピード: 0.3219s/iter; 残り時間: 881.0818s
スピード: 0.3219s/iter; 残り時間: 881.0818s
シリーズ損失: 21.70258140563965, 前の損失: 21.70258140563965, 損失: 0.0
エポック: 2, コスト時間: 496.539s
vali 1 損失: 0.0, vali 2 損失: nan
スピード: 2.2717s/iter; 残り時間: 5970.0229s
スピード: 2.2717s/iter; 残り時間: 5970.0229s
シリーズ損失: 21.702590942382812, 前の損失: 21.702590942382812, 損失: 0.0
スピード: 0.3215s/iter; 残り時間: 812.6774s
スピード: 0.3215s/iter; 残り時間: 812.6774s
シリーズ損失: 21.70191764831543, 前の損失: 21.70191764831543, 損失: 0.0
スピード: 0.3214s/iter; 残り時間: 780.2721s
スピード: 0.3214s/iter; 残り時間: 780.2721s
シリーズ損失: 21.703283309936523, 前の損失: 21.703283309936523, 損失: 0.0
スピード: 0.3227s/iter; 残り時間: 751.1521s
スピード: 0.3227s/iter; 残り時間: 751.1521s
シリーズ損失: 21.701114654541016, 前の損失: 21.701114654541016, 損失: 0.0
スピード: 0.3225s/iter; 残り時間: 718.4966s
スピード: 0.3225s/iter; 残り時間: 718.4966s
シリーズ損失: 21.702499389648438, 前の損失: 21.702499389648438, 損失: 0.0
スピード: 0.3226s/iter; 残り時間: 686.5956s
スピード: 0.3226s/iter; 残り時間: 686.5956s
シリーズ損失: 21.704504013061523, 前の損失: 21.704504013061523, 損失: 0.0
スピード: 0.3226s/iter; 残り時間: 654.1541s
スピード: 0.3226s/iter; 残り時間: 654.1541s
シリーズ損失: 21.70374298095703, 前の損失: 21.70374298095703, 損失: 0.0
スピード: 0.3224s/iter; 残り時間: 621.5679s
スピード: 0.3224s/iter; 残り時間: 621.5679s
シリーズ損失: 21.70180892944336, 前の損失: 21.70180892944336, 損失: 0.0
スピード: 0.3224s/iter; 残り時間: 589.3803s
スピード: 0.3224s/iter; 残り時間: 589.3803s
シリーズ損失: 21.70216178894043, 前の損失: 21.70216178894043, 損失: 0.0
エポック: 3, コスト時間: 483.480s
vali 1 損失: 0.0, vali 2 損失: nan
スピード: 2.2459s/iter; 残り時間: 3860.6496s
スピード: 2.2459s/iter; 残り時間: 3860.6496s
シリーズ損失: 21.701725006103516, 前の損失: 21.701725006103516, 損失: 0.0
スピード: 0.3214s/iter; 残り時間: 520.3479s
スピード: 0.3214s/iter; 残り時間: 520.3479s
シリーズ損失: 21.700902938842773, 前の損失: 21.700902938842773, 損失: 0.0
スピード: 0.3216s/iter; 残り時間: 488.5637s
スピード: 0.3216s/iter; 残り時間: 488.5637s
シリーズ損失: 21.70222282409668, 前の損失: 21.70222282409668, 損失: 0.0
スピード: 0.3225s/iter; 残り時間: 457.6450s
スピード: 0.3225s/iter; 残り時間: 457.6450s
シリーズ損失: 21.701622009277344, 前の損失: 21.701622009277344, 損失: 0.0
スピード: 0.3226s/iter; 残り時間: 425.4485s
スピード: 0.3226s/iter; 残り時間: 425.4485s
シリーズ損失: 21.701330184936523, 前の損失: 21.701330184936523, 損失: 0.0
スピード: 0.3224s/iter; 残り時間: 393.0522s
スピード: 0.3224s/iter; 残り時間: 393.0522s
シリーズ損失: 21.703283309936523, 前の損失: 21.703283309936523, 損失: 0.0
スピード: 0.3224s/iter; 残り時間: 360.7532s
スピード: 0.3224s/iter; 残り時間: 360.7532s
シリーズ損失: 21.7034912109375, 前の損失: 21.7034912109375, 損失: 0.0
スピード: 0.3225s/iter; 残り時間: 328.6039s
スピード: 0.3225s/iter; 残り時間: 328.6039s
シリーズ損失: 21.702743530273438, 前の損失: 21.702743530273438, 損失: 0.0
スピード: 0.3223s/iter; 残り時間: 296.1858s
スピード: 0.3223s/iter; 残り時間: 296.1858s
シリーズ損失: 21.703426361083984, 前の損失: 21.703426361083984, 損失: 0.0
エポック: 4, コスト時間: 482.616s
vali 1 損失: 0.0, vali 2 損失: nan
スピード: 2.2444s/iter; 残り時間: 1817.9376s
スピード: 2.2444s/iter; 残り時間: 1817.9376s
シリーズ損失: 21.703350067138672, 前の損失: 21.703350067138672, 損失: 0.0
スピード: 0.3215s/iter; 残り時間: 228.2310s
スピード: 0.3215s/iter; 残り時間: 228.2310s
シリーズ損失: 21.70497703552246, 前の損失: 21.70497703552246, 損失: 0.0
スピード: 0.3214s/iter; 残り時間: 196.0459s
スピード: 0.3214s/iter; 残り時間: 196.0459s
シリーズ損失: 21.704113006591797, 前の損失: 21.704113006591797, 損失: 0.0
スピード: 0.3215s/iter; 残り時間: 163.9427s
スピード: 0.3215s/iter; 残り時間: 163.9427s
シリーズ損失: 21.70448112487793, 前の損失: 21.70448112487793, 損失: 0.0
speed: 0.3213s/iter; left time: 131.7412s
speed: 0.3213s/iter; left time: 131.7412s
series loss: 21.701704025268555, prior loss: 21.701704025268555, loss: 0.0
speed: 0.3214s/iter; left time: 99.6477s
speed: 0.3214s/iter; left time: 99.6477s
series loss: 21.704320907592773, prior loss: 21.704320907592773, loss: 0.0
speed: 0.3220s/iter; left time: 67.6261s
speed: 0.3220s/iter; left time: 67.6261s
series loss: 21.703289031982422, prior loss: 21.703289031982422, loss: 0.0
speed: 0.3226s/iter; left time: 35.4901s
speed: 0.3226s/iter; left time: 35.4901s
series loss: 21.703575134277344, prior loss: 21.703575134277344, loss: 0.0
speed: 0.3227s/iter; left time: 3.2270s
speed: 0.3227s/iter; left time: 3.2270s
series loss: 21.700424194335938, prior loss: 21.700424194335938, loss: 0.0
Epoch: 5, Cost time: 482.731s
vali 1 loss: 0.0, vali 2 loss: nan

モデルはほとんど何も学んでいません。

これにより、ソースコードを深く調べることになり、他に見つけたことは以下の通りです:

早期停止と検証は無駄です。なぜなら、検証損失2は計算すらされていないからです。

検証はテストデータセットを使用していますが、モデルが本当に学んでいないので、あまり関係ありません。

Revin正規化は正しく適用されていないようです。なぜなら、そのモジュールは毎回のフォワードで再初期化されているからです。

この論文は、高い結果を得るために寛大なポイント調整メトリックを使用しているだけですか?モデル自体は本当に何もしていないのに?私の読み方が間違っていますか?

submitted by /u/rank_0_peasant
[link] [comments]