l1正则和l2正则的区别为什么可以把系数压缩成0,坐标下降法的具体实现细节

机器学习(别人整理的)
我的图书馆
机器学习(别人整理的)
机器学习Boost算法CART(回归树用平方误差最小化准则,分类树用基尼指数最小化准则)GBDT与随机森林比较。GBDT(利用损失函数的负梯度在当前模型的值作为回归问题提升树算法中的残差的近似值,拟合一个回归树)KKT条件用哪些,完整描述KNN(分类与回归)L1 与 L2 的区别以及如何解决 L1 求导困难。L1和L2函数。L1和L2正则相关问题。L1和L2正则项,它们间的比较L1正则为什么可以把系数压缩成0,坐标下降法的具体实现细节LR为什么用sigmoid函数。这个函数有什么优点和缺点?为什么不用其他函数?LR和SVM有什么区别,libsvm和liblinear有什么区别。Logistics与随机森林比较Logistics(推导)Logistic回归的推导,怎么得到objective function。SVM与随机森林比较SVM为什么要引入拉格朗日的优化方法。SVM原问题和对偶问题关系?SVM在哪个地方引入的核函数, 如果用高斯核可以升到多少维。SVM怎么防止过拟合SVM的目标函数。常用的核函数。SVM的过程,讲了推导过程,可能表达不清晰,都是泪bagging、adaboost、boostingem 与 kmeans 的关系;k-means的k怎么取等等k-means算法初始点怎么选择?你的项目里面推荐算法是怎么实现的?kmeans的原理,优缺点以及改进。k折交叉验证中k取值多少有什么关系l2惩罚项是怎么减小Overfitting的?l1,l2等范数的通式是什么?他们之间的区别是什么?在什么场景下用什么范数?l1在0处不可导,怎么处理?randomforest,GBDTrf, gbdt, xgboost的区别。softmax公式为什么要做数据归一化?主要问最优化方面的知识,梯度下降法的原理以及各个变种(批量梯度下降,随机梯度下降法,mini 梯度下降法),以及这几个方法会不会有局部最优问题,牛顿法原理和适用场景,有什么缺点,如何改进(拟牛顿法)什么情况下一定会发生过拟合?什么是贝叶斯估计介绍LR、RF、GBDT ,分析它们的优缺点,是否写过它们的分布式代码介绍SVD、SVD++会哪些机器学习算法信息熵公式假设面试官什么都不懂,详细解释 CNN 的原理;决策树原理决策树处理连续值的方法。决策树如何防止过拟合决策树过拟合哪些方法,前后剪枝分类模型可以做回归分析吗?反过来可以吗?分类模型和回归模型的区别判别模型,生成模型各个模型的Loss function,牛顿学习法、SGD如何训练。因为面我的总监是做nlp的,所以讲了很多rnn、lstm、还有HMM的东西。不算很熟,但是接触过,以前稍微看过一些相关论文,所以还是勉强能聊的。在平面内有坐标已知的若干个点P0...Pn,再给出一个点P,找到离P点最近的点。在模型的训练迭代中,怎么评估效果。如何减少参数(权值共享、VGG的感受野、GoogLeNet的inception)如何防止过拟合(增加数据,减少模型复杂度-&正则化)对于同分布的弱分类器,求分类器均值化之后的分布的均值跟方差。对于机器学习你都学了哪些?讲一个印象深的。常见分类模型( svm,决策树,贝叶斯等)的优缺点,适用场景以及如何选型归一化方式手写k-means的伪代码。手写k-means的伪代码和代码。(Code)手撕svm硬软间隔对偶的推导手撕逻辑回归(损失函数及更新方式推导)接着写一下信息增益的公式。推一下bp算法等等改变随机森林的训练样本数据量,是否会影响到随机森林学习到的模型的复杂度。数据挖掘各种算法,以及各种场景下的解决方案是否了解mutual infomation、chi-square、LR前后向、树模型等特征选择方式。是否了解线性加权、bagging、boosting、cascade等模型融合方式有哪些常见的分类器,简单介绍下原理机器学习与深度学习的区别机器学习基础(线性回归与逻辑回归区别等)机器学习:几种树模型的原理和对比,朴素贝叶斯分类器原理以及公式,出现估计概率值为 0 怎么处理(拉普拉斯平滑),缺点; k-means 聚类的原理以及缺点及对应的改进;梯度下降牛顿拟牛顿原理梯度下降的优缺点。深度学习和普通机器学习有什么不同?深度学习有很大部分是CNN,给他用通俗的语言解释下卷积的概念,解释下CNN中的优势及原因激活函数的选择(sigmoid-&ReLu-&LReLU-&PReLU)然后20分钟内手写k-means牛顿法、随机梯度下降算法和直接梯度下降算法的区别?牛顿法推导特征选择的方法由数据引申到数据不平衡怎么处理(10W正例,1W负例,牛客上有原题)聊聊SVM,这段说了好久,从基本的线性可分到不可分,相关升维,各种核函数,每个是如何实现升。以及出现了XX问题,分析是样本的原因还是其他原因。针对不同情况,采取什么解决方案较好。自己实现过什么机器学习算法解决过拟合的方法有哪些?解释 word2vec 的原理以及哈夫曼树的改进。解释一下过拟合和欠拟合,有哪些方法防止过拟合。让我一步一步地构造决策树,怎么计算信息熵、信息增益、然后C4.5 ID3 CART的区别,还说了一下优缺点详细讨论了样本采样和bagging的问题说一下Adaboost,权值更新公式。当弱分类器是LR时,每个样本的的权重是w1,w2...,写出最终的决策公式。说了一下bagging跟boosting。说明L1L2正则的效果与为什么形成这种情况(L1正则稀疏,L2正则平滑,之后说明就是画图说明正则化)过拟合的解决方法;选个你熟悉的机器学习方法 ,着重介绍一下产生原因,推导公式,背后统计意义什么等等逻辑回归估计参数时的目标函数,如果加上一个先验的服从高斯分布的假设,会是什么样。逻辑回归估计参数时的目标函数逻辑回归的值表示概率吗?问了会不会RNN,LSTM。问了很多数据挖掘的基础知识,包括SVM,逻辑回归、EM、K-means等,然后给我很多场景问我遇到这些情况我要怎么来处理数据,怎么进行建模等等,问得很细随机梯度下降,标准梯度随机森林和GBDT的区别?LR的参数怎么求解?有没有最优解?随机森林(Bagging+CART)
TA的最新馆藏
喜欢该文的人也喜欢&a href=&//link.zhihu.com/?target=http%3A//www.jianshu.com/p/3b2a1895a12d& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&知乎社交网络分析(下):关注网络&/a&
&p&&b&摘要:&/b&本文主要介绍了广告CTR预估算法在引入深度学习之后的基本演化过程及一些最新的进展,重点是从工业实现和应用的视角对Deep CTR模型进行剖析,探讨为什么这样设计模型、模型的关键要点是什么。主要内容按照“内”、“外”两个不同的角度进行介绍:内部集中介绍了典型模型的网络结构演化过程,外部则关注于不同数据、场景和功能模块下模型的设计思路。&/p&&p&&b&演讲嘉宾简介:&/b&&/p&&p&朱小强,花名怀人,阿里妈妈高级算法专家,领导了核心的排序算法与机器学习平台团队,负责阿里精准展示广告的CTR/CVR预估系统/算法和架构的设计优化、大规模分布式机器学习/深度学习平台建设等工作。&/p&&p&&b&&a href=&https://link.zhihu.com/?target=https%3A//yq.aliyun.com/video/play/1376& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&本次直播视频精彩回顾,戳这里!&/a&&/b& &/p&&p&以下内容根据演讲嘉宾视频分享以及PPT整理而成。&/p&&p&本次的分享主要围绕以下三个方面:&/p&&p&一、CTR预估问题的特点与挑战——以阿里定向广告为例 网络爬虫技术入门&/p&&p&二、基于深度学习的CTR预估算法演化——内外兼修之道&/p&&p&三、总结与展望——新的起点 &/p&&h2&&b&一、CTR预估问题的特点与挑战——以阿里定向广告为例&/b&&/h2&&p&下图中可以看到手机淘宝端的定向广告形态。左边是首焦场景,在淘宝顶端的位置会有浮动的Banner广告。右边是往下滑动时候的导购场景(猜你喜欢区块),投放的是Item广告。这些不同形态的定向广告背后其实有一些内在的、从machine learning视角来看相似的特征。简单来说,可以归纳为几个方面,一个方面是广告中展现的创意图片,第二个是图片的文字信息,还有一些在背后看不到摸不到的统一的ID体系,比如某件商品是什么商品,属于哪个品牌等等信息。定向广告复杂多样的富媒介形态以及高维海量数据空间,给广告点击率预估问题带来了不小的挑战。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-e9d9ff15b8a0_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1216& data-rawheight=&683& class=&origin_image zh-lightbox-thumb& width=&1216& data-original=&https://pic1.zhimg.com/v2-e9d9ff15b8a0_r.jpg&&&/figure&&p&下图是电商环境下CTR预估问题的数学化模拟。假设一位用户登录手机淘宝,我们首先可以拿到用户的一些历史行为数据,这些行为数据构成了我们对用户兴趣的表达刻画。那么下一步需要预估给用户展现某个候选商品candidate,用户发生点击/购买的概率是多少。那么如何实现预估?我们需要利用历史行为数据建模出用户的兴趣偏好。&/p&&p&将用户的行为按照时间排列,可以构成一个行为时间轴。每个时刻点可以称为行为结构体,它包含了一系列表征行为的关键信息:比如此刻的行为类型,点击or购买某个商品;某个商品的文本描述信息;对应的创意图片;行为发生的时间,行为发生的频次;或者行为背后的粒度体系是什么,对应的是什么商品、什么店铺以及什么品牌等等。&/p&&p&这些大量的行为信息可以足够表达用户的兴趣偏好。时间轴左边是历史的静态信息,称为feature;右边就是待预测的用户的未来行为,如点击行为(点击概率)、购买行为(购买概率)等等。电商场景下的广告预估问题相比于大家熟知的静态预估模型有更大的挑战。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-7b22ad65f42ac479be3b388fba2dc934_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1217& data-rawheight=&688& class=&origin_image zh-lightbox-thumb& width=&1217& data-original=&https://pic3.zhimg.com/v2-7b22ad65f42ac479be3b388fba2dc934_r.jpg&&&/figure&&p&第一个挑战,在淘宝端每天有数亿的用户会登陆,并产生大量的行为。同时我们有海量的商品候选集,在淘宝中有大概10亿到20亿的商品,当然聚焦到广告商品,可能会有所减少,但依然达到了千万的数量级。如此,广告预估问题就变成了数亿用户与千万商品配对的点击概率预估问题,规模极其庞大。第二个挑战,每个用户行为特征背后,有大量的信号源,比如图像信号、文字信号、品牌偏好信号等等,这些信号如何去捕捉,如何进行统一建模?第三个挑战,在电商场景下用户的行为非常丰富,反映出用户的兴趣多样多变,寻找与建模用户点击某个广告商品背后的规律是高度非线性的问题。&/p&&p&在点击率预估问题上,传统的解法一般采用逻辑回归模型(Logistic Regression,LR)。但可惜的是,当数据本身有非常强的非线性pattern时,传统的线性LR模型受到了很大的挑战。在阿里广告定向发展初期,也尝试探索过线性模型的可能性,但由于线性模型本身过于简化,算法的发挥空间上受到了极大的压制。&/p&&h2&&b&二、基于深度学习的CTR预估算法演化——内外兼修之道&/b&&/h2&&p&2012年左右,当深度学习逐渐从学术界迁移到工业界时,阿里发现深度学习成为了一个有力的武器,可以更好地帮助广告CTR预估问题的求解。尤其是近几年里,基于Deep Learning的CTR预估算法正在经历快速的演变。下面主要介绍其演变背后的思路、核心关键以及具体可借鉴的要点。&/p&&p&&b&1.深度学习在广告领域遭遇的挑战&/b& &/p&&p&传统的图像领域或NLP领域内,深度学习已经取得非常多的成果,在大多的问题上成为了state-of-the-art的方法。如图中显示,不同的领域有不同的适用结构。如图像领域内的CNN结构、语音的RNN结构。那么回到广告领域内,究竟什么结构是合适的?广告预估问题有很强的特点,它的特征极其的大规模和稀疏。典型的数量级从百万级,千万级到数亿级都有,而且大都是0或1这类没有直接意义的数据。这个问题一度成为广告预估问题引入深入学习的关键点。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-3da9adf6ccd797e9372d_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1215& data-rawheight=&681& class=&origin_image zh-lightbox-thumb& width=&1215& data-original=&https://pic3.zhimg.com/v2-3da9adf6ccd797e9372d_r.jpg&&&/figure&&p&&b&2.深度学习引入广告预估问题后的演化&/b&&/p&&p&下面从两个视角来介绍最近几年学术界和工业界对于上面问题的探讨,也叫做内外兼修。内部是指深度网络的核心结构如何演化,外部是指如何引入多模态的信号输入,多场景的样本迁移及多个模块的功能联动等等。&/p&&p&&b&1)内部演化&/b&&/p&&p&下面主要介绍最近几年Deep CTR Model的内部结构上的演化,并进行简单梳理。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-47f09c30b7bacedcdbbd_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1216& data-rawheight=&686& class=&origin_image zh-lightbox-thumb& width=&1216& data-original=&https://pic2.zhimg.com/v2-47f09c30b7bacedcdbbd_r.jpg&&&/figure&&p&&b&a. 混合Logistic Regression(MLR)模型&/b&&/p&&p&阿里自主研发的MLR模型是对线性LR模型的推广,它利用分片线性方式对数据进行拟合。基本思路是采用分而治之的策略:如果分类空间本身是非线性的,则按照合适的方式把空间分为多个区域,每个区域里面可以用线性的方式进行拟合,最后MLR的输出就变为了多个子区域预测值的加权平均。在今天看来,MLR模型是带有一个隐层的神经网络。&/p&&p&如下图,X是大规模的稀疏输入数据,MLR模型第一步是做了一个Embedding操作,分为两个部分,一种叫聚类Embedding(绿色),另一种是分类Embedding(红色)。两个投影都投到低维的空间,纬度为M,对应的是MLR模型中的分片数。完成投影之后,通过很简单的内积(Inner Product)操作便可以进行预测,得到输出Y。右边是不同节点上的激活函数Activation Function,已按不同颜色区分。&/p&&p&在2012年左右,MLR模型便在阿里的主流业务中进行服务,证明了其巨大的优越性。MLR模型最大的意义在于,它是首个在大规模稀疏数据上探索和实现了非线性拟合能力的模型,相关的细节内容可从论文中查询:Gai et al, “Learning Piece-wise Linear Models from Large Scale Data for Ad Click Prediction” &/p&&figure&&img src=&https://pic4.zhimg.com/v2-47bfb5ae24b1a191ba8ef57fab621dd9_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1217& data-rawheight=&684& class=&origin_image zh-lightbox-thumb& width=&1217& data-original=&https://pic4.zhimg.com/v2-47bfb5ae24b1a191ba8ef57fab621dd9_r.jpg&&&/figure&&p&&b&b.DSSM模型 &/b&&/p&&p&如果说MLR模型是阿里巴巴初次对于深度学习方面的探索,在深度学习真正引入到广告预估问题中之后,出现了更多演变的模型。Deep Structured Semantic Model(DSSM)模型是微软2013年提出的。虽然在最初DSSM模型不是用于广告预估,但是现在看来,它为广告预估提供了一个很好的思路。这里主要关注下图中红色框内的部分,原理是把query/doc中的关键信息(Term Vector)提取出来进行简单的Word Hashing之后,把query/doc域分别投影到300维的子空间去。query里的每个word都对应一个300维的向量,一个query里会有多个向量,后面用sum求和操作得到一个汇总的300维向量,这是一个典型的Embedding操作。从图中可以看到,30k是指word字典的长度,300是embedding维数,30k*300≈千万量级的参数。DSSM模型第一次探索了如何把大量稀疏的ID进行稠密表达的路径。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-6687dc81bcc84a91afe3c47defb82514_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1213& data-rawheight=&684& class=&origin_image zh-lightbox-thumb& width=&1213& data-original=&https://pic2.zhimg.com/v2-6687dc81bcc84a91afe3c47defb82514_r.jpg&&&/figure&&p&当然,DSSM模型本意不是用于广告预估问题。在深度学习最初引入CTR预估问题时,当时业界的一些公司如Google、百度等已经在探索如何把大量的稀疏数据进行降维的方法。一个典型的做法是用辅助的方式分两阶段进行:第一阶段,用FM模型把大量的稀疏ID学习到对应的embedding表达,跟DSSM模型类似,能够得到几百维的稠密向量。第二阶段是基于稠密的输入用多层全连接网络预测最后的目标。从今天的视角来看,这种两阶段的方式是不如整体的端到端模型的。这个思考点在2013年-2014年左右一直有人进行尝试,但当时一是因为深入学习框架的没能普及,二是对整个计算力的估计不足,因此没有达到比较好的进展,直到2016年左右,才有所突破,当然这里面很重要的一点是得益于优秀的深度学习框架如TensorFlow、MXNet等的开源和普及,进一步促进了整个工业界的思考和前进。&/p&&p&&b&c.稀疏分组嵌入网络结构(GwEN)&/b&&/p&&p&下面以阿里2016年的网格框架为例进行介绍。整个稀疏分组嵌入网络结构(GwEN)分为两部分,如下图左边所示。第一部分,把大规模的稀疏特征ID用Embedding操作映射为低维稠密的Embedding向量,然后把每个特征组的 Embedding进行简单的sum或average的pooling操作,得到Group-wise的Embedding向量。第二部分,多个特征组的向量通过Concatenate操作连接在一起,构成原始样本的完整稠密表达,喂给后续的全连接层。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-d1cb2a797ec1_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1215& data-rawheight=&683& class=&origin_image zh-lightbox-thumb& width=&1215& data-original=&https://pic3.zhimg.com/v2-d1cb2a797ec1_r.jpg&&&/figure&&p&GwEN网络结构是比较基础的,但同样也非常重要。因为在最初大家普遍的直观思考是,假设有个高维的稀疏输入,典型的数量级是,然后将每个ID学习到一个表达,如果表达太小,便不足以客刻画信息本身,那么设想投影维度控制在数百上千()估计是合适的。早期百度或Google的探索中,大概是一样的量级。这样算来,全空间便达到万亿()的量级,极其恐怖,一方面对于训练样本的要求,另一方面对于背后的计算能力的要求都非常高。Group-wise Embedding的核心想法是借鉴CNN网络的局部感知野(Local Receptive Field)的思想。以整体输出表达向量为例,其实不需要每个ID达到千维()的表达,因为在分组表示学习中每个特征组可以分别得到一个低维的表达,一共个分组,组里面的每个ID只需要学习的表达即可。这样,整个参数规模可以直接压缩到百亿的量级,这是工业界比较舒服的量级。尽管GwEN这种网络结构非常简单,但提出了非常重要的Group-wise Embedding 的概念,现在也称为求解大规模稀疏数据问题的通用网络单元。GwEN网格结构在2016年左右在阿里内部已经上线。
&/p&&p&&b&d.Wide & Deep Learning模型&/b&&/p&&p&与阿里同时期,Google推出了Wide & Deep Learning(WDL)模型,一个非常出名的模型。详细内容可以从论文中查询Cheng et al, “Wide & deep learning for recommender systems” 。WDL模型也非常简单,但巧妙的将传统的特征工程与深度模型进行了强强联合。Wide部分是指人工先验的交叉特征,通过LR模型的形式做了直接的预测。右边是Deep部分,与GwEN网络结构一样,属于分组的学习方式。WDL相当于LR模型与GwEN结合训练的网络结构。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-02a9c0a23c4c84fe2d5d_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1215& data-rawheight=&682& class=&origin_image zh-lightbox-thumb& width=&1215& data-original=&https://pic3.zhimg.com/v2-02a9c0a23c4c84fe2d5d_r.jpg&&&/figure&&p&&b&e.FNN/PNN/DeepFM模型&/b&&/p&&p&GwEN和WDL是目前比较常用的模型,非常简单,所有后续人们继续做了很多改进,例如FNN,PNN以及DeepFM等。这些模型基础的部分与上面的GwEN和WDL模型类似,即Group-wise Embedding。改进的地方主要在后面的部分,引入了代数式的先验pattern,如FM模式,比较简单直接,可以给MLP 提供先验的结构范式。虽然理论上说,MLP可以表达任意复杂的分类函数,但越泛化的表达,拟合到具体数据的特定模式越不容易,也就是著名的“No Free Lunch”定理。因此代数式的先验结构引入确实有助于帮助MLP更好的学习。当然从另外的视角看,这种设定的结构范式比较简单,过于底层,也使得学习本身比较低效。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-38c479b4abe66_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1216& data-rawheight=&685& class=&origin_image zh-lightbox-thumb& width=&1216& data-original=&https://pic1.zhimg.com/v2-38c479b4abe66_r.jpg&&&/figure&&p&&b&f.DIN模型&/b&&/p&&p&另外一个工作是阿里在2017年发表的用户兴趣分布网络DIN模型。与上面的FNN,PNN等引入低阶代数范式不同,DIN的核心是基于数据的内在特点,引入了更高阶的学习范式。互联网上用户兴趣是多种多样的,从数学的角度来看,用户的兴趣在兴趣空间是一个多峰分布。在预测多兴趣的用户点击某个商品的概率时,其实用户的很多兴趣跟候选商品是无关的,也就是说我们只需要考虑用户跟商品相关的局部兴趣。所以DIN网络结构引入了兴趣局部激活单元,它受attention机制启发,从用户大量的行为集合中捕获到与candidate商品相关的行为子簇,对于用户行为子簇,通过Embedding操作,做weighted sum便可很好的预估出用户与candidate相关的兴趣度。传统的GwEN、WDL、FNN等模型在刻画用户兴趣分布时,会简单的将用户兴趣特征组做sum或average的pooling操作,这会把用户真正相关的兴趣淹没在pooling过程中。DIN模型的具体细节可以参考论文:Zhou et al, “Deep Interest Network for click-through rate prediction” 。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-8c386a13c37af0d052ffdd_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1218& data-rawheight=&684& class=&origin_image zh-lightbox-thumb& width=&1218& data-original=&https://pic2.zhimg.com/v2-8c386a13c37af0d052ffdd_r.jpg&&&/figure&&p&&b&2)外部演化&/b&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-cec9f602a363e98ac20692e_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&2182& data-rawheight=&1166& class=&origin_image zh-lightbox-thumb& width=&2182& data-original=&https://pic3.zhimg.com/v2-cec9f602a363e98ac20692e_r.jpg&&&/figure&&p&假设固定网络结构,那么外部演化则考虑的是有没有一些更好的特征输入或样本的方式可以帮助模型学习的更好。&/p&&p&&b&a.多模态信号输入 &/b&&/p&&p&首先介绍阿里在2017年发表的用户行为ID+图像的多模态学习模型的工作。用户在看到某个商品之后,映入眼帘的除了商品是什么的信息外,还有一系列的图片创意内容。比如下图是一款儿童画板商品,画板的大小、颜色甚至小宝宝可爱的模样等信息可能激发了用户点击的欲望。这类信息是无法单纯地通过画板这个ID完全表达的。所以这里面我们主要做的事情就是对于用户行为,除了商品ID之外,把对应的图像也放进来,统一表征用户的行为。&/p&&p&下图中左边部分描述了整个结构。与上面的DIN网络结构一致的是也使用了attention机制,引入Ad与User之间的相关性,不同的是网络结构将用户行为的ID特征与图片特征两种不同模态很自然的揉合在一起,解决了预测问题。这种做法在算法中非常直观,但事实上在背后真正建立模型时工程上面有很大的挑战。假设某个业务场景中有100亿的样本,每个样本有500个对应的用户行为ID特征,每个ID背后都有对应的图片。从图片视角来看,图片训练集有5亿张,多达8T数据,如果将图片训练装配到样本中平铺开来会接近800TB的数据。就算存储在SSD(2TB)磁盘上,也需要400台机器存储,何况要考虑更复杂的网络操作、图片加载到内存进行计算的巨大开销等等。为此,阿里研发设计了一种更高阶的AMS深度学习训练架构,AMS比传统的Parameter Server(PS)架构更高阶,具体细节可参见论文Ge et al, “Image Matters: Visually modeling user behaviors using Advanced Model Server” 。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-25eb2edee1a0aaaadb4fd_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1217& data-rawheight=&684& class=&origin_image zh-lightbox-thumb& width=&1217& data-original=&https://pic1.zhimg.com/v2-25eb2edee1a0aaaadb4fd_r.jpg&&&/figure&&p&&b&b.多场景迁移学习&/b&&/p&&p&对于模型而言,如果有更多的数据进行模型训练,效果一般都能得到提高。在手机淘宝端,我们有很多不同场景的广告位,如首页焦点图,导购场景等等。每个场景蕴含了用户的不同兴趣的表达。将不同场景直接进行合并用来训练模型,结果不是很乐观。因为不同场景之间的样本分布存在diff,直接累加样本会导致效果负向。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-23a7af778696fab1dd791b05e22a70ae_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1216& data-rawheight=&683& class=&origin_image zh-lightbox-thumb& width=&1216& data-original=&https://pic2.zhimg.com/v2-23a7af778696fab1dd791b05e22a70ae_r.jpg&&&/figure&&p&随着深度学习发展,发现用Multi-task learning(MTL)的方式可以很漂亮的解决这个问题。如上图中左边的例子,分为两个task,即分为两个子网络,对于底层的难以学习的Embedding层(或称为特征稀疏表达层)做了表示学习的共享(Shared Lookup Table),这种共享有助于大样本的子任务帮助小样本的子任务,使得底层的表达学习更加充分。对于上层的子网络,不同的task是分拆为不同的子网络,这样每个子网络可以各自去拟合自己task对应的概念分布。当然,在一些更复杂的问题中,需要进一步考虑不同task之间存在的关系,这种关系也可以帮助task达到更好的预测效果,这里叫做Label Information Transfer。MTL给跨场景迁移应用打开了一扇新的大门,可以充分的挖掘不同场景之间的独立性和关联性,从而帮助每个场景达到更好的效果。&/p&&p&&b&c.深度个性化质量分网络 &/b&&/p&&p&当用户在访问手机淘宝时,一瞬间,系统会有数千万的候选广告可以展现给用户,那具体展现哪些广告?下图中有简单的筛选过程。最开始通过一层匹配算法,圈出10万量级广告。这些广告需要在几十毫秒内展现给用户,如果全部进行复杂的模型打分,计算量是无法想象的,所以一般是分阶段进行:第一步利用简单的质量分数进行海选(Qscore是对每个Ad点击率的简单度量)。第二步利用DQM模型进行初排,这是一个从1万到1千的筛选过程。最后,用最复杂精细的模型,如DIN ,从1千中获取10个非常精准的广告。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-72fe53d2e88971e60dfb302ef2b29616_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1218& data-rawheight=&686& class=&origin_image zh-lightbox-thumb& width=&1218& data-original=&https://pic2.zhimg.com/v2-72fe53d2e88971e60dfb302ef2b29616_r.jpg&&&/figure&&p&在第二步中,因为需要在几个毫秒内完成近万广告的打分过程,所以这个模型结构不能过于复杂。DQM模型类似与DSSM模型,分成不同域,如用户域,广告域以及场景域。将这些域表达成向量形式,最后的输出是通过向量间的简单操作,如内积操作,生成分数。相比传统的静态质量分Qscore模型,DQM引入了个性化,所以比Qscore好很多。&/p&&h2&&b&三、总结与展望——新的起点&/b&&/h2&&p&&b&1.怎么看深度学习技术?&/b&&/p&&p&我们认为,深度学习技术有三点优势。第一点,模型设计组件化。组件化是指在构建模型时,可以更多的关注idea和motivation本身,在真正数学化实现时可以像搭积木一样进行网络结构的设计和搭建。第二点,优化方法标准化。在2010年以前,Machine Learning还是一个要求较高的领域。它要求不仅了解问题、能定义出数学化的formulation,而且需要掌握很好的优化技巧,针对对应的问题设计具体的优化方法。但是在现在,深度学习因为模型结构上的变化,使得工业界可以用标准的SGD或SGD变种,很轻松的得到很好的优化解。第三点,深度学习可以帮助我们实现设计与优化的解耦,将设计和优化分阶段进行。对于工业界的同学来说,可以更加关注从问题本身出发,抽象和拟合领域知识。然后用一些标准的优化方法和框架来进行求解。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-4a4bca43ae5cb09a15f5f_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1215& data-rawheight=&683& class=&origin_image zh-lightbox-thumb& width=&1215& data-original=&https://pic4.zhimg.com/v2-4a4bca43ae5cb09a15f5f_r.jpg&&&/figure&&p&&b&2.变革与展望&/b&&/p&&p&正是因为上面的优势,在最近两年内,整个工业界,包括整个阿里的广告体系里面,产生了革命性的技术模式变革。作为影响到广告营收的核心技术,CTR预估一直是互联网公司研究的焦点,很多公司都投入了大量的人力和物力进行研发。以前大家更多的是从特征工程的角度,结合人的先验去挖掘比较好的交叉组合特征。现在随着深度学习的引入,模式发生了巨大的转换。我提了一个新的概念,叫模型工程,现在我们可以用模型的方式以更少的人力、更高效的方式进行模式挖掘。这种变革在2015年到2017年间,在工业界的领先公司内,都成为了比较普遍的趋势。尤其在阿里内部,几乎是用比较野蛮的方式去革新了广告系统中方方面面的算法技术,不仅仅对CTR预估算法,还有匹配召回算法,以及一些机制和决策模型。现在,阿里认为深度学习处于V2.0时代。V1.0是属于掘金时代,大家都认为深度学习非常好用,野蛮式的发展。在V2.0时代,深度学习进入了精耕细作时代,当深度学习变成基础设施之后(比如微信已经成为日常生活中的工具),大家便可以利用这个工具,结合领域知识,更好的进行打磨并创新。&/p&&p&&a href=&https://link.zhihu.com/?target=https%3A//yq.aliyun.com/articles/Fspm%3Da2c41..0& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&原文链接&/a& &/p&&p&&b&更多技术干货敬请关注云栖社区知乎机构号:&a href=&https://www.zhihu.com/org/a-li-yun-yun-qi-she-qu-48& class=&internal&&阿里云云栖社区 - 知乎&/a&&/b&&/p&
摘要:本文主要介绍了广告CTR预估算法在引入深度学习之后的基本演化过程及一些最新的进展,重点是从工业实现和应用的视角对Deep CTR模型进行剖析,探讨为什么这样设计模型、模型的关键要点是什么。主要内容按照“内”、“外”两个不同的角度进行介绍:内部…
&p&作者:crazyhoney&/p&&p&链接:&a href=&http://link.zhihu.com/?target=https%3A//www.nowcoder.com/discuss/32008%3Ftype%3D0%26order%3D4%26pos%3D14%26page%3D2& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://www.&/span&&span class=&visible&&nowcoder.com/discuss/32&/span&&span class=&invisible&&008?type=0&order=4&pos=14&page=2&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&&br&&/p&&p&&u&&b&职位:机器学习/数据挖掘算法工程师&/b&&/u& &/p&&p& 在牛客网得到很多宝贵的面试经验 &/p&&p& 现我也来开帖,分享一下到目前为止的面试经验~~~ &/p&&p&&b&本人会一直写到秋招结束,记录下参加的每场面试&/b& &/p&&p&&b&如果回答上有什么错误,请不吝赐教哈!!! 谢谢~~~~&/b& &/p&&p&&br&&/p&&p&&b&目前内推面了:阿里、京东、拼多多、美丽联合、链家&/b& &/p&&p&&b&目前校招面了:&/b& &/p&&p&&br&&/p&&p&&b&据说可以攒人品~~~~~&/b& &/p&&p&&br&&/p&&p&更新线- 14:06---------------------------------------------------------------------------
&/p&&p&&b&记录一下链家的面试,本来准备把几面都写完。但发现写完一面,有种精疲力尽的感觉。。。&/b& &/p&&p& 这是我目前为止经历过时间最长的面试。约1个小时多一点点。 &/p&&p& 后面再写二面、三面吧。一面够长的了。 &/p&&p&&br&&/p&&p& 西安南雷村职业技术学院 &/p&&p& ---一个散养的没导师的硕。。。 &/p&&p& 以前玩大数据,现在玩机器学习,刚开始玩。 &/p&&p& 开八: &/p&&p&&br&&/p&&p& ----------------------------------------------------------------------------------------------------------- &/p&&p&&b&-阿里菜鸟-机器学习-内推-1面-电话&/b& &/p&&p&没有自我介绍。。。直接略过。。。 &/p&&p&1、讲一下你觉得你突出的地方,有亮点的地方。 &/p&&p& 说了SVM和LR &/p&&p&2、LR为什么用sigmoid函数。这个函数有什么优点和缺点?为什么不用其他函数? &/p&&p&3、SVM原问题和对偶问题关系? &/p&&p&4、KKT条件用哪些,完整描述 &/p&&p&5、说项目 &/p&&p&6、有一堆已经分好的词,如何去发现新的词? &/p&&p&面试官给的提示:用这个词和左右词的关系。&b&互信息 &/b&新词的左右比较丰富,有的老词的左右也比较丰富。还要区分出新词和老词。 &/p&&p&7、L1正则为什么可以把系数压缩成0,坐标下降法的具体实现细节 &/p&&p&8、spark原理 &/p&&p&9、spark Executor memory 给16G
executor core 给2个。问每个core分配多少内存 &/p&&p&&br&&/p&&p&面试官那边全程嘈杂,不知道在干啥,讨论问题?? &/p&&p&&br&&/p&&p& ----------------------------------------------------------------------------------------------------------- &/p&&p&&b&-京东广告数据部-机器学习-内推1面-电话&/b& &/p&&p&1、自我介绍 &/p&&p&2、说一下进程和线程 &/p&&p& 说一大堆,再就说之间的区别 &/p&&p&3、线程安全的理解 &/p&&p&4、有哪些线程安全的函数 &/p&&p&5、数据库中主键、索引和外键。以及作用 &/p&&p& 一个表可以没有主键,可以有索引 &/p&&p&6、说项目 &/p&&p&7、Spark原理 &/p&&p&8、Spark是多线程模式,怎么退化为多进程模式。 &/p&&p&在每个executor core设置为1,即每个executor是单线程的。 &/p&&p&9、撸代码。实现一个java迭代器 &/p&&p& 数据: &/p&&p&
int[][] data = new int[][] {
new int[] {1,2,3,4},
new int[] {},
new int[] {5,6,7},
new int[] {8},
&/p&&p&要求:遍历是跳过NULL。依次遍历每个元素:1,2,3,4,5,6,7,8
&/p&&p&提示: &/p&&p&hasNext里面不应该改变迭代器内部状态,hashNext只判断 &/p&&p&next返回值,并且指向下一个有效元素。 &/p&&p&&br&&/p&&p&P.S. 面试官很忙,在我写代码的时候。还在跟另一个候选人约时间~~~
&/p&&p&&br&&/p&&p& ----------------------------------------------------------------------------------------------------------- &/p&&p&&b&-京东广告数据部-机器学习-内推2面-电话&/b& &b&一面、二面连着玩~~~&/b& &/p&&p&1、自我介绍 &/p&&p&2、对于机器学习你都学了哪些?讲一个印象深的 &/p&&p& 说了SVM原理,拉格朗日法,对偶问题,以及好处。 &/p&&p&3、SVM怎么防止过拟合 &/p&&p&说了SVM里面的松弛变量。不知道对不对 &/p&&p&4、我主动出击,有另一大类算法决策树,说不管是LR还是SVM都不能直观的感受到决策依据。而决策树易于理解,能够直观的感受到决策依据。 &/p&&p&说了划分依据:信息增益(说了信息熵的来源,等概率时熵最大)、信息增益率、基尼系数。 &/p&&p&说了划分方法(基于信息增益的) &/p&&p&说了C4.5比较ID3的优点。 &/p&&p&5、决策树如何防止过拟合 &/p&&p&剪枝,前剪枝和后剪枝。说了REP剪枝。C4.5是悲观剪枝 &/p&&p&6、项目没问,说从上位面试官了解了。 &/p&&p&7、撸代码 &/p&&p&求连续子数组最大乘积,还让考虑边界问题(最后问了:连乘有可能导致溢出,存不下了) &/p&&p&&br&&/p&&p&
-----------------------------------------------------------------------------------------------------------
&/p&&p&&b&-拼多多-算法-内推1面-电话&/b& &/p&&p&1、自我介绍
&/p&&p&2、介绍项目
&/p&&p&3、项目延展题:电商搜索框,每天有500W的搜索query。针对新来的一个query,给出和它最相似的100个query。
&/p&&p&如果用RNN分类模型表征,那么向量不应该用最后一层的分类特征。应该用倒数第二层的更纯的特征。
&/p&&p&现在假设500W的query已经是向量了。如何和这一个query比较。全部算距离不行,开销太大。
&/p&&p&&b&应该怎么办???&/b&&/p&&p&4、K-means聚类个数选择,做什么样的试验来确定K
&/p&&p&5、两个4G的文件(每个文件可能有重复),里面全都是数字。现有内存1G,求这两个文件的交集。
&/p&&p&2个4G的文件,分别hash成10个子文件,一个400M。
&/p&&p&把一个子文件存储到hash表中,作为key。遍历另一个文件,看这个数字是否存在于刚才的hash表中。存在即可输出。
&/p&&p&&br&&/p&&p&-----------------------------------------------------------------------------------------------------------
&/p&&p&&b&-美丽联合-算法-内推1面-电话&/b& &/p&&p&1、自我介绍
&/p&&p&2、介绍项目
&/p&&p&3、说了SVM
&/p&&p&4、为什么要把原问题转换为对偶问题?
&/p&&p&因为原问题是凸二次规划问题,转换为对偶问题更加高效。
&/p&&p&5、为什么求解对偶问题更加高效?
&/p&&p&我答了,因为只用求解alpha系数,而alpha系数只有支持向量才非0,其他全部为0.
&/p&&p&6、alpha系数有多少个?
&/p&&p&我答了:样本点的个数
&/p&&p&7、避免过拟合的方法
&/p&&p&答了:决策树剪枝、L2正则和L1正则
&/p&&p&8、为什么L1正则可以实现参数稀疏,而L2正则不可以?
&/p&&p&答了:L1正则因为是绝对值形式,很多系数被压缩为0,。而L2正则是很多系数被压迫到接近于0,而不是0
&/p&&p&9、为什么L1很多系数可以被压缩为0,L2是被压缩至接近于0?
&/p&&p&答了:图像上,L1正则是正方形,L2正则是圆形。
&/p&&p&L1正则的往往取到正方形顶点,即有很多参数为0
&/p&&p&L2正则往往去不到圆形和参数线的交点,即很多分量被压缩到接近于0
&/p&&p&&br&&/p&&p&&b&哪位大佬知道哪里有L1、L2的实现代码???,求告知~~~~~~~&/b& &/p&&p&&br&&/p&&p&10、问平时用啥语言比较多?
&/p&&p&说了之前用java、scala多。现在用python较多。
&/p&&p&11、问jvm 啥啥啥(没听清)。。。
&/p&&p&答:不会
&/p&&p&12、python...直接问你个开发中的实际问题吧,如果写的程序跑的非常慢,多方面分析这个问题?
&/p&&p&答了: 1、检查程序是否有多层嵌套循环,优化
&/p&&p&2、检查程序是否有很耗时的操作,看能否优化为多线程并行执行
&/p&&p&3、检查数据量是否非常大,考虑是否可以用分布式计算模型。
&/p&&p&&b&求大佬补充~~~~~~~~~~&/b& &/p&&p&&br&&/p&&p&13、SQL中inner join 和outer join的区别?
&/p&&p&14、试图给他说说SPARK,结果被严词拒绝(开玩笑的)。。。说时间紧迫,还是他来问吧。。。
&/p&&p&15、Kmeans中,现在给你n个样本点不在欧式空间中,无法度量距离。现在给了一个函数F,可以衡量任意两个样本点的相似度。请问Kmeans如何操作?
&/p&&p&答:想了一会,比如K=4的聚类。
&/p&&p&1、首先,随机去4个点,作为初始类簇中心。
&/p&&p&2、计算所有样本点与这4个点的F相似度。根据相似程度,把所有样本点分到4个类中。
&/p&&p&3、在这4个类中,计算每一个样本点 i 到该类其他样本点的相似度和Si。取Si最大的那个点作为这个类的中心。
&/p&&p&4、重复2、3步骤,直到类中心不再变化或者循环次数达到目标。
&/p&&p&&br&&/p&&p&-----------------------------------------------------------------------------------------------------------
&/p&&p&&b&-链家-算法-内推1面-现场&/b& &/p&&p&&br&&/p&&p&&b&来了之后先做1个小时的题,5道算法题&/b& &/p&&p&&b&因为比较长,所以采用 A:面试官
B:本人&/b& &/p&&p&B 自我介绍
&/p&&p&A 你自己学机器学习,怎么学的?
&/p&&p&B 自己看书,周志华的西瓜书、机器学习实战。先找着撸代码,然后去深究里面的理论。
&/p&&p&&br&&/p&&p& A西瓜书看到什么程度?
&/p&&p& B刚开始看,看不太懂,然后就以机器学习实战为主,先照着撸代码,然后去西瓜书里深究里面的理论。
&/p&&p&&br&&/p&&p&B我给您说说SVM吧,自学的时候留下很深的印象(试图抓住主动权~)
&/p&&p&SVM是基于。。。说着手动起来写SVM的损失函数
&/p&&p&A (打断)为什么样本点到决策面是 1/||w||
&/p&&p&B 手推向量点到决策面的表达式(麻蛋,竟然一时紧张忘了。。。没推出来)
&/p&&p&A 点到直线距离公式记得吧?
&/p&&p&B 嗯嗯,又没写出来。只能说之前推过,现在一紧张忘了。。。
&/p&&p&A 这个也无关紧要,继续
&/p&&p&B 继续说SVM
&/p&&p&&br&&/p&&p&A (打断)知道LR吧,知道LR和SVM有什么不同吗?
&/p&&p&B 知道,首先这两个算法的分类思想不同,LR是基于概率推导的,SVM是基于最大化几何间隔的
&/p&&p&A (打断)写一下,LR的损失函数
&/p&&p&B 手写出来。其实这个sigmoid函数由那个什么族分布(真的忘了名字,其实是:指数族分布),加上二项分布导出来的。损失函数是由最大似然估计求出的。
&/p&&p&A 怎么由最大似然估计导出的?推导一下
&/p&&p&B 最大似然估计就是求让已知事件发生的概率最大的参数。
&/p&&p&假设有5个样本,每一个的类别是yi,由LR计算出的概率是h(x)。那么每一个样本预测正确的概率为:
(H(x)^yi)*((1-h(x))^(1-yi)) ----
(刚开始一紧张,把h(x)和yi写反了)面试官说是这样吗?你这样全为0,我感觉你在背公式。。。你再看看
我一看,卧槽这竟然写错了。赶紧改过来,然后表明是自己紧张了。
概率连乘后,然后取对数就是LR的损失函数了。
&/p&&p&&br&&/p&&p&
A 为什么损失函数有个负号?
B 这是因为要应用梯度下降法,引入的。不加负号也可以,梯度上升法。这都是一样的。
&/p&&p&&br&&/p&&p&
A OK,继续,LR和SVM有什么区别?
B SVM决策面只由少量的支持向量决定,而LR的话是所有样本都会参与决策面的更新。
A 对,所以说SVM怎么样?
B SVM对于异常点不敏感,而LR敏感。SVM更加健壮,决策面不受非支持向量影响。
&/p&&p&&br&&/p&&p&A 知道过拟合吧?
&/p&&p&B 知道,在训练集表现好,在测试集表现一塌糊涂。举个例子就是:学生平时考试成绩非常棒,但一到实际应用就很烂。
&/p&&p&&br&&/p&&p&A 说说常见的过拟合的解决办法
&/p&&p&B 数据,样本不够,如果现在的训练集只是所有样本空间的一个小小的部分,那么这个模型的泛化能力就非常差(边画图,边说)
&/p&&p&A 嗯嗯,还有呢
&/p&&p&B 可以加正则项,L1,L2正则。L1还可以用来选择特征
&/p&&p&A 为什么L1可以用来选择特征
&/p&&p&B 因为L1的话会把某些不重要的特征压缩为0
&/p&&p&A 为什么L1可以把某些特征压缩为0
&/p&&p&B 因为(画图)L1约束是正方形的,经验损失最有可能和L1的正方形的顶点相交,L1比较有棱角。所以可以把某些特征压缩为0
&/p&&p&&br&&/p&&p&A 还有什么过拟合的解决方法
&/p&&p&B 神经网络中,dropout方法。就是每层网络的训练,随机的让一半神经元不工作。达到防止过拟合的目的
&/p&&p&&br&&/p&&p&A 还有吗?
&/p&&p&B 决策树中可以用剪枝操作。
&/p&&p&&br&&/p&&p&B 决策树过拟合,可以用随机森林。。。
&/p&&p& A 什么???现在一个决策树已经过拟合了,还要再以它为基准训练随机森林?
&/p&&p& B 。。。对,你说的对。我想错了。。。
&/p&&p& B 我就知道这些方法了。。。
&/p&&p&&br&&/p&&p& A OK,挑一个项目给我说说吧
&/p&&p& B 说项目(不记得中间有没有再提问了。。。)
&/p&&p&&br&&/p&&p&B 要不我给您说说spark框架吧,之前还用的挺多。
&/p&&p& A 嗯(看简历和笔试题中。。。)
&/p&&p& B 开始说。。。说到三分之一
&/p&&p&&br&&/p&&p&A 好了! 你不必说了。(大手一挥~)我看你5道笔试题都没写思路,现在把第二题代码写出来
&/p&&p&注: 第二题就是检测括号是否匹配
&/p&&p&B 我写了啊。。。(给他翻到其中一个的背面)
&/p&&p&A 哦,(迅速扫过代码,),为什要把字符压栈呢?不压栈也可以的。
&/p&&p&B 是吗?{abc()}这样的也是合法的吗?
&/p&&p&A 当然啊(看了一眼题。)
&/p&&p&B 好吧,我本来也准备看到字符就丢到,不入栈。但担心这种情况不合法,就给入栈了。
&/p&&p&&br&&/p&&p&A 嗯,第三题呢?
&/p&&p&B 没思路,没写
&/p&&p&&br&&/p&&p&A 给我说说第四题
&/p&&p&第四题:10分钟内,恶意IP访问检测(10分钟内访问次数超过1024即为恶意访问)
&/p&&p&B 这是10分钟动态检测的,需要时间刻度精确到秒吗?
&/p&&p&A 不需要
&/p&&p&B 把10分钟内的&ip,次数&存入hashmap, 再把key,value互换存入treemap。因为treemap是基于key有序的,升序。然后直接拿出来最后一个和1024比较。
&/p&&p&&br&&/p&&p&A 怎么实现动态的检测,当前检测0-10分钟,那么第11分钟怎么办?
&/p&&p&B 把0-10分钟的摘出来,从10分钟内的hashmap中减去,再把10-11分钟内的加上。
&/p&&p&我知道这样实现起来,效率应该不高,但这一会我只想到了这个。。。
&/p&&p&A 嗯,其实可以这样,把每分钟的分开存储,动态的向后移动,取这10个的总的数据就行。
&/p&&p&甚至可以每分钟只存储TOP200的,然后10个分钟的汇总,取TOP1
&/p&&p&B 嗯,明白了。
&/p&&p&&br&&/p&&p&A 说说循环依赖这个怎么解决的?
&/p&&p&第五题:系统有很多相互依赖的包,怎么检测循环依赖
&/p&&p&B 把它当做一个链表。记录当前的名字在hashset中。如果某一次遍历的依赖名字存在于这个hashet中。就认为有循环依赖。
&/p&&p&&br&&/p&&p&A 学过数据结构吧?学过图吧?给你一个有向图,怎么检测有环?
&/p&&p&B 维护一个访问的数组,记录哪些点被访问过,从一点开始遍历,如果遍历的点被访问过,就说明有环
&/p&&p&A 从哪个店开始遍历?
&/p&&p&B 从入度为0的点开始遍历
&/p&&p&A 如果有多个入度为0的点呢?
&/p&&p&B 嗯。。。都要以它为入口开始遍历。
&/p&&p&A show me the code!!!
&/p&&p&(我内心是崩溃的。。。)
&/p&&p&B 纠结了一会,又给他说了一遍思路。
&/p&&p&&br&&/p&&p&A 嗯,好吧,我没有什么想问的了。你呢?
&/p&&p&B 请问您说的这个图的这个应该怎么。。。算了,我还是下去自己看吧。。。我还是想知道怎么解决。。。
&/p&&p&A 你说的对啊,就把思路给我讲了一下,和我的差不多。
&/p&&p&&br&&/p&&p&B 贵公司这里机器学习、深度学习有什么应用场景呢?
&/p&&p&A 房屋估价啊什么的。
&/p&&p&B 好的,谢谢。再次感谢,离开。
&/p&&p&&/p&
作者:crazyhoney链接: 职位:机器学习/数据挖掘算法工程师 在牛客网得到很多宝贵的面试经验 现我也来开帖,分享一下到目前为止的面试经验~~~ 本人会一直写到秋招结束,记录下参加的每场面试 如果回答上有什么错误,请不吝赐教哈!!…
面过七家公司的机器学习工程师岗位,包括诸如BAT这样的大公司,头条这样的成熟创业公司,商汤这样的初创期创业公司。&br&&br&机器学习工程师岗位面试主要看机器学习掌握得如何,自己做的相关项目,以及coding能力。&br&&br&机器学习大概问过lr,svm,pr曲线,朴素贝叶斯的assumption,ensemble方法,决策树节点用哪个特征进行划分,gbdt原理,random forest原理,pca和lda降维原理,写k means和gmm公式,特征选择的方法有哪些,cnn与rnn的区别,你所知道的距离度量方式,你所知道的loss function,蓄水池抽样。具体可以看看&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&&span class=&invisible&&https://&/span&&span class=&visible&&zhuanlan.zhihu.com/p/30&/span&&span class=&invisible&&420494&/span&&span class=&ellipsis&&&/span&&/a&。&br&&br&过了简历说明你做的项目跟面试官所在团队做的东西相似度比较高,所以面试官一般会比较懂你做的项目。在问的时候,面试官会问你一些他觉得该项目的难点,以及你是如何解决的,比如样本不平衡问题,负样本如何挑选等问题。面试前一定要好好过一下自己做的项目,想一想你是面试官你会问自己什么问题。&br&&br&最后就是基础的coding能力。背包问题,lcs,lis,编辑距离,最长回文子串等dp问题;链表反转,递归和非递归解法,判断是否有环等链表问题;树的前序,中序,后序遍历,判断镜像,判断是否是完全二叉树或者满二叉树,求树的深度,lca等树的问题;快排,堆排序,归并排序,最大k个数,时间复杂度等排序问题;实现atoi等等。具体可以看看这个总结&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&&span class=&invisible&&https://&/span&&span class=&visible&&zhuanlan.zhihu.com/p/29&/span&&span class=&invisible&&731623&/span&&span class=&ellipsis&&&/span&&/a&。
面过七家公司的机器学习工程师岗位,包括诸如BAT这样的大公司,头条这样的成熟创业公司,商汤这样的初创期创业公司。 机器学习工程师岗位面试主要看机器学习掌握得如何,自己做的相关项目,以及coding能力。 机器学习大概问过lr,svm,pr曲线,朴素贝叶斯的…
&figure&&img src=&https://pic4.zhimg.com/8b1c5147e35fcaaeb5501_b.jpg& data-rawwidth=&557& data-rawheight=&540& class=&origin_image zh-lightbox-thumb& width=&557& data-original=&https://pic4.zhimg.com/8b1c5147e35fcaaeb5501_r.jpg&&&/figure&&p&用户画像是啥?听起来很高大上的,其实你最熟悉不过了。你的性别,年龄,喜好等等这些都是用户画像的维度。迅雷的产品总监blues认为,用户画像分析的维度,可以按照人口属性和产品行为属性进行综合分析,&/p&&p&人口属性:地域、年龄、性别、文化、职业、收入、生活习惯、消费习惯等;&/p&&p&产品行为:产品类别、活跃频率、产品喜好、产品驱动、使用习惯、产品消费等;&/p&&p&那么问题又来了,互联网公司利用用户画像做啥呢?主要是个性化营销和精准广告。&/p&&p&假如一个电商网站知道你是一个妹子,那么给你推荐女性的商品,你更可能购买。&/p&&p&假如你是一个年轻的小伙子,在视频网站上观看英超比赛,此时给你投放一个体育用品的广告,尽管你不一定会点击甚至产生消费行为,但是总比给你投放一个妇女用品的广告的效果要好。&/p&&p&好了,吹牛逼到此为止。下面开始从技术层面谈谈如何实践用户画像建模。&/p&&p&每个公司拥有的用户信息不太一致,有些公司有用户的真实信息(比如年龄),这种情况很可能不需要建模预测了,本文着重讨论的是我们从用户行为上建模预测各种用户画像维度。&/p&&p&说到预测,自然就会想到机器学习的分类和回归算法(贝叶斯,决策树,逻辑回归,支持向量机等)。对,我们就是采取这些有监督的学习方法,从标注好的训练数据学习到一个预测模型,然后对未标注的数据进行预测。&/p&&p&从中文姓名预测性别说起&/p&&p&告诉我一个名字,让我猜猜是男是女。哈哈,多多少少有点算命的味道。&/p&&p&首先,有监督的学习方法,就需要这样一批标注数据:大量的人名,以及其性别。&/p&&p&下面是某网站的数据,&/p&&figure&&img src=&https://pic2.zhimg.com/bfa9efed184f29_b.jpg& data-rawwidth=&834& data-rawheight=&306& class=&origin_image zh-lightbox-thumb& width=&834& data-original=&https://pic2.zhimg.com/bfa9efed184f29_r.jpg&&&/figure&&p&经过我的验证,上面的是真实的身份证数据,所以数据绝对靠谱和真实。&/p&&p&于是,从上面爬了几百万条的数据作为我们的训练集和测试集。&/p&&figure&&img src=&https://pic3.zhimg.com/b5a0a54aeb54070dee8e_b.jpg& data-rawwidth=&821& data-rawheight=&376& class=&origin_image zh-lightbox-thumb& width=&821& data-original=&https://pic3.zhimg.com/b5a0a54aeb54070dee8e_r.jpg&&&/figure&&p&其中,400w当做训练样本,100w当做测试样本。&/p&&p&分类算法:贝叶斯&/p&&p&特征提取流程:&/p&&p&1 根据姓氏辞典把姓氏去掉,留下不带姓氏的名字;&/p&&p&2 特征有三个维度,分别用X1,X2,X3(=X1X2)表示。&/p&&p&
如果是单字名,则X1为空格,X2为单字名,X3就是前两者拼接X1X2,&/p&&p&
比如郭靖,X1=” ”,X2=”靖”,X3=” 靖”。&/p&&p&
如果是双字名,则X1为第一个字,X2为第二个字,X3由前两者拼接,&/p&&p&
比如黄药师,则X1=”药”,X2=”师”,X3=”药师”&/p&&p&
如果是三个字以上,则只保留最后两个字,当做双字名处理。&/p&&p&原始贝叶斯公式&/p&&figure&&img src=&https://pic3.zhimg.com/fe95d289b227fa982a9b75ecd1775756_b.jpg& data-rawwidth=&543& data-rawheight=&120& class=&origin_image zh-lightbox-thumb& width=&543& data-original=&https://pic3.zhimg.com/fe95d289b227fa982a9b75ecd1775756_r.jpg&&&/figure&&p&工程实现中,上面公式的分母可以去掉。&/p&&p&所以对于名字X1X2,&/p&&p&P(男|X1X2)=P(男)*P(X1|男)*P(X2|男)*P(X1X2|男)&/p&&p&P(女|X1X2)=P(女)*P(X1|女)*P(X2|女)*P(X1X2|女)&/p&&p&特别注意的是,P(X1|男)表示的是训练样本中,男性用户中,名字第一个字出现X1的概率,如果第二个字出现X1,不算在这里。&/p&&p&举个例子,如何判断谢霆锋是男是女?&/p&&p&P(男|霆锋)=P(男)*P(霆|男)*P(锋|男)*P(霆锋|男)&/p&&p&P(女|霆锋)=P(女)*P(霆|女)*P(锋|女)*P(霆锋|女)&/p&&p&P(霆|男)表示的是训练样本中,男性用户第一个字出现霆的概率,&/p&&p&P(锋|男) 表示的是训练样本中,男性用户第二个字出现锋的概率,&/p&&p&P(霆锋|男) 表示的是训练样本中,男性用户第一个字是霆且第二个字是锋字的概率。&/p&&p&工程实现中,在预测阶段,可能会遇到一些特征在训练样本中没有,则需要做一下平滑(比如分子加一个很小的值),不然男女概率都为0,无法预测。&/p&&p&关于这个模型,特征提取和采取贝叶斯模型,是参考了《基于中文人名用字特征的性别判定方法》这篇论文来做的。还有篇论文,是用条件随机场来做的,有兴趣的读者可以看看《基于条件随机场的中文人名性别识别研究》。&/p&&p&在实际应用中,这个模型适合于我们知道用户姓名但是不知道性别的情况,比如某电商网站,一般情况用户订单中填的收货人姓名都是真实的,注册信息中可能带有性别但是不靠谱可能是乱填的。&/p&&p&提到电商,不得不提淘宝,淘宝可是有用户的身份证信息的,但是据说淘宝会保存用户两个性别,一个是身份证信息的性别,一个是预测性别。也许是他们实践过,不同的业务场景,两个性别的效果不一样。&/p&&p&好了,再说说从用户行为来建模预测。不同的产品的用户行为信息不太一致,提取的特征以及方法也不一致。对于视频用户,提取的特征通常是这个视频信息,比如你看了《小时代》,我们就会给你打上一个“杨幂“的标签作为你其中一个特征。对于微博用户,提取的特征来自于你发的微博内容和关注的好友,比如你关注了tfboys,或者经常转发他们的相关的微博,我们就会给你打上”tfboys“和”小鲜肉“的特征。对于新闻资讯用户,提取的特征就是该新闻的主题,关键词等信息。提取的特征来自于结构化信息和非结构化信息。对于结构化信息(数据库表,xml,json等),容易抽取。但是对于非结构化信息,就需要自然语言处理和文本挖掘的方式来抽取,比如常见的tf-idf来提取关键词,lda算法来提取主题。&/p&&p&对于抽取的这些信息,就可以当做用户的基本行为特征,其实也可以当做一部分用户画像的维度了。&/p&&p&然后,我们如何利用这些基本行为特征,来进行其他用户画像维度的预测呢?&/p&&p&还是采取分类的算法。对于有监督学习,当然需要男女,年龄等标注数据了。可以跟第三方公司进行数据合作,也可以人工标注。通常,可以跟第三方广告公司进行数据交换,通过cookie-mapping方式进行用户关联。&/p&&p&好了,特征和标注数据都有了,那么可以建模了。分类算法一大堆,贝叶斯,逻辑回归,svm,gbdt,random forest,神经网络等等。开源的算法库也有很多,后续会介绍liblinear,xgboost,sklearn。&/p&&p&然而,经过实践的工程师都知道,算法不是万能的。一个好的模型,除了算法本身,数据质量,数据预处理,特征工程等等这些都很重要。且外,还需要根据业务情况,进行随机应变。&/p&&p&下面分享一些工作中用到的奇技淫巧。&/p&&p&互联网数据,并不像学术研究中的数据那么完美,而是“杂乱脏“。抛开业务不说,仅从数据上看,标注数据有误,特征数据稀疏,类别不平衡等等。总之由于种种问题,可能导致我们模型不是那么准确。一种有效的思路,就是我们不预测全体用户,只预测我们有把握预测的,因为对于业务方来说,准确率相对于召回率,对他们更重要。朝着这种思路,也有不少尝试方案。比如分群预测,分群的方法可以从业务上分,也可以从算法上分。从业务上分,比如视频用户可以分为电影用户和电视用户等等。从算法上分,可以通过聚类的方法来分。分群完毕后,再对不同的群体进行建模,通过测试集预测,过滤掉准确率较低的群体,保留准确率较高的群体即可。还有种尝试方案,就是特征选择和用户筛选结合起来,特征选择的算法也有很多,比如信息增益,卡方测试等,保留下有分类能力的特征,特征选择完毕后,对用户进行过滤,是否保留这个用户取决于这个用户是否拥有足够多的有分类能力的特征。这个用户过滤环节,训练测试阶段和预测阶段都要进行。&/p&&p&好了,talk is
cheap,show me your code。下面开始介绍几个开源算法工具库。&/p&&p&下面三点是我挑选工具的标准:&/p&&p&1 支持类似libsvm格式的稀疏特征输入&/p&&p&2 支持百万级别训练数据&/p&&p&3 轻量级,快&/p&&p&libsvm和liblinear&/p&&p&在特征维度是几万以上级别的前提下,&/p&&p&libsvm只能训练几万条样本。&/p&&p&而liblinear对于百万级别的样本数量,速度很快,&/p&&p&千万级别有点吃力。&/p&&p&liblinear对于libsvm的缺点就是,不能使用核函数,libsvm也正是这点所以耗性能。&/p&&p&数据文件格式:标准的libsvm格式,每一行都是&/p&&p&label index1:value1 index2:value2&/p&&p&的稀疏向量的格式。&figure&&img src=&https://pic4.zhimg.com/bcd35d3166abb3_b.jpg& data-rawwidth=&708& data-rawheight=&135& class=&origin_image zh-lightbox-thumb& width=&708& data-original=&https://pic4.zhimg.com/bcd35d3166abb3_r.jpg&&&/figure&&/p&&p&liblinear最简单的训练和测试方式:&/p&&p&train train.txt model.txt
&/p&&p&predict test.txt model.txt predict.txt&/p&&p&使用liblinear之前,&/p&&p&建议进行L2范式归一化,实现简单,可以加快训练速度,可能会提高准确率。&figure&&img src=&https://pic2.zhimg.com/0b2ffc138739_b.jpg& data-rawwidth=&542& data-rawheight=&285& class=&origin_image zh-lightbox-thumb& width=&542& data-original=&https://pic2.zhimg.com/0b2ffc138739_r.jpg&&&/figure&&/p&&br&&p&Xgboost&/p&&p&提到该工具,不得不秀一下这个工具的作者陈天奇大神。&/p&&figure&&img src=&https://pic2.zhimg.com/f7ebc750d_b.jpg& data-rawwidth=&807& data-rawheight=&683& class=&origin_image zh-lightbox-thumb& width=&807& data-original=&https://pic2.zhimg.com/f7ebc750d_r.jpg&&&/figure&&p&xgboost是gbdt算法的实现,可以做回归,分类,和排序。支持各种语言调用,支持单机和分布式,支持libsvm的稀疏矩阵的数据格式,非常适合于大规模数据集。&/p&&p&项目主页&/p&&p&&a href=&http://link.zhihu.com/?target=https%3A//github.com/dmlc/xgboost& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&dmlc/xgboost · GitHub&/a&&/p&&p&单机版的python调用例子:&/p&&figure&&img src=&https://pic4.zhimg.com/45e1d38c2dda858eb2c6db_b.jpg& data-rawwidth=&748& data-rawheight=&356& class=&origin_image zh-lightbox-thumb& width=&748& data-original=&https://pic4.zhimg.com/45e1d38c2dda858eb2c6db_r.jpg&&&/figure&&br&&p&《xgboost快速入门》&/p&&p&&a href=&http://link.zhihu.com/?target=http%3A//blog.csdn.net/lingerlanlan/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&xgboost快速入门&/a&&/p&&p&sklearn&/p&&figure&&img src=&https://pic2.zhimg.com/61f9d5c8b8e_b.jpg& data-rawwidth=&817& data-rawheight=&289& class=&origin_image zh-lightbox-thumb& width=&817& data-original=&https://pic2.zhimg.com/61f9d5c8b8e_r.jpg&&&/figure&&p&涵盖数据预处理,降维,分类,回归,聚类,模型选择。&/p&&p&sklearn也支持libsvm的数据格式,&/p&&p&但是某些算法不一定支持,&/p&&p&比如1.5版本的随机森林不支持稀疏矩阵,1.6就支持了。&/p&&p&1.6版本的gbdt也不支持稀疏矩阵。&/p&&br&&p&kmeans的调用例子&/p&&figure&&img src=&https://pic4.zhimg.com/aaef58a49ddf_b.jpg& data-rawwidth=&820& data-rawheight=&732& class=&origin_image zh-lightbox-thumb& width=&820& data-original=&https://pic4.zhimg.com/aaef58a49ddf_r.jpg&&&/figure&&p&《sklearn特征选择和分类模型》&/p&&p&&a href=&http://link.zhihu.com/?target=http%3A//blog.csdn.net/lingerlanlan/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&sklearn特征选择和分类模型&/a&&/p&&p&好了,经历了用户画像建模的这段经历,的确体验到算法并不是万能的。所以,我们出了把精力学习那些神奇的算法原理,还需要在数据分析,数据处理,特征工程甚至业务知识方面花功夫。特别是特征工程,在互联网中是永恒的主题。百度凤巢在很久之前,一直沿用人肉特征工程+线性模型的方法,也是近几年才引用深度学习来做特征。最近有篇Facebook的论文,是用gbdt提特征输入给lr预测,有时间我也会学习一下。&/p&&p&好了,晚安。&/p&&p&号夜&/p&&br&&p&本文作者:linger&/p&&p&本文链接:&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&用户画像建模:方法与工具&/a&&/p&&p&转载须注明出处&/p&&br&&p&欢迎关注公众号:数据挖掘菜鸟【公众号ID:data_bird】&/p&&figure&&img src=&https://pic4.zhimg.com/f7cfe36fbf3_b.png& data-rawwidth=&282& data-rawheight=&224& class=&content_image& width=&282&&&/figure&&br&&p&关注大数据,数据挖掘,机器学习,深度学习&/p&
用户画像是啥?听起来很高大上的,其实你最熟悉不过了。你的性别,年龄,喜好等等这些都是用户画像的维度。迅雷的产品总监blues认为,用户画像分析的维度,可以按照人口属性和产品行为属性进行综合分析,人口属性:地域、年龄、性别、文化、职业、收入、生…
内容同步自个人网站:&a href=&http://link.zhihu.com/?target=http%3A//www.doesbetter.com/862/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Not Enough Forever&/a&&/p&&p&
之前也想过把实习和工作中曾经用过的模型总结一下,但是由于工作的原因一直抽不出时间,最近刚好有时间做一下总结。总体上来说只是记录个大概,因为有太多东西要写了,所以有兴趣的朋友可以在合适的时间,采用对话的形式针对每个细节讨论。主要包括以下几个模型:LR,GBDT,FM,FFM,DNN,还有一些自己对分布式系统的想法。&/p&&p&
第一次看到工业界使用LR模型,是在阿里实习的时候,当时用它来做展示广告的CTR预估,我们作为一个业务部门使用公司内部的分布式机器学习平台,当时还是用MPI实现的。后来在百度实习,用到了LR和DNN模型,LR也是用MPI实现的,有多种优化算法可选,SGD,LBFGS,OWLQN,对于做广告CTR预估的我们来说,选用OWLQN的最多,毕竟我们对模型的稀疏性有要求,OWLQN能对带有L1正则项的目标函数进行优化。DNN用的现在比较有名的paddle,当时还没开源但是内部已经开始用了。最后一份实习在360,当时主要是探索DNN在搜索广告上的效果,由于内部没有可用的分布式深度学习系统,在经过对比之后就选择了Petuum(&u&&a href=&http://link.zhihu.com/?target=http%3A//www.petuum.com/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&petuum.com/&/span&&span class=&invisible&&&/span&&/a&&/u&),在这里感谢一下Petuum团队的朋友们,感谢他们非常热情的回复邮件帮我解答问题,希望我那蹩脚的英文也曾给他们带来过一些欢乐。。。 主要工作是根据360搜索广告已有数据构造特征,并针对petuum系统修改源代码做一些小改动,例如改变激活函数类型、参数初始化方式等。在360实习期间和纽约大学的一个小伙伴参加了kaggle上的一个展示广告CTR预估比赛,用到了FM模型,主要还是特征的处理,特别是连续值特征的离散化处理,成绩一般般第16名。&/p&&p&
毕业之后在第一家公司做风险控制,用到了GBDT和GBRT模型,因为是不同的业务需求,前者用来做分类,后者用来做回归。第二家公司,先是用GBDT做新闻推荐,后来使用ps-lite实现了用ftrl做优化算法的LR模型,又使用MPI实现集成了LR、FM、FFM三个模型的系统,同时提供了SGD和FTRL优化算法,本来要再提供OWLQN优化算法,但是要测性能,OWLQN的代码写完后就没来得及测。主要目的是打算做online learning,做出来之后做过一些性能测试实验,通过观察测试集AUC,FM在初期学习速率比LR快,例如LR在40次迭代之后达到0.7,FM在20次迭代之后就达到了,但是最终的结果FM并没有比LR高,两者的结果是差不多的,这和当时没有充分调参有关。&/p&&p&
总体上来说,LR是使用最广泛的模型,一般是结合onehot encoding之后的特征使用,我总结它有以下几个优点:1,模型简单,可以尽管拍脑袋加特征,2,容易debug,线上出了问题很容易就能根据模型和结果定位到是哪些特征出了问题,并且可以马上采取补救措施,例如人工修改模型权重,以达到增强或者减弱某些特征对结果的影响。3,有非常多的优化算法可选择,例如SGD,CD,LBFGS,OWLQN,FTRL等等,而且这些优化算法又有各种变体,可以尽管尝试,4,繁多的优化算法中,有些算法可以有效的产生稀疏模型并使得效果不损失,这对上线非常有利,也有利于减少线上平响时间。缺点:1,只是个线性模型,不是对所有的数据都能很有效,不同的业务其数据分布都不同,有些业务的数据可能还是需要非线性的模型来学习。&/p&&p&
GBDT也是一个被广泛使用的模型,一般是配合连续值特征使用,它的特点是:1,特征值在不断变化,knowledge存在于数据和模型中,因此,即使模型更新频率低一些,结果也暂时不会差到哪里去,从这个角度来讲,GBDT比较“稳定”。2,非线性模型,能学习复杂的数据分布。和LR相比,他不需要那么频繁的更新模型,而且基本上不存在线上特征miss的问题,如果是LR模型,可能一天之内某些ID特征就发生了很大的变化,导致线上出现大量的新ID特征无法命中。&/p&&p&
FM比LR、GBDT更晚一些,它的发明者是来自德国的一个大神也就是libFM的作者。与LR模型相比较,输入给FM模型的每个特征,除了学到一个对应的权重之外,还能得到一组权重,存在于vector之中,当需要把特征a和特征b进行组合时,就把a的那个vector和b的那个vector拿来做内积,这么做的好处:1,可以自动的进行特征组合,是的模型具有更强的学习能力。2,不但能做特征组合,vector的方式还解决了特征组合后维度过大的问题。关于FM模型的数学推导,可以找到那篇论文进行学习。现在FM模型也被各个公司广泛使用了。&/p&&p&
FFM是FM的增强版,它也能做特征组合,而且对于每个特征,它可以得到好几个vector,例如,对于特征a它可以有v1,v2两组权重,这两组权重分别用来和其它不同特征做组合,当特征a和特征b组合时用v1,当特征a和特征c组合时用v2. 这么做的好处是,即使是同一个特征,和其它不同特征组合时是有强弱之分的,这样使得模型更“个性化”,从而得到更好的效果。关于FFM模型的数学推导,也可以参考原始论文。目前在线上用FFM的并不多,因为线上预测时平响相对较大。&/p&&p&
DNN模型很多人都非常熟悉了,一般使用连续值特征,否则离线训练时间难以承受。优点是:非线性,模型表达能力强,只需简单的三层就能表示任意阶的函数。缺点是:1,离线训练时间较慢,不过目前好在有TensorFlow,Mxnet这样的分布式训练系统。2,线上预测时间较长,这也是阻碍DNN被广泛使用的原因之一。&/p&&p&
以上LR,GBDT,FM,FFM,DNN模型,都有相关的论文可以阅读学习,最好是找到关于理论推导方面的论文进行研究。&/p&&p&
从最开始的LR,GBDT到后来的FM,DNN,关于这些模型在广告和推荐问题上的应用的论文也越来越多,从简单到复杂,从单模型到模型融合,比如LR和GBDT,LR和DNN,FM和DNN各种各样的模型组合方式:stacking,bagging,boosting, 相信以后这方面的论文会越来越多。&/p&&p&
另外就是关于oneline learning,以上几个模型除了GBDT无法做online learning之外,其它几个模型理论上都是可以的,online learning的好处是可以更快地学到用户的行为,但这会造成它的模型不太稳定,整体上来看最终结果不一定比batch learning更好。因此,一般是采用一个离线的稳定模型+增量模型的方式,这又涉及到几个问题:1,模型的更新频率;2,增量模型中新特征参数的加入方式;2,增量模型中旧特征参数的加入方式。以上三个因素会严重影响online learning的效果。online learning一般是结合特定的优化算法例如SGD,FTRL来实现的,目的是为了使得模型更新频率更快,FTRL会让得到的模型更稀疏。&/p&&p&
关于优化算法,对于LR模型来说,使用不同的正则项就选择对应的优化算法,L2正则就选LBFGS或者SGD,不过SGD一般很少用,L1正则就选择OWLQN或者FTRL,OWLQN是用来做batch learning,FTRL是用来做online learning,现在FTRL已经被非常多的使用了。针对FM,FFM模型,目前最常用的方式也是FTRL,而且对于这两个模型,可以分别针对w和v采用不同的优化算法,例如DMLC的wormhole中对FM模型的优化就采用了两种不同优化算法。这取决于用户是否希望v更稀疏,如果希望得到dense的v就不对v加L1约束,如果希望得到sparse的v就对v加L1约束,这要看用户是打算如何使用FM产出的v向量,是否要和其它模型组合使用等。DNN模型常用的优化算法就是SGD了,也有不少是结合分布式框架做的一些SGD优化。还有些优化算法能在模型训练过程中自适应调整学习率,这一般是在参数较多时使用,有些reinforcement learning的意思了。一般在实际工作中去研究优化算法的并不是非常多,因为它是和分布式训练系统紧密结合的,想改变一个优化算法,需要改动分布式训练系统的代码,这一般很难做到,除非分布式系统的代码就是由自己管理。所以一般情况下业务部门都比较喜欢自己来实现分布式训练系统,方便自己根据业务需求灵活定制相应的模型和算法。&/p&&p&
在2013年年初的时候我就有自己动手实现分布式机器学习模型的想法,当时不知道用什么手段实现分布式,后来听说了MPI,就开始研究如何用MPI实现分布式LR。当时花了不少时间在MPI的用法上,现在想想MPI只是个通信库,即使不用MPI也可以用ZMQ,也可以用socket,其实重点应该是怎么设计算法的并行方式,怎样使得整个训练系统更快更准。就像现在各种开源或者自研的深度学习训练系统一样,用什么网络库不重要,重要的是怎么设计整个分布式系统。我分别仔细研读过TensorFlow和mxnet的代码,个人认为mxnet代码解耦合模块化做的很好,结构很清晰,这可能也和我最初先研究了ps-lite代码有关,我在这篇文章中对比过mxnet和TensorFlow的分布式框架:&u&&a href=&http://link.zhihu.com/?target=http%3A//www.doesbetter.com/836/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&doesbetter.com/836/&/span&&span class=&invisible&&&/span&&/a&&/u&。以后会记录更多的关于这两个分布式深度学习框架的对比笔记。&/p&&p&
在实际业务中,分为召回、排序、策略这三个环节,算法工程师大部分时间都是在做特征做策略。特征工程方面,分为几个步骤,首先是特征准备,根据实际的业务特点和数据选择出足够多的候选集出来;其次是特征处理,一般情况下是对离散值最onehot encoding,对连续值做归一化或者等频、等值离散化等等;最后是特征选择,可以看单特征AUC,也可以加新特征到已有特征集合中,可以观察单日AUC变化,可以观察多日AUC衰减情况,也可以根据ROC曲线形状判断等等。特征工程是和业务和数据紧密结合的,关于这方面的工作,有很多方法可能要真正做业务的时候才能具体情况具体对待,所以在这里就不做深入拓展。策略是和业务结合最紧密的,是最直接影响业务指标的,所以有不少部分策略都是在指标出来之后做的应对方案。&/p&&p&
关于以上模型的实际应用,是无法通过笔记来充分表达的,所有的工作都体现在实验过程中。也欢迎各位感兴趣的同行可以针对一些细节进行深入讨论,刚好也帮我回忆一下那些实验过程。&/p&&p&&/p&&p&&/p&
内容同步自个人网站: 之前也想过把实习和工作中曾经用过的模型总结一下,但是由于工作的原因一直抽不出时间,最近刚好有时间做一下总结。总体上来说只是记录个大概,因为有太多东西要写了,所以有兴趣的朋友可以在合适的时间,采用对话…
Stanford Stephen Boyd的convex optimization。&br&&br&他的 EE364a 和 EE364b 都质量堪比甚至超过 Strang 的 linear algebra。是入门优化的人必修课。&br&&br&EE364a 的在线版 CVX101 可供观看视频和做作业。&br&&br&CVX101 网址: &a href=&//link.zhihu.com/?target=https%3A//lagunita.stanford.edu/courses/Engineering/CVX101/Winter2014/about& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Convex Optimization&/a&
Stanford Stephen Boyd的convex optimization。 他的 EE364a 和 EE364b 都质量堪比甚至超过 Strang 的 linear algebra。是入门优化的人必修课。 EE364a 的在线版 CVX101 可供观看视频和做作业。 CVX101 网址:
&a href=&//link.zhihu.com/?target=https%3A//github.com/karpathy/char-rnn& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&karpathy/char-rnn · GitHub&/a& :一个基于RNN的文本生成器。可以自动生成莎士比亚的剧本或者shell代码。&br&&br&&a href=&//link.zhihu.com/?target=https%3A//github.com/phunterlau/wangfeng-rnn& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&phunterlau/wangfeng-rnn · GitHub&/a& : 基于char-rnn的汪峰歌词生成器&br&&br&&a href=&//link.zhihu.com/?target=https%3A//github.com/google/deepdream& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&google/deepdream · GitHub&/a& :画出神经网络眼中的世界&br&&br&&a href=&//link.zhihu.com/?target=https%3A//github.com/facebook/MemNN& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&facebook/MemNN · GitHub&/a& :memnn的一个官方实现。可以回答诸如“小明在操场;小王在办公室;小明捡起了足球;小王走进了厨房。问:小王在去厨房前在哪里?”,这样涉及推理和理解的问题。&br&&br&&a href=&//link.zhihu.com/?target=https%3A//github.com/skaae/lasagne-draw& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&skaae/lasagne-draw · GitHub&/a& :用RNN生成手写数字。&br&&br&&a href=&//link.zhihu.com/?target=https%3A//github.com/fchollet/keras/blob/master/examples/addition_rnn.py& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&keras/addition_rnn.py at master · fchollet/keras · GitHub&/a& :用RNN自动学会加法规则。&br&&br&&a href=&//link.zhihu.com/?target=https%3A//github.com/karpathy/neuraltalk& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&karpathy/neuraltalk · GitHub&/a& :自动根据图像生成文本描述。&br&&br&一下子就想到这些。另外推荐一个网站,&a href=&//link.zhihu.com/?target=http%3A//gitxiv.com/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&gitxiv.com/&/span&&span class=&invisible&&&/span&&/a&
很多arXiv上面知名论文可以在这个网站找到github的项目链接。
:一个基于RNN的文本生成器。可以自动生成莎士比亚的剧本或者shell代码。
: 基于char-rnn的汪峰歌词生成器
:画出神经网络眼中的世界 …
&figure&&img src=&https://pic3.zhimg.com/fdd0dc66c89_b.jpg& data-rawwidth=&400& data-rawheight=&280& class=&content_image& width=&400&&&/figure&在美国找工作真的那么难吗?如果你是一个留学生,怎样在美国找工作呢?作为一个国本美研,没有捷径、没有Refer、没有学CS且在美国凭借个人实力找到工作的人,我想我有资格回答这个问题。&br&留学生如何在美国找工作?@出出国&br&&br&第一,在美国找工作有多难?在我认识的所有同学、朋友,还有上班以后的实习生和同事当中,有学CS和Finance的名校毕业生找不到工作回国或者继续读博的,也有往常大家觉得很难很难的专业找到工作的,其中包括律师,市场营销,人力资源,音乐专业(大提琴),在洛杉矶学电影制作的男生现在在迪士尼做编导的,以及一位在2009年金融危机横扫美国的时候还过五关斩六将进入投行的。 在我看来,在美国读书毕业以后找工作这件事,是现在很少数完全凭借个人能力来定胜负的。除非你是红二代,连国内的富二代也未必能够给你一纸Offer,且必须是Sponsor的。所以这个问题总结起来就四个字,全看个人。只要你够努力、够牛逼,什么不可能的都能变成可能。&br&&br&  第二,怎么找?方法很简单:学校的Career Fair,一轮或两轮面试,On-Site,最后Offer。&br&1)Career Fair那两天我最大的体会就是那句老话,“机会永远是给有准备的人准备的。” 很多人在毕业前的最后一个学期才去参加Career Fair,拿不到面试就说招聘会没用。其实这不是招聘会没用,校园招聘仍旧是录取应届生的主要手段,而是这些临时抱佛脚的人根本就没有练习过。谁都不是天生就会推销自己、跟HR谈话的,如果不是在刚入学的第一个学期就去参加Career Fair,从起初从一个面试都拿不到,到后面每个学期都去都练习,你在最后一个学期绝不可能拿到很多面试。这本身就是一个倒金字塔的结构,你或许去谈30个公司,能拿到20个面试,能进10个二面,然后5个On-Site, 最后才能拿到3个Offer。如果你想谈一个公司就有一个Offer,那简直是痴人说梦。 还有改简历。一份简历接过来不用30秒我就知道你是改过一次两次,五次十次,还是超过二十次。很多人认为简历是一劳永逸的,缺少一个反思的机制。正确的做法应该是每谈完一个公司,就迅速记下来他们感兴趣的点是什么,问的问题是什么,甚至是当时脸上的反应和表情,然后回去反思自己的简历,不断地修改上面每一个细节。我当时从第一版简历到最后帮助我拿到Offer的简历,改了最起码三十次。你只有摸清对方的需求,才能对症下药。 另外多加一个细节,很多国际学生为了提高命中率,都只谈Sponsor的公司,这是很浪费的做法。一方面,招聘会的目的除了拿面试,还要最大化练习谈话的次数,所以什么公司都可以。另一方面,所谓是否Sponsor,很多公司都默认为不支持,但实际上这些事情都是灵活的。&br&  2)前期面试  有些人可能通过校园招聘拿到面试,也有些人是内部Refer或者LinkedIn,不管你是怎么拿到面试的,所有人到了面试那一关就重新站在一条起跑线上。谁能跑赢完全凭借你面试中的表现。很多人来美国之前可能都没有在国内经历过招聘面试,加上语言的障碍,对于在面试当中应该如何表现一无所知。  针对Behavioral Interview,去面试之前网上随便一搜就有长短各种问题的List。很多人在面试前就大致一扫,即使是问到类似的问题也完全没有准备好,那我只能说你的悲剧是你一手造成的。或许第一次第二次面试你不了解情况,但面试十次以上应该就有一个大概的掌握。尤其是很多问题都是殊途同归的,都可以用一个答案来回答同时显示你的优势。比如根据做一个项目的经历,可以覆盖Leadership, Time Management, Work with People, Disciplined, Results-Driven, Communication。 由简历上的一行字推演到一个故事,这种事情不靠准备难道你想靠现场发挥吗?你就不怕出Bug然后现场露馅吗? 最常见的一个问题是What‘s your weakness? 这么通俗的题目面试官肯问你简直就是放水了,仍旧有很多人现场卡壳。单凭这一点,我就可以拒掉你。原因很简单,在你接下来三四十年的职业生涯当中,没有任何一个会议是可以完全无准备就参加的。哪怕这个会议在说你非常了解的领域,都最起码要对相关的情况和文件做一个Review。如果你今天连自己的面试都准备不好,那我不觉得你会准备将来的工作会议,就这么简单。至于怎么答才能既不会无关痛痒,又不会毁掉前途,网上有很多答案,我不喜欢喂伸手党。 至于Technical Interview,各个专业各显神通。在此不赘述。  3)On-Site  当你走到On-Site这一步,最起码可以证明你前期的准备都是足够的,且顺利过关了。而如何处理On-Site,其实已经不需要太多人教你了。但凡能走到这一步的人都会明白,你面对的简直是一个学期项目的工作量——从调查公司背景,到重新Review Technical Knowledge-Set,准备Presentation(有些公司要求),甚至包括穿什么衣服、怎么握手,事无巨细。On-Site不光是对个人能力的检验,也是体力和抗压能力的挑战,很多公司专门设计出拉锯战一样的面试过程,就是为了观察应聘者是否能够承担将来需要超负荷工作的情况。 之前说到的公司是否Sponsor,在此补充一下细节。我走到On-Site的时候,其中有一家公司是不给办签证的,我当时抱着涨经验的方法就什么也没说去了。面试的最后一轮是公司的VP,看得出来他对于我的表

我要回帖

更多关于 l1正则化 的文章

 

随机推荐