有幸在去年4月份,被分配到鹅厂推荐组,接触了国内顶尖的算法团队,截止现在自己做推荐也有半年时间了,如果说以前自己的成长速度是线性成长,那么在这半年时间,自己的成长可以说是指数级成长。
鉴于目前工作上越来越驾轻就熟,逐渐从小白状态脱离出来,回答一下这个问题,算是给自己这半年算法工作的一个记录。
先给大家奉上,一名合格的推荐算法工程师所需要掌握的各项知识点和技能图:
如题主所说,推荐系统涉及到的知识点“大而杂”,是一项复杂的工程,那么一条完整的推荐系统学习进阶路径,需要包含哪些方面呢,我认为至少需要包含以下6大方面:
**1、数学基础:**微积分、线性代数和概率论
**2、机器学习:**需要掌握一些基础的术语和概念,以及常见的模型。
**3、深度学习:**TensorFlow和PyTorch这两大框架至少掌握一个,然后深度学习基础知识,比如训练算法、激活函数、正则化等内容也是必须掌握的。
**4、数据挖掘与分析:**熟练掌握相关工具包,包括numpy、pandas、matplotlib、Scikit-Learn等等。
**5、大数据:**掌握Hadoop、Spark两大生态,不过这部分不用学的太深,建议大数据这块可以先掌握到会用的层次,当做工具即可。
**6、推荐系统理论和实战:**主要包括推荐系统五大环节——召回、粗排、精排、重排和冷启动,其中每一个环节都涉及大量的知识点,此外除了掌握理论外,还需要进行必要的项目实战。
**其中,机器学习、深度学习、推荐算法理论和实战这三块是核心知识,也是面试中的重中之重。**而像数学、数据挖掘和分析、大数据这些算是基础知识,面试中考察相对比较少,后续等你参加工作后,再反过头来学习也是完全可以的。
以上6大模块,每一个模块都涉及大量的知识点需要学习,我本人推荐大家通过看一些经典的书籍来啃透推荐系统,因为,看书是效率最高的学习方式。
至于每个模块所涉及到的一些经典必读书籍,我已经帮大家总结好了,点击下方链接,就能领取。
我这里分享的书单,包含数学、机器学习,深度学习、数据分析、大数据和推荐算法等硬核内容,对我当年自学推荐系统有很大帮助,这些资料都是经过我本人验证过的,个人认为非常适合新手学习的学习资料,在这里免费分享给大家。
(后续我还会持续不断更新推荐系统的优质干货资料,大家方便的话可以点个赞鼓励下~
**PS:**网上关于推荐系统的资料特别多,包括很多已经出版的书籍,质量也参差不齐,大家学习时候一定要注意辨别,以免浪费宝贵学习时间和精力投入。
接下来详细讲一下每个模块所涉及到的内容。
一、数学
主要是微积分、线性代数、概率论这三门课。
1、微积分
通常情况下,机器学习需要得到一个函数(模型,或者说假设)来预测未来的数据。既然是函数,那自然就离不开微积分了。微积分为我们研究函数的性质提供了理论依据,同时它也是学习概率论、最优化方法等后续课程的基础,是整个高等数学的基石。
重点掌握函数的求导法则(特别是链式法则),以及泰勒公式。这对后续的梯度下降法,牛顿法,拟牛顿法等优化算法的推导至关重要!
2、线性代数
机器学习算法的输入、输出、中间结果通常为向量、矩阵、张量。这些都属于线性代数里的知识。
重点掌握向量、矩阵含义及其数学运算公式。
3、概率论
对于机器学习来说,概率论是一种重要的工具。如果将机器学习算法的输入、输出看作随机变量/向量,则可以用概率论的观点对问题进行建模。使用概率论的一个好处是可以对不确定性进行建模,这对于某些问题是非常有必要的。另外,它还可以挖掘变量之间的概率依赖关系,实现因果推理。
重点掌握常见概率分布、概率公式。
总结
数学好是入门机器学习的优势,但并非关键。因为数学知识量太庞大了,花太多时间在其上,容易打击学习积极性。另外做算法一般分两种:理论模型和实际应用,前者的行业title是算法研究员,主要发paper、提出新的模型或者优化方法,所以对于数学能力要求很高。后者的行业title是算法工程师,致力于把模型应用于数据上,攫取商业价值,对于数学能力要求并不高。往往大部分人都属于后者,我个人也是后者。熟悉不同算法的应用场景、掌握模型落地工程技术,才是我们更应该投入精力的地方。
推荐资料:
- 《DeepLearning》,又名「花书」,被誉为深度学习领域圣经。它前面有必备数学知识的介绍,讲得挺不错的。
- B站搜索微积分、线性代数、概率论关键词,会有很多教学视频,随便选取时长较短的看看即可。
二、机器学习
人工智能、机器学习、深度学习关系如下:
我们一般说机器学习都是指除了深度学习以外的机器学习,也称为传统机器学习。虽然近几年深度学习越来越火,但是很多领域还是在使用机器学习,并且学好机器学习,对于AI算法基础和知识广度都有很大提高。这里可以先给大家罗列一些必备的基础知识:
首先要知道一些基础的术语和概念,比如有监督与无监督,训练集,验证集与测试集,经验误差与泛化误差,方差与偏差,过拟合与欠拟合等,再比如比较重要的一些模型性能度量方法(混淆矩阵,精确率,召回率,auc,roc等), 再比如经典的评估方法(留出,交叉验证,自助等)
其次是经典的模型。机器学习模型非常多,全部掌握不现实,我给大家罗列几个经典,也是面试中常考的模型:逻辑回归、SVM、树模型、集成学习、朴素贝叶斯、K-Means聚类、PCA。(EM、最大熵、概率图这些考的少,能了解是加分项)。
在学习过程中,各个模型是相互联系的,不要孤立去分析单个模型。比如:逻辑回归,我认为是最基础、也最重要的模型:
- 逻辑回归=线性回归+sigmoid激活函数,从而将回归问题转换为分类问题
- 逻辑回归+矩阵分解,构成了推荐算法中常用的FM模型
- 逻辑回归+softmax,从而将二分类问题转化为多分类问题
- 逻辑回归还可以看做单层神经网络,相当于最简单的深度学习模型
通过逻辑回归由点及面,就能演化出如此多模型。
再比如树模型。我们把以决策树为基础的一系列模型统称为树模型,也是AI比赛中最常用的模型。
- 决策树经历了三次改进,ID3、C4.5、CART,主要区别在于一个根据信息增益划分特征、一个根据信息增益率、一个根据基尼指数。
- 随机森林=决策树+Bagging集成学习
- GBDT=决策树+AdaBoost集成学习
- XGB是陈天奇2014年提出,相当于GBDT的工程改进版,在实用性和准确度上有很大提升。比如:使用泰勒二阶展开近似损失函数,支持处理缺失值、在特性粒度上并行计算等等特性。
- LGB是微软2016年提出,对XGB进行了改进,使用单边梯度采样算法减少不必要的样本;在寻找最优分割点时采用直方图算法使计算代价更小;支持类别特征…
- CGB是Yandex2017年提出,对类别特征进行了更完美的支持。
所以学习模型,要由点及面,层层递进。这样不仅方便理解,也有利于归纳总结,同时还能锻炼搭建知识体系的能力。
推荐资料:
- 如果是一个机器学习小白,那么推荐两个入门视频, 吴恩达或者李宏毅的ML视频(B站上都有),先快速过一遍,了解机器学习是什么。
- 如果有了一定的机器学习基础,就需要去进阶。建议是看书与高质量文章。推荐两本书:周志华的《机器学习》、李航的《统计学习方法》这两本书,可以好好先研究一本,注意这里是研究,一本通了,另一本也就差不多。如果发现看一遍很难看懂,这是正常现象,随着后面实践经历慢慢变多,再看一遍,会有很多新的感悟。
注意:学习过程中一定要跟着实战,否则知识很难真正理解。
三、深度学习
前面也提到了,深度学习本属于机器学习,但是鉴于其发展迅速、应用越来越广泛,所以单独拿出来说。深度学习每年新模型、新技术层出不穷,一味追求新技术不可取,要先打好基础。比如:对于一个简单的全连接神经网络,包含训练算法(正向传播、反向传播),激活函数(sigmoid、ReLU、Maxout、softmax等),正则化(L1和L2、Dropout、提前早停等),优化算法(随机梯度下降、Momentum、Adagrad、Adam等)
掌握了基础后,再根据自身领域学习相关的模型。大部分人找工作属于这三个领域:
- 计算机视觉(CV):卷积神经网络(CNN)及其改进。
- 自然语言处理(NLP):循环神经网络(RNN)及其改进,Transformer、Bert等。
- 推荐算法:Embeding、Wide & Deep及其改进。
推荐资料:
- 李沐《动手学深度学习》https://zh-v2.d2l.ai/
- 邱锡鹏《神经网络与深度学习》https://nndl.github.io/
- 《DeepLearning》,又名「花书」,被誉为深度学习领域圣经。
- TensorFlow、pytorch官网是最好的参考资料。如果英语不好,那么可以看看下面的资料:
- 《30天吃掉那只TensorFlow2》:https://github.com/lyhue1991/eat_tensorflow2_in_30_days
- 《20天吃掉那只Pytorch》:https://github.com/lyhue1991/eat_pytorch_in_20_days
- PyTorch深度学习快速入门教程:https://www.bilibili.com/video/BV1hE411t7RN
四、数据挖掘与分析
熟练使用相关工具包:numpy、pandas、matplotlib(seabron是matplotlib的简化版)、Scikit-Learn。完成数据的可视化、分析以及特征工程。工具包的学习建议边用边学,可以先看一些中文教程整体了解一下工具包的使用。在具体使用的时候,如果忘记了可以去对应工具包的官网查看详细的文档。
除了熟悉数据分析工具以外,其实更需要的是数据分析的方法,我觉得最好的学习方式就是看开源竞赛的方案,因为在开源方案中,作者会写很多他们分析问题的思路,以及对可视化结果给出的他们认为的正确观点。
推荐资料:(加我:xtyifan1019,领取以下参考资料)
英文教程首推官网,中文教程推荐Datawhale的开源项目
- pandas中文教程(这份文档可能比官方文档还适合学习):https://github.com/datawhalechina/joyful-pandas
- matplotlib中文教程:https://github.com/datawhalechina/fantastic-matplotlib
- 《Hands-on-Machine-Learning-with-Scikit-Learn》用sklearn工具实现各种机器学习模型