一、项目阶段性实验总结报告
1. 当前目标
本阶段的目标是验证这样一条路线是否有效:
基于 NExT-QA 的预提取视频特征,构建显式“事件链推理”模块,包括:
- 事件聚合(Latent Event Aggregation)
- Grounder
- Causal Linker
- Chain Search
- Chain-aware fusion
并考察它是否能:
- 提升整体五选一准确率
- 尤其提升 因果类 / 时序类 问题表现
- 形成具有解释性的事件链结构
二、目前一共做了多少种主要尝试
如果按“真正形成可比结果的实验版本”算,目前一共完成了 7 类主要尝试,其中:
A. 轻量基座线
s1_baseline_5090s2_latent_event_5090s0_1_full_reasoner_5090s0_2_s1init_full_reasoner_5090s0_4_scratch_full_reasoner_5090s0_5_scratch_full_reasoner_5090s0_5_baseonly_5090(为题型对照专门训练的无链基座)
B. 强基座线
Flipped-VQA backbone-only抽取与评测(工程成功,作为强基座参考)
其中:
s0_3做了补丁,但你没有给出完整可比评测结果,所以不纳入最终对照结论s4_flipped_reasoner_train跑通了训练链路,但没有形成最终可比的完整验证结论
所以,如果按“已形成清晰结论的实验版本”统计,是 7 个主要可比实验 + 1 个强基座参考实验。
三、各实验版本的结果与结论
实验 1:s1_baseline_5090
目标
建立一个最基础的轻量五选一 baseline。
结构
- 视频特征:
clip_feats -> Linear(768→256) - 文本特征:
hashing text encoder - 融合:
global_video + question + option - 最终输出:
[B,5]分类分数
结果
val acc ≈ 0.3825
结论
- 作为轻量 baseline,能跑通
- 但 train/val 间已有明显 gap,存在过拟合倾向
- 是一个可用的开发基线,但不是一个很稳的最终研究底座
主要问题
- 文本编码过轻
- 视频只保留
max_feats=10 - 更像“粗糙的多选分类器”,而不是视频推理器
实验 2:s2_latent_event_5090
目标
在 s1 基础上加入最简单的 latent event 聚合。
结构
- 在 clip 之上聚合出一组事件
- 但最终仍然是把事件再摘要为全局信息后参与分类
结果
val acc ≈ 0.3835
相对 s1
- 提升约
+0.0010
结论
- 基本可以视为几乎没有有效提升
- 说明“只加一个事件聚合层”本身不能自然带来增益
失败原因
- 事件只是做了“摘要增强”,没有真正参与选项级推理
event_summary与video_summary高度近似,信息增量太小- 事件结构没有真正进入答案选择路径
实验 3:Flipped-VQA backbone-only
目标
抽出原 Flipped-VQA 作为强基座参考。
结构
- 使用原项目的 7B backbone
- 输入预提取特征
- 使用原 prompt / scoring 逻辑
结果
val acc = 0.7198
结论
- 工程上完全成功
- 说明:预提取特征 + LLM backbone 这条路线是可信的
- 形成了一个很强的参考上界
意义
它不是失败,而是整个项目里目前最稳定、最强的可用底座。
实验 4:s0_1_full_reasoner_5090
目标
在轻量 baseline 上第一次完整接入 full reasoner。
结构
- scratch 训练
max_feats=10num_events=8top_m=4- 含:
- Event Aggregation
- Grounder
- Linker
- Chain Search
- Chain-aware fusion
结果
- best
val acc ≈ 0.3833
相对 s1
- 比
0.3825高约+0.0008
结论
- full reasoner 接入后,没有崩
- 但提升极小,几乎可以视为不显著
失败原因
- 视频输入压缩过狠:
max_feats=10 10 -> 8 events -> top4 -> chain summary
压缩链条过长mask loss大部分 step 近乎 0,说明“链必要性监督”几乎没真正起作用- 轻量基座本身已经容易过拟合,reasoner 容易被拖偏
实验 5:s0_2_s1init_full_reasoner_5090
目标
测试:是不是因为 scratch 太难,所以改成“从 s1_baseline_5090 初始化”。
结构
- 加载
s1best checkpoint - 前两轮冻结 base
- 后面解冻
- 其余结构与
s0_1相近
结果
- best
val acc = 0.3811
相对 s0_1
- 反而更差
结论
- “从基座初始化 + 冻结/解冻”没有解决问题
- 所以问题不主要在“是否 scratch”
失败原因
- 继承的
s1基座本身就有偏置和过拟合倾向 - 冻结阶段 reasoner 只能在一个不够健康的 base 上做小修小补
- 解冻后也没有形成更强的泛化
- 虽然
mask loss比s0_1活跃,但没有转化成更高准确率
实验 6:s0_4_scratch_full_reasoner_5090
目标
回到 scratch,但采用更合理的设置:
max_feats=16num_events=6top_m=3
结果
- best
val acc = 0.3765
表面上看
分数比 s0_1 更低。
但更重要的观察
s0_4 的训练曲线更健康:
- epoch 1:
0.3175 - epoch 2:
0.3535 - epoch 3:
0.3631 - epoch 4:
0.3717 - epoch 5:
0.3765 - epoch 6 后开始掉
这说明:
- 前期在稳步学习
mask loss前期明显非零- 不是一开始就靠 shortcut 冲高训练精度
结论
s0_4 虽然 overall 不高,但它是目前 scratch 线里**最像在真正学“结构”**的一版。
失败/受限原因
- 基座本身仍然太弱
- 虽然
max_feats=16比 10 更合理,但对中位数 37 clip 的视频来说仍偏少 16 -> 6 events -> top3
仍然压缩较狠- 后期出现典型过拟合,epoch 5 后 val 掉头
实验 7:s0_5_baseonly_5090 vs s0_5_scratch_full_reasoner_5090
目标
专门验证一个问题:
放松压缩(16/8/4)以后,链模块是否真的对不同题型有帮助?
结构
s0_5_baseonly
max_feats=16- 无事件链模块
s0_5_reasoner
max_feats=16num_events=8top_m=4- full reasoner
总体结果
base-only:0.3739reasoner:0.3751- 总提升:
+0.0012
题型拆分结果
coarse
causal:0.3471 -> 0.3445(下降)descriptive:0.5148 -> 0.5302(提升)temporal:0.3493 -> 0.3499(几乎不变)
fine
CH causal-how:-0.0278CW causal-why:+0.0062TN temporal-next:+0.0123TC temporal-count:-0.0166DL/DC/DO描述类小幅上涨
结论
这组结果非常关键:
当前这版事件链模块不是完全没用,但它带来的收益主要体现在描述类和部分局部时序子类上,而不是最想要的“因果类整体提升”。
核心失败原因
- 当前链模块更像“结构化摘要器”,而不是“因果推理器”
- 对
causal-how这类需要真正过程性推断的题,反而起了负作用 - 说明它学到的是“内容组织/证据重排”,而不是稳定的显式因果链 reasoning
四、失败的共性原因总结
把所有实验放在一起看,失败/受限的原因主要集中在 6 个方面。
原因 1:输入压缩过早、过狠
你自己统计过视频特征长度:
median = 37mean = 43.66p90 = 88
而你长期在用:
max_feats = 10- 后来提升到
16
这意味着大多数视频只保留了原始 clip 序列的一小部分。
直接后果
- 时序信息损失
- 因果前因后果链条不完整
- 后面的事件聚合只能在已经被裁过的序列上工作
原因 2:压缩链条太长
你现在的结构大致是:
raw clips
→ 固定采样 clip
→ 768→256
→ 聚成 K 个事件
→ 每个选项只保留 top-M 事件
→ 搜 2/3 长链
→ 再平均成一个 chain summary
这会导致:
- 节点信息损失
- 顺序信息损失
- 边信息损失
- 最终只剩一个小向量去修正分数
原因 3:Reasoner 介入太晚
当前接法是:
base answerer 先给出基本判断
reasoner 只在最后阶段做“改分”
这会导致:
- 它不能改变模型一开始关注哪些视频片段
- 不能改变视频-问题对齐
- 只能做后验修正
对弱基座,这样容易被拖偏;
对强基座,这样又很难带来提点。
原因 4:轻量基座本身不够健康
s1/s0 线本身就有:
- 文本编码太轻
- 视频编码太浅
- 容易过拟合
- 容易学数据偏置
所以很多时候 reasoner 的表现,不完全反映它自己是否有用,而是被不稳定的 base 混淆了。
原因 5:缺少 query-conditioned temporal localization
你现在是:
- 先在整段视频上聚事件
- 再判断哪些事件支持选项
但更合理的顺序应该是:
先根据问题/选项找相关时间段
再在局部时间段内部建事件链
现在少了这一步,所以很多事件很可能根本和当前问题无关。
原因 6:监督目标与真正目标不完全对齐
你希望解决的是:
- causal
- temporal
但结果显示:
- descriptive 更受益
- causal 不升反降
这说明:
你现在的损失和架构组合,更容易学成“视频内容重组织器”,而不是“因果推理器”。
五、阶段性结论
基于目前所有尝试,我会给出下面这几个判断。
结论 1
“显式事件链”这个方向不是零信号。
因为:
mask loss在某些版本活了chain score有区分s0_5并非完全不涨- 某些题型(描述类、局部时序类)确实受益
结论 2
但当前架构并没有把这个方向变成“有效的因果推理模块”。
特别是:
causal-how掉得明显causal整体没有提升
所以目前不能说“这套架构已经证明显式事件链有效”。
结论 3
当前 reasoner 更像“结构化摘要/证据重排模块”,不像真正的因果链推理器。
结论 4
如果目标是整体提点,这条轻量 s0 线目前不成功。
可以继续做开发/诊断,但不宜再把它当主结果线。
结论 5
Flipped-VQA 这类大模型 + 预提特征的强基座,仍然是更可信的主干。
但:
- 不能继续用“最后外接一层 chain-aware scoring”这种方式期待明显提点
- 要改成更前置、更结构化的接法
六、目前一共做了多少种“失败或受限”的尝试
如果你是为了写报告,建议这样表述:
截至目前,围绕“轻量基座 + 显式事件链推理”与“强基座适配”共完成 7 个主要可比实验版本 与 1 个强基座参考实验。
其中,事件链模块在多组实验中表现出一定结构化建模信号,但整体准确率提升有限,且未在因果类问题上形成稳定优势,说明当前架构存在输入压缩过强、reasoner 介入过晚、基座泛化不足等关键瓶颈。
七、最简洁的失败报告版本
阶段性失败总结
本阶段围绕 NExT-QA 上的显式事件链推理,共完成 7 个主要实验版本(含 baseline、latent event、full reasoner、初始化/冻结策略、放松压缩策略、无链对照等)和 1 个 Flipped-VQA 强基座参考实验。实验结果表明:
- 轻量 baseline 可作为开发底座,但本身存在明显过拟合与泛化不足;
- 仅加入 latent event 聚合几乎不带来提升;
- 完整的 event-ground-link-chain 架构可学到一定结构信号,但整体准确率提升极小;
- 从 baseline 初始化或冻结/解冻策略未能显著改善效果;
- 增大 clip 数和放松压缩后,训练曲线更健康,但提升主要出现在描述类问题,未能稳定改善因果类核心子任务;
- 当前架构更像“结构化证据组织器”,而非真正有效的显式因果推理器。
综合来看,失败的主要原因在于:输入时间序列压缩过强、事件链多级压缩导致信息损失、reasoner 介入过晚仅能做后验修正、轻量基座本身不够强,以及缺少 query-conditioned temporal localization 这一步骤。