科普知识点
- 什么是编程语言?如何分类?有哪些常见的编程工具?
- 什么是程序?
- 什么是算法?
- 算法工程师在企业中的作用或者分工?
- 什么是大数据(Big Data)?
- 人工智能(AI)是什么?它与大数据有何潜在联系?
看前须知:
下面知识仅仅是我@Michael Chan的浅显理解,思维认知维度还与大牛差距甚远,入门理解还是可以的。如有错误,概不负责(wo jiu zhe me ao jiao)。(#.#)
- 什么是编程语言?如何分类,有那些常见的编程工具?
在计算机的世界里,有许多编程语言,比如像c,c++,java,matlab,python等。这就宛如是人类的世界里,不同的国家讲不同的语言,有讲英语,法语,中文等。但是,语言的本质是为了人们之间的交流、沟通。同样地,编程语言也是为了交流沟通,不过它是程序员与“计算机”的沟通,程序员通过指令来控制计算机完成人们所希望的工作。因而,程序员就通过编程语言与计算机“交流”,依次来命令计算机做一些人类想让它完成工作。
但是编程语言很多,如何对它们分类呢?简单来说,编程语言可以粗分为高级语言与机器语言。在计算机世界里面它们两类的差异就如我们中文的白话文与文言文。白话文类比高级语言,文言文类比机器语言,简而言之,高级语言易懂,更接近于我们交流的习惯,而机器语言难懂,但是,它属于计算机易懂的语言。我们平时说的编程语言,比如c,c++,java,python,matlab等,都属于高级语言。因为它更接近于人类表达语言的习惯。
但是,编程的目的是为了让计算机理解程序员的指令,所示,我们需要将高级语言转化为计算机能理解的机器语言,而这种转化媒介或者说编程软件,我们称呼它为编译器。编译器将程序通过编译、执行、输出等流程,从而将高级语言转化为机器语言,使计算机能理解当前所有执行的工作,达到编程的目的。
常见的编程软件有
注意:程序语言有许多种类,其编程软件也不唯一,像主流C、C++语言的不同编程软件就非常多,运用不同场景而已。
- 什么是程序?
刚刚上面已经提到了程序的概念,我们了解到,编程的目的是为了让计算机按照程序员给它的指令完成相应的工作,计算机通过这些指令来高效地完成工作,而这些指令的集合,我们称呼它为程序。
举一个例,比如,我们想让计算机完成计算:1+2+…+100=?。
观察式子,我们看得到,这个计算规律就是连续相加,然后,我们对计算机发出指令,让它帮我们计算结果。指令如下:
上面这4个指令的集合就是一段代码,或者称呼为程序,它是计算1+2+…+100的程序代码,是用C语言编程实现的。
在这个编程完成后,我们借助编程工具把这小段程序转化为机器语言(010001…),从而让计算机帮助我们来计算结果,最后输出结果。
- 什么是算法?
刚刚提到了,程序是计算机所能理解的指令的集合。而高级语言(C,java等)无非是方便程序员更容易写出易懂的代码,但是,不论何种语言,最后皆徐途同归,因为都需要借助相应的编程软件来转化为计算机能理解的机器语言。简单流程:
那什么是算法呢?首先要阐明算法在程序中的地位。常言道,算法是程序的灵魂!足以可见算法的地位。
还拿刚刚的例子举例,刚刚说到计算1+2+…+100.
我们刚刚利用编程采用累加的方式来让计算机实现了计算结果。这个C语言代码算不算为算法?严格来说,它不是算法,它只是程序。程序的目的是计算机来理解的指令。
那算法是什么?算法就是对解决特定问题求解步骤的描述。如何理解这句话呢?回到刚刚这个计算题。首先我们来分解这个算法定义来类比于这个计算问题。构建下面的思维流程:
①特定问题计算100以内求和。
②求解步骤先算1+2=3,再3+4=7,以此类推,再到4950+100=5050,得到结果5050.
③输出结果5050
从上面分解算法定义的步骤可以看成。最核心的关键是“描述”,描述什么?描述一个特定问题的求解步骤。简而言之,算法是给我们程序员自己互相看的,说白了,程序员如果要解决某种问题,当他检索相关资料后,发现了某种算法能够解决他的问题,他首先需要自己看懂这个算法的具体描述(解决步骤的描述),然后再通过编程语言实现程序,从而得出自己希望的结果。
为什么说算法是不依赖于任何编程语言的呢?
其实,通过上面的了解,应该知道算法的核心是对具体问题的求解步骤的详细的描述。这个“描述”就是一种抽象的思维或思路,能达到举一反三的功效。还拿刚刚求和的例子,如果我们知道一种求和算法的思路是先两个计算和再加第三个数,依次类推,可以加到100.当我们掌握了这个思维流程后,我们不光可以加到100,还能加到1000,甚至10000000等等。这就是算法的功效,它是对某类特定问题的高度抽象概括,因此,对于很多场景不同的问题,如果不同场景下的问题都能被用同一个数学问题来描述,它可以用同样的算法解决。比如一个生活场景实例,一个快递员送快递的问题,他需要用最短的时间把快递从浦东区送到宝山区。与一个家住浦东区,工作在宝山区的上班族,用最短的时间通过两地。这两种场景是不同的,但是本质是一样。可以用同样的算法来解决,但是程序就不同了,因为场景是不同的,而且这两个问题可以用不同的编程语言实现,但算法却都是一样的。
简而言之,算法是高于程序的这个层面的,而程序是具体实现算法的层面。
算法工程师是如何筛选不同算法的?
算法工程师在处理项目需要的流程是:①根据项目需求,找到符合的算法集合。②对算法集合中的算法进行性能仿真,找出不同算法的差异。③算法的实现是通过程序来实现的,主要使用的编程语言是Matlab和Python,如下流程:构建问题->找到两种算法A,B->进行Matlab和python编程->输出不同的结果,进行差异分析->筛选最优算法。
目前算法工程师的创新点,主要在于对具体的算法描述中的数学公式进行升级改造,使其能达到更好的性能。
分析上面的图表,上面的图表是一个典型的算法性能仿真图,图中红色曲线属于理论曲线(实际生活达不到),而我们设计算法(设计体现在数学公式的升级改造)的目标主要是尽可能地设计出算法靠近这个理论曲线,我们现在找到了四种算法,分别是蓝色,黑色,紫色,浅蓝色。四种算法的性能如上图可知,蓝色的曲线效果最好,相比另外三种算法,优势明显,故选择蓝色曲线的算法为当前最优的算法。如果这个时候,有一个天赋异禀的算法工程师,找到了或者说设计出了第五种算法C,算法C曲线恰好在红色与蓝色之间,那么算法C将取代蓝色曲线的算法,成为最优算法。如此筛选,直到算法工程师无能为力为止。
深度学习框架概念
比如Caffe、tensorflow这些是深度学习的工具,可以理解出为深度学习的常用算法的集合仓库,当算法工程师需要的时候,直接调用该仓库的算法,利用具体的测试数据输入,进行相关算法参数设置,即可得到算法的输出结果,避免了重复多次编程实现算法的步骤,极大提高了开发效率。
补充知识(可略读)
那算法本身有什么特点呢?最基本的有三个特点,首先,既然它需要有输入参数,就如上面的参数(1…100),其次,需要合适的运行时间,最后,要有输出结果,上面的5050.
但是,疑问又出来了?什么样的运行时间是”合适”的?这个是具体问题具体分析,比如,我们淘宝购物付款,有两个关于付款的算法A,B。A算法完成付款需要5秒,B算法需要1分钟,相比而言,B肯定是不合适的,这个不过多阐述。
既然上面提到了解决同一个问题有很多算法,那我们如何来衡量算法的好坏,从而区分出不同的算法在不同场景下达到最佳效果呢?一般我们用算法时间复杂度来衡量一个算法在具体场景下的度量。这个不多说,一般而言,计算机学术界都认为算法时间复杂度是多项式结构的算法性能是可以求出问题的结果的。非多项式结果是不能达到最优性能的。前者被认为该问题是有解的,后者说明该问题是没有解的。
-
算法工程师在企业中的作用或者分工?
这个我也了解很少,毕竟没上班,看了哈网上和其它师兄了解了哈。首先要区别于软件开发工程师与算法工程师,一般来说,软件开发工程师是主流,因为算法工程师门槛很高,一般以博士为主,需要很强的数学功底,强调前瞻性研究,只有大公司和研究机构才会设置该岗位,而软件开发工程师是软件公司必备的,以应用产品为主,强调程序实现。
企业作用,一般算法工程师尤其是AI方向的,有项目的时候,根据项目需求,做实验,采集数据,用python或者matlab初步实现算法,测试算法性能,完成性能测试后,再交给软件开发工程师去实现项目,依次循环。
比算法工程师更高一级的是数据科学家或者研究员,这些人才是真正搞算法的,他们看papers,发论文,搞学术的,平时工作就是看能不能把最先进的算法运用到企业项目中,从而减少企业成本,提高收益。
如果建设一栋楼房,算法工程师可以理解为设计楼房图纸的那一群人,而软件开发工程师则是负责施工建设的那部分人。 -
什么是大数据(Big Data)?
大数据的本质还是Data,相当于传统数据来说,多了一个big。可以简单地理解为无穷多的数据,其实大数据概念的推出,是移动互联网下的必然结果,随着4G通信的推出,以及即将到来的5G,有无数的用户在微信、微博上面留下足迹以及海量的超清视频等,这些信息每天都在不断累积,互联网巨大的流量,必然产生了超越传统的数据流量,这带来了超高的计算负荷,数据太大,服务器都爆了。如果我们还用以前的数据处理方法来处理数据,这肯定是行不通的,好比国庆黄金周出去游玩,平时这些景点,没有多少人去,景点正常开放接待就行,但是一到节假日,各个景点必然火爆,如果还用平时的接待游客的策略来应对节假日的游客,这必然会造成景区事故不断。而我们现在所处的互联网时代就是处在每天皆为“黄金周的游客”,天天爆满的数据,因而,需要用相比传统技术更加先进、专业的数据处理算法和工具来应对爆满的数据,大数据就这样运应而生。 -
人工智能(AI)是什么?它与大数据有何潜在联系?
这个官方没有严格的定义,一般来说,人工智能是研究使计算机来模拟人的某些思维过程和智能行为(如学习、推理、思考、规划等)的学科。其实,以我了解,主要是两方面代表,一方面是以机器学习技术,另一方面是以神经网络为代表的深度学习技术。人工智能并不是神秘,只是最近两年,不论是政府,企业还是社会,媒体都冠以人工智能来报道,名字很高大上而已。目前运用在我们身边的应用随处可见,比如百度搜索引擎的模糊搜索,语言识别转化中文,人脸识别等,都成熟运用在我们生活中,这主要是运用了深度学习的技术。
AI算法与大数据有何联系呢?
我们上面应该了解到,大数据就是无穷多的数据,并且持续增长。深度学习有一个特点,就是需要大量的数据来训练算法的参数,拿人脸识别来说,只有足够多的人脸数据给计算机训练,模拟,它才能准确识别出具体的某个人,这就宛如一句老话,“一回生二回熟”。计算机也是一样,它只有见了某一个人在不同侧面,光照强度,天气,背景,化妆下的照片后,它才能在生活场景下识别出这个人是谁。而在前期训练的过程,就是拿大量不同角度的照片给计算机看,告诉它,这个照片对应谁。当我们拿了足够多的照片给计算机看(也就是指训练过程),计算机自然见多识广,以后碰见类似的事物,就能够识别出来了。
上面可知,运用深度学习来解决实际问题时的前提条件是足够大量的数据,这与大数据需要新的技术来处理的概念不谋而合,它们两个运用这样可以无缝连接,这也说明了大数据与深度学习或者说AI(一般人工智能技术,主要指以深度学习为代表的技术)联系起来了。再举一个生活例子,平时常用的APP-今日头条。它属于典型的人工技术与大数据结合的范例。今日头条将用户的个人信息(年龄,兴趣爱好,地理位置,学历等)提取出来,这就是大数据。再利用个性化推荐算法(AI)来模拟人们的潜在兴趣,从而推荐给你相应的新闻(算法结果),而在用户不断点击和筛选过程中,自动保存用户数据,方便下次为更加精准的推荐做好数据准备。