2025/9/18の研究ログ
やることは
CrossAttentionのエラーを解決して精度を確認する
Mambaの簡単な実装を行い,一旦RNNと入れ替えてみる
論文に従ってConfident Mean Teacherを実装する
もう全部LLMに実装を任せても行けるのでは?
やってみるか
実装の前に方針などはこちらで整理して,明確な方針と必要な情報を与えて実行させよう
CrossAttentionのエラーについて
MultiHeadAttentionは入力のQ,K,V行列の要素として,バッチ数,シーケンス長,埋め込み次元を持つ
後ろの2要素は値を統一する必要がある
一旦捨て置く > なぜ2要素を統一する必要がある?
今の状態
code: log
2025-09-17 12:37:32,521 - desed_task.nnet.CRNN - - - - - - - CrossAttn: query_reshaped shape=torch.Size(60, 60, 16) dtype=torch.float32 device=cuda:0 2025-09-17 12:37:32,522 - desed_task.nnet.CRNN - - - - - - - CrossAttn: key_value_feat shape=torch.Size(496, 60, 1536) dtype=torch.float32 device=cuda:0 シーケンス長は同じ60だが,埋め込み次元が違いすぎる
この統一が必要
共通の次元数に射映して統一すれば良いとGeminiが言っている 確かに統一はできた
code: log
2025-09-18 18:18:48,193 - desed_task.nnet.CRNN - - - - - - - CrossAttn: query_reshaped shape=torch.Size(60, 60, 256) dtype=torch.float32 device=cuda:0 2025-09-18 18:18:48,193 - desed_task.nnet.CRNN - - - - - - - CrossAttn: key_value_feat shape=torch.Size(496, 60, 256) dtype=torch.float32 device=cuda:0 しかし同様のエラー
次元の要素の並びを勘違いしている?
batch_first=Trueで定義されており,理解したままだと思うが...
あとはバッチ数以外ないので,他の問題かも
古い実装が残ったままだった
うっかり
統一はされているが,まだエラー
code: log
2025-09-18 18:30:40,116 - desed_task.nnet.CRNN - - - - - - - CrossAttn: query_reshaped shape=torch.Size(59, 59, 256) dtype=torch.float32 device=cuda:0 2025-09-18 18:30:40,116 - desed_task.nnet.CRNN - - - - - - - CrossAttn: key_value_feat shape=torch.Size(496, 59, 256) dtype=torch.float32 device=cuda:0 本当に大丈夫だろうか
試せば分かる
ダミー入力の段階で引っかかっている
毎回LLMの出すコードがエラーを吐くので少し面白い
トレースバックを明示的に渡すとエラーの解決策の提示が良くなるかも
一度整理する
解決したいのは次元数が合わず,Attentionの計算ができないエラー
MultiHeadAttentionでの計算時,Q,K,V行列のQ,Kの要素の次元が合わず,計算ができていない
次元を統一するために修正中
シーケンス長と埋め込み数は上手く修正できた
にも関わらず上手く動かず,原因がよく分かっていない
エラーを見るに,入力されているテンソルの最終的なサイズが合致しないことがエラーの原因に見える
各要素を揃えるのではなく,それらの積が同値になる必要があるのでは?
MultiheadAttentionはテンソル全体の要素数(サイズ)が一致することではなく、各次元が持つ意味(バッチ、シーケンス、特徴量)を理解して動作します。
バッチサイズ (Batch Size): 必ず一致させる必要があります。
特徴量次元 (Feature Dimension): 必ず一致させる必要があります。(これはfusion_dimへの射影で達成済みです)
シーケンス長 (Sequence Length): QueryとKey/Valueで異なっていても問題ありません。`
確認する
code: log
2025-09-18 19:24:25,484 - desed_task.nnet.CRNN - torch.Size(60, 128, 626) - torch.float32 - cuda:0 - 入力x: %s 2025-09-18 19:24:25,484 - desed_task.nnet.CRNN - torch.Size(60, 1, 626, 128) - torch.float32 - cuda:0 - 転置後のx: %s 2025-09-18 19:24:25,484 - desed_task.nnet.CRNN - torch.Size(60, 160000) - torch.float32 - cuda:0 - 入力audio: %s code: seq
2025-09-18 19:30:56,369 - desed_task.nnet.CRNN - - - - - - - preprocess後のfbank shape=torch.Size(60, 998, 128) dtype=torch.float32 device=cuda:0 2025-09-18 19:30:56,370 - desed_task.nnet.CRNN - - - - - - - unsqueeze後のfeatures shape=torch.Size(60, 1, 998, 128) dtype=torch.float32 device=cuda:0 2025-09-18 19:30:56,370 - desed_task.nnet.CRNN - - - - - - - patch_embedding後のfeatures shape=torch.Size(60, 512, 62, 8) dtype=torch.float32 device=cuda:0 2025-09-18 19:30:56,371 - desed_task.nnet.CRNN - - - - - - - reshape後のfeatures shape=torch.Size(60, 512, 496) dtype=torch.float32 device=cuda:0 2025-09-18 19:30:56,371 - desed_task.nnet.CRNN - - - - - - - transpose後のfeatures shape=torch.Size(60, 496, 512) dtype=torch.float32 device=cuda:0 2025-09-18 19:30:56,371 - desed_task.nnet.CRNN - - - - - - - layer_norm後のfeatures shape=torch.Size(60, 496, 512) dtype=torch.float32 device=cuda:0 code: seq2
2025-09-18 20:03:37,510 - desed_task.nnet.CRNN - - - - - - - layer_norm後のfeatures shape=torch.Size(59, 496, 512) dtype=torch.float32 device=cuda:0 2025-09-18 20:03:37,537 - desed_task.nnet.CRNN - - - - - - - encoder returned 2 layers
2025-09-18 20:03:37,537 - desed_task.nnet.CRNN - torch.Size(59, 16, 313, 64) - torch.float32 - cuda:0 - cnn_feat: %s 2025-09-18 20:03:37,537 - desed_task.nnet.CRNN - torch.Size(496, 59, 768) - torch.float32 - cuda:0 - beat_feat: %s 2025-09-18 20:03:37,537 - desed_task.nnet.CRNN - torch.Size(59, 20032, 16) - torch.float32 - cuda:0 - cnn_feat_3d: %s 2025-09-18 20:03:37,587 - desed_task.nnet.CRNN - torch.Size(59, 59, 16) - torch.float32 - cuda:0 - Aligned cnn_feat: %s 2025-09-18 20:03:37,587 - desed_task.nnet.CRNN - torch.Size(59, 59, 256) - torch.float32 - cuda:0 - cnn_projected: %s 2025-09-18 20:03:37,587 - desed_task.nnet.CRNN - torch.Size(496, 59, 256) - torch.float32 - cuda:0 - beats_projected: %s 途中までは動いたが,二週目がダメ
特徴量を継続的に取得する部分でエラー
結合した特徴量の形状を調整してCNNに入力する部分でエラー
どう調整すればいい?
ループ1周目:
cnn_input (1ch) -> CNN層0 -> cnn_feat (16ch)
融合処理 -> fused_cnn (256ch)
cnn_input が fused_cnn (256ch) に更新される。
ループ2周目:
cnn_input (256ch) -> CNN層1 (入力32chを期待) -> エラー発生!
これ,最初の次元は32なのでは
射影する? > 融合特徴量をCNNに入力するためにアダプタを挟む
アダプタを挟むという発想は分かるが,Geminiさんの実装が上手くいってない もっといい方法はないのかな?
どうしよう
どうして期待される次元数が取れないのかよくわからない
それっぽい部分を見つけた
code: log
2025-09-18 22:39:16,359 - desed_task.nnet.CRNN - - - - - - - Fusion adapter for layer 0: fusion_dim -> 16
2025-09-18 22:39:16,359 - desed_task.nnet.CRNN - - - - - - - Fusion adapter for layer 1: fusion_dim -> 32
2025-09-18 22:39:16,359 - desed_task.nnet.CRNN - - - - - - - Fusion adapter for layer 2: fusion_dim -> 64
2025-09-18 22:39:16,360 - desed_task.nnet.CRNN - - - - - - - Fusion adapter for layer 3: fusion_dim -> 128
2025-09-18 22:39:16,360 - desed_task.nnet.CRNN - - - - - - - Fusion adapter for layer 4: fusion_dim -> 128
2025-09-18 22:39:16,361 - desed_task.nnet.CRNN - - - - - - - Fusion adapter for layer 5: fusion_dim -> 128
一通りやったけどいずれも解消に至らない
聞くか
3時間ぶっ通しで作業するのは疲れるな
途中で休憩を挟んだ方が良い
頻度は要検討