给深度学习研究生的入门建议(未完待续ing)

Posted 诸神缄默不语

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了给深度学习研究生的入门建议(未完待续ing)相关的知识,希望对你有一定的参考价值。

诸神缄默不语-个人CSDN博文目录

本文将系统性介绍深度学习方向(准)研究生可供参考的入门建议。
我的背景是浙江大学人工智能专业在读硕士,研究方向是GNN、NLP、司法智能。
(我的CSDN博文基本涵盖了我所有的深度学习知识,建议参考)
选专业、选学校、选导师之类心态相关、“道”级别的内容,本文不做概述,直接默认大家在心理上都是做好准备了的。如果真的需要,可参考我之前写过的博文:211逆袭浙大-计算机及相关衍生专业保研之路纪实(深度长文,收藏了)
本文主要关注“术”与“器”层面的实操,是概括性的,更细节的内容也不在本文赘述。

文章目录

1. 对个人基础的定位+必要的前置知识

对自己基础知识各方面有所了解:

  • 数学(主要是高等数学、线性代数、概率论与数理统计,其他会的越多越好)
  • 编程(对编程语言掌握的熟练程度,算法与数据结构)
  • 计算机基础知识(各常见操作系统的使用,计算机网络。在本科期间起码要学一下什么是BGP吧?)
  • 深度学习基础知识(PyTorch框架的使用)
  • 深度学习进阶知识(CV/NLP/GNN等子领域的知识,尤其是对未来研究方向的学习)
  • 英语(能看懂论文、能正常发音、能对着油管自动提供的字幕看懂视频就行)

建议学习的编程基础知识和工具:

  • Linux使用:需要在Linux服务器上部署程序
  • Git:版本管理
  • wandb:记录深度学习代码运行过程中的指标结果,自动进行可视化(指画图)

2. 如何学习

2.1 系统性学习:学习路线,网课、书籍、框架

对一个领域的基础进行系统性学习,建议找一个经典网课或者书籍来看看。网上也有很多渠道,很多人会推出领域的框架,可以先笼统地了解整个领域的工作,并针对性地仔细学习所需的知识点。
具体课程推荐,网上都挺多的,我这里列出、整理了一点。

DNN通用课程:

NLP课程

GNN课程:

泛科研领域:

  • 大学生如何写毕业论文:这本书其实感觉比较适合文科生,就那种整理文献……的工作
  • 考研、读研到毕业论文:研究生的学术三步曲
  • 研究生是如何炼成的:学术研究与论文写作导引
  • 高质量读研:教你如何写论文、做科研
  • 科技论文规范写作与编辑
  • 科技论文的规范表达——写作与编辑
  • 学术研究方法论
  • 研究方法论:本科、硕士、博士生研究指南
  • 读研指南:搞砸研究生生涯的57个教训

其他课程集合:

2.2 看论文+复现代码

2.2.1 怎么读论文(频率与时长),看不懂怎么办

有个常识就是论文不是每篇都要精读。
对于略读的论文,可以仅看标题、摘要、图表。一篇优秀的论文应该在仅看这些内容的时候,就能看出文章的精彩之处和创新点了(除非是老论文,老论文不太卷,所以不太讲究这些面子工程)。

论文阅读工具:

  • 普通PDF阅读器(我用的是福昕,可以直接搜索一个文件夹下所有PDF文件里面的内容,在线上考试时翻老师发的PPT有神效)
  • ReadPaper-论文阅读平台-专业学术讨论社区:这个工具的主要优势是自动提取PDF格式文件中的参考文献和图片,点击参考文献可以来回自由跳转,图片也可以单独打开放大

论文管理工具:

  • 普通表格/文档软件,包括Word、Excel、石墨文档等(我用的是这个,石墨文档+写博文。写博文/文档对我来说是最有效的笔记方法)
  • Zotero
  • Mendeley

找论文相关的其他博客、slides等资料:主要通过谷歌、百度、微信直接搜索(微信无法被这些搜索引擎抓到,但是确实有很多优秀文章发布在了微信公众号上)

