每个算法工程师都必须要有自己熟悉的一套code toolkit,包含各种不同的任务,开放不同模块的接口,能够快速复现出sota方法,同时最重要的是有一套完整的分析步骤流程,帮助解决类似于无法收敛、梯度消失爆炸等问题、模型输入输出等相关问题。
定义
做任何事情,提升效率是提升能力的关键,那对于算法工程师而言,快速实验一方面是工作和学习中的高效竞争力,另一方面能够帮助自己预留更多的时间来处理其他事情,比如分析数据、分析模型、从而做相关的模型消融实验等等,所以快速实验是一个非常必要的技能,也是长期工作和学习过程中必定要具备的一项技能。
那怎么才算是快速实验呢?如果要在目前已有的任务上面跑,只需要简单改吧改吧就能够得出所有的实验结果。
要求
简单改吧改吧听起来非常简单,里面有很多工作需要完成,比如说:
- 针对于某一个任务的输入输出、数据处理、模型结构、训练、评估等模块都要非常熟悉。
- 熟练使用某一个代码框架,如pytorch、paddle等,并整理一套属于自己的实验toolkit。
- 将自己的代码框架open出去,和其他开发者共同维护工具库
- 需要更多的时间和兴趣来维护,而且还特被重要
这些要求简单也不简单:内容简单,可坚持不简单,同时用对的方法完成更加是难上加难。
总结
如果这个工作做好了,对自身和开源社区都是非常有价值的事情,可是这件事情很难。
那为什么这么难呢?明明是一件很简单的事情,如果给一个没有感性的模拟机器人来完成,这就是一个easy case job:每天定点定时完成某些任务,按时保质的坚持,这对于个人而言极其重要。
让我想起了电竞行业里面,每位选手都需要知道什么时候该做什么事情,什么时候不该做什么事情,思路非常清晰,一定要客观,尽量避免主观。可是很难,因为他们不是机器人,而是具有感情的人。
我有时候在想,自己是否要来一点人格分裂:管理者和执行者。管理者负责做plan,制定TODO List,而执行者只需要像个没有感情的机器人去完成任务就行了。听起来很荒唐,可是如果想要尝试一下,有如下建议:
- 管理者一定要制定足够详细的todo list,且尽量人性化
- 执行者在执行的时候,尽量快乐的且不要携带个人情绪的去完成
这个总结跑的优点偏了,只因为写到这里才突发此感。好了,继续搬砖了,下次有时间再聊。