diff --git a/assets/fig_guidance/experiments.png b/assets/fig_guidance/experiments.png
new file mode 100644
index 0000000..e960635
Binary files /dev/null and b/assets/fig_guidance/experiments.png differ
diff --git a/src/blog_graduate_guidance.html b/src/blog_graduate_guidance.html
index 31ac4c7..213bd98 100644
--- a/src/blog_graduate_guidance.html
+++ b/src/blog_graduate_guidance.html
@@ -334,7 +334,210 @@
培养科研能力 Research Capability
博士生应该具有的能力、如何锻炼这些能力、如何做科研项目:参考1[1],参考2[1]。
- 未完待续...
+ 博士生应该具有的能力
+
+ - 阅读:阅读大量论文、进行文献综述、构建文献树、追踪积累最新论文/技术 [参考]
+
+ - 建立对这个领域的视野,知道大家在解决什么问题,培养对重要问题的认知,知道什么是好的论文。
+ - 积累解决问题的动机和技术。
+ - 用[文献树](novelty
+ tree和challenge-insight tree)锻炼和积累想创新点的能力。
+
+
+ - 创新:想创新点的能力、检索发现新事物的能力、目标驱动的科研能力、提出新技术的能力 [参考]
+
+ - 做研究要先懂得检索。不管自己想到什么事,都先检索看看有没有相关的解法或内容以作为参考,这样能给自己省很多功夫,并且拓宽很多思路。
+ - 目标驱动的科研(goal-driven research)让自己的研究更有规划、有连续性,让自己的研究更容易出类拔萃。
+ - 实时关注相关领域的进展,其他领域的方法或者思路能够带来关注领域内新的灵感。从而提出新的技术来解决本领域的问题。
+ - 具体来说:
+
+ -
+
+ - 规划科研方向的愿景(general
+ goal),制定达到这个愿景的路线图(roadmap)。一般而言,愿景容易定义,但制定路线图需要对领域有深刻的理解,一般由导师或者高年级博士来思考和制定。
+
+
+ -
+
+ - 根据novelty-tree列出的路线图,选择有研究空间的任务,调研这个任务有没有重要的技术难题。选题是对一个科研项目影响最大的一步,而不是后面的想方法。
+
+
+
+ - 去思考这个任务长远的目标,一个最终形态是怎样的。为什么当前工作只在这些数据上做,而不在其他数据上做。
+ - 应该尝试更多通用场景(general cases)。追求发现新的失败例子(failure
+ cases),从新的失败例子入手改进原有的技术。
+ - (1)在新的任务设定或者新的数据上容易发现新的失败例子。(2)在新的数据上探索方法的可能性,让大家看到新的实验结论,这是很大的贡献。
+
+
+ -
+
+ - 从技术层面上分析现在的技术路线(pipelines)在某个任务上不工作的原因,在技术模块(pipeline
+ module)层面思考可能的原因,然后在技术路线上或高层次(high-level)理解上思考可能的原因。
+
+
+ -
+
+ - 上升到高层次理解和想法、技术路线、技术模块层面进行创新,想出一些技术贡献。怎么提升改进技术路线的能力?
+
+
+ - 首先要知道有哪些技术,这些技术在解决什么问题。然后组合其中的某些技术。
+ - (1)构建challenge-insight tree。(2)选择challenge-insight
+ tree中的某些技术,通过创新性的组合来解决当前任务的技术难题。(3)把可能的pipeline都列出来,然后对比优劣势,选择一个pipeline。
+
+ - 一个高水平科研工作者认为:技术的本质就是对方法做组合,把小的技术组合成大的技术,把老的技术组合成新的技术。**组合已有的技术并挖掘其在新的任务、新的数据上的性质,是一个很大的贡献。**组合不能是
input->A-> intermediate output->B->output
这种完全A
+ + B的组合(完全拼接式的组合)。组合需要是具有创新性的组合。正常情况下直接拼接两个方法也无法解决问题,否则这个问题就没啥技术挑战。
+
+
+ -
+
+ - 在一些数据上验证这个技术贡献,调效果。不能期望论文故事线好听、应用有意思,审稿人就会放过我们的技术贡献。
+
+
+ -
+
+ - 当出现新锤子的时候,非常值得拿新锤子来做自己路线图上的某一个里程碑任务(milestone
+ task),这样容易做出有影响力的工作。注意,不是在新锤子原有任务设定上做改进(比如在NeRF的task setting上调它所用数据集的view
+ synthesis的效果),而是拿新锤子来解决自己在做的里程碑任务的问题(仍然是目标驱动的研究方式)。
+
+
+ -
+
+ - 想idea时需要注意的点(什么样的project不值得做)
+
+
+ - 提出idea并做一篇论文是为了给领域做出实际的贡献,不是为了论文本身。
+ - 如果一篇论文对领域没有贡献,那么做这篇论文就是在浪费自己的时间,因为我们不会通过这篇论文收获领域的respect,甚至可能收获负面评价。
+ - 做这种论文的好处:(1)熟悉投稿流程。(2)有几率收获一篇论文(但概率较小)。
+ - 做这种论文的坏处:(1)浪费时间。做这个project的时间可以用来做更有意义的事情。(2)可能被人负面评价。
+
+
+ - 特别需要注意的点:不要形成依赖导师的心理,要锻炼自己独立自主做科研的习惯和能力。(某种角度上可以说比发论文本身还重要。而且其实自己要有这个能力才能大概率做出论文,不然这个项目基本无疾而终)
+
+
+
+
+
+ - 实践:代码能力、实验能力、分析实验不工作的原因的能力
+
+ - 实现自己的想法。
+ - 在实验中改进自己的想法。
+ - 在实验中积累对技术方法的认知,通过实验发现一些技术能解决的问题和不能解决的问题。
+ - 在实验中发现一个科研方向存在什么不足之处、存在什么难以解决的问题。
+ - 具体来说:
+
+ -
+
+ - 如何设计探索性实验,保持清楚的实验思路,提升改进Idea的效率。
+
+
+ - 现在的实验是否同时包含了几个探索方向(exploration points)?怎么修改实验来减少要同时探索的点?
+ - 现在的实验是否同时包含了几个技术挑战(technical challenges)?怎么修改实验来减少其中的技术挑战?
+ - 我们目前重点想先搞清楚的探索点是什么,最想解决的技术挑战是哪个?
+
+
+ -
+
+ - 把复杂的事情拆解成一组简单的事情,从简单到复杂。
+
+
+ - 拆解复杂的实验:从简单的设定开始探索,慢慢加大难度,然后做实际的设定。能够有效降低实验和时间成本。
+ - 拆解创新的想法:把自己的想法分解成各个部分,从可控的想法开始做起,再加探索性、创新性的框架/模块。
+
+
+ -
+
+ - 在简单任务上做实验(toy experiment)
+
+
+ - 简化实验设定,保留想解决的技术挑战。
+ - 简化数据,保留想解决的技术挑战。
+ - 验证自己写的模型训练代码是否工作,先过拟合一个样本,然后再过拟合一个非常小的数据集上(比如20个训练样本)。
+
+
+ -
+
+ - 实验结果分析
+
+
+ - [结果] 失败案例(Failure case)的可视化长什么样?可能是什么导致的?相应的可能原因也可视化看看。3D可视化工具:
+
+
+ - [结果] 失败案例有没有什么规律,有没有什么固定的pattern?这些规律可能引出背后的技术原因。
+ - [代码] 各个模块代码的中间输出是否符合预期?
+ - [训练] 现在方法在测试集上效果不好,那训练集能效果怎样?能过拟合吗?
+ - [训练] 在其他简单的数据上效果怎样?
+ - [结果] 记得我们在数据A上效果还不错,为啥数据B上不行?两个数据的区别是啥?
+ - [方法] 我记得算法A在这个数据上效果没这么差。为啥我们的方法这么差?需要ablation看看哪个模块有问题?也可能是代码写bug了。
+ - [方法] 如果是把方法简化,能工作吗?效果怎样?
+ - [方法] 有可视化过某个模块的输出吗?看看是否符合预期,或者是否存在什么奇怪的现象?
+
+
+ -
+
+ - 实验结果不理想
+
+
+ - 请注意,快速迭代建立在有效实验的基础上。盲目的做实验可能让事情变得更糟。
+ - 要经常性地确认自己在正确的方向上:当前的算法思路真的对吗。要避免陷入local minima。建议经常找同学交流讨论。
+
+
+
+
+
+
+
+ - 展示:写作能力、展示能力、把一篇论文做得漂亮的能力、做演示(demo)的能力
+
+ - 做一篇有影响力、阅读量高的论文,发表在高水平会议、期刊上。
+ - 把自己的研究故事、提出的技术清晰地展示给同行。
+ - 用演示来吸引读者,提高论文的阅读量和关注度,从而提升论文的影响力。
+ - 具体内容见“论文撰写 Paper Writing”。
+
+
+ - 交流:和导师、同学交流讨论的能力
+
+ - 让大家帮助自己做科研。
+ - 交流讨论对于科研的重要性(解决自己的疑问、验证自己的想法、启发思路、促进同学之间的关系)。
+ - 具体来说
+
+ -
+
+ - 如何高效地讨论
+
+
+ - 讨论的目的:让大家帮助自己project的推进。不要把“讨论”当作工作汇报。
+ - 讨论的时候,一些同学害怕“讨论”时间过短,而显得自己没做事情,而可能被导师责怪。所以,通过分享论文、分享繁琐细节的实验现象来凑时长(可能因为遇到一些问题而导致没什么进展才想着凑时长,也可能出于其他考虑才这么做)。
+
+ - 如果真的没啥问题,请直接skip讨论,简单同步一下进展和接下来的规划。如果遇到了问题,就列出要讨论的问题,把“讨论”的重心放在“自己遇到的问题”上。讨论结束地很快也没事,效率越高越好。
+
+ - “讨论”不要分享论文、不要分享繁琐细节的实验现象。什么内容可以体现自己的思考:“智慧有深度的提问”、“对project的规划”、“对技术创新性的思考”。
+ - 需要预先做一个简单的ppt。ppt内容可以这么组织:(1)列出需要讨论的问题,和大家一起讨论解决。先抛出问题,然后带着问题去看细节,讲一些自己的思考。看细节的时候,列一些重要的实验现象在ppt里.(2)列出有意思的实验现象和结论。(3)对于科研项目的讨论,有必要每次讨论的时候review一遍technical
+ contribution(因为已经受够了review里被reviewer喷contribution不够,或者project做了几个月以后发现没contribution而导致几个月白费)。(4)列出自己下一周的计划。
+
+ - 实验室讨论原则:(1)充分的沟通交流。交流的时候不要害怕老师、高年级同学,不要因此而不敢问问题。有问题请及时问。实验室的老师、学长都非常友好,乐于解答问题。讨论交流的唯一目的是:
+ 正确、高效,能解决你对project的疑问。(2)平等的交流,不是汇报与被汇报的关系。如果科研上有自己的想法,请表达出来。如果觉得老师、学长有说错的地方,请有礼有节地质疑和讨论。不要一味地听信老师、学长的话,但更不要表面服从而底下做自己的想法,这样会浪费很多交流时间和实验成本。实验室的讨论追求高效真诚的沟通。
+
+
+
+
+
+
+
+
+
四、论文撰写 Paper Writing
diff --git a/src/blog_graduate_guidance.md b/src/blog_graduate_guidance.md
index 08649ce..be401cc 100644
--- a/src/blog_graduate_guidance.md
+++ b/src/blog_graduate_guidance.md
@@ -21,6 +21,7 @@
- [5. 英语](#5-英语)
- [\[回到目录\]](#回到目录-1)
- [培养科研能力 Research Capability](#培养科研能力-research-capability)
+ - [博士生应该具有的能力](#博士生应该具有的能力)
- [\[回到目录\]](#回到目录-2)
- [论文撰写 Paper Writing](#论文撰写-paper-writing)
- [参考文档 Reference](#参考文档-reference)
@@ -168,9 +169,88 @@
---
### 培养科研能力 Research Capability
-博士生应该具有的能力、如何锻炼这些能力、如何做科研项目:[参考1](https://github.com/pengsida/learning_research/blob/master/getting_advanced_in_research.md)[1],[参考2](https://pengsida.notion.site/research-project-b43507ef26d044bd888ac29f4736e116)[1]。
+博士生应该具有的能力、如何锻炼这些能力、如何做科研项目:[[参考1]](https://github.com/pengsida/learning_research/blob/master/getting_advanced_in_research.md)[1],[[参考2]](https://pengsida.notion.site/research-project-b43507ef26d044bd888ac29f4736e116)[1]。
+
+
+#### 博士生应该具有的能力
+- **阅读**:阅读大量论文、进行文献综述、构建文献树、追踪积累最新论文/技术 [[参考]](https://pengsida.notion.site/literature-tree-literature-review-novelty-tree-challenge-insight-tree-f8b36e484b344a2893a94e4608b72ec2)
+ - 建立对这个领域的视野,知道大家在解决什么问题,培养对重要问题的认知,知道什么是好的论文。
+ - 积累解决问题的动机和技术。
+ - 用[[文献树]](https://pengsida.notion.site/d192db870bc64436ae4a4a590b36772a)(novelty tree和challenge-insight tree)锻炼和积累想创新点的能力。
+- **创新**:想创新点的能力、检索发现新事物的能力、目标驱动的科研能力、提出新技术的能力 [[参考]](https://pengsida.notion.site/idea-da6ce171c13846b7a7ffaa7473ffa6ea)
+ - **做研究要先懂得检索**。不管自己想到什么事,都先检索看看有没有相关的解法或内容以作为参考,这样能给自己省很多功夫,并且拓宽很多思路。
+ - **目标驱动的科研**(goal-driven research)让自己的研究更有规划、有连续性,让自己的研究更容易出类拔萃。
+ - 实时关注相关领域的进展,**其他领域的方法或者思路能够带来关注领域内新的灵感**。从而提出新的技术来解决本领域的问题。
+ - 具体来说:
+ - 1. 规划科研方向的愿景(general goal),制定达到这个愿景的路线图(roadmap)。一般而言,愿景容易定义,但制定路线图需要对领域有深刻的理解,一般由导师或者高年级博士来思考和制定。
+ - 2. 根据novelty-tree列出的路线图,选择有研究空间的任务,调研这个任务有没有重要的技术难题。**选题是对一个科研项目影响最大的一步**,而不是后面的想方法。
+ - 去思考这个任务长远的目标,一个最终形态是怎样的。为什么当前工作只在这些数据上做,而不在其他数据上做。
+ - 应该尝试更多通用场景(general cases)。追求发现新的失败例子(failure cases),**从新的失败例子入手改进原有的技术**。
+ - (1)在新的任务设定或者新的数据上容易发现新的失败例子。(2)在新的数据上探索方法的可能性,让大家看到新的实验结论,这是很大的贡献。
+ - 3. 从技术层面上分析现在的技术路线(pipelines)在某个任务上不工作的原因,在技术模块(pipeline module)层面思考可能的原因,然后在技术路线上或高层次(high-level)理解上思考可能的原因。
+ - 4. 上升到高层次理解和想法、技术路线、技术模块层面进行创新,想出一些技术贡献。怎么提升改进技术路线的能力?
+ - 首先要知道有哪些技术,这些技术在解决什么问题。然后组合其中的某些技术。
+ - (1)构建challenge-insight tree。(2)选择challenge-insight tree中的某些技术,通过创新性的组合来解决当前任务的技术难题。(3)**把可能的pipeline都列出来,然后对比优劣势,选择一个pipeline。**
+ - 一个高水平科研工作者认为:技术的本质就是对方法做组合,把小的技术组合成大的技术,把老的技术组合成新的技术。**组合已有的技术并挖掘其在新的任务、新的数据上的性质,是一个很大的贡献。**组合不能是```input->A-> intermediate output->B->output```这种完全A + B的组合(完全拼接式的组合)。组合需要是具有创新性的组合。正常情况下直接拼接两个方法也无法解决问题,否则这个问题就没啥技术挑战。
+ - 5. 在一些数据上验证这个技术贡献,调效果。不能期望论文故事线好听、应用有意思,审稿人就会放过我们的技术贡献。
+ - 6. 当出现新锤子的时候,非常值得拿新锤子来做自己路线图上的某一个里程碑任务(milestone task),这样容易做出有影响力的工作。注意,不是在新锤子原有任务设定上做改进(比如在NeRF的task setting上调它所用数据集的view synthesis的效果),而是**拿新锤子来解决自己在做的里程碑任务的问题**(仍然是目标驱动的研究方式)。
+ - 7. 想idea时需要注意的点(什么样的project不值得做)
+ - 提出idea并做一篇论文是为了给领域做出实际的贡献,不是为了论文本身。
+ - 如果一篇论文对领域没有贡献,那么做这篇论文就是在浪费自己的时间,因为我们不会通过这篇论文收获领域的respect,甚至可能收获负面评价。
+ - 做这种论文的好处:(1)熟悉投稿流程。(2)有几率收获一篇论文(但概率较小)。
+ - 做这种论文的坏处:(1)浪费时间。做这个project的时间可以用来做更有意义的事情。(2)可能被人负面评价。
+ - 特别需要注意的点:不要形成依赖导师的心理,要锻炼自己独立自主做科研的习惯和能力。(某种角度上可以说比发论文本身还重要。而且其实自己要有这个能力才能大概率做出论文,不然这个项目基本无疾而终)
+- **实践**:代码能力、实验能力、分析实验不工作的原因的能力
+ - 实现自己的想法。
+ - 在实验中改进自己的想法。
+ - 在实验中积累对技术方法的认知,通过实验发现一些技术能解决的问题和不能解决的问题。
+ - 在实验中发现一个科研方向存在什么不足之处、存在什么难以解决的问题。
+ - 具体来说:
+ - 1. 如何设计探索性实验,保持清楚的实验思路,提升改进Idea的效率。
+ - 现在的实验是否同时包含了几个**探索方向(exploration points)**?怎么修改实验来减少要同时探索的点?
+ - 现在的实验是否同时包含了几个**技术挑战(technical challenges)**?怎么修改实验来减少其中的技术挑战?
+ - 我们目前重点想先搞清楚的探索点是什么,最想解决的技术挑战是哪个?
+ - 2. 把复杂的事情拆解成一组简单的事情,从简单到复杂。
+ - **拆解复杂的实验**:从简单的设定开始探索,慢慢加大难度,然后做实际的设定。能够有效降低实验和时间成本。
+ - **拆解创新的想法**:把自己的想法分解成各个部分,从可控的想法开始做起,再加探索性、创新性的框架/模块。
+ - 3. 在简单任务上做实验(toy experiment)
+ - **简化实验设定**,保留想解决的技术挑战。
+ - **简化数据**,保留想解决的技术挑战。
+ - 验证自己写的模型训练代码是否工作,先过拟合一个样本,然后再过拟合一个非常小的数据集上(比如20个训练样本)。
+ - 4. 实验结果分析
+ - [结果] 失败案例(Failure case)的可视化长什么样?可能是什么导致的?相应的可能原因也可视化看看。3D可视化工具:
+ - [https://github.com/zju3dv/Wis3D](https://github.com/zju3dv/Wis3D)
+ - [https://github.com/koide3/iridescence](https://github.com/koide3/iridescence)
+ - [https://github.com/nerfstudio-project/viser](https://github.com/nerfstudio-project/viser)
+ - [结果] 失败案例有没有什么规律,有没有什么固定的pattern?这些规律可能引出背后的技术原因。
+ - [代码] 各个模块代码的中间输出是否符合预期?
+ - [训练] 现在方法在测试集上效果不好,那训练集能效果怎样?能过拟合吗?
+ - [训练] 在其他简单的数据上效果怎样?
+ - [结果] 记得我们在数据A上效果还不错,为啥数据B上不行?两个数据的区别是啥?
+ - [方法] 我记得算法A在这个数据上效果没这么差。为啥我们的方法这么差?需要ablation看看哪个模块有问题?也可能是代码写bug了。
+ - [方法] 如果是把方法简化,能工作吗?效果怎样?
+ - [方法] 有可视化过某个模块的输出吗?看看是否符合预期,或者是否存在什么奇怪的现象?
+ - 5. 实验结果不理想
+ - 请注意,快速迭代建立在有效实验的基础上。盲目的做实验可能让事情变得更糟。
+ - 要经常性地确认自己在正确的方向上:当前的算法思路真的对吗。要避免陷入local minima。建议经常找同学交流讨论。
+ -
+- **展示**:写作能力、展示能力、把一篇论文做得漂亮的能力、做演示(demo)的能力
+ - 做一篇有影响力、阅读量高的论文,发表在高水平会议、期刊上。
+ - 把自己的研究故事、提出的技术清晰地展示给同行。
+ - 用演示来吸引读者,提高论文的阅读量和关注度,从而提升论文的影响力。
+ - 具体内容见“论文撰写 Paper Writing”。
+- **交流**:和导师、同学交流讨论的能力
+ - 让大家帮助自己做科研。
+ - 交流讨论对于科研的重要性(解决自己的疑问、验证自己的想法、启发思路、促进同学之间的关系)。
+ - 具体来说
+ - 1. 如何高效地讨论
+ - **讨论的目的:让大家帮助自己project的推进。不要把“讨论”当作工作汇报。**
+ - 讨论的时候,一些同学害怕“讨论”时间过短,而显得自己没做事情,而可能被导师责怪。所以,通过分享论文、分享繁琐细节的实验现象来凑时长(可能因为遇到一些问题而导致没什么进展才想着凑时长,也可能出于其他考虑才这么做)。
+ - 如果真的没啥问题,请直接skip讨论,简单同步一下进展和接下来的规划。如果遇到了问题,就列出要讨论的问题,把“讨论”的重心放在“自己遇到的问题”上。讨论结束地很快也没事,效率越高越好。
+ - “讨论”不要分享论文、不要分享繁琐细节的实验现象。什么内容可以体现自己的思考:“智慧有深度的提问”、“对project的规划”、“对技术创新性的思考”。
+ - 需要预先做一个简单的ppt。ppt内容可以这么组织:(1)列出需要讨论的问题,和大家一起讨论解决。先抛出问题,然后带着问题去看细节,讲一些自己的思考。看细节的时候,列一些重要的实验现象在ppt里.(2)列出有意思的实验现象和结论。(3)对于科研项目的讨论,**有必要每次讨论的时候review一遍technical contribution**(因为已经受够了review里被reviewer喷contribution不够,或者project做了几个月以后发现没contribution而导致几个月白费)。(4)列出自己下一周的计划。
+ - 实验室讨论原则:(1)充分的沟通交流。交流的时候不要害怕老师、高年级同学,不要因此而不敢问问题。有问题请及时问。实验室的老师、学长都非常友好,乐于解答问题。讨论交流的唯一目的是: 正确、高效,能解决你对project的疑问。(2)平等的交流,不是汇报与被汇报的关系。如果科研上有自己的想法,请表达出来。如果觉得老师、学长有说错的地方,请有礼有节地质疑和讨论。不要一味地听信老师、学长的话,但更不要表面服从而底下做自己的想法,这样会浪费很多交流时间和实验成本。实验室的讨论追求高效真诚的沟通。
-未完待续...
#### [[回到目录]](#目录)