2.2.2 怎么找论文

  1. 问导师/学长学姐要推荐论文
  2. 确定感兴趣的课题后,根据关键词在学术搜索引擎(推荐工具见后文)中直接搜索(关键词可以考虑不同粒度的,如先考虑最大的范围“自然语言处理”,然后具体到“文本摘要”,然后具体到“用图做文本摘要”这样)
  3. 阅读本领域的最新论文(顶会顶刊的可以多看两眼,水会水刊甚至只挂了ArXiv的最多看下摘要和图片吧)
  4. 阅读本领域的经典论文:往往是本领域引用量最高的论文,在比较新的论文中常作为baseline出现
  5. 订阅领域论文:文献鸟Stork,谷歌学术,AMiner
  6. 通过领域可视化工具或综述自动生成工具辅助,了解这个领域的关注焦点、经典论文等信息,从而对症下药
    1. (没试过)VOSViewer, connected paper, research rabbit
    2. Literature Review | Paper Digest
    3. ScienceGate : Academic Search Engine
    4. 知网
  7. 通用的论文推荐:https://yespaper.cn/, readpaper, AMiner - AI赋能科技情报挖掘, PaperWeekly, Home - AI Paper Collector

常用的学术搜索引擎:

2.2.3 怎么找代码并复现,复现不出来怎么办

现在论文如果有官方代码,一般都会开源在GitHub上。
The latest in Machine Learning | Papers With Code上有整理各个主题下公布代码的SOTA工作,可作找资料的参考。

复现完整流程(不一定每次都需要做完每一步,需要干啥就干啥好了):

  1. 跑通原代码(如果能抠出来原代码里需要的部分,也可以只跑一部分)
    如果跑不通可以提issue问问。有的作者写的那玩意它就是跑不通的
  2. 嫁接到自己的数据上
  3. 修改模型代码,增加自己要加的模块

2.3 碎片化新媒体信源

2.3.1 科研博主

(有些博主在各个平台同名入驻、或者分别有引流渠道,我就不重复写了)

CSDN:

  • 诸神缄默不语
  • #苦行僧
  • Cyril_KI(这哥们好像是做时间序列的)
  • 我黑切呢**(做NLP+GNN的)
  • NLP_wendi

小红书:

  • 春秋带剑

知乎:

  • 风霜刀剑严相逼
  • Gordon Lee(有讲transformer中的归一化、一些论文阅读笔记、fairseq框架的学习笔记)
  • 重剑无锋(这个博主主要讲思想层面的内容)
  • 大师兄(论文和模型的讲解)
  • 刘聪NLP
  • 机器学习社区
  • CVer计算机视觉
  • 机器之心
  • 新智元
  • Evan CHEN(做GNN的)
  • 魏秀参
  • 我爱学习(做GNN的)
  • 王赟Maigo(做NLP的,偏语言学方向)
  • 李沐
  • 北京智源人工智能研究院
  • 笃林(浙大学长,做时序的)
  • 金天(主要做视觉的,所以我没怎么看过)
  • 忆臻(做NLP的)
  • 张俊林
  • 罗福莉(北大硕士,在ACL2019上发了8篇paper)
  • 王树义(研究生导师,主要分享偏管理学的科研方法)
  • 嫚嫚悠悠(做NLP的)
  • 夕小瑶(做NLP的)
  • 邱锡鹏(复旦教授,做NLP的)
  • zibuyu9(北大教授刘知远,做NLP的)
  • Juliuszh
  • 烛之文(做NLP的)
  • 微软亚洲研究院
  • Curry(做元学习、小样本学习……一类的)
  • 伊森
  • Andy Yang

微信公众号(公众号取关退出后,列表就会重新刷新,我懒得一次一次重新找了,所以暂时不列举了,想到哪儿就写到哪儿好了):

  • ArXiv每日学术速递
  • GitHubDaily
  • Coggle数据科学(打数据类比赛较多)
  • CS的陋室
  • 深度学习于NLP
  • 李rumor
  • PaperWeekly
  • AlandR艾尔
  • AI in Networks
  • 时序人
  • AINLP
  • AI算法与图像处理

B站(很多课程B站都会搬运,我就不将搬运up主写进来了):

  • 3Blue1Brown
  • 会分享talk的up主:
    • 智源社区
    • LOGS图学习研讨会
    • AI_Drive
  • 跟李沐学AI
  • Michelle小梦想家
  • 饺子博士and饭老师
  • DASOU_NLP从入门到放弃
  • 我是土堆
  • 老弓的学习日记
  • 小美算法讲解
  • 阿力阿哩哩
  • shuhuai008(这个似乎是主要讲强化学习的)
  • 啥都会一点的研究生

自建网站的博主:

  • 苏剑林(江湖人称苏神,NLP领域大概无人不知,无人不晓)

