|
|
QA
一篇论文的阅读时间?做笔记如何做?
亚鹏学长:一周3-4篇,精读,笔记可以用PDF标记,4-5小时读完,找师兄讨论不懂的问题
有必要看课程学习一些知识吗?如果要,推荐哪些
亚鹏学长:按需
除了Google搜索其他找论文的方法?
亚鹏学长:精读论文中提到的感兴趣的论文;
- Scholar - and or检索
- acm digital library
读博士期间如何提高代码能力?
避免写代码时复制粘贴:这点我觉得说的很对,复制粘贴的一会就忘了,就算认真看了逻辑,也大概只有一个浅显印象,就算知道要怎么做,下次类似的事情还是得gpt搜代码。所以就算是生成的代码,也应该自己上手敲进去。
先规划后动手:写代码最重要的不是手速,而是清晰的思路。当你能习惯性地用编程的思想分析一个工程问题,你写代码的能力自然会很高。这种能力当然是能训练的,写代码之前就要把完整的思路写下来,可以做得细致一点,分几个流程/每个流程怎么实现/什么数据结构/设计模式(类的依赖关系等),这样做之后,可以提高你实现的速度和质量,而且有些问题可以在设计的阶段就避免掉。我觉得说的很对!
学会总结经验:记录代码中遇到的各种问题,怎么解决的,这样下次遇到同样或类似问题就可以迅速解决。同样的问题要尽量避免犯两次。这一点我现在已经在做了。可以补充的是,对于优秀的别人的代码,,也可以参考第二点,总结出别人的设计思路与代码结构组织。
在编写代码的过程中,可以不断思考自己的代码实现细节有没有可以优化的地方/有没有更适用的方法/类似的思想在其他的领域有哪些应用(google or ai search)
计算机专业想好好搞科研,建议平时刷leetcode吗,会不会浪费时间?
总结:有益处,可以刷,但刷太多浪费时间
好处:
- 至少不会让大厂因为你不会算法题刷掉你
- 对冲掉博士期间研究不顺利带来的挫败感。这种挫败可能是反复的持续很久的。在此期间刷题至少会有日益精进的小成就感,不至于全盘否定自己能力。而且也开阔自己研究思路。
- 训练短时间完成编码(编程思维敏捷性),编程trick,熟练度,可以有助于科研idea的实现。
权衡:
- 不要把刷题当做你最强的能力:去企业要看你心目中的企业要什么岗位的人,以及你希望去企业里做什么事情。个人觉得,如果读完博士还是跟本科生一样要刷题背八股才能进入企业,那这个博士是白读了
- 应该意识到的是计算机科学不是编程的科学,编程很重要,但是仅仅只是能力的一小部分体现。
- 刷太多:比不过acmer,都读到博士了,已经错过了搞算法的最佳年龄。有这时间,不如多做做科研。
如何刷:
- 语言一致
- 不要对于很难的算法花很多时间
- 刷题计时,可以周赛
科研论文如何想到不错的 idea?
看arxiv呀,把自己的的subdomain的都看一下,如果比较小就把临近的也看下,保证平均下来每天看20篇标题,10篇摘要,3篇略读,0.5篇精读。看个半年到1年就开始有很多想法了。
这个说的挺好的,但是实现起来感觉还是有难度。
对PhD一年级新生有什么建议?
- 多读
- 多读最新论文,多记几个学术名词,读多了,发现了故事之间的关系,就学会提新idea了。
- 多读经典论文、读经典教材〔如机器学习中的MLAPP),读综述、tutorial,建立自己的学科认知体系,打牢基础。对学科的认知条分缕析,后面学多了就不会越学越迷糊。
- 多写
- 多写论文笔记。读过的论文都要记,略读的记一旬话,精读的写一篇笔记。要让读过的论文充地转化为自己的财富。我觉得这里说的很好,重要的paper就写一篇较长的阅读体会,精度过的就写一段简单的总结,这样记得会更牢,同时理解也更深入
- 多写论文。抓住每一个写、修改论文的机会。
- 多写科研笔记。一些拍脑袋的想法,和导师的讨论记录,和同学的聊天感悟。事后再看经会有新发现。这个我倒是还没考虑过,挺好的,每隔一段时间可以头脑风暴一次,将最近阅读的论文,与接触过的想法得到一些idea
- 多写实验日志。实验怎么想的,代码都参考过啥,整理设置对应的实验结果。甚至每天实验的阶段结论也都记一下。有很多阶段性结论之后,写论文时取舍就很方便了。这个挺好的,除了和他人讨论的实验结果等,也可以记录自己的思路等与他人讨论
- 多做
- 多做报告。学习如何沟通、介绍自己的想法,同时收获他人的建议。学习如何合理提出建议。这个最近有在和君逸师兄讨论的时候做过
- 多做社交。参加各种学术交流,认识更多的人,拓展人脉,交流。为之后学术发展路。
How To Read Paper
李沐分享如何读文论心得
key:三遍读论文
- 第一遍
读标题&摘要,跳到结论,关注图和表—>判断是否适合自己
- 第二遍
从头到尾,不需要太关注细节,对图和表了解
可以关注提出的以前的论文
- 第三遍
知道每一段话在干什么,脑补过程,想想自己会怎么做
How to Read Source Code
- learn from earlier unoptimized verion
一个技巧(learned from reading the source code of lamma.cpp):阅读高度优化的代码以掌握底层概念是一种相当不理想的学习方法。建议通过在GitHub的karpathy/llama2.c/run.c
的master分支中进行调试来代替。它是故意完全未优化的(即使是矩阵乘法也是最基本的“原始”实现。
同理,对于一个复杂的代码,我们可以找有没有人写出它的一个简要版本代码,或是从该库的早期版本学习。
- using the working exp and debugger to step into
In general, the starting point would be to get a working example and then use a debugger to step through the code.
This is absolutely what I would recommend. We don’t have to try and understand libraries from their source code alone, we can use the running state, set breakpoints, and explore explore explore. I highly recommend using a debugger to see how llama.cpp or any open source code works!深深赞同,阅读llama.cpp有感
- start from other’s tutorials
对于复杂的项目以及自己不熟悉的领域,可以通过他人的优秀的解析blog以及video,来快速在high level掌控整个项目,以及该项目最重要的概念/函数/类。