2020 小结

很久没更新技术文章了,草稿箱里还有几篇半成品一直被我以工作日事情太多、周六日需要休息为由 delay 了好几周;而现在站在 2021 年的起点,望着 2020 年的尾巴,不禁感慨一年就这么呲溜一下就过去了,总想写点东西来复盘一下 2020 这一年,还记得上次写的这种年度总结的文章是 2017 小结,那会还在上研一,现在回看这篇文章还是略有感慨,还是比较佩服当年那个充满激情与精力、对各种知识都充满好奇的自己;趁着元旦放假有空这几天,还是决定简单地对 2020 年做个总结,几年后再回头看看,或许会有不同的感悟。

关于工作

工作后到目前为止学习到的关于 presentation 的最重要的一点是:要有总结,甚至可以先把结论放在开头,所以这里简单概括工作后目前为止做的两个事情

  1. 多目标出价的推导与实验
  2. 联邦学习的探索与落地

多目标出价的推导与实验是刚进来的时候被派去做的一个调研工作,现在想起来感觉还是挺绝望的:对业务不熟悉,身边没有人能给予相关的指导,硬生生靠着自己一个人去推公式、读代码,还得随时提防开实验的时候线上搞出个事故。且因为业务的特殊性,这个实验只能开一天且需要在凌晨开启,所以经常出现的现象是我在凌晨掐表开实验,观察个几十分钟,然后才敢去睡觉,但是半夜冷不丁还会因为数据有波动报警电话直接把你吵醒,那会真的是相当的绝望。不过最终一遍遍尝试与 debug 代码,也总算是通过实验验证了推导出来的结果,因为 infra 等原因,反转实验一直被 delay,后面架构调整,这块业务也就不再跟进了。

这里的技术细节因为涉及保密就不详细展开讲了,不过大概几个月后意外发现了这篇 paper,Bid Optimization by Multivariable Control in Display Advertising,然后我套用里面的方法来推导我之前的问题,发现结果跟我之前推出来的是一样的!!!,所以我也更加肯定了上面那个没开反转的实验是能带来收益的,这篇 paper 我也特意写了一篇阅读笔记《Bid Optimization by Multivariable Control in Display Advertising》阅读笔记

如果说前面的事情是一个纯粹的探索,没 kick-off,没人力支持,那联邦学习算是我参与的第一个正式的项目,在这个项目里跟 infra、产品、运营、法务跟多团队都有合作。这个事情简单来说,就是要去探索如果在保护数据隐私前提下利用多方的数据进行建模与落地,中间的方案迭代了好几版,也踩过非常多的坑,但是最后也算是把这个业务在几个行业落地了,关于这一块的细节可以参考这篇文章 字节跳动联邦学习平台 Fedlearner:4 个月落地开源,投放增效 200%+

这一年算是工作的第二年了,在毕业后也算顺利进入了自己规划的广告技术行业,工作这一年多的时间里,也对总体的广告系统有了初步的认识,也做出来了一些成果,总体来讲,So far so good 吧。

关于学习

工作后的学习时间肯定不如读书的时间那么充裕,因为得对自己的业务负责,而且当前的业务涉及到的事情巨多。。。但是本着 stay hungry,stay foolish 的心态,这一年利用节假日和下班时间还是学习了一下所负责的业务以外的知识

  1. 基本上看完了 程序的表示、转换与链接这门课,还有 链接、装载与库 这本书
  2. 读了一些关于出价、召回、精排的 paper
  3. 了解了一个广告系统内涉及到的模块、算法等原理

学习第一部分内容一个原因是兴趣驱动,因为一直对编译和运行这些原理不太懂,这两部分内容跟《深度了解计算机系统》这本书的内容很相似且更通俗,相关的总结我也放到的站点上;另一个原因就是我一直觉得在业界的算法工程师首先得是个工程师,而当前的我认为一个工程师是需要能大概了解代码运行的原理、能看懂别人的代码并在别人的代码基础上添加新的功能、甚至能重新造一个轮子,而不是仅仅局限于改一下模型结构、调一下超参但是不考虑实际落地的开销。当然,这只是现在的我的看法,几年后再回头看看,也许会有变化。

