Welcome

大家好,欢迎来到吾加的Blog。记录自己的学习和实践总结,包括编程、机器学习算法、搜广推实践、程序员职业发展等。目前在一家国内的互联网上市公司担任技术和产品的负责人。

Diffusion models导读

Diffusion models导读 背景 很多从深度学习开始接触算法的同学,一开始对Diffusion model的论文会有点不适应。和我们常见的深度学习论文不同,Diffusion model用了不少数学工具,而这几年数学工具用的比较多的深度学习工作的出圈度都不高。 如果你对数学公式不反感,个人建议从****Understanding Diffusion Models: A Unified Perspective** 开始读。这篇相对于其他资料,作者对读者的背景要求最少,全篇读下来很少需要再找额外资料辅助。然后可以读**What are Diffusion Models?** 和 Generative Modeling by Estimating Gradients of the Data Distribution,这两篇文章写的很好,大部分学习资料也都在引用它们,相对于前面一篇,写的比较简洁,对读者背景要求高一些。接着可以找点代码实现看下,推荐下huggingface的The Annotated Diffusion Model,**基于Pytorch的demo实现,感受一波细节。最后,必须推荐知乎上的讨论:**diffusion model最近在图像生成领域大红大紫,如何看待它的风头开始超过GAN?****其中特别推荐我想唱high c的答案,但不建议一开始毫无了解的时候去研究这些回答,对读者背景知识假设有点多。当然,如果相对于数学公式,你更熟悉代码,也可以先从huggingface的那篇开始,它的基本介绍写的即简洁又易懂。 本文不是捷径,只是个搬运工,希望能减少一些同学在学习过程中的产生的不适感,帮助更多的同学了解Diffusion model。 基本概念 我们先看下Generative Model核心要干什么,引用下Song在blog里面的一段话: Suppose we are given a dataset ${x_1,x_2,…,x_N}$, where each point is drawn independently from an underlying data distribution $p(x)$. Given this dataset, the goal of generative modeling is to fit a model to the data distribution such that we can synthesize new data points at will by sampling from the distribution....

January 9, 2023 · 2 min

不一样的论文解读:2018 Real Time Personalization Using Embeddings for Search Ranking at Airbnb

Airbnb这篇论文拿了今年KDD best paper,和16年google的W&D类似,并不fancy,但非常practicable,值得一读。可喜的是,据我所知,国内一线团队的实践水平并不比论文中描述的差,而且就是W&D,国内也有团队在论文没有出来之前就做出了类似的结果,可见在推荐这样的场景,大家在一个水平线上。希望未来国内的公司,也发一些真正实用的paper,不一定非要去发听起来fancy的。 自从Word2vec出来后,迅速应用到各个领域中,夸张一点描述,万物皆可embedding。在NLP中,一个困难是如何描述词,传统有onehot、ngram等各种方式,但它们很难表达词与词之间的语义关系,简单来讲,即词之间的距离远近关系。我们把每个词的Embedding向量理解成它在这个词表空间的位置,即位置远近能描述哪些词相关,那些词不相关。 对于互联网场景,比如电商、新闻,同样的,我们很难找到一个合适表达让计算机理解这些实体的含义。传统的方式一般是给实体打标签,比如新闻中的娱乐、体育、八卦等等。且不说构建一个高质量标签体系的成本,就其实际效果来讲,只能算是乏善可陈。类似NLP,完全可以将商品本身或新闻本身当做一个需要embedding的实体。当我们应用embedding方案时,一般要面对下面几个问题: 希望Embedding表达什么,即选择哪一种方式构建语料 如何让Embedding向量学到东西 如何评估向量的效果 线上如何使用 下面我们结合论文的观点来回答上面问题,水平有限,如有错误,欢迎指出。 希望Embedding表达什么 前面我们提了Embedding向量最终能表达实体在某个空间里面的距离关系,但并没有讲这个空间是什么。在NLP领域,这个问题不需要回答,就是语义空间,由我们文明中的各式各样的文本语料组成。在其他场景中,以电商举例,我们会直接对商品ID做Embedding,其训练的语料来至于用户的行为日志,故这个空间是用户的兴趣点组成。行为日志的类型不同,表达的兴趣也不同,比如点击行为、购买行为,表达的用户兴趣不同。故商品Embedding向量最终的作用,是不同商品在用户兴趣空间中的位置表达。 很多同学花很多时间在尝试各种word2vec的变种上,其实不如花时间在语料构建的细节上。首先,语料要多,论文中提到他们用了800 million search clicks sessions,在我们尝试Embedding的实践中,语料至少要过了亿级别才会发挥作用。其次,session的定义很重要。word2vec在计算词向量时和它context关系非常大,用户行为日志不像文本语料,存在标点符合、段落等标识去区分词的上下文。 举个例子,假设我们用用户的点击行为当做语料,当我们拿到一个用户的历史点击行为时,比如是list(商品A, 商品B,商品C,商品D),很有可能商品B是用户搜索了连衣裙后点的最后一个商品,而商品C是用户搜索了手机后点击的商品,如果我们不做区分,模型会认为B和C处以一个上下文。 具体的session定义要根据自身的业务诉求来,不存在标准答案,比如上面的例子,如果你要做用户跨兴趣点的变换表达,也是可以的,论文中给出了airbnb的规则: A new session is started whenever there is a time gap of more than 30 minutes between two consecutive user clicks. 值得一提的是,论文中用点击行为代表短期兴趣和booking行为代表长期兴趣,分别构建Embedding向量。关于长短期兴趣,业界讨论很多,我的理解是长期兴趣更稳定,但直接用单个用户行为太稀疏了,无法直接训练,一般会先对用户做聚类再训练。 如何让Embedding向量学到东西 模型细节 一般情况下,我们直接用Word2vec,效果就挺好。论文作者根据Airbnb的业务特点,做了点改造,主要集中在目标函数的细节上,比较出彩。先来看一张图: 主要idea是增加一个global context,普通的word2vec在训练过程中,词的context是随着窗口滑动而变化,这个global context是不变的,原文描述如下: Both are useful from the standpoint of capturing contextual similarity, however booked sessions can be used to adapt the optimization such that at each step we predict not only the neighboring clicked listings but the eventually booked listing as well....

