其他

一位工业界机器学习从业者的自我修炼

2017-01-19 开智学堂 开智学堂

小编的话:本文约 4500 字,阅读建议时间 7 分钟。

对机器学习感兴趣的你,是否好奇专家如何选用模型解决实际问题?是否担忧如何跟上机器学习的发展速度?即将在开智学堂开设「基于深度学习的自然语言处理」课程的童牧晨玄老师,将告诉你他与机器学习的故事,同时送上给初学者的小建议。

我硕士毕业前就加入了初创公司(App Annie)做数据相关的工作,是边工作边完成的毕业论文;之后在比较成熟的创业公司(豆瓣)负责一个产品线的数据和算法;而后又在「巨无霸」型公司(百度)待到现在。因此工作年份虽然不算长,见过的样本却足够多样。工作过程中,遇见佩服的前辈,总要请对方吃饭然后请教一些人生的经验。

自己踩坑,前辈提点,再加上对身边从业新人的观察,使我感到在工业界成为优秀的机器学习从业者,是有迹可循的

「优雅通用」与「简单有效」

在学校的时候一直痴迷精巧的机器学习模型,及其背后的理论。因此刚工作的时候总想着怎么能「优雅」、「通用」地解决实际遇到的问题。加入豆瓣,接到的第一个任务是「找出一批喜欢文艺作品的用户」。

我当时的想法就是用矩阵分解的方法,把用户和条目表示成低维向量,之后再对用户向量进行聚类。但是在和我的导师阿稳讨论之后,他却给了我当头棒喝。他表示这种方法效果不一定好,更简单有效的方法是选出带有「小说」,「文艺」之类标签的条目,然后选出对这些条目有较多行为的用户即可。

事实证明这确实是一个简单有效的方法,用小得多的成本很好地解决了这个问题。也许这种方法看起来并不「漂亮」甚至有点「山寨」的感觉,但在工业界使用机器学习,第一要务是带来产品或指标的实际效果。在之后的工作中,也见到过一些新人「拿着锥子找钉子」:看到一个新发表的模型,就不计成本,不考虑产品发展阶段地想应用到产品中,这事实上是陷入了「局部最优」。一个真正掌握机器学习的人,应该清楚地知道自己工作的「优化目标」是什么

那么另一个极端就是最有效的吗?我也在面试中遇到过从业多年的技术人员,虽然做的是算法策略相关的事情,却表示对机器学习方法不屑一顾,他的观点是「实际当中简单的方法才是最有效的」,「简单的统计已经能解决 80% 的问题,剩下的 20% 用人工规则就可以解决」。

然而就拿广告点击率预估这个问题来说,简单的统计只能得到高频广告的预估值,对于低频广告和新广告,如果想靠人工规则解决,只会变得繁琐且不准确。机器学习方法对点击率预估问题恰恰真正提供了一种优雅且通用的解决方案,早已被业界广泛采用 [1,2]。

又比如计算短语之间相似性的问题,因为自然语言中存在大量的同义词,要让机器判定「宝马」和「奔驰」表达的是类似的概念,在以往的系统中需要做大量定制化的数据挖掘工作,而近年兴起的词向量类方法,为这类问题提供了一种简单却有效的解决方案 [3]。

机器学习也要「刷新番」

随着机器学习理论、实践的发展,能被机器学习方法更好解决的问题在快速增长。

与一般人的理解相反,Google 其实并不算是一家以机器学习起家的公司。Google 在广告点击率预估上很早就开始使用机器学习,但在搜索算法上长期使用的是基于规则的策略 [4]。然而在 2015 年 10 月,Google 对外宣布在其搜索算法中引入了基于深度神经网络的 RankBrain 方法,是策略中第三重要的信号 [5,6]。2016 年 9 月,Google 宣布其使用神经网络技术训练的机器翻译系统替代传统机器翻译系统,效果大幅提升 [7]。

在这样发展的浪潮下,「机器学习无用论」就变得不值一驳了。

