想攀登高峰,需向山顶望去;想成为高手,也需向高手学习。百度资深算法工程师童牧晨玄老师,从业多年,培养了极为丰富的业界经验和诸多信息组块。正是这些,帮助他屡获殊荣。现童老师将其工作经验和方法总结出来,希望可以为在深度学习和人工智能道路上摸索前行的小伙伴指引方向,帮助大家勇攀高峰,创造未来。
Q1: 童老师,通常一个 NLP 算法工程师的日常是做什么?区分做预研和做工程实践吗?
A: 一般项目有调研阶段,主要做数据分析和算法线下小规模测试;有效果就上线,简单点的自己开发,涉及到特别大的框架改动就找专门做工程方面的人开发。这个是百度的情况,豆瓣基本是算法工程师自己开发,产品工程师调用。总之不是专门做研究,要想办法和产品、工程结合,应用到系统,增加系统效果。线上工程性开发不是特别多,调研和实验的部分多一些。
Q2: 童老师,作为算法工程师,除了会 Python 外,还有哪些语言需要掌握?
A: Python 性价比最高,其他语言的库对机器学习和科学计算支持都没有 Python 好。个人建议深入掌握 Python 语言,效率比较高。如果 Python 掌握的非常好了,推荐 C++,因为在工业上 Python 的性能还是差了一点。
Q3: 新技术怎么选,比如现在的深度学习框架就有 Tensorflow,Pytorch,Keras,Caffe2 等,有必要再了解多个对比么?
A: 其实主要有竞争力的不多,比如 Tenorflow,Pythorch,Caffe 等,Keras 建立在其他之上的包装,很难做一些定制。Pytorch 学习曲线比 Tensorflow 低,Caffe2 主要面向生产环境,Pytorch 可以很灵活地定制模型。建议大家可以看一下 Pytorch,Tensorflow 是静态图,先搞好图再运行,Pytorch 和写 Numpy 差不多,但又会动态生成图。虽然可能效率上差一些,研究环境中 Pytorch 会比 Tensorflow 好用。
Q4: 童老师你看源代码看得多吗?一般什么时候会看?
A: 一个框架会看它的教程,了解最基本的构件和设计思想。其实了解一个框架和学物理知识一样,里面有一些特别重要的概念,要先搞清楚概念的作用,然后再在不断学习过程中深化理解这些概念。比如 Tensorflow 的 Graph 和 Session 的概念。
第一个是出错,出错时可以看一下源代码,如果中间用到相对高级用法,不一定一次看懂,碰到了可以去查阅 API。还有一种情况是觉得 API 很简单,觉得里面做了很多事情,想去了解内部细节。
看代码之前如果有设计文档的话可以很大地提高看代码的效率。比如 Tensorflow 那个论文就相当于一本白皮书。可以先看相对简单的库,这些库的可能不会考虑多机并行、集群计算等场景,可能就是单机运算场景。Python 有个库 Theano,对自动求导做的比 Tensorflow 更早。还有 FaceBook 的 Torch,不过是用 Lua 写的。这两个库相对简单,可以写个简单的神经网络,看每一步是怎么实现的。
Q5:童老师,一般数据、算法工程师有团队合作?(包括内部和外部 —— 和 PM/市场部门/设计师)如果是团队合作,合作过程有哪些坑要注意的?
A: 不同公司、不同部门不太一样。和产品形态有一些关系。合作过的 PM 有两种,一种是完全不了解算法的,需要给对方一个正确的预期,尽早让对方知道算法的效果。还有一种对算法比较理解,合作会比较简单。设计师合作的不多。
Q6:童老师在工作中会有类似的 Checklist 吗?或者说有没有一些跟技术无关的但又经常被人忽视的点,可以分享给刚入门机器学习和深度学习并要应用在工作中的同学。
A: 《rules_of_ml》(http://martin.zinkevich.org/rules_of_ml/rules_of_ml.pdf),这个文档是 Google 内部机器学习工程师弄得,类似于你说的这个 list,或者说把机器学习用到具体场景中的一些经验和规则。实际中大部分场景,机器学习算法并不是最核心的部分。但是如果你是图像识别、照片美化这一类,算法就是核心了。目前对大部分产品来说算法还是起到一个放大器的作用,可以是锦上添花,可以是在已有产品上放大效果或者增强对用户的吸引力。
实际中,无论你是刚引入还是引入很久,一定要让你的算法是可测量的,要让对方知道上了算法之后到底产生了什么样的改进效果。所以,实际当中做算法一定要用数据说话,比如加了算法点击率提高了,或者在网站上停留时长增加了,或者说用户的留存率提高了。可以通过 A/B 测试做。这里面有个点就是产品迭代一定要快,要根据用户反馈进行调整。
另外有个点是产品需要优化的指标和算法的优化目标中间可能有 Gap,比如 Netflix 的目标是让用户满意,在产品上有一些指标,如访问频率,重复访问率等;机器学习算法要直接去优化指标,一个是它反馈时间会比较长,一个月之后才会有一些 label,同时又特别稀疏,而且有很多噪音(影响因素太多)。为了让算法迭代比较快,一般会用一个代理性的指标,相对好测量,又相对能够代表产品满意度,比如点击率,算法容易优化(点了就是 1 否则 0),反馈也快,相对噪音也小。所以实际中一般都会找一个代理指标,让算法去优化这个指标。
当然,也许到某一个阶段,代理指标和真正要优化的指标中间会出现 Gap,可能会影响用户体验。比如优化点击率,算法推荐出来的都是:震惊 XXX。这时候可能就需要有产品 sense 的人或者能够决策的人知道这个东西短期看有收益,长期并不好。那么他就会提出一些先验的方法,取消这部分内容。调整算法或者清理算法结果,会根据长远的不是很好衡量的指标做一些 tradeoff。
Q7: 工作中 code Review 怎么进行比较好?
A: 跟技术氛围和环境有关,养成吐槽烂代码的习惯。如果是基本的代码规范,可以加个检查工具,这个不单单是编辑器的,Git 上也有类似功能。
深度学习基础班
100 年前,电力开启了工业革命;100 年后,人工智能即将改变我们的生活,推动人工智能取得突破性进展的技术正是深度学习。
如何快速入门?开智学堂联手百度资深算法工程师童牧晨玄,共同打造「深度学习基础班」。你将沿新手最佳入门路径,学习 Google Brain 团队基于 Python 研发的 TensorFlow 开源库,完成一个类似 Google 「Smart Reply」(智能回复)技术原型的结业项目。首期课程好评如潮,现在,这辆驶向未来的高速列车即将再次出发,你,要一起奔赴未来吗?
课程 Q&A
Q1:报名这个深度学习班需要什么前提条件吗?零基础可以报名这门课程吗?
A:具有一定的基础,更容易跟上课程,你需要一定的编程基础和数理基础:拥有初级 Python 编程经验,或拥有自学一门编程语言的能力;有一定数学基础,了解概率论基本思想,了解向量、矩阵、导数运算。
详细请参考:《深度学习课程预习建议》(http://t.cn/R09H9fR),在电脑上阅读体验更佳。
如果你对深度学习、人工智能感兴趣,可以先报名课程,尝试挑战入学任务。如若你能通过入学任务,则具备相应学习基础。如果没有通过入学任务,会返还全额学费,就当是多了一次练习机会。
Q2:这门课面向什么样的同学开放?学习该课程对未来职业发展有哪些好处?
A:这是一门深度学习入门课,面向深度学习新手。完成课程后,你可以初步掌握和使用深度学习的常用模型,课程要求学习者具备一定的数学基础和编程基础。
深度学习是一项通用项很强的技能,适用于不同领域。课程主体任务是利用深度学习处理自然语言,掌握后,学习到的知识几乎运用到人工智能覆盖的各行各业,如优化搜索引擎,智能推荐,绘制更立体的用户画像,无人驾驶,投资决策,写稿机器人,医疗保障和精准农业等;
深度学习、人工智能是当下最火的技能,与传统算法有很多根本不同。掌握一项新技能,可以为你提供更多职业可能。你也可借此更深入理解新事物,跟上时代趋势,从中捕获新机会。
Q3:假如我这一期时间不方便参加,请问下一期什么时候开课?
A:为保障学习品质,每一期课程我们均会经过长时间的优化打磨后才开放招生,下一期深度学习基础班预计要到明年年后再开课,具体日期尚未确定。所以建议大家选择本期课程,快人一步踏上通向未来的列车。■
——- 学习人工智能,创造你的未来 -——
掌握深度学习原理
搭建神经网络模型
熟悉自然语言处理
开发智能个人助理
注:深度学习基础班席位有限,手慢无。
立即购买,成为创造未来的人!