October 6, 2022 · 2 min

Migrated Blog From Octopress to Hugo

自从社交媒体火起来后,很少用在blog写文章,这几年在知乎专栏写的比较多,收获了不少朋友,这个blog荒废多年。但鉴于社媒氛围的剧烈变化,还是blog这个老地方安静,后续会重启,作为一个自留地使用。 把域名买了后发现octopress已经是10年+前的事情,且早已经不维护, 准备迁移到hugo上,花了时间没有找到完美的迁移方式,多多少少会有些格式问题,后面慢慢修吧。好在这个blog的主要内容都是早期工作时间写的,内容质量一般,但也是自己成长的一部分,也懒得删掉了,对阅读起来体验不好的朋友道个歉。

October 6, 2022 · 1 min

微店引发的互联网模式思考

现有爆发的互联网模式,体现在将原先只有一小部分人能享受到的服务面向大众,从而实现对现有产业的改造。比如小米,原先苹果三星的价格导致大部分用户无法享受他们的产品。小米提供了一个相对优质的产品,牺牲了不少品质,比如外观、做工,但成功将价格定在大众可接受的区间,从而实现了爆发式的增长。这种例子,传统行业也有过很多例子,比如优衣库、Zara,将上流用户的衣服,通过降低一定的质量和设计,完成价格革命,让普通用户享受到时尚,从而实现服装行业的革命。相同的例子还有福特,将汽车面向普通大众。这些例子说明一个,在品质和价格间做好balance,将优质的服务面向大众,具有极大的潜力,同时也说明了一个行业趋向成熟。 回过头来仔细想下,为何苹果三星不直接面向大众提供服务。这里面除了品牌定位,还涉及到一个行业的发展。在行业发展初期,各种成本都是高昂的,所以只能面向一些高端用户。高端用户的定义可以是:对价格不敏感,但对品质有较高的要求。够用和追求品质是区分普通商品和奢侈品的重要区别,俗话说一分钱一分货,十分钱两分货。奢侈品对于人类有重要的意义,在这些no functional的地方持续的投入,恰是文明的来源。拉回来看前面的例子,若要将高端用户使用的服务面向大众,其品质必然会有所下降,但会进入一个处于可接受的范围,接着极力的压榨价格区间,进入市场后照成破坏性的增长,一家独霸。这里小米做到了,淘宝也做到了一半。 来看今天的主题—微店,即微商。上面说到淘宝做到了一半,即对传统的零售商业模式的冲击并没有完成一家独霸,彻底改造。其原因在于,其商品价格下来后,优质的服务不能保证,即没有进入一个合理的区间。这里面的问题比较复杂,刨去假货不说,很多时候商品质量不好,真就是商家无法提供优质的服务。因为这些优质的服务被传统大佬们垄断着。淘宝可以抹除店面、分销的成本,但无法解决生产的问题,当这些大佬进入电商后,很快就被击垮。那为什么要提到微商,因为中国作为一个世界大工厂已经很多年,其生产能力在不断的提升,但缺少产品设计和分销渠道。而微商类似于,拥有这些资源的个人,不愿意被传统的渠道垄断,但有无法承担建立品牌的费用,借力与人与人直接的信任传播来实现分销。 这里重点讲下品牌,淘宝最大的问题还是在于流量越来越贵,小商户直接就出局了,没有办法顺利的进入成长期。而传统的大佬在建立品牌投入的巨大成本,需要靠一定的利润空间收回。所以,如果想打赢这场仗,必须抹除建立品牌的成本,而这也是微商可能能够提供的。天下没有免费得晚餐,如果不是某个环节的效率提高了导致价格的下降,这种模式是不可持续的。这也是为什么目前微商中的代购、面膜之类的东西不能长远的原因。从这点来看当前几个比较热的互联网公司,能得到一定的启示。拨开热闹的表象,观察其是否能照成流程或生产力的提高。比如小米最近的装修,就是一个极好的商业切入点,非常值得资本进入烧钱。同样的还有快的和滴滴。 最后,互联网模式有个重要的特点,即scalable—即高度可复制性,这点下次再讨论。

