这个博客主要用来记录自己毕业后入职的第一份工作的填坑经历,也想因此设立一个专栏记录未来自己的发展历程。希望能与和自己一样奋斗在算法一线的研发猿们或者努力进坑的童鞋们一起分享自己的成长经历。
- 以后这篇博客主要和大家分享自己的学习过程和踩过的各种坑。
最近感受
入职已经将近20天,大概了解了自己的部门职责,以及未来的一个工作方向。也有了很多体会:
- 学校是交学费去学习的,可以随便支配自己的学习时间,很多知识都可以自己系统的学习。企业是花钱请你来创造价值,所以没有让你系统的学习知识的时间,而且要学的东西太多了,所以要用到什么学什么。这是学生到职员转变的第一个槛,东西太多要针对性的学。当你认为有必要系统学,只能靠业余时间了。
- 项目拿过来,不要着急看,要找熟悉的人或者自己将整个项目的目的、流程、大概背景先了解清楚,这无论对工作还是学习都是适用的,这里作者比较爱使用MindNode来制作思维流程图,特别方便整理思路和以后复习。
- 学会利用一些记笔记软件(e.g. 印象笔记、oneNote、有道云笔记),公司中学习的事情太多了,有时候还会很杂,所以一定要做好整理,做好笔记,特别是整理时多级目录的问题,一定要细分,到时候也方便查找(作者以前用的时候,就有点乱,就不好找以前的文件,所以特意花了个周末去整理,舒服多了)。效率提高必备
学习内容
不得不说,每天学习的东西真的很多,很多都是学校中没有接触过的,零零散散的也很难做一个系统的总结,不过还是准备将一些小知识,做些个总结,方便其他和我一样的入门菜鸟,也可以加快入坑的时间。
- Scala语言学习教程,比较类似于java语言。教程链接
- Spark-SQL之DataFrame;DataFrame类似于一张关系行数据表,我们会常用Spark-SQL来操作DataFrame,同时也可以以其他RDD对象、parquet文件、json文件、hive表等通过JBDC连接到其他关系型数据库作为数据源来生成DataFrame。Spark-SQL之DataFrame操作
- Spark RDD操作小结
- 利用服务器跑scala相关脚本代码,难免会jar包,有时候用原生的jar命令生成,总是会有些莫名的小错误,可以利用IDEA的sbt项目,来生成jar包。
- Hadoop fs 常用命令 and 详细
- Spark-submit 相关参数和介绍
- Git命令的相关学习
- mac 用户必备:mentor作为资深程序员的良心推荐 TMUX和Vimplus以及iTerm2+schemes主题包,可以瞬间让你的shell看起来特别舒服。
-> iTerm2 打造舒适的终端体验
-> Mac下iterm2配色方案(高亮)及显示分支,让你的终端与众不同
-> 进阶vim,你的vimplus 必不可少
-> TMUX:它最直观的好处就是, 通过一个终端登录远程主机并运行tmux后,在其中可以开启多个控制台而无需再“浪费”多余的终端来连接这台远程主机, 还有一个好处就是当终端关闭后该shell里面运行的任务进程也会随之中断,通过使用tmux就能很容易的解决这个问题。TMUX命令介绍
-> grep 命令:在task中常常会查看log日志中的某些特定的内容,而grep的作用就是匹配文件中的指定内容,并打印出来。相关命令
-> yarn为一种hadoop的资源管理器,可以用来查看现有应用的使用情况,例如yarn application -list来查看当前的应用列表,yarn application相关命令
相关算法模型
相关背景:CTR预估
模型学习:FM模型 (因式分解机)
推荐系统框架:请求->召回->海选->粗排->精排->重排->策略机制 【召回+排序】
- CTR(click-through rate)点击率:既然要讲的CTR预估模型,点击率就是最关键的了。而CTR预估模型就是为了预测特定场景(例如,feed流的相关短视频推荐)的点击率可能性。CTR的计算公式为:点击数目/展示数目。
- CVR(conversion rate)转化率:发生消费行为的数目/展示的数目
- 人工特征 + LR
- GBDT + LR
- FM模型
- FM + 深度学习(e.g DeepFM、Wide & Deep )
FM最早由 Steffen Rendle 在2010年提出。该模型主要通过特征组合来解决大规模稀疏数据的分类问题,属于传统方法中的feature-based方法。在实际的CTR任务中,大量的特征都是categorical类型的。我们通常要对特征进行One-Hot Encoding处理。转换之后维度变得超大,特征矩阵也变得极其地稀疏。
之前线性模型的缺点:
- 一般来说一个特征可能有很多类别,而利用one-hot编码时,很多值可能都为0值,导致特征非常稀疏。而这种特征对于传统的线性模型的预测或产生负面效果,导致预测结果较差。
- 由于特征维度的加大,使得模型的训练量加大,训练变得困难
- 此外,传统模型也没有考虑特征之间的相互关联
FM很像在学习每一个经过one-hot encoding转化的特征的embedding,然后学习不同特征之间的embedding相似度对于最后预测结果的影响。由于可以将很大量的稀疏特征压缩到几百维的embedding向量,极大地减少了模型的参数量级,从而能获取较强的模型泛化能力,取得较好的预测效果。
- LR -> SVM -> FM
早期推荐系统或计算广告CTR中,工业界都采用LR+人工特征工程的方式进行预测。LR模型简单,解释性强且易于扩展。但使用LR就需要大量的人工特征工程,非常耗时且人工密集。因此就产生了模型自身进行特征组合的需求。
多项式模型是包含特征组合最直观的模型。这个二阶特征组合相当于SVM的多项式核。在多项式模型中,特征
x
i
x_i
xi和
x
j
x_j
xj的组合采用
x
i
x
j
x_ix_j
xixj表示,即
x
i
x_i
xi和
x
j
x_j
xj都非零时,组合特征
x
i
x
j
x_ix_j
xixj才有意义。
n
n
n代表样本的特征数量,
x
i
x_i
xi 是第
i
i
i 个特征的值,
w
0
w_0
w0,
w
i
w_i
wi ,
w
i
j
w_ij
wij是模型的参数。从上式可以看出,组合特征的参数共有
n
(
n
−
1
)
/
2
n(n-1)/2
n(n−1)/2个,任意两个参数都是独立的。然而,在数据稀疏性普遍存在的实际应用场景中,二次项参数的训练是很困难的。其原因是,每个参数
w
i
j
w_ij
wij的训练需要大量
x
i
x_i
xi和
x
j
x_j
xj 都非零的样本;由于样本数据本来就比较稀疏,满足“
x
i
x_i
xi和
x
j
x_j
xj 都非零”的样本将会非常少。训练样本的不足,很容易导致参数
w
i
j
w_ij
wij不准确,泛化能力很差,最终将严重影响模型的性能。
FM模型此刻亮相。FM也引入了任意两个特征的二阶特征组合。但与SVM模型最显著的差异在于特征组合权重的计算方法上。对于每一个特征,FM学习了一个大小为k的一维向量,使得两两特征 x i x_i xi和 x j x_j xj 的特征组合的权重由对应特征的内积表示。这与embedding的思路就非常相似了。因此FM可以看做一种embedding方法,实际上它只是缺少几层MLP的加持。
那为什么FM能很好地处理稀疏数据,泛化能力强呢?举个例子,比如在SVM中,假如 x i x_i xi和 x j x_j xj从来没有一起出现过, w i j w_ij wij就不能被学习出来,就一直是0。但是在FM中,要学习的是单个特征的embedding,并不依赖与谁是否同时出现过,可以自己学习对应的embedding值。这样,即使在train set里 x i x_i xi和 x j x_j xj 没同时出现过,在预测时你依然可以对 x i x_i xi和 x j x_j xj 这个特征组合进行预测,因为他们都各自有各自的embedding值。这就是FM泛化能力的来源。
相关参考
- 相关的所有参考已经在文中的超链接中,大家可以点击进行详细了解