第二部分则可以算作是广告和推荐领域的一些比较前沿或经典的工作了,总体感觉收获比较大的工作也总结写在了博客里,可以概括为一下几个部分

  • 出价: 这部分收获较大的 paper 是 Bid Optimization by Multivariable Control in Display Advertising ,这是阿里发表在 kdd 的 paper,给出了一种方法来推导出价公式和构建出价控制器,且普适性较高,详细内容可以参考本博客的 这篇文章
  • 召回: 这部分收获较大的 paper 是 Embedding-based Retrieval in Facebook Search,这是 FB 发表的一篇基于 embedding 召回的 paper,描述了他们如何从 0 到 1 构建一个召回系统,当中有不少经验值得借鉴 ,详细内容可以参考本博客的 这篇文章
  • 精排:这部分收获较大的 paper 是 Real-time Personalization using Embeddings for Search Ranking at Airbnb,这是 Airbnb 发表的一篇构造 embedding 且把 embedding 应用至 search ranking 的系统,里面有很多从业务出发来设计算法的细节,这种思想我认为是比较值得借鉴的,而不是生搬硬套一个方法 / 模型过来,详细内容可以参考本博客的 这篇文章
  • Delay FeedBack:这部分主要是广告领域的 cvr 模型面临的问题,那就是转化是有延迟的,点击后的样本不能马上当做负样本,而等待足够长的时间让 label 回流的时间又太长,因此有了这一领域的研究,关于这部分做了一个调研,可参考这篇文章 Delay FeedBack In Computational Advertising

第三部分则主要是得益于团队内部良好的分享传统,经常有分享介绍广告系统涉及到的各个模块的功能及其原理,同时也能了解到要上线的各个策略 / 算法,也算是对广告系统有一个初步了解,因为涉及到内部的机密信息,这部分也不便于公开了

学习是一个有阵痛感的过程,因为要接触的可能是一个全新的领域,你要从浩瀚的知识库中筛选出觉得有用的部分并消化掉,而且这些东西并不像游戏或其他东西能获得即时的回报,甚至在很长一段时间内看不到任何变化。

每每想到这,都会感觉有点松懈 (而最近的确也有点。。。);但就在我写这篇总结的时候,我也反问了自己这些问题,而且在自我思考和自我剖析后,还是觉得要坚持,主要有两个原因,原因之一是这能让自己保持一种快速学习的能力,原因之二是说不定哪一天这些知识就排上用场了呢?如同乔布斯所说的 connectting the dots 一样,当然还是得设定一定范围来进行学习的,有目的性其实能让学习速度更快,比如现在的我会问自己 “如果让我去构建一个广告系统,需要怎样的工程能力?算法能力?业务能力?”,当然不太可能做到面面俱到,而是要考虑如何在深度和广度之间做 trade-off,而这个 trade-off 的度,得在实践中慢慢摸索。

总之,还是希望自己能够继续保持持续学习的状态,做能做一个 lifelong learner 吧。

关于生活与心态

这一年基本都是在宿舍和公司过着两点一线的生活,独自一人在北京,处于一种 “一人吃饱,全家不饿” 的状态,每天上班都激情满满,直到最近的 11 月,洗头的时候发现自己居然有脱发的痕迹,不禁感慨 “自己都还没变强,怎么就秃了”,同时脸上疯狂长痘,几乎要毁容。

于是去看医生,还没等我描述完病情,医生就打断我说这个问题很常见,就只是压力太大,然后有熬夜之类的不良习惯之类导致的;后来细细回想,那段时间的确是过于担心项目的进展,同时每天都被各方催,晚上经常有熬夜,也导致了那一段时间相当焦虑,焦虑时饮食又不节制,吃了不少辛辣油腻的东西(但公司的食堂除了健身餐其实也基本都是辛辣和油腻的。。。。)

于是告诉自己健康重要,强行让自己不要那么焦虑,同时加强锻炼,尽量不熬夜、保持饮食清淡,前面提到的脱发的迹象也慢慢有了改善;后来在网上看到了下面这句话,感觉写到了心里,就摘录下来 (出处忘了,侵删)

在历史的发展面前,个人的力量微不足道;作为我们这些普通老百姓呢,要调整好心理预期,尽量顺势而为,不要逆天而行。你当然可以继续努力工作,但千万不要抱有那种「趁年轻拼一把」的心态,事业发展是一场马拉松,健康可持续才是最重要的

希望自己后续无论工作多忙,项目多赶,还是能够保持这种心态吧

小结

写这篇总结文章的过程,也是一个不断的自我剖析和自我反思的过程,剖析自我到底想成为一个什么样的人,反思自我还能不能做得更好,里面的很多观点也是当下年少气盛的我的一些看法,也许有偏颇,等到而立之年再回头看看这篇文章,看一下是否会嘲笑当年的幼稚想法,问一下自己 “当初的愿望实现了吗,事到如今只好祭奠吗”。

最后,希望自己在新的一年里能继续保持 stay hungry,stay foolish 的状态吧,也祝愿各位新年快乐,心想事成。