2025/9/15の研究ログ
何をする?
16:30まで動ける > 3h
LLMの応答を理解する > 30min
CrossAttentionで30min
一応,やろうと思っていたメモリエラーの解消は達成
あとはBEATsとCNNの特徴量の形状を調整する
ベースラインのコードでやっていたような
参考にしたい
ダメ元でCopilotに依頼しよう
分からない部分も聞こう
現状の理解を文章にしてぶつければ良い
未達 できれば後でやりたい > 最低限実装の方針を得る
Mambaで30min
Confident Mean Teacherで30min
CrossAttentionを動かす
すぐできる対策を実行しよう
バッチサイズを落とす > 半分にしたがダメ. 根本的な解決が必要
BEATsをfreezeするのはあり
GPT-5と壁打ちしようと思ったら,よしなにしてくれた: forward()をどう改良したか見よう
self.beats.eval()は評価用にパラメータを凍結する?
beats.forward_two_layers()にno_gradをつけ,勾配計算をしないよう設定? beats_feat = beats_feat.detach().to(device)のdetach()がよく分かってない
定数化する
勾配が返り値として戻らない?
またdetach()している: fused_beats = fused_beats.detach()
計算グラフなるものがあるらしく,beats関係で自動微分の情報が残らないようにしている?
del cnn_feat_reshaped, cnn_pooled, beats_featとtorch.cuda.empty_cache()でメモリを解放?
処理で使った中間的なテンソルの参照をなくし,本体も消す
これでdebug用にshape,dtype,deviceを取得できる
forward_two_layers()でIndexError: list index out of range
logで確認したところ,_, layer_results = self.model.encoder(x, padding_mask=None)でlayer_resultsが空っぽだった
GPT-5?が提案するforward()の修正版を使ってみる
やはりencoderへの入力がまずいのか,上手く動いていない
最終層だけもらってCrossAttentionで融合する部分で止まった
encoderが中間特徴量を返す設定になっているか確認しよう
GPT4.1に相談したらlayerの指定が足りないと言われた
out_all, layer_results = self.model.encoder(x_in, padding_mask=None, layer=max(0, start_layer))
他の呼び出し部分も同様の記述があったらしい
丁寧にみれば気付けたのか...
無事にlaer_resultsまでは動いた
特徴量融合部分でエラー
よくわからない > RuntimeError: mat1 and mat2 shapes cannot be multiplied (29760x1536 and 768x64)
GPTによると,実際に入力された行列の最後の次元は1536だが,Linear層で期待している重みの形状は768で.齟齬が起き ているらしい
ちょうど二倍になっており,おそらくBEATsの特徴量を束ねた結果合わなくなったとか
それならCrossAttentionのinitの次元を調整すればいいか
各次元の要素を自動取得するようになった
CrossAttentionのforwardで形状を統一する箇所を確認
片方は不要と判断し削除
考えるのが面倒だったのもある
段々GPT5?の回答が精彩を欠いてきたので,他のに変更
これまでに提案されたコードを理解せずに進めており,どこをどう直せばいいか分からない
一旦理解するフェーズを挟むか?
これまでの経験から,コーディング用でないLLMに依頼するときはある程度理解していないと時間がかかる
変更されたCrossAttenの実装を理解しよう
どこをどのくらい理解すれば良い?
attnに入力するQ,K,Vについて,各段階で理想の形状が何で,どのように変形すればいいか分かれば良さそう
単純作業だし,依頼したほうが早い
CrossAttenのQ,K,Vに関する理解は一旦置こう
今の実装は2層分の特徴量を結合して取得しているが,本来は2層目の特徴量だけをもらう必要があるかもしれない