April 18, 2015 · 1 min

Kaggle入门总结

在知乎上看过一个答案,大意是有个地方叫kaggle,推荐搞机器学习的同学多上去撸一撸,实践出真知。同时还建议先把101系列的题目撸完,再选个感兴趣的比赛做。该答案详情见参考文献。 工具 有工程背景的同学,建议python,拥有不输给R的生态。主要用到以下工具: ipython notebook + pandas + sklearn 在面对特别大的数据集,使用了公司的spark。 ipython notebook,神器,请参考我的另一篇blog Ipython Notebook对机器学习工程师的价值 pandas: 从工程过来的同学,首先请放弃循环之类的代码实现方式,拥抱dataframe。 sklearn:在github上非常活跃的项目,请多读官方文档。 spark:一般kaggle上比赛的数据量级是没有必要用它,但是最近有个比赛train的数据上百g了,所以试了下它。 比赛选择 首先,请从101系列中选几个做做,该系列一般有详细的教程,熟悉kaggle。接着选几个正在进行的比赛练手。一开始别贪心,注意下数据集的大小,当数据集大于几个g后,工程相关的工作会增加很多,同时对单机的性能有一定的要求,不利于初学者。但是,数据量大更符合真实的情况,比如做过一个ctr预估的比赛,无论是特征工程和模型训练都要更小心谨慎,每次试错的成本很高,随便训练一个模型都需要3-4小时,相应的这个比赛让我意思到sample的重要性,以及一个非常重要的特征处理方法featrue hashing. 本文将重点总结我在做自行车出租数量预测这个比赛的情况。该比赛介绍如下: You are provided hourly rental data spanning two years. For this competition, the training set is comprised of the first 19 days of each month, while the test set is the 20th to the end of the month. You must predict the total count of bikes rented during each hour covered by the test set, using only information available prior to the rental period....

April 18, 2015 · 1 min

random forest

概述 知识背景要求 本文要求读者对机器学习中的一些基本概念有一定了解,比如特征,交叉验证,generation等概念。随机森林基于决策树模型,读者事先最好对决策树有一定的了解,若完全不了解,请将文中的tree抽象成能告诉你对错的一个black box,则不会影响理解。 目录 基本思想 理论保证 实践中常用的特性 实践效果验证 需要重点注意的 参考 基本思想 Ensemble method ensemble是当前主流机器学习领域一个非常流行的概念。引用sklearn的文档: The goal of ensemble methods is to combine the predictions of several base estimators built with a given learning algorithm in order to improve generalizability / robustness over a single estimator. 其又分为两大类:averaging和boosting,分别以Random Forest和AdaBoost算法为代表。 Random Forest 引用wiki的定义: Random forests are an ensemble learning method for classification, regression and other tasks, that operate by constructing a multitude of decision trees at training time and outputting the class that is the mode of the classes (classification) or mean prediction (regression) of the individual trees....

February 16, 2015 · 2 min

机器学习技巧之feature_hashing

