我也给一个自己的路线图。
首先为了打好自己的数学基础。其中重点涉及到三门学科:微积分(数学分析)、线性代数(高等代数)、概率论与数理统计(概率统计与随机过程)。
数学基础
其中,微积分里的多元微积分是推导一些重要公式的理论基础,如反向传播公式。学好多元微积分也能更好地理解神经网络模型的优化过程。
线性代数是理解矩阵运算的基础。数据挖掘算法里的非负矩阵分解、奇异值分解,以及神经网络里的矩阵运算,都需要一定的线性代数知识。
概率论与数理统计是最为重要的一门数学课。目前使用最广泛的交叉熵损失函数,源于统计中的极大似然估计;概率论中的贝叶斯公式衍生出了贝叶斯学派;正态分布及其性质影响了VAE等模型的构建;大数定律则是很多主观实验的理论依据之一。
为了理解一些数据结构和算法,离散数学是不可以少的。
编程基础
为了落实机器学习理论,快速尝试我们的想法,以及学习community中的新算法,有两门语言需要进行学习。
第一门是Python。目前Python已经成为了机器学习界最通用的编程语言,特点是学习起来简单,第三方库灵活,便于快速实现自己的想法。根据我本科期间带微软学生俱乐部的经验,下面这本书是新手接触Python的最佳教材:
Python在工程上的提高可以看这本书。这本书提到了一些Python的高级特性和技巧。
Python在工程上面的代码规范可以看下面的文档:https://zh-google-styleguide.readthedocs.io/en/latest/google-python-styleguide/python_style_rules/zh-google-styleguide.readthedocs.io
第二门是C++。C++在少数情况下能帮助你完成机器学习工作,但是C++是计算机科学体系中的重要一环。研究算法、数据结构、操作系统、体系结构、编译原理等课程时,都需要用到这门语言作为人机交互接口。
如果没有学习过C/C++,推荐从下面这本书开始。
不推荐轮子哥的那本《C++ Primer》。就个人体验而言,这本书会更加新人友好一些。
计算机科学课程
一般来说,机器学习相关的书籍不会涉及基本计算机概念,因为他们默认你已经懂了。我推荐还是了解一下下面的课程:
第一门是数据结构与算法。这门课程可以帮助你理解基本的数据结构,以便在合适的时候选择。如果你以后接触非线性结构的数据,如图或者树的数据,那么这将会在很大程度上帮助你。
机器学习理论
和激进的部分答主不大一样,我推荐机器学习理论书籍还是总体遵循由浅入深,不追求一步到位。
首先是传统机器学习算法和一些机器学习思想。在很多领域的研究中,传统算法仍然得到关注,比如k-means聚类,奇异值分解,主成分分析(PCA),非负矩阵分解(用于信号处理);以及一些概率模型理论,如隐马尔科夫模型(HMM),混合高斯模型(GMM),相关算法,如Gibbs采样。上面这些算法我都在计算机音乐研究中打过交道。
推荐下面这本经典书籍,目前出到第二版,好评满满:
当然,周志华的西瓜书也是很经典的。但是要提醒一句,这本西瓜书是教材,并且内容跨度很大,并不适合新手自学。
深度学习的理论,只推荐一本书:《深度学习》,也就是花书。这本书和中文翻译是开源的,GitHub地址为:https://github.com/exacity/deeplearningbook-chinesegithub.com
实体书略贵,不建议买:
机器学习代码
机器学习模型一般会使用sklearn库。当然,Python很多di三方库都大有用处,但是都没有sklearn这么被广泛地应用。
利用sklearn库,使用Python编写机器学习代码,这本书最为合适:
不是O'Reilly的动物书,就是这一本。
而深度学习代码,目前学术界更多地是在用PyTorch。不建议使用keras和TensorFlow,主要原因是API混乱。PyTorch作为主流深度学习框架,功能强大,API统一,代码风格简明。不建议使用任何实体书进行学习,请直接阅读PyTorch提供的tutorial。
当然,你可以参考GitHub上大神提供的示例项目。https://pytorch.org/tutorials/pytorch.org
……然后就足够了。
用PyTorch搭模型实际上有一套通用的范式,大同小异,并不需要很多笔墨。
更进一步的学习
如果你的目标是奋战在一线,那么书籍是没有办法满足你的。你需要和学术界的各个有趣的思想发生碰撞,这样才能诞生出真正有趣的idea。
从科研的角度来说,要注意三点:看文献的顺序最好是,从综述和tutorial看起,自顶向下地看各个领域,最后细分到子领域,阅读领域的顶会论文。直接一上来读论文会使得你的知识缺少体系概念。
各个领域有自己的Python库,如NLP的nltk库,计算机音乐的librosa,pretty-midi库,都有对应的document去阅读。
如果不知道代码如何开始,不如去阅读顶会论文提供的开源代码吧。