文档汇总(GitHub Repo):https://github.com/pengsida/learning_research

这个文档写了如何选题:https://www.notion.so/pengsida/idea-da6ce171c13846b7a7ffaa7473ffa6ea

这个文档写了如何分析问题:Project核心技术问题分析模板

**为什么要写这个文档:**因为我发现一些同学在解题的时候,不够有套路,不知道从哪些角度切入来解决failure case,思维不够发散、能想到的解决手段比较少。

<aside> 💡

如何从根本上提升解题能力:多看论文;多思考;多做实验;多与人讨论;多积累已有的技术、insights和存在的问题。

</aside>

<aside> 💡 **从博士生培养的角度来看为什么要有解题能力:**博士生要努力成为一个很技术的人,**对现有以及新兴的技术有很好的学习能力、思考能力、剖析能力,可以很好地在一个任务上深入地改进这个技术以提升该技术在此任务上的性能。**如果只是简单地将一个技术用在某个任务上,这样的事情,我相信大多数本科生也能做。 我猜测reviewers总是希望论文有技术贡献,大概也是因为希望看到论文有更多的技术创新和剖析,而不只是看到新的task、story或applications。如果一篇论文只是讲story而没提新技术,这样子实际上对领域中技术的发展没帮助。

</aside>

<aside> ⚠️

虽然CV/CG的大部分人都在引入ML里的锤子,但“把锤子拿过来用”和“把锤子搞work”,区别很大。 “把锤子搞work”的人很牛,“把锤子拿过来用”的人大多情况下只能算搬砖的。

</aside>

  1. 针对选择的“问题”,思考为什么这个pipeline会有这个问题,推测众多的深层次的技术原因。怎么推测技术原因:

    1. 首先从已有的论文蒸馏知识。寻找有没有解决相似“问题”的论文,看看这些论文里有没有分析导致“问题”的技术原因(寻找相关的论文要发散一些,从同一个方向的论文找到不同方向的论文。主要靠自己找论文,以及问senior advisor、学长学姐有没有看过相关的论文。论文Introduction的前两三段一般会讨论之前论文的问题及其技术原因)。

      相关文档:如何有效地读论文怎么找论文

    2. 然后总结从论文获得的知识。总结这些论文的分析,形成自己的一套思考。

      相关文档:怎么总结论文

    3. 然后从有经验的人身上蒸馏知识。找有经验的人讨论,分享自己对这个问题的思考,通过分享自己的观点来加深自己的思考以及启发自己的更多思考,并且期望对方有一些不一样的思考,从而积累对“问题”的认识,积累导致“问题”的技术原因(我们要养成看到有启发性的论文找人讨论的习惯,复述一遍论文也行,说一些对论文的想法也行)。

    4. 然后从实验获得知识。通过实验验证这些技术原因,得到更多的实验观察。

  2. 根据众多的深层次的技术原因,提出解法。

    <aside> 💡

    接下来的做法有个前提,即我们在解决的问题,在相似的领域没有well-established solution。 我们只会去解决以下两种情况的failure case:

    1. 存在完全不同data domain的任务,但技术问题内核相同,有了不错的解决方案。
    2. 在各个不同领域的任务中,虽然有类似的技术问题,但都没有较好的解决方案。 </aside>

    针对第一种情况“存在完全不同data domain的任务,但技术问题内核相同,有了不错的解决方案”,如何提出解法:

    1. 广泛阅读文献,寻找是否存在这样的情况,即“存在完全不同data domain的任务,但技术问题内核相同,有了不错的解决方案”。
    2. 将相应的解法迁移到自己的任务下。

    针对第二种情况“在各个不同领域的任务中,虽然有类似的技术问题,但都没有较好的解决方案”,如何提出解法:

    1. 拆解技术问题,分成几个子问题。
    2. 针对每个子问题,寻找是否存在这样的情况,即“存在完全不同data domain的任务,但技术问题内核相同,有了不错的解决方案”。如果没有,则继续拆分问题。
    3. 对于每个子问题,收集得到解法后,思考如何组合得到完整的解决方案。

    <aside> ⚠️

    如果技术问题无法拆分,且没有可借鉴的解法,怎么办?

    有三种情况:

    1. 自己当前的能力不知道怎么拆解这个问题。
    2. 存在可借鉴的解法,只是自己没有找到相关的论文。
    3. 这种问题极有可能是世界级难题。 </aside>