问题 最近在玩kaggle上的ctr比赛,其训练数据含大量categorical,无法直接用LR模型。举个例子,某个categorical数据集含[苹果,西瓜,梨,桃子]四个类别,一般的处理方法是将这些类别映射成[0,1,2,3],放入模型中训练。其实这是不合理的,在categorical中,桃子和西瓜并不存在等级差,而变成[1,3]后会存在3>1的问题。以Logistic Regression为代表的算法就无法对该特征学到合适的参数。因此,业界一般会对categorical数据集做onehotencoding,即向量化,还是以上面数据为例子,苹果对应的向量为[1,0,0,0],桃子对应的为[0,0,0,1]。在sklearn中,可以通过OneHotEncoding或get_dummies实现。显而易见,数据会变得非常稀疏。同时,当categorical的类别变多,特征维度随之剧增,带来的内存存储问题。比如在这次的ctr中,如果采用OneHotEncoding,我60g内存的机器也会报Memory error。 再次,ctr领域或者说高维大数据领域,数据集或多或少的存在稀疏问题。主流ML库都会实现一套稀疏矩阵,应对该问题。feature hashing又称feature trick,类似于kernel trick,在ML领域得到广泛应用的技巧。 维基上的定义: In machine learning, feature hashing, also known as the hashing trick[1] (by analogy to the kernel trick), is a fast and space-efficient way of vectorizing features, i.e. turning arbitrary features into indices in a vector or matrix. It works by applying a hash function to the features and using their hash values as indices directly, rather than looking the indices up in an associative array...

February 10, 2015 · 2 min

git 实践

git rebase和git branch svn过来的同学一定会觉得git的分支管理好方便,但更应该了解的是git rebase。可以说,用不用git rebase是区分你熟不熟悉git的重要方式。 ##git reset git fetch和git pull git commit -amend

February 7, 2015 · 1 min

2014读过的书和参加的公开课

技术类 机器学习 Pattern Recognizition and Machine Learning. 目前完成前四章,还没有完全吸收,希望2015的成长能够顺利吸收这本书的知识。 推荐系统cookbook。感觉这本书有些落后于时代,大致翻了下。 推荐系统实践–项亮。入门好读物。 Frontiers in Massive Data Analysis。综述型,推荐。 The Elements of Statistical Learning : Data Mining, Inference, andPrediction。当做工具书,还没有读多少,先把PRML搞定。 kaggle solution分享。 Python python cookbook. 非常推荐。 廖雪峰的python教程. 简洁概要,实战内容有难度,很适合提供自己编程水平。 python for data analysis。了解到pandas,数据分析利器。 sklearn官方文档。图文并茂,极力推荐。 pandas官方文档。例子丰富,入门先推荐10min那篇。 R 粗略看了写文档。 非技术类 文明之光(上下),推荐,吴军博士的书质量一如既往。 女士品茶。概率论发展史及大牛八卦。 英语语法俱乐部–施元佑。大力推荐,介绍语法的来龙去脉。以前太不看重语法,阅读和写作的瓶颈。 金字塔原理。 思考的艺术 如何阅读一本书 数理统计简史 公开课 Andrew Ng的Machine Learing。完成 台大的机器学习基石。完成 Functional Programming Principles in Scala。继续上 Mining Massive Datasets,正在上 機器學習技法 (Machine Learning Techniques)。正在上 互联网资讯 咨询:依旧是知乎,目前没有看到什么能替代。 kaggle,非常好的机器学习学习平台 cousera,2015能学更多有价值的课程。

January 2, 2015 · 1 min

机器学习基石课程总结

课程一开始,提了四个topic,what every machine learning user should know * when can ml learn * why can ml learn * how can ml learn * how can ml learn better When can ml learn 首先,机器学习针对的场景,通过A对D和H学习一个g,用来描述最终的目标f,而这个事情无法简单的用规则搞定。其次,澄清各类细分ml场景的定义: * 监督式 * 非监督式 * 增强学习 * 推进系统 * Activity学习,通过asking来学习 * Streaming why can ml learn * shatter的概念 * break point的概念 * generation问题 * VC维的概念 how can ml learn 讲了一些基本的linear方法,比如logistic regression,顺便提了下nonlinear的问题,通过transform将nonlinear映射到linear可分的空间,有点类似核函数,需要进一步确认。 how can ml learn better * overfiting * regularition,这块数学不错。从拉格朗日的constraint说起,到L1和L2的直观意义。 * cv * 三个重要的Principle。Occam's Razor, Sample Bias, Data Snooping....

December 28, 2014 · 1 min