编辑 | Leo

转载自知乎

本文仅作学术交流,如有侵权,请联系后台删除。

曲終人不散回答:

我的研一我记得是先找了一本比较薄的,通俗易懂的深度学习书,内容浅尝辄止,但很基础,主要介绍全连接层,反向传播机制,然后过渡到CNN,池化,批量梯度下降,就这些了。

之后我又看了一本Tensorflow深度学习,代码不看,只看内容。里面也大同小异,不过介绍更细了些,比如AlexNet, GoogleNet, ResNet等等,还有具体的一些任务。

之后我就不看了,我就去看我最感兴趣的方向(CV的一个子领域)的最SOTA的算法的由来,CSDN上文章很多,多看几个。刚接触一个领域,起码要知道这个领域目前最有影响力的算法的历史及其发展吧?然后逐渐拓宽文献面,个人比较喜欢看一些偏理论推广的东西,特殊推广至一般是常用的创新套路。举几个典型的例子,比如目标检测的Soft-NMS是传统NMS的推广,SENet也是一种推广,Group Normalization是BN和IN的结合,还有二阶池化策略是比之一阶池化更好的池化。

研一下我就看了少说七十篇文献,都是CVPR, ECCV, ICCV的文章。然后创新点就很自然地出来了。看多了,多思考,自然就会发现目前尚未解决的问题,以及前人方法的次优性。这里提一句,不同领域的专家,哪怕同为CV但却是不同子领域的人,二者最大的差别不是别的,就是文献量。

然后我就想解决方法啊(其实中国的学生解决问题的能力都很强,就看你能不能想到问题),特别是985研究生,不管大家承认与否,也是中国最优秀的一批人了。

其实最开始我也就抓住了一篇CVPR的一个小问题,随后想了解决方案,利用本科学的数学分析这样的思维(要不怎么说考研要考数学一呢?)进行深入的打磨和推敲,其实问题都不难,这些问题不过都是有限维函数,及其导数(梯度),极限等知识有关。

然后我就得想办法编程了啊,我之前也只会matlab。没试过python,连环境都不会装。

最后磨蹭了一段时间,终于装好了环境,跑通了一遍baseline。开始找别人代码上我应该要改的地方在哪里。

接着就照着别人的代码改,遇到不会就终端输出啊,看一看tensor的size啊,具体的tensor运算啊,这些东西不超过高等代数的范畴(或线性代数)。也得亏是我这个解决方法不涉及大的改动,比如修改网络之类的,于是就做实验吧。

边做实验的同时,也与一起合作的同学交流想法,于是就酝酿出来更好的方法,更进了一步。

PS: 论文的层次感也是挺重要的。比起那种CVPR上见到过的一个算法一篇文章,或者一个公式写一篇文章,如果你的文章能有2~3个创新点,无疑是好事。

可能是我个人追求完美的原因吧,加之我做科研具备严谨素养,我会仔细推敲,对别人的repo我训出什么结果就是什么结果,训的高我论文就用训的高的,低了那就是低了。

于是研二就中了一篇一作A会。

总结来说,

首先,不要着急练代码,于我而言就是盲人摸象。

第二,基础知识仅了解那些能助于你理解论文的部分就好了,难道你还指着把周志华的机器学习都看完才做研究吗?书只是一种工具,一份参考,一本字典,不会带给你任何的创新启发。

第三,先从你领域内的最经典的论文开始(可能有好几种不同的经典模型),统统了解来龙去脉。

第四,最经典了解完后,就开始开枝散叶式地了解模型中的每一个细节,因为每一个细节可能都有至少一篇的顶会论文在其中。

第五,不要死磕英语。CSDN,公众号,知乎,有道划线翻译,都会加快你提炼论文核心的速度。

第六,量变产生质变。当你论文阅读量达到五十篇后,基本对这个领域有个不错的认识了,多个改进的算法有何特点,有何区别,你的心中也有了框架,此时产生idea也不奇怪。我目前总阅读量也就180篇左右。

第七,不要畏惧编程。你只有去适应它,习惯了之后,编程都是小意思。

第八,严谨性,不得意于眼前的成功。只有认真打磨,深入挖掘一项工作,才有可能做出真正solid的工作。

第九,能吃苦。现在的AI方向更新速度太快,你必须与别人拼速度,包括合作者,硬件设备。你知道何恺明为何能在2017的ICCV上大展手脚吗?因为他与他的好朋友Ross Girshick两个人加起来正好能工作满24小时。

其实我有时也是非常羡慕,如果能有一个人也与我工作满24小时该多好。我醒了,他去睡了,我睡了他接着干了。当然这个也只能在大厂或者知名高校这样的地方可能见到了,那么你未来如何进这样的地方?只有取决于你的现在。设备不多,自然就要充分利用好每一秒,我的实验由于不是恰好24小时的整数倍能做完的,所以经常需要半夜爬起来去测试,去开下一个实验。

