机器学习的关键技术与当前难点有哪些
人工智能是一门交叉学科,从被提出到现在也有六十多年的历史,目前仍处在AI初级阶段。之所以发展缓慢的一个重要原因是人工智能的技术难度很高,它涉及计算机、心理学、哲学等,对从业者要求很高,目前国内从事AI行业的工程师很多是硕士或以上学位。人工智能技术可应用于安防、医疗、家居、交通、智慧城市等各行各业,其前景是毋庸置疑的,未来绝对是一个万亿级市场。根据应用领域的不同,人工智能研究的技术也不尽相同,目前以机器学习、计算机视觉等成为热门的AI技术方向,本文以机器学习为例,通过分析其关键技术与当前面临的难点,一起探索人工智能的发展与未来。
机器学习是人工智能的核心机器学习也被称为人工智能的核心,它主要是研究计算机怎样模拟或实现人类的学习行为以获取新的知识或技能,帮助计算机重新组织已有知识结构使之不断改善自身的性能。
机器学习是人工智能研究的一个分支,人们对机器学习的研究也有很多年了。它的发展过程大体上可分为几个时期,第一是在20世纪50年代中叶到60年代中叶,属于热烈时期;第二是在20世纪60年代中叶至70年代中叶,被称为机器学习的冷静时期;第三是从20世纪70年代中叶至80年代中叶,称为复兴时期;第四阶段的机器学习开始于1986年,目前我们仍处在这个时期。现在很多应用领域都可以看到机器学习的身影,如数据挖掘、自然语言处理、生物特征识别、搜索引擎、医学诊断、证券、游戏、机器人等。学习是一项非常复杂的过程,学习与推理分不开,按照学习中使用推理的多少,机器学习所采用的策略可分为四种:机械学习、传授学习、类比学习和通过事例学习。学习中所用的推理越多,说明系统的能力越强。机器学习的难度在哪?对于机器学习的开发者而言,除了需要对数学知识掌握得非常熟练之外,选择什么工具也很重要。一方面,机器学习的研究需要创新、实验和坚持,很多人半途而废;另一方面,如何将机器学习模型应用到实际工作中也有难度。除了工程师因素,机器学习的系统设计也有难度。影响学习系统设计的最重要的因素是环境向系统提供的信息,信息质量直接影响系统性能,知识库里存放的是指导执行部分动作的一般原则,但环境向学习系统提供的信息却是各种各样的。如果信息质量高,与一般原则的差别比较小,则机器学习比较容易处理。如果向学习系统提供的是无规律的指令信息,则学习系统需要在获得足够数据之后,删除不必要的细节,总结后才能形成指导动作,并放入知识库;这样机器学习的任务就比较繁重,设计起来也较为困难。
对于机器学习而言,还有一个技术难度就是机器学习的调试很复杂,如在进行常规软件设计时,编写的问题不能按预期工作,可能是算法和实现出现问题;但在机器学习里面,实际的模型和数据是两个关键因素,这两个的随机性非常强,调试难度倍增。除了复杂性,机器学习的调试周期一般都很长,因为机器得到指令进行实施修正和改变通常需要十几个小时甚至几天。谷歌是机器学习的推动者提到机器学习,就不得不提到谷歌,2017年,它展示了聚焦人工智能的名为张量处理单元(TPU)的芯片,这是一款谷歌打造的处理器,是专为机器学习量身定做的。TPU的特点是执行每个操作所需的晶体管数量更少,自然效率更高,据谷歌介绍,TPU与同期的CPU和GPU相比,可以提供15-30倍的性能提升及30-80倍的效率提升。谷歌表示,它们专门为这款TPU设计了MXU作为矩阵处理器,可以在单个时钟周期内处理数十万次运算。谷歌提到,TPU的核心是脉动阵列,MXU有着与传统CPU、GPU截然不同的架构,称为脉动阵列;“脉动”名字的来源是因为在这种结构中,数据一波一波地流过芯片,与心脏跳动供血的方式类似。机器学习技术助力人工智能
机器学习被提出来也有一段时间了,但是发展并不是非常快速,其中有自身的技术难度等原因。目前尽管机器学习面临着很多技术问题去解决,但人工智能的发展和突破是绕不开它的,以谷歌为代表的企业为行业树立了一个榜样,笔者相信未来会有更多的企业加入到机器学习的研究之中,去推动机器学习,助力人工智能。
面试高频题:讲讲项目中的技术难点
原创:猿天地(微信公众号ID:cxytiandi),欢迎分享,转载请保留出处。
相信很多人都有类似的经历,在面试快要结束的时候经常会被问到一个问题:讲讲项目中的技术难点?
这是一个比较开放的问题,首先它没有固定的答案,因为每个人做过的项目不同,使用的框架不同,对应的架构不同,自然遇到的技术难点也不同。
1.一定要真实在回答这个问题的时候,一定要仔细想想之前真实遇到的问题,不要随便编一个,这样很容易出问题,因为面试官会顺着细节一层层的问下去,如果你是编出来的,到最后就圆不回去了。
举个例子:
求职者说我们下单的接口最开始只能支持几百的TPS,被我优化后TPS破万了,只要你说完这句话面试官就开始进入继续追问细节了。
破万具体是多少的TPS?有多少台机器?机器分别是什么配置?数据库是什么配置?你们是怎么进行压测的?下单链路跟多少个服务进行了交互?每个服务的耗时多久?如何进行优化的?如何发现接口中的性能瓶颈?你只有抗住了这一系列的连环炮追问,而且面试官通过你的描述和你说的指标进行对比,如果比较匹配那么你就过关了。如果不匹配,肯定就面失败了。
2.技术层面的难点技术层面的难点可以是做了GC的优化,从多少GC次优化到多少次,STW的时间降低了多少,通过哪些手段做的优化。
可以是压测时性能一直上不去,通过什么手段进行了优化,从多少优化到多少。期间有没有加机器,有没有升配服务器,升配数据库等。
可以是项目运行一段时间后就出现假死的情况,处理不了任何请求。然后你是怎么一步步去分析并找到具体原因的,然后又是如何去解决的。
一定要有细节有数据,这样的案例才真实可信。并且面试官会认为你是具备去分析并解决问题的能力。
3.不一定是技术层面的难点虽然问的是技术难点,如果你确实没有遇到过什么技术难点,这个时候可以往其他方面去靠,不要直接回答说:没有遇到过什么难点。我敢保证,你要你这样回答了,面试成功的可能性不大。
可以往业务层面,领导力方面去讲,比如你可以说当时做某个业务的时候,没有这块经验。然后通过查找资料,去咨询有经验的朋友等独立的完成了某个系统的设计。并且在做完后取得了什么样的成绩,这个过程对自己来说是非常具体挑战性的,所以这是在项目中遇到的一个难点。
也可以是自己主动请缨,在领导的支持下主导了老项目的重构,给团队的同学培训了DDD,并且通过DDD成功的将某个业务成功的进行了重构。这样可以体现你的主动性,分享精神,领导力等多方面综合的能力。
最后送给大家的就是:一定要先准备好,想好自己要说什么,临时发挥效果肯定没有事先准备的好。
如果对你有用,来个转发呗!
关于作者:尹吉欢,简单的技术爱好者,《SpringCloud微服务-全栈技术与案例解析》,《SpringCloud微服务入门实战与进阶》作者,公众号猿天地发起人。