【AI科研学习 00】从论文复现到 TTT:我的 AI 科研学习路线
1. 为什么开始接触 AI 科研
最开始接触科研时,我对人工智能的理解更多来自课程和基础知识。
真正开始参与科研项目之后,我才逐渐发现:
论文中的一个模型,真正落地到实验中,并不是简单地把代码运行起来。
需要经历:
论文阅读 ↓ 理解模型 ↓ 配置环境 ↓ 运行代码 ↓ 调试问题 ↓ 复现实验 ↓ 分析结果 ↓ 提出自己的问题这也是我开始记录 AI 科研学习过程的原因。
相比单纯学习课程,我更希望通过真实论文和项目,逐渐建立自己的科研思维。
2. 我目前的科研基础
在之前的学习和科研过程中,我主要接触的是深度学习和计算机视觉方向。
学习和实践过:
- PyTorch
- CNN
- Transformer
- Vision Transformer(ViT)
- 计算机视觉
- 语义分割
- Test-Time Training(TTT)
同时也接触过 Linux 服务器、GPU/CUDA 环境以及深度学习项目的运行和调试。
目前自己的科研学习方式大致是:
论文 ↓ 理解方法 ↓ 寻找官方代码 ↓ 配置实验环境 ↓ 运行官方代码 ↓ 分析实验结果 ↓ 修改代码 ↓ 尝试自己的想法3. 从论文复现开始
在真正形成自己的研究想法之前,我经历了一个比较重要的阶段:
论文复现。
通过复现论文代码,我开始逐渐理解一个完整科研项目是如何运行的。
期间接触和尝试过一些与 Transformer、ViT、TTT 以及计算机视觉相关的项目,例如:
- ViT³
- U-TTT
- VGG-T³
- 语义分割相关项目
在这个过程中,我遇到过很多实际问题:
- Python 环境配置
- PyTorch 版本问题
- 第三方库版本冲突
- CUDA 环境问题
- 数据集准备
- 模型权重加载
- Linux 服务器运行
- 实验结果与论文不一致
- 模型可视化与结果分析
这些问题让我逐渐意识到:
科研不仅是理解论文,更重要的是能够把论文真正转化成实验,并从实验结果中发现问题。
4. 从 Transformer、ViT 到 TTT
随着学习的深入,我逐渐把注意力集中到了 Transformer 和 ViT 相关方向。
在继续学习的过程中,我开始接触:
Test-Time Training(TTT)
TTT 给我的一个重要启发是:
传统的机器学习模型通常在训练阶段学习参数,然后在测试阶段直接使用已经训练好的模型。
而 Test-Time Training 则尝试利用测试阶段的数据,让模型进一步适应当前的数据分布。
这让我开始思考一个问题:
如果模型能够在测试阶段继续学习,那么它应该如何学习?
这个问题也逐渐成为我目前比较关注的方向。
5. 对 TTT 的进一步学习
在学习 TTT 的过程中,我开始关注不同 TTT 方法的模型结构、训练方式以及测试阶段参数更新策略。
我逐渐理解到:
训练阶段 ↓ 获得模型参数 ↓ 测试数据进入 ↓ Test-Time Training ↓ 模型参数发生更新 ↓ 适应当前测试数据这种方法能够提高模型对测试分布变化的适应能力,但同时也带来了新的问题。
例如:
如果测试阶段对模型参数进行更新,那么应该更新哪些参数?
如果所有参数都进行更新,可能会出现:
- 不必要的参数变化
- 原有知识被破坏
- 模型稳定性下降
- 不同测试样本之间相互影响
- 灾难性遗忘等问题
这也让我开始从“如何复现论文”逐渐转向:
这个方法还有什么可以改进的地方?
6. 从复现到自己的科研思考
在之前的学习过程中,我逐渐形成了一个自己的初步想法。
我的理解是:
TTT 如果每次都对整个模型进行参数更新,可能会导致一些已经适应当前区域或特征的参数仍然被继续更新。
例如一个测试样本中可能包含多个不同区域:
测试图像 ┌───────────────┐ │ 区域 A │ │ │ │ 区域 B │ │ │ └───────────────┘如果当前输入主要与某一部分参数相关,那么是否有必要更新整个模型?
于是我开始思考:
能不能根据当前测试样本的特征,找到真正与当前输入相关的参数,只更新这些参数,而不是更新整个模型?
进一步可以形成:
测试样本 ↓ 特征提取 ↓ 判断当前样本/区域相关参数 ↓ 选择性更新 ↓ 其他参数保持稳定这只是目前的初步想法,还需要通过实验验证。
但是对我来说,这是一个比较重要的变化:
从“复现别人的方法”,开始尝试“发现自己的问题”。
7. 我的科研学习方式
经过之前的项目实践,我逐渐形成了一套自己的科研学习方式。
第一步:阅读论文
首先了解:
- 为什么提出这个方法?
- 解决什么问题?
- 和以前的方法有什么区别?
- 核心创新是什么?
第二步:阅读代码
然后寻找论文对应的官方代码,理解:
数据 ↓ 模型 ↓ 训练 ↓ 测试 ↓ 评价指标第三步:跑通实验
首先尽量复现作者提供的实验结果。
如果结果存在差异,就开始分析:
- 环境是否一致?
- 数据是否一致?
- 权重是否正确?
- 参数是否正确?
- 代码版本是否一致?
第四步:分析结果
不仅看最终指标,还会观察:
- Loss
- Accuracy / mIoU 等指标
- 可视化结果
- 不同参数设置
- 不同模型结构
第五步:提出问题
最后再问:
这个方法还有什么不足?
我认为这一步才是从“学习论文”走向“科研”的开始。
8. 后续科研方向
目前我的科研学习会继续围绕:
Transformer ↓ ViT ↓ Test-Time Training ↓ 参数更新策略 ↓ 选择性/局部参数更新 ↓ 实验验证继续学习和研究。
同时也会继续关注:
- 计算机视觉
- 语义分割
- Test-Time Adaptation
- Test-Time Training
- Transformer / ViT
- 模型参数更新
- 模型稳定性
目前最重要的事情不是急着给自己的想法下结论,而是:
先把问题定义清楚,再设计实验验证。
9. 后续科研博客记录
从这篇文章开始,我准备把之前的科研经历逐渐整理出来,同时记录现在正在进行的研究。
后续主要分为几个系列:
【科研复盘】
整理之前已经完成的科研项目和阶段性汇报。
例如:
【科研复盘01】第一次接触深度学习科研项目 【科研复盘02】ViT³项目学习与复现 【科研复盘03】U-TTT项目学习与复现 【科研复盘04】VGG-T³项目学习与复现【论文阅读】
记录自己对论文的理解。
例如:
【论文阅读01】ViT³论文解读 【论文阅读02】TTT方法原理分析【代码复现】
记录实际运行过程。
例如:
【代码复现01】ViT³环境配置 【代码复现02】ViT³官方权重测试 【代码复现03】ADE20K语义分割实验【实验记录】
记录自己的实验结果和问题。
例如:
【实验记录01】论文结果与我的实验结果为什么不同? 【实验记录02】不同参数对TTT测试结果的影响【科研思考】
记录自己的研究想法。
例如:
【科研思考01】TTT全局参数更新可能存在的问题 【科研思考02】能否只更新与当前样本相关的参数? 【科研思考03】动态冻结与选择性参数更新的初步思考10. 写在最后
回头看之前的科研经历,我觉得自己还处于比较早期的阶段。
目前更多是在:
学习论文 → 复现代码 → 分析实验 → 尝试提出问题
距离真正独立完成一个成熟的科研工作还有很长的路。
但我希望通过持续记录,让自己的科研学习不再只是一个个零散的项目。
而是形成一条清晰的路线:
接触科研 ↓ 论文阅读 ↓ 代码复现 ↓ 实验分析 ↓ 发现问题 ↓ 提出想法 ↓ 实验验证 ↓ 形成自己的研究方向这也是我建立这个科研博客的主要目的。
记录每一次实验,也记录每一次思考。
希望以后回头看这些文章的时候,能够看到自己从“学习别人的方法”,逐渐走向“尝试解决自己的问题”的过程。