如何设计深度学习实验

For insights, not for numbers!

  • 保证实验的泛化性
    • 尽量在大数据集上验证
    • 尽可能在多数据集上做(寻找问题)
  • 验证复现重要的结论
    • 反复研究重要的工作(历史留名的工作)
  • 追求的多样化
    • 方法能否更简单、跳出已有空间、有 更好的视觉效果 (可视化结果)?
  • 大胆的猜想
    • 根据已有实验结果做猜想,如Attention is all you need
    • 能否做一些极端例子的检测(发现问题)
      • 如何挖掘实验结果中隐藏的信息,需要平时看论文时深入思考分析,数据背后反映了一个什么问题,能找到的话就是一个很好的idea

控制变量

  • 只验证一个变量
    • 一次实验只改变一个参数
  • 发掘已有工作的问题
    • 有没有没发掘出来的,有价值的研究点(如都用的trick却没人研究过)
  • 排除干扰因素
    • 实验所有变量做好记录
    • 版本控制要做好,一个commit只改动一个点,实验的不同版本提交到github并命名
  • 总结变量的重要性
    • 数据分布(idea如数据通路的处理、凸优化、贝叶斯等优化技巧)
    • 前、后处理

搭环境(与时俱进docker)

  • 系统层面
    • Linux优先,windows考虑WSL
    • 管理CPU/GPU资源:slumr调度系统
    • terminal:terminius
  • 网络层面
    • 熟悉SSH/SCP协议
    • 熟悉远程编译
    • 远程可视化:jupyterlab
  • IDE层面
    • 常见功能:自动同步、Github版本管理、代码对比、自动保存历史

验证IDEA

  • 确保任务的可行性(确保baseline可以跑出有意义结果)
  • 不断调整idea(方向一致如deform cnn
    • 什么是最有价值的部分
    • 更好的可视化效果(找问题)
  • 分模块验证

管理实验

  • 表格驱动的实验方法
    • 实验前先做表格
    • 记录主要实验变量,超参,trick
    • 一组实验总结出一个结论,驱动下一组实验
  • 合理利用可视化工具
  • 关注早期的实验结果
    • 可以固定一个小epoch进行比较,最后再跑完整个实验
    • 结合可视化手段,分析每个阶段大概做的如何