又或者我一个实验凌晨一点出结果,我也要熬到那时候做完才回寝室。时间都是挤出来的。当然也不用太累,做实验期间,你该上课上课,该打球打球,该看电影看电影,该约火锅约火锅,生活要丰富起来,精神才能丰富,锻炼身体我也是没有落下,羽毛球乒乓球三天不打就手痒。

第十,真心的热爱。只有你热爱了,你才会乐此不疲,甚至以此为一生的职业追求。迈克尔杰克逊老时可以说自己一生热爱的是音乐与舞蹈,赵忠祥老时也可以说自己一生热爱的是主持与播音事业,我不希望我老时谈及自己热爱什么的时候,发现自己说不出来云云。可见一个人能一辈子从事自己所热爱的事业将是多么不容易也是多么幸福的一件事,年轻人就该把握好,把力往最擅长的点上使。

当然了,最关键的是你要有拼劲。多少次我在实验室看到美轮美奂的日出,多少次我大半夜顶着寒风骑电动车回寝室我就不说了。可能这对于身处大牛组的人来说感受会低一些,但对于我这种孤军奋战的人来说,所拥有的资源就是双GPU显卡,感触会非常深,但同时对我个人能力的锤炼也无疑会更好,无论是科研能力,科研精神,还是工程代码能力。

说了这么多突然感慨万千,其实当你看到CMT上“Accept”这个词时,一切的苦痛也都全然消失了,转而来临的是无尽的欢笑与成功的泪水……

——————————————————

感觉看的人挺多的,那就再更新一波,有关论文写作。

其实很多公众号如SCI,上面都会有详细的论文写作教程,都可以看看,但我当时写论文却没有依赖这些教程。

写论文的关键在于如何组织结构,如何写好一个故事。哪些是不得不说的废话,哪些才是真正的核心论点。初高中时我们都一直锻炼过如何写好一篇议论文,这时候就有用武之地了。大致可总结为自圆其说四个字。

首先,你得有相当量的文献阅读量,这样你在写论文时,下笔将非常有一种统领千军的感觉。前人的工作,目前研究的现状,别人都是如何解决问题的,却又留下了哪些问题,这些东西不通过看文献你是不会有足够深的理解和意识的。

如果你缺乏这方面意识,比如你只看了10篇文献,然后你相当天才也想出了绝佳的idea,并付出行动后成功了,此时你再面对文章,你将非常痛苦。这仅仅10篇的知识面,甚至只能让你写一章Proposed Method。这时你该怎么办?基本上只能照搬别人论文里的句子,各个地方都借用一点,凑出一篇文章。

可是如果你有相当的文献储备量,写起来将轻松多了。首先你根本无需照搬别人的论文,你就像个音乐指挥家,用自己的话把这个故事写了出来。

我举个例子。

比如你解决的是目标检测领域某篇CVPR 2020的一个尚未解决的问题,你想了改进方案,成功在ResNet50下提高了性能1.5个百分点。

这时你无比兴奋地向导师汇报了成果,毕竟1.5个百分点可不是一个小数字了。

你要知道1.5个绝对百分点的提升,换做大牛组来做,可以必中A会,甚至oral。

那么你一个小白,该如何给这个小小的苗子一个适合它的家?

让我来告诉你大牛组的人会怎么做。首先,已知你在A模型的ResNet50上比baseline提高1.5个点,接着马上做ResNet101看看情况。如果你的提升是有理论依据,并且不太可能是偶然因素的话(1.5的提升基本不可能是偶然),那么R101多半也是提升1.5±0.8。

这下基本确定这个idea是有效可行了之后,开始尝试把改进方法移植到B模型,C模型(三个就够了)。让我们看看最终的实验表格,以提升最多的那个模型为主要的结果。ABC三个表,Ablation study包括探究主干网络是否影响,超参数的敏感性实验,涉及改动网络的还需要考虑bflops,探究是不是增加网络层数带来的提升。涉及降低推理速度的,还得探究这种牺牲大不大。

以上这些都是常见的Ablation。最好你在实验过程中能酝酿出第二个更好的改进方案。这样你在纵向上也能列出表格,这就是所谓的论文层次感。

更有甚者,有人甚至可以一开始觉得想出的改进太成功了,却又想不出更好的方法,可以在baseline和你的方法之间找一个中间状态的方法,然后以这个中间状态方法为第一个创新点,接着针对这个创新的不足,提出第二个创新点(实际就是你最开始想的那个),自己改进自己,自己革新自己,说不定还能从中找出事物背后的深刻道理,无疑都会为你的文章增添色彩。

