五面阿里技术专家岗,已拿offer,这些面试题你能答出多少
大家好,我叫贾扬清,现在担任阿里巴巴技术副总裁,负责人工智能平台跟大数据平台的建设,之前在 Facebook 和 Google 任职期间,负责人工智能相关的事务,大家都知道近两年人工智能非常火爆,A 技术、人才的需求量和不菲的薪资,使得很多程序员都想进入这个行业。如何才能成为一名优v , H ! x @ | S O秀的 AI 架构师呢?相信大家心中都会有所疑惑。
一、人工智能行业突然5 3 E f e M % 2 #爆火,同时对架构师的需求量也突然变大了,这p o / } m { ^ % #是为什么?
我觉得这是一个挺有意思的情况,人工智能这个领域 20 年前甚至更早时候就已经存在了,但一直处于不温不火的状态。最近几1 / l神经网络。当时遇到了一个问题,物理世界是一个非w F ; r _ * F )常纷繁复杂的n b N N ~ ) l场景,比如说计算机视觉、语音等等,但是当时能够做到的效果相对比较有限,当时仅能做到 80% 的识别正确率。
即仅可以做出来 demo,但是很难实际落地。从 2012 年 AlexNetg r p ; 4 5 X 开始,软件和硬件以及算法的发展都更加成熟,使得很多算法等相关技术可以真正起到效果。拿计算机视觉举例,2012 年 AlexNet 刚刚出来的时候,在 1000 类a % ] v b u C = $物体类别G U l i c J $ U当中,随机的猜 5 次,它的正确率会在百分之十几左右。到了 2014 年,在做 GoogLeNet 的时候,GoogLeNet 的正确率已经超越了人类识别的正确率,基于这种情况,这些算法就可以在实际应e | l用当中落地了。
计算机d E V 7 0 r -视觉能够非常好地让计算机看见人所能看见的东西,语音识别能够让计算机听懂人所能够听懂的东西,自然语言处理和机器翻译,在现代非常多的场景里几乎可以替代人类翻译,此时应用的Y ] K n 4 J宽度就突然有了非常大% . X L的提升。另外,因为一些新的非6 C是以实验室到科研的路径,用老话来说就是通过产学研一体化出来的人才。后来发I K A L x Q [ 0现实际在落地时有非常多复杂的场景,不是说拿一个 CNN 能跑就行了,而是需要思考怎样, x 6 m把它放到一个更长的链路里,举个例子,我们要在淘宝做商品识别,它的: x y前面需要接数据,后面需要接业务,那么此时就会有工作的分层。最典型的一类工作就是算法工程师,现在还有非常多偏科研的、偏算法研究的工程师在不断地设计新的算法。此时我们发现有很多的需求需要有一个底层的平台来支撑算法的迭代。很早之前,在做算法时,方法比较简单,要做什么算法,就设计什么底层的框架。如果大家还记得,当时基本上做计算机视觉,可能大家都会用 Caff s I Fe,如果要做自然语言处理等等,大家都会用 Pyc D @ eTorch,那些工具,今天想起来都是c r .非常原始的。
但是当时,它解决了我 K U h们一部分垂直领域的问题。在前面几! 0 % | P P年的发展当中,我们发现这些 AI 的工程,越来越多的有共性的x H u Y 4 ;东西出* $ X 4 M现,无论是计算机视觉、语音,还是自然语言处理,或者大家可能不是太熟悉的,类似推荐系统等这样X ( 5 x n g M R W大规模的系统,它底层的部分计算和它底层的部分工程的模式都是比较像的,高性能的计算、大规模的分布式计算与数据的连接等等,逐渐地,不同的公v 7 N A l :司有相同的一个需求,需要构建一) y s ` s [ g
我们经常开? Y e E 2 K W m c玩笑说,最开始做 AI 框架的这一群人,做 AI 系统的这一群人,最开始全是读 PHD 的,即读 Av P p $I 的算法。然后在整个行业都在从传统的行业或是传统的工程,转向做 AI 的时候,有那么一群做 AI 框架和系统的人,在 AI 实验室里逆着潮流回去做架构,这个是我觉得今天在我们提到 AI 架构师这样一个角色的时候,非常需要的技能,就是他得懂这个算法到底在做什么东西,这样才能够相应的做出来 AI 算法和比较相关的! L g %一些系统架构来。
三、想要成为一名优秀的 AI 架构师,需要怎么去做?需要具备K I E : $哪些知识?
我举一个例子,因为我现在带大数据平台跟 AI 平台这两块,那么我就拿大数据) & K q , t 5跟 AI 做一个小的比较,在座的可能有一些接触过大数据,有些接触过 AI,也= : }都比较熟悉。 那么我就来描述一下,大数据工程师看系统的时候,跟 AI 工程师! = k C ^看系统的时候,大家的想法分别是怎~ t 6么样?
大数据这j , V | K / % ;个领域,都是从数据库的数q 0 7 3 v c J据分析等一路走过来,大家有一个非常标准的一层叫做 SQL,不同的引擎可能 SQL 有一些小变化,但是总的来说我们说像 select、join 等这样一些简单的 SQL 原语都是比较像的。SQL 这块, I k e m个机器,什么时候把这个机器返回回去?这个_ : u p )都是大数据的系统,比如像 Hadoop、Spark,包括像 Flink,我们阿里巴巴自己的流式计算大数据引擎。那么` ~ 5 C g [ V 1 g,在这个情况下系统的设计,就是在 SQL 原语这样的一个高层的语言下面做自动化的调度、调优等,所以简而言之就是,你给我一个任务,别的都不用管,这是大数据领域的状态。
AI- p o O E $ 今天没有那么完整或者没有那么详细的一个接口,我们在做很多 AI 应用时,算法工程师会遇到这样一个情况,需要把数据,比如图像,像语音数据等读9 + B进来,然后需要通过一个比较强编程的方式来设计一个模型,这个模型在训练的时候需要控制,比如 4 个机器,这 4 个机器上面有 32 个 GPU,那么当我们来做一个 data parallel,我会来控制这 4 个机器上面的5 6 +模型是放哪的,它的交互是怎么样的等等/ _ r L # P 1 S,对于 AI 工程师和应用的工程师来说,它并不是说有一个 SQL 训练神经网络,别的全交给系统来做,他会对系统有更高的 visg L h ? , Hibilitn 8 Zy,那么此时,在构建一个 AI 的系统和在构建一个大数据的系统时,其实是不太一样的。今天我们看见在 AI 的应用当中,很多工程师会喜欢使用 notebook 这样的一个环境,就是说在浏览器上面拉起一个一个浏览器的界面,像以前用 Matlab; S a U、Mathematic 等交互式编程的方式来做。
非常轻量级大数据的应用和 AI 的应用,它在系统设计上面是很不一样的。我们看见非常有意思的一个情况是,大数据跟 AI 是一个相互依存的Y } $ h ) N =关t Y * -系,因为如果要训练一个 AI 的算法,我们就会非常强烈的依赖于数据量# $ 5 p [ t,数据量越大,我们训练出来的模型质量越好。那么大数据这个领域,一些简单的数据分析的工作,比如说像统计量、每天的销售额、每天的销售量等,这样一些简单的分析,f e 0 O 1 :越来越多的也会向智能化的方向发展。
怎S J = ` T I么样在数据场景当f 4 N S q中做预测、做决策?大数据在逐渐向智能P 1 C B } A f的方向发展时,出现了一个很有意思的情况,大数据工程师来做一个 AI 的平台,或者说 AI 架构师来做一个大数据的平台,这个时候大家的想法是不太一样的,为什么?做数} t d据库的会觉得不要管机器,做 AI 的会觉得一定要把机器给算法工程师显示出来,但是两边是可以互相借力的。这样一些架构设计等等,会非常强烈地跟上层的应用场景结合在一起j M H X 8。
这个是我觉得今天作为一个 AI 架构师需要具备的一个技能。比如说 6 年前我们在做. E i ;一个系统架构时,基本上就是单机训练,差不多就可以了,单模型训练单机的推B h D理 GPU 就可以了,今天我们会( | Q p遇到分布式训练这样一个模式,在推理时,我们不仅是一个单模型,可能是一个多模型的联合的推理,那么它- ; , 3 2 ^ | 4 e内,也很简单,上阿里云就行了。现在,对于最底层的搭机器的能力,我们就有一个比较简单的方式来解决了。从I + , r AI 架构师的角度来说就是,今天我们是不是需要有人来搭v + + J建 GPU 的集群d m W l D Z ^ D,来做O X q y }的 if-then-else,g 8 L o 8 & g : t如今算法开始 7 m | : =特别逗的事儿,我去公司会比较早,我的同事们很多时o ; | 8 y候在做比如说像手机端的图片识别等等这样的应用,我们桌上散落着一堆的手机,我有一个同事,有一天我看见她桌上放了一个手机,I , ] 4 R后面贴了一个贴纸,上面写着,i^ 2 L # Ct worked yesterday。 昨天还工作得好好的,今天过来,不知道怎么着,好像数据换了一下,效果就出不来了。丢代码是当年咱们都感觉过的非常痛的一个经历,今天东西更容易丢,我们的数据集是怎么样的?我们的算法我们的模型到底是怎么样的?模型训练的时候参数是怎么样的` u z?这一系列的东西丢了,真的找不回来,有时会想试图跑一跑一个月之前的一个模型,有时突然发现反z a g C | s 8 N正总有些东西不太对劲,跑不出来。
所以以前我们是说管代码,那么今天我们需要把代码、N ) W模型、数据,把我们实验的所有参数流程什么的都尽量记下e [ ~ 8来。在自我学习自我提L m 4 4升的时候,如果我们想看一看 % S u错的话,两年前,我们有一个叫 System ML 的一个 conferencen c , * p i U g (,当I 0 _ ~时I / * W W G v Google 的大神 Jeff Dean 他提了这样的一个概念,他说 system for AI, and AI for system, 大家都知道我们要做 AI 的算法时,需要有一个系统来支持它。这样的概念就是说以前我们在构建大规模系统的时候,非常多的东西都是基于手工这样一个决策来做的。但是今天我们在运行这样一些 AI 的模G 9 Q 3 q } ~型和系统的时候,假如说像d Y ^ v C X . z阿里巴巴、像淘宝那么大的一个环境,我们的模型运行的这样的一些统计数字等,本身它自己就是大量的数据,它可以帮助我们在系统设计的时候,通过数据,在系统下一步构建的时候,更加自动化的来优化。
AutoML 是一F - ! k a个例子,AI 编译器也是一个非常明显的例J W G子,我们可以通过 AI 系统运行的状态来看,背后应该怎么样进一步的自动化地来调优我们的系统。说一句比较大胆的话,a k V G h5 年之后我们会发现绝大多数的计算机系统,比如像数据库、大数据,甚至像 CDN、容器、调T % S q I . D #度等等这一系列的东西,以前那些手工的决策,很多时候都会被我们 AI 自动化的一些算法模型所取代,那么作为一个系统架构师或Z - T J 4 Q AI 架构师,我觉得最值得学的一个事情是算法,它是怎么样把我们的算法嵌入到我R l F k ` +们系统设计里来的。这个模型可能没有那么复杂,我们很多时候一说 AI 就被深度学) P % F !习人工神经网络吓到了,但是机器学习这个领域有一些非常古老,但是又非常有意# B 4 K ` E a ?思的一些模型,比如说像比较简单的{ C + r u * 5 W线性回归和决策树这样的一些模型,我们可以想想它怎么样来嵌入到我! m y Y E 6们的系统里头来?很多时M p - 0 ? K候模型的复杂度并不是最关键的,从一个手工的优化或者是手工设计的模式,到一个基于数据的模式之间会有一个比较大的转变,这是我们架构师可以经常来考虑的一个问题。
六、如果想成为一6 D a f T 7 m名阿里的 AI 架构师,需要具备哪些技能?
我觉得比较难确切描述,就像刚才聊到的,其实 AI 架构师经常会面对 AI、工程这样的一些场景、应用等等,什么都得懂一点。包括我刚才看到有一个同学问本科生能不能做 AI,Alex 当年做出 AlexNet 的时候,他就是研一的状p R ( 7 z态,所以我觉得本科生绝对能做 AI。
我觉h M K a s W得我们在寻找的工程师所需的技能是怎么样的?第一,是要有很好的好奇心,对于最近的这样一些算法,比如说 AlexNet 的出来,这是一个非常多变化的领域,比如 BERT 出来非常短的一个时间,最近有非常多的像 ALBERT 等等这样一些变化,所以最需要的一个能力是好奇心以及能够快速学习新的算法跟新的应用的一个能力。
其次是对于系统的熟悉程g w p度,也许你并不是一个编译器的专家或数据库的专家,但是能i # 7 z S z ? v f够非常快速的学习这些传统计算机领域当中核心的技术和核心的一些技术点。第三,我觉s X f D c -得其实我们特别需要的一个技能是把算法和实际的业务流程结合起来的能力,或者说这样的兴趣。咱们以前在学校l t h的时候经常有像数学建模大赛等等这样的一些领域,我们会发现数学建模大赛其实一方面是说要做建模,但另一方面是我们要把业务的问题或者实际应用的问题抽象成数学的问题,很多人都能解这个问题,但是真的5 9 G a把它从一个应用的问题抽象成数学问题,这一步其实非常的难。
刚才也有很多同学提M G U 0 k n到说,怎样来做 AI 的落地等等这方面,对我们来说,s k N懂应用、懂建模的同学,是我们# 7 E f w H非常缺的也是非常欢迎的这样的一个 Job Prb C 0 l 0 R Eofile。