2.3.2 值得关注的网络资料

  1. NLP 任务中有哪些巧妙的 idea? - 知乎
  2. 科研霞子:科研集成工具平台

3. 如何科研

本文在这里没有考虑诸如导师放养、导师啥都不懂、导师啥都不懂还瞎指挥、大小导师有矛盾、导师安排做没有发展空间的横向任务之类的场景。
因为这些问题的解决不是科研本身的事情,非战之罪。

3.1 如何想idea

首先要看论文,看各种本领域研究近况的讲解,了解本领域现在在做啥。
另外毕业论文的话还可以参考这篇回答:如何分析知网中关键词共现网络? - 知乎,可以简单、迅速浏览一波以前人写毕业论文都啥水平。(虽说一校一事,外校的毕业论文大多没什么参考价值罢了)

分类:新的研究问题(提出了没人想到的新路,属于开天辟地),新的模型、算法、解决方案(解决了前人没能解决的问题),新数据集、没有明显理论创新但是效果很好的大模型(大力出奇迹),提出对整个大课题的统一框架(theory of everything这种感觉。这种一般都会叠加提出新解决方案的,比如PyG算是提出新的统一代码框架、并提升了运算速度),综述(总结陈词)

  1. 导师给了一个idea
  2. 看看SOTA论文的工作,看看它们还有什么能改进的地方(准确性、时间效率等主要指标,安全性、隐私保护、鲁棒性、可解释性等次要指标),然后想办法改进指标,或者直接填补空白(如这个领域以前没人考虑过安全问题/可解释性问题/伦理问题,那我就开天辟地)。
    一般来说都是模块叠叠乐,或者深化理论,就看效果怎么样、故事能讲得多精彩了:
    • 把NLP领域的word2vec挪到GNN领域→node2vec
    • 把CV领域的CNN挪到GNN领域→Graph CNN
    • Graph CNN,但直接约束卷积核→GCN
    • GCN,但从空域角度来看待,将其直接视为求邻居节点平均值,并提出其他池化方法→GraphSAGE(后来也有用传统图论的标签传播、loppy belief propagation或者W-1 test之类来解释GNN信息传播理论的)
    • GCN + (NLP) attention,但仅应用于邻居节点→GAT
    • GCN,但用利用RWR来解决过平滑问题→APPNP
    • GCN + 异质图→RGCN
    • 万物加transformers→theory of everything
  3. 归纳总结一个领域的工作,并提出新的统一解决方案
    1. 用统一范式来建模一种问题,例:DropMessage: Unifying Random Dropping for Graph Neural Networks  Unified Named Entity Recognition as Word-Word Relation Classification
    2. 把之前的所有工作全都喷一遍,然后提出一个真正有效的方法:Are we really making much progress? Revisiting, benchmarking, and refining heterogeneous graph neural networks(我写的笔记:Re10:读论文 Are we really making much progress? Revisiting, benchmarking, and refining heterogeneous gr
    3. 就是纯纯的综述,好一点的就包含对整个项目各个SOTA的整理:Re23:读论文 How Does NLP Benefit Legal System: A Summary of Legal Artificial Intelligence
  4. 烧GPU和预算,烧出一个奇迹(数据集或大模型),然后跑点baseline,介绍一下新奇迹比以前工作牛逼在哪里,就行
  5. 开天辟地,想出一个新问题(显然这不是我配教的部分)

另外给一个给项目起名字的工具(虽然其实这部分好像不太重要,但是毕竟也有工具):Acronymify! - Automatically generate fun acronyms for your project

3.2 怎么写代码

简单来说就是站在前人的肩膀上,魔改啊魔改。

写代码部分我还有很大的进步空间,等我再多写点再来补吧。

3.3 怎么写论文

3.3.1 可参考的学习资料

Academic Writing

3.3.2 工具

3.3.3 论文结构

  1. 摘要abstract:我们的任务是什么,属于什么大任务之一,这个任务应用广泛、很有意义。在这个任务上,现有的解决方案存在什么问题,为了解决这个方法,我们提出了什么模型,其典型特征是什么。具体介绍模型特征,解决了什么问题。实验效果很好,数据与代码已公开。
  2. 关键词keyword
  3. 概述introduction:介绍任务的意义,介绍以前工作及其不足之处,介绍本文如何站在以前工作的肩膀上解决了上述问题,介绍本文的创新点,介绍后文排版(这玩意可以不要)
  4. 相关工作related work/文献综述:介绍各个相关领域的以前工作,如何逐步改进,以启发得出本文的工作,本文比以前工作优越性在哪
  5. 方法:总分,先对问题进行数学化的定义,然后介绍整个模型的架构,分别介绍各个模块,最后分析计算复杂度和模型原理(有的论文没有)
  6. 实验experiment:数据→实验设置(包括超参和计算资源等)→模型评估指标→实验结果→实验分析(包括ablation study、案例分析、鲁棒性分析、在不同场景下的效果等)
    实验部分经常大到需要放到附录
  7. 结论conclusion:总结本文研究内容(整体的方法、解决的问题和模型原理)和实验结果,介绍本文的不足之处,以及未来该工作可以衍生出的新工作。
  8. 致谢acknowledgement
  9. 参考文献reference

3.3.4 语言与修辞

可以借用的工具:

  1. 英文
    1. 修改语法错误:Grammarly
    2. 复述和风格转换:Wordtune

3.3.5 学术绘图

具体的以后再补。

  1. 配色:要有意义,不要太多、混乱
  2. 参考代码
    1. MLNLP-World/Paper-Picture-Writing-Code: MLNLP: Paper Picture Writing Code
    2. matplotlib画图(持续更新ing…)
  3. 论文配图改进指南

3.4 怎么投稿

这个我也以后再补吧。

3.5 如何做PPT和答辩、演讲

待补。等我找点PPT模板上来。

有些组里面有那种祖传PPT模板,比如我们组……我们组的PPT模板甚至是ppt后缀,我还废了点功夫才改成pptx后缀

3.6 硕论的其他要求

有小论文的话一般就是叠小论文吧,缝一缝叠起来。
或者就当一篇大号小论文来写……

  1. 开题报告:大概来说就是把最后想成稿的内容拿出来吹一吹,先把flag立起来(可行性分析、预期成果)
    如何写论文 | day 3 | 如何写开题报告

其他待补。

4. 为毕业后的生活做准备

具体的以后再补。

4.1 计算机相关私企工作

主要可选的岗位类型有:

  • 算法(指深度学习算法):分为面向研究和面向业务
  • 数据挖掘
  • 数据分析:一般来说已经比较偏文职了
  • 研发:前端、后端、移动端(android / ios
  • 产品经理
  • 设计师(UI / UX)
  • 运营
  • 测试
  • 运维

各个特殊领域又有自己的特殊职业,如金融量化领域的量化分析师、游戏的策划……等。

网上有很多各个岗位的具体面经和需要学习的总结资料,这种我以后有时间的话分类再细写吧。
这块我其实都没有学,所以我也没什么资格谈这个哈……
这里仅给出一些网上的系统性资料,椅子参考:

  1. Java
    1. 【大学到研究生自学Java的学习路线】这是一份最适合普通大众、非科班的路线,帮你快速找到一份满意的工作_hello-java-maker的博客-CSDN博客

其他:

  1. 同等价位,自研>外包

4.2 公务员、事业编、国企

4.3 快进到转行

4.4 读博

5. 其他科研常用术语

磕盐:科研(谐音梗)
paper:论文(一般指小论文)
thesis:毕业论文
scoop:抢发(指你想出了一个idea,结果一边做着一边发现别人用这个idea写的文章发出来了)
baseline:基线模型(以前的模型,用来对比你提出的模型的效果)
SOTA:state of the art,最前沿的工作
ablation study:什么是ablation study(消融实验)?

6. 本文撰写过程中参考的其他网络资料

  1. Novelty in Science. A guide to reviewers | by Michael Black | Medium:大概来说就是讲,novelty不是复杂,也不能简单得显而易见(比如暴力将两个模块叠在一起,没什么别的难点和新东西)。新的东西有时不一定能即使看到有用性
  2. 对于本科毕设想要做 NLP 相关工作的同学,您有什么建议吗? - 知乎
  3. 一个博士生接受怎样的训练是完整、全面的科研训练? - 知乎
  4. 我是如何从头开始写一篇顶级论文的 - 知乎:是讲一篇差分隐私领域的工作,不懂,但是写得好燃
  5. 读博回忆 - 知乎

以上是关于给深度学习研究生的入门建议(未完待续ing)的主要内容,如果未能解决你的问题,请参考以下文章

业余水彩入门(未完待续ing...)

关于数组的深度克隆(未完待续)

(未完待续)翻译:一份注意力机制的综合性向导,适合所有人

怎么快速入门深度学习

读caffe源码(未完待续)

送李沐的《动手学深度学习》