回到论文写作上来,假设你已经有了所有的主要实验和Ablation(当然实际上肯定是一边写一边做)。abstract,Introduction,related work,这三大部分就是写故事的关键了。

套路一般是,先说大环境下本领域的发展,分类,极其对其他领域的作用。进而转到其中某某模块(你针对的模块)对整体的性能至关重要。该模块已被多个其他领域应用,如U,V,W(列出参考文献)。

针对该模块,大家都使用的方法是Z,近十年来一直如此。后续针对传统方法Z的不足,近几年有学者提出了D方法(ECCV2017),用以改善XXXX。接着针对D方法的不足,又有人提出了E,解决了D的问题,比如提高D的速度,或者D的稳定性,或者是D的推广版本。E是相当经典的,这么多年以来成为了主导,可谓人尽皆知。

最新的研究进展中,有学者还提出了F, H等变体,分别考虑了XXXX,有的还应用在其他领域中。但是(关键来了),上述这些方法,都仅仅考虑了XXXX层面,因素。However, we observed that......,they may suffer from……,they face the problem of……这个地方最好需要你用一句神来之笔的观点说出这些方法的问题,从而让人眼前一亮,让人恍悟好像这些方法确实是这么一回事,甚至让人恍悟原来E方法能有提升是出于背后这么个原因。总之你若能总结到类似于这样的深刻道理,那基本上审稿人对你论文的看法就是very novel。加之你的提升有1.5个点这么多,那么审稿人对你实验结果的看法也将是significant或very convincing。

上述这些东西挑最关键的部分放在abstract,占1/3到1/2左右。然后全部内容放在Introduction,作为引入你的观点的背景故事。Introduction剩下两段,一段用来说明你的改进方法的大致流程,最后一段用以总结本文的贡献。还是那句话,只要你有足够的文献储备量,这些东西写起来信手拈来,几乎是畅所欲言,写的爽死。当然还需注意语言表达要客观,要尊重,还要犀利。

related work,分两种,一种是针对你改进点的相关工作,比如刚刚的传统方法以及D, E, F, H方法。还有一种没的写了就写大框架的工作,比如机器阅读理解方法,目标检测方法,图像去噪方法,3D重建方法(根据你的领域),算是一个汇总性的介绍。

 

机器学习入坑者回答:

研一刚入学,一定要“小步慢跑”,学一个算法就一定要学透(公式推导+代码编写),不要今天看一下SVM、明天瞅一眼MLP。

写代码能够学到东西,跑代码是学不到任何东西的。

从基本的算法开始,比如KNN,花上一周时间按照类似下面的流程进行实验:

(0)公式推理

(1)筛选数据

(2)模型搭建(编写代码)

(3)指标计算

(4)调参分析(不断优化)

(5)重新理解公式推理

按照上述步骤学完第一个算法以后,再以相同的过程学习第二个算法。对不同算法重复相同的实验流程,能让自己对模式识别那本书理解更深刻。

我认为从事深度学习最忌讳的就是“急”,python还没学好,就去学pytorch;pytorch还没学好,就去跑开源项目。编程基础和理论基础还没打好,就去看论文跑开源代码,时间都浪费在环境配置和版本兼容调试上面了。

美其名曰项目驱动学习,实际上就是浮土筑高台。研一基础不牢靠,研二很难静下心来弥补缺失的知识。然后就有趣了,研一整年没能学到扎实的技能,导致二年级做实验的时候举步维艰。在这种焦虑的情况下只能继续听从“项目驱动学习”这种策略,害怕组会、害怕导师催你。(我并非反对项目驱动学习,我反对的是没有ML或DL基础的情况下就搞项目)。

相反的,如果研一的基础非常扎实,天天写代码夯实实践基础,天天推导公式夯实理论基础。研二的时候就能水到渠成,自然就能把论文实验做的很好,磨刀不误砍柴工。

一步急,步步急,最后就只会跑别人代码调调参数,关掉github以后连一个基本的CNN分类pipeline都写不出来(数据清洗+数据读取+网络设计+损失选择+模型训练+指标计算+调优)

粗略的读一读理论证明,然后找个开源代码跑一下,我认为这种方式真的学不好模式识别那门课。

读者,你好!我们组建了人工智能学习交流群,欢迎你进群学习交流!

你可以加我的微信拉你进群!

