作者:湃森(深圳大学 计算机与软件工程)
链接:
https://www.zhihu.com/question/396811409/answer/1252521120
来源:知乎
本文仅作学术分享,著作权归属作者,如有侵权请联系删文!
研一:
过一遍吴恩达/李宏毅的机器学习和深度学习课程,强推Fast ai课程【这里建议把图像分类、语义分割、目标检测、实例检测、自然语言处理都过一遍,看似不相关的领域,往往一结合就是惊天动地的Oral文章】;
泛读《python从入门到实战》、《python机器学习实战》、《统计机器学习》、《深度学习》-花书(这本书有点不适合阅读,能消化的就看,消化不良就算)、周志华《机器学习》(配备《南瓜书》手推公式不是梦);了解一些常规的传统视觉算法(图像过滤、形态学操作、几何变换、颜色转换、图像绘制、直方图、形状分析、运动分析、特征检测等)和专用库(Opencv),实践几个小项目,比如可以用霍夫圆变换检测高尔夫球的数量等;实战沐神的《动手学深度学习》,原版是MXNet框架,现有Pytorch、Tensorflow版本;【假定已经具备基本的概率与数理统计知识(常见的分布)、线性代数(矩阵论、范数与距离等)、凸优化等基本数学知识还有一些信息论的基本常识】
寻找相关论文领域综述了解该领域发展现状,并了解CV界的顶会有哪些:ICCV、ECCV、CVPR、NIPS(一档),IJCAI、ICLR、AAAI(二档);
医学领域的主要有:MICCAI、Medical Image Analysis、IEEE Transactions on Medical Imaging、MIDL、IPMI;
数据挖掘领域:KDD;
自然语言处理:ACL、EMNLP、NAACL-HLT和COLING;其他领域;【Access——保毕业神器】
关注多几个知名公众号或博客了解最新的行业动态或前沿论文解读(俗称干货):机器之心、量子位、新智元(这几个公号一般关注一两个即可,这些公号的内容基本都重复的)、极市平台、知乎(开通后亲身体验了几个月,感觉上知乎大多数时间是在吃瓜)、Quora(国际版知乎)、Datawhale(主要是面向数据分析的,学习氛围不错)等等(这些根据自身需求可自行关注一波),
选择1-2个深度学习框架:Tensorflow 2.0和Pytorch1.0+(目前来看优先选这两个,不是说其他框架不好,主要是这两家的社区大,不会说遇到bug找半天没资料)。
掌握必备工具:Overleaf(在线Latex)、Pycharm(强大的编辑器)、VSCode(轻便舒服)、Mendeley(文献管理工具必备)、Jupyter Notebook(方便数据可视化)、TeamViwer(远程工具标配,外加一个向日葵备用)、Mathpix Snipping Tool(Latex公式截图)、Snipaste(桌面截图利器)、谷歌浏览器(常用插件有:Grammar 用于检测语法;沙拉查词:用于翻译;octotree:用于生成github目录)、Office全家桶(Word、PPT、Excel)、sublime Text(便捷文本编译器,或者选择Notepad++,萝卜青菜各有所爱)、有道云笔记/印象笔记/语雀/石墨文档(记笔记专用)、XMind/幕布(思维导图工具)、Free Download Manager 5/迅雷(下载神器)、ReNamer(批量文件名操作)、MobaXterm(连接服务器的神器)、Endnote(这个主要是用在Word文档的参考文献管理)、Matlab(有时候会用来画图),应该够用了。
自备一些常用的网站:
github(多找一些优秀的框架,学习如何组织代码,如何编写说明文档等;不要盲目的造轮子,非核心的东西就不要浪费时间去实现,纯属浪费表情)、
Papers with Code(竞赛排行版,好像基本代码都有开源)、
arXiv(还没发表的论文大多会挂上面,可以抢先关注,不过都是没经过同行评审的文章,仅供参考)、
SCI-HUB(主要是下载一些最新发表的期刊或文章,下载速度慢)、https://booksc.xyz/ (这个主要下载一些不是最新的论文,一个IP一天上限10篇,下载速度快)、
Medium(这个网站是全英的,找到跟自己主题相关去阅读,文章质量相对很高)、
CSDN(这个一般用来搜索一些常规的bug)、
StackOverflow(这个涵盖的bug解决方案就多多了,质量也非常高,基本csdn很多issue都是在这上面搬的答案)、RGB配色表、代码黏贴、在线PS、文档格式转换工具、Latex表格生成器、不限速网盘工具、文件格式转换工具、JSON to XML、腾讯文档、谷歌翻译,差不多就这些。
了解有哪些知名的竞赛网站可以参加,参加一两个相关竞赛项目锻炼自己的代码能力(重点是学会如何做数据清洗和特征工程,不应过分追求排名):Kaggle【关注:鱼遇雨欲语与余等知名选手的博客或其他动态,学习竞赛经验】、天池、Grand Challenge(这个是医学相关的比赛)、DataCastle、KDD-CUP(国际知识发现和数据挖掘竞赛)。
悉知一下领域内的大佬,没事多刷刷最新研究进展:
何凯明(CV之星,代表作有ResNet、MaskRCNN、Non-Local、SRCNN、ResNeXt、SPPNet、Faster RCNN、FPN、PointRend等,两根手指头都数不过来)、
陈天奇(机器之星,代表作有XGBOOST,以及框架TVM等)、
朱俊彦(GAN方面的资深玩家,cycleGAN、conditionalGAN、...GAN)、汤晓鸥(人脸识别)、
李飞飞(ImageNet一把梭哈)、
贾佳亚(图像滤波)等等,另外还有一波国外大神就不打上去了。
研二:
1- 发表1-2篇顶会或顶刊的paper;
2- 参加一下大型比赛并拿得一定名次:腾讯广告算法大赛冠军、华为云大赛平台、Kaggle上的相关比赛等等,最好能把代码整理成一个pipeline维护成一个github项目;
3- 刷Leetcode、《剑指offer》等,掌握基础的Linux和数据库相关操作、复习一些基础机器学习知识(强推《百面机器学习》这本书)和深度学习知识。
机器学习:
(1)十大经典算法:Linear Regression、Logistic Regression、LDA、LVQ、Naive Bayes、KNN、Random Forest、Decision Tree、SVM、Boosting&AdaBoost;能手推的加分
(2)常见的降维技术:PCA(最常用)、LDA、Locally linear embedding、Laplacian Eigenmaps等;
(3)如何开始一个数据竞赛?
<1> Exploratory Data Analysis:导入数据-》数据统计-》变量相关性分析-》缺失值和异常值处理-》数据分布变换-》特征分析(数值型和类别型特征)-》【这里可以熟练掌握Pandas、Matplotlib、Seaborn、numpy、scipy几大常用数值分析库】
<2> Feature Engineering:异常值处理(长尾截断、箱型图观察等)-》缺失值处理(非随机缺失:Binary、GSimp,、QRILC等;随机缺失:可用RF、SVD、Mean、Median、kNN、Median、NN填充)-》特征离散化-》数据类型转换(常见的诸如one-hot编码)-》特征组合(这个需要具备一定的背景知识)-》数据降维(PCA)-》
<3> Modeling:选定模型(两大杀器:LightGBM和XGBoost,其他一些可自行尝试)-》交叉验证-》调整参数(常用的有sklearn中的网格搜索GridSearch,另外还有一些诸如Bayes调参以及贪心调参等)
<4> Ensemble:可以说一个数据竞赛主要取决于两点:特征工程以及模型融合。一般选定3个左右的强模型+多个相关性较小的弱模型进行Voting/Stacking/Boosting。
(...)什么是偏差和方差,分别会出现什么现象?
什么是生成模型和判别模型?
有监督和无监督的区别?
KNN和K-means中的K各有什么含义?
什么是核技巧,有什么用?
L1和L2正则化分别采用什么距离度量,各自使用于什么情况?
如何选择最佳超参数,有哪些常用的搜索方法?
时间序列数据如何应用交叉验证?
数据归一化常用的有哪几种,为什么要进行归一化?
Xgboost使用泰勒展开的优势在哪?LSTM比RNN好在哪里?
朴素贝叶斯中朴素如何体现?为什么ROC曲线对样本分布不敏感?
如何选择合适的度量函数?
聊聊最小二乘法?
gbdt 、xgboost 、rf这三者都基于树模型,有啥区别?
GBDT的原理和训练过程是啥?
OOB又是啥,在RF中是如何计算的?
如何理解熵这个定义以及各种熵的区别是什么?
CRF相对于HMM有啥优势?
似然和概率是不是一个东西?
特征值还会求否?
MLE并不总是存在,那如果存在的话,它时候一定特异?
两个变量之间的 p值为零,那么这两个变量的值是否一定不相关?
谈谈奥卡姆剃刀、丑小鸭定理和没有免费午餐?
为什么说Boosting降偏差Bagging降方差?
深度学习:
(1)各种评价指标的定义和应用场景:Accuracy、Recall(等价于Sensitivity)、Precision、Dice(等价于F1-score)、Jaccard、ROC AUC曲线、P-R曲线、Miou等等;【熟练应用TP、FP、TN、FN四大准则基本就能理解以上基础指标】
(2)常见损失函数公式的书写及定义:
目标检测:
<1>Focal loss、Balanced L1 loss(主要是样本不均衡问题,以Focal为重点理解);
<2>DR loss、KL loss(主要是针对数据之间的分布,像KL散度就是一个很基础的概念);
<3>IoU loss、GIoU loss、DloU loss(DloU loss效果应用在项目上实测效果真不错);
<4>DR loss、AP loss等;
语义分割:
Dice loss、Hausdorff distance(HD) loss、Lovász-Softmax loss、BCE loss、TopK loss这几个比较常用,其他一些诸如Counter loss、Boundary loss、Wetight loss、Sensitivity-Specificity loss、Distance penalized CE loss 等其他loss有精力再去了解;
(3)有哪些常见的归一化技术,其异同点是什么:BN、GN、LN、GN,较新颖的有FRN等;
已BN为例,基本知道BN的作用(防止梯度弥散、加速收敛速度,增加泛化能力——基本可以不用Dropout了)、BN的流程(对一个batch中对应的channel求均值、方差,然后进行偏移和缩放,变换为原始数据的分布)、BN的局限性(对batch敏感等)这些就差不多了;(BN大法好啊)
(4)SGD、Adam、RMSprop这三个优化算法的梯度更新规则是什么,存在什么缺陷?一般应用的话图方便就直接用自适应的Adam算法,有点工程经验的一般会选择SGD,配合多项式学习率衰减进行training;
(5)常见的数据增加有哪些,给定一个场景,如何选择合适的数据增强技术?
几何增强:水平、垂直翻转、旋转、缩放、平移、裁剪、透视变换、仿射变换等;
颜色增强:对比度、亮度、饱和度,色彩空间转换、颜色抖动,通道混洗、随机擦除、填充,叠加噪声等;
其他一些增强技术:GAN、mixup、Label smooth、RandAugment、mosaic、dropout、cutout、cutmix、Augmix、MoEx等;
常用的三个数据增强库:imgaug、albumentations以及torchvision自带的;
(6)有哪些常用的学习衰减策略:
一般以下五个足以:StepLR、MultiStepLR、 ExponentialLR、CosineAnnealingLR、ReduceLROnPlateau;其他一些根据具体任务自行Lambda去自定义,比如不同层设置不同的学习率;
(7)有哪些常用的Backbone:
LeNet:5层轻量级网络,一般用来验证小型数据;
AlexNet/VGGNet:把网络层数加深;
GoogLeNet/Inception:结合1x1卷积并采用带有不同kernel和池化的多分支策略进行特征提取;
ResNet:Residual block,使训练更深层的网络变得可能;
RexNeXt:引入组卷积,在精度基本不降的情况下速度超过ResNet;
DenseNet:主要是特征复用的思想,参数量虽小计算量不敢恭维;
Res2Net:基于ResNet引入多尺度;
SENet:基于通道矫正,强化重要特征,抑制非重要特征,重点是轻便可以随意嵌入;
SKNet:引入特征图注意力,使卷积核的感受野能够自适应
DCNet:引入可变性卷积,提高了泛化能力;
SqueezeNet、ShuffleNet、MobileNet:轻量级网络;
CSPNet:利用跨阶段特征融合策略和截断梯度流来增强不同层次特征的可变性解决冗余梯度信息,提高推理速度;
EfficientNet:E0-E7的进化之路号称无人能敌,配合谷歌刚出的Lite,实现精度、延迟两不误的移动端新SOTA;
RegNet:FBAI力作,号称超越EfficientNet,GPU上提速5倍的神作;
ResNeSt:刚出来的Backbone,乍眼一看是一个ResNeXt和SKNet的结合体,论文写着刷爆各大榜单;具体效果还未使用不从得知,直观感觉是个好的神器,留待时间去考证;
(8)模型不收敛的原因一般有哪些:
<1>数据和标签是否对应?(标注的对不对?分布是否合理?)
<2>学习率的大小设置是否合理?(过大会怎么样过小又怎样?)
<3>网络结构应用是否合理?(少量数据搞个ResNet152是几个意思?)
<4>有没有使用归一化或者合适的学习率衰减策略等。
(...)如何防止过拟合?
数据的长尾效应如何有效的解决?
超参数和普通参数的区别是什么?
模型剪枝技术有哪些?
为什么需要使用ReLU等激活函数?(有哪些激活函数,它们之间的区别是什么,有什么优缺点)BatchSize应该如何选择?(过大过小有啥影响)
卷积的参数量、计算量、感受野如何计算?
分布式训练中,BatchSize和LearningRate之间的关系?
(参考)GCN相对于CNN的优势在哪里?阐述一下GAN的思想?
为什么训练GAN会存在Mode collapse的现象?
阐述下VAE和GAN的区别?
注意力机制的原理是什么,有哪些常用的AM,它们之间的区别和联系?
fine-tune涉及到哪些超参数?
图像检测和分割中, 如何在不显著增加参数量的同时更有效的提取出多尺度的信息?
如何解决Few-shot learning的困难?
多分类中如果某一类类别训练效果不佳如何设计loss函数?
Tensorflow和Pytorch两个框架的区别和优缺点是什么?
简述下Unet的核心思想?有哪些常用的后处理操作?(分水岭、CRF、TTA、重叠预测、NMS等)Concat和Add操作哪个更优,为什么?等等
4- 能实习的一定要去实习;
研三:
1- 准备开题答辩和几十页的中文毕业论文;
2- 坐等offer收割;
3- 毕业答辩、拍毕业照、吃散伙饭;
总结:
(1)能实习的一定要去实习,否则秋招就是千军万马过独木桥;不能实习的争取做一个能够落地的CV项目;再不济一篇顶刊顶会的paper也要争取拿下;
(2)以上大致一个四非学校非科班学生一年学习期的一点浅薄知识储备,题主强调是某中上985硕士,应在此基础上扩增4倍的知识量,不然连渣本都竞争不过。像我等实力不够的同学,学算法的同时务必时刻提醒自己自备开发技能栈,否则大概率毕业则失业;
(3)985本硕学历+项目+竞赛+顶会顶刊+扎实的开发技能 = BATJM 算法offer。
最后祝题目三年学有所成,早日收割心仪的offer,当上CEO,迎娶白富美,走上人生巅峰。