对于一个参与到具体产品的机器学习工程师,理想情况下,他的技术及经验应该是随着产品一同成长的。通常来说,产品初期使用复杂的机器学习方法,也许成本和风险太大,应该从最简单的机器方法,甚至是统计及人工规则的方法开始。

而随着产品的发展,简单的方法难以达到最佳的效果,这时候就需要从业人员有效使用机器学习对问题进行建模、评估、工程化的能力。而且这种能力必须不断更新,因为这是一个高速发展的领域,基本上每年各个问题的基准都会被新方法刷新一遍,各种建模的新技术层出不穷。工业界的从业人员若不从学术界最新成果吸取养分,之前掌握的「最优解」很快就会变成业界的「次优解」

机器学习的学者早已全面拥抱预印文本库 arXiv 。以前以季度或月为单位刷顶级会议的论文,就可以较快地追踪新进展,现在却要以星期甚至天为单位刷 arXiv 的「新番」。这又无形中给从业者造成更大的压力。好在这并不是无解的,良好的理论基础和不断扩增的见闻会使你阅读论文的效率成倍增加。人工智能研究科学家 Karpathy 这样提到他与导师李飞飞阅读效率的巨大差别 [8]:

I remember being impressed with Fei-Fei (my adviser) once during a reviewing session. 

I had a stack of 4 papers I had reviewed over the last several hours and she picked them up, flipped through each one for 10 seconds, and said one of them was good and the other three bad. 

Indeed, I was accepting the one and rejecting the other three, but something that took me several hours took her seconds.

给初学者的建议

机器学习初学者可能会遇到这样的问题:工作事情多,自己的数学基础也不算很好,论文读起来很慢,怎么办呢?对此,我个人的建议是:

阅读入门教材,了解领域框架。先找到这几年新出的入门课程、教材(如周志华老师的《机器学习》),对整个机器学习领域有一个框架性的理解。强调「新」是因为这个领域确实发展得太快,有了框架,论文的内容就可以往框架里对应位置塞,慢慢也就有左右逢源的感觉了。

查缺补漏和系统学习并行。论文中不懂的数学内容,我和前辈请教后自己比较认同的方法是查缺补漏和系统学习并行之。先掌握所有数学基础,再学习机器学习,这条路对一般人来说太枯燥了,缺乏具体应用对数学内容的理解也未必深刻。完全靠查缺补漏,对相关知识的理解又难免片面,长期来看效率未必高。

两者相结合的方法,意思是先通过查缺补漏大概知道对应数学方法的原理,不求甚解却也不影响对论文方法的整体理解。而在长期查缺补漏的过程中自己就会感觉到某一个数学分支的重要,以此再找时间进行系统性的学习。

我自己喜欢晚上下班后学习理论和看新论文,第二天白天上班路上在脑海里重新整理昨晚所学的内容。近几年的科学研究已经证明睡眠对学习新知识、巩固记忆很有帮助 [9]。知道这样的结论后我对睡眠这个「学习」的机会变得珍惜,总是希望睡前学点东西让睡觉时的脑袋也别「空转」。「The morning paper」的作者 Adrian Colyer 也有类似的习惯 [10]:

I let the ideas in the paper swirl around in the back of my mind. Sometimes consciously, sometimes unconsciously – but this ‘thinking time’ definitely seems to help me.

以上这些心得,与所有有志于成为优秀机器学习工程师的同学共勉。

参考文献:

[1] Ad Click Prediction: A View from the Trenches
[2]Practical Lessons from Predicting Clicks on Ads at Facebook
[3]

了解更多文献,请戳下方原文!


作者童牧晨玄老师即将在开智学堂开设「基于深度学习的自然语言处理」课程 ,助你:

  1. 掌握神经网络与深度学习基本原理;

  2. 熟悉各类自然语言处理相关任务;

  3. 搭建用于自然语言处理的经典神经网络模型;

  4. 实现「个人助理」,预测在对话中如何回复。

戳原文,直接预约课程!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存