机器学习和深度学习为什么感觉越学越不会,怎么解决这个问题?相关推荐

  1. 【经验】刚读硕士怎么感觉学机器学习和深度学习越学越不懂?

    有同学问:研一,在学机器学习和深度学习,为什么感觉越学越不会,怎么解决这个问题? 我搜集了一些意见和建议,供参考. 高赞回答一 作者:曲終人不散丶 来源:知乎 我的研一我记得是先找了一本比较薄的,通俗 ...

  2. 研一学机器学习和深度学习,为什么感觉越学越不会,怎么解决呢?

    链接:https://www.zhihu.com/question/371622741 编辑:深度学习与计算机视觉 声明:仅做学术分享,侵删 比如说看了两遍prml前几章感觉什么也没学到?有什么好办法 ...

  3. 机器学习和深度学习到底怎么学?顶尖专家吴恩达告诉你

    机器学习和深度学习到底怎么学? 在外国版知乎上,有位网友问:新手如何学习机器学习?学习完MOOC的课程后有没有能力阅读研究论文或者真正的做出一点研究成果? 这个困惑很多人的问题吴恩达给出了详细的回答, ...

  4. 机器学习和深度学习到底先学哪个?

    最近几年,我看过市面上很多 Python和人工智能的教程,基本都是先介绍Python基本语法,然后学习机器学习.深度学习的常用算法...... 但我与赵辛和褚英昊两位AI博士沟通后发现:这些内容看似合 ...

  5. 王川: 深度学习有多深, 学了究竟有几分?

    上一篇文章提到了数据挖掘.机器学习.深度学习的区别:http://www.cnblogs.com/charlesblc/p/6159355.html 深度学习具体的内容可以看这里: 参考了这篇文章:h ...

  6. 【原创】分享一些机器学习和深度学习的学习资料

    如果你还在苦苦寻找机器学习和深度学习入门资料的话,或许可以看看本文我的一些推荐,这些材料我自己都学过一遍,分享一下点评,希望对你有帮助.注意,本文只是点评这些资源,不提供任何资源的盗版下载,所有资源我 ...

  7. [转]机器学习和深度学习资料汇总【01】

    本文转自:http://blog.csdn.net/sinat_34707539/article/details/52105681 <Brief History of Machine Learn ...

  8. 一篇文章解决机器学习,深度学习入门疑惑

    前言 进入正文前,我们先来看则新闻: 只看图不多说. 由此可见国家对人工智能的重视程序,趁早学习,让我们也贡献一份力量. 这篇文章要说的东西 研究生有不少日子,和之前的几个学长以及几个学弟偶尔也聊聊天 ...

  9. No module named MNIST_写给小白的用fashion-mnist入门机器学习和深度学习的简单项目(非常全面!!!)...

    这是一个入门机器学习和深度学习的小项目,以fashion-mnist数据为基础.分别利用机器学习(随机森林)和深度学习(多层感知机/卷积神经网络)方法进行训练.完整的包含数据读取,数据处理,训练, 验 ...

最新文章

  1. R语言ggplot2可视化:通过在element_text函数中设置ifelse判断条件自定义标签文本的显示格式:例如、粗体、斜体等
  2. Kotlin 学习笔记01
  3. UVA11134传说中的车(放棋子)
  4. Hadoop学习笔记—20.网站日志分析项目案例(一)项目介绍
  5. 科来网络分析系统概要介绍
  6. 理解Flex itemRenderer(3)--通信
  7. 【PAT甲级 StringBuilder的使用】1005 Spell It Right (20 分) Java版 7/7通过
  8. 沈向洋对于工程技术人员的十点经验分享
  9. 思科为计算机配置ip命令,cisco路由器配置命令练习
  10. 三星内存编码_想问一下三星内存条的型号有什么区别
  11. How to Write a simple UEFI EDKII Application:如何编写一个UEFI简单的应用程序[5]
  12. MATLAB音频数字水印算法实现
  13. 如何在CSS和HTML中创建垂直线...
  14. Tyrion (含示例源码)
  15. java double 保留小数_java使double类型保留两位小数的方法
  16. js将图片/文件等资源保存(下载)到本地
  17. std::function和std::bind用法
  18. MIT投入10亿美元,让所有学生都学习AI课程
  19. 从原来的系统中找回网络连接
  20. PyQt5Icon图标(Icon)无法显示问题

热门文章

  1. Linux免密登录环境设置
  2. matlab 图像转换 命令 im2bw
  3. im2bw函数的阈值level
  4. 【每日早报】2019/10/09
  5. 剑三修复工具无法连接服务器失败怎么办,掉线3手游,你们都怎么登上的?
  6. Oracle查看一个中文汉字占用几个字节
  7. C# 关键字extern用法
  8. python jit_牛掰的numba库jit模块:一行代码让 Python 的运行速度提高100倍
  9. 数字化转型要去解决基础性的、急难险重的问题
  10. 目前最详细的红黑树原理分析(大量图片+过程推导!!!)