Python与计算机编程必备基础概念(必备常识)
作者:Barranzi_
个人github主页:[github](https://github.com/La0bALanG)
个人邮箱:awc19930818@outlook.com
新时代的铁饭碗:一辈子不管走到哪里都有饭吃(还能吃上热乎的)。——佚名
免责声明:
本系列笔记撰写初衷就是为了分享个人知识以及个人学习历程中的感悟及思考,所涉及到的内容`仅供学习与交流`,请勿用作`非法或商业用途`!由此引发的任何法律纠纷`后果自负`,与作者本人无关!
版权声明:
未经作者本人授权,禁止转载!请尊重原创!
既然学的是Python,不知道祖师爷是谁可还好?无图言x,上祖师爷!
注:本文所有代码、案例测试环境:1.Linux -- 系统版本:Ubuntu20.04 LTS 2.windows -- 系统版本:WIN10 64位家庭版
软件开发及Python基础概念介绍
计算机组成原理简介
1.冯·诺依曼体系
美籍匈牙利数学家冯·诺伊曼于1946年提出存储程序原理,把程序本身当作数据来对待,程序和该程序处理的数据用同样的方式储存。 冯·诺伊曼体系结构、冯·诺伊曼理论的要点是:计算机的数制采用二进制;计算机应该按照程序顺序执行。人们把冯·诺伊曼的这个理论称为冯·诺伊曼体系结构。 冯·诺依曼体系主要由5大部分来组成:
1. 输入数据和程序的输入设备;
2. 记忆程序和数据的存储器;
3. 完成数据加工处理的运算器;
4. 控制程序执行的控制器;
5. 输出处理结果的输出设备。
现代计算机就目前来看,基本都是沿用该体系进行设计。而控制器所控制的程序,就是现代计算机软件开发所研究的方向。
2.计算机软件组织结构
现代计算机软件,大致分为两大类: 1.B/S:全称Broswer/Server模型,即是WEB兴起后的一种网络结构模式,WEB浏览器是客户端最主要的应用软件。这种模式统一了客户端,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用。客户机上只要安装一个浏览器,如Netscape Navigator或Internet Explorer、chrome、firfox等,服务器安装SQL Server、Oracle、MYSQL等数据库。浏览器通过Web Server 同数据库进行数据交互。 2.C/S:全称Client-Server模型。C/S结构通常采取两层结构。服务器负责数据的管理,客户机负责完成与用户的交互任务。 客户机通过局域网与服务器相连,接受用户的请求,并通过网络向服务器提出请求,对数据库进行操作。服务器接受客户机的请求,将数据提交给客户机,客户机将数据进行计算并将结果呈现给用户。服务器还要提供完善安全保护及对数据完整性的处理等操作,并允许多个客户机同时访问服务器,这就对服务器的硬件处理数据能力提出了很高的要求。 在C/S结构中,应用程序分为两部分:服务器部分和客户机部分。服务器部分是多个用户共享的信息与功能,执行后台服务,如控制共享数据库的操作等;客户机部分为用户所专有,负责执行前台功能,在出错提示、在线帮助等方面都有强大的功能,并且可以在子程序间自由切换。 C/S结构在技术上已经很成熟,它的主要特点是交互性强、具有安全的存取模式、响应速度快、利于处理大量数据。但是C/S结构缺少通用性,系统维护、升级需要重新设计和开发,增加了维护和管理的难度,进一步的数据拓展困难较多,所以C/S结构只限于小型的局域网。 无论是采用B/S模型还是采用C/S模型的计算机软件,其组织结构大致都可以分为以下三部分: 1.图形用户界面:简称GUI,负责数据的展示,常运行于PC或移动端上。B/S模型中,图形用户界面常以网页形式呈现,即WEB前端,其主要负责在网页上的数据展示(现在很多开发出小程序的软件也支持前端页面的运行,如微信小程序,支付宝小程序等)。 2.服务端(后台,后端):主要负责核心业务逻辑的处理,即某一功能的具体实现。服务端功能实现需要依托于各种各样的编程语言,比如:C、C++、Java、C#、Python、Swift、Objective-C、R、Go、PHP…… 3.数据库:DataBase,专业的数据管理工具,主要负责数据管理,比如基本的CRUD操作(create 增加,read读取,update更新,drop删除)等。现今比较流行的数据库产品有:Oracle、MySQL、SQL Server、MongoDB、Redis……
操作系统简介
1.操作系统定义及发展历史
操作系统并不是与计算机硬件一起诞生的,它是在人们使用计算机的过程中,为了满足两大需求:提高资源利用率、增强计算机系统性能,伴随着计算机技术本身及其应用的日益发展,而逐步地形成和完善起来的。 第一台计算机诞生于1946年,直至20世纪50年代中期,还未出现过操作系统,计算机工作采用手工操作的方式来进行。 此后,操作系统经历批处理系统,多道程序系统,分时系统,实时系统,通用操作系统等,逐渐发展为现在的个人计算机操作系统、网络操作系统及分布式操作系统。 1969年,在AT&T的贝尔实验室,KenThompson、Dennis Ritchie和Douglas McIlroy开发出了Unix操作系统; 1991年,Linus Benedict Torvald发明Linux操作系统; 1985年,微软公司研发出windows操作系统。
2.Unix
UNIX操作系统(尤尼斯),是一个强大的多用户、多任务操作系统,支持多种处理器架构,最早由KenThompson、Dennis Ritchie和Douglas McIlroy于1969年在AT&T的贝尔实验室开发。 UNIX操作系统现如今大量应用在服务器级别的计算机上,例如大型计算机、超级计算机、某企业服务机等等。当然,UNIX也有个别版本应用于个人PC操作系统的商用,其中最著名的当属苹果的系统macOS。
3.Linux
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。伴随着互联网的发展,Linux得到了来自全世界软件爱好者、组织、公司的支持。它除了在服务器操作系统方面保持着强劲的发展势头以外,在个人电脑、嵌入式系统上都有着长足的进步。使用者不仅可以直观地获取该操作系统的实现机制,而且可以根据自身的需要来修改完善这个操作系统,使其最大化地适应用户的需要。 Linux不仅系统性能稳定,而且是开源软件。其核心防火墙组件性能高效、配置简单,保证了系统的安全。在很多企业网络中,为了追求速度和安全,Linux操作系统不仅仅是被网络运维人员当作服务器使用,Linux既可以当作服务器,又可以当作网络防火墙是Linux的 一大亮点。 Linux与其他操作系统相比 ,具有开放源码、没有版权、技术社区用户多等特点 ,开放源码使得用户可以自由裁剪,灵活性高,功能强大,成本低。尤其系统中内嵌网络协议栈 ,经过适当的配置就可实现路由器的功能。这些特点使得Linux成为开发路由交换设备的理想开发平台。 Linux当下具备较多的发行版本,诸如企业级Linux:红帽Linux企业版(RedHat Linux Enterprise,简称RHEL,该系统内部分功能收费),以及其他众多完全免费的Linux版本,比如Debian、CentOS、Ubuntu等等。 Linux操作系统是当今世界绝大多数开发者最喜欢的操作系统,因为其安全性非常高,其跨平台的特性对开发者非常友好。同样的,Linux下相关的各种开发环境的搭建也是非常的简单,独特的命令行操作将Windows下传统的图形界面操作最大程度的进行了简化。 做开发,基本上是首选Linux,所以,对于想要学好Python的你,掌握Linux操作系统基本技能,还是非常非常必要的。
4.Windows
Microsoft公司从1983年开始研制Windows系统,最初的研制目标是在MS - DOS的基础上提供一个多任务的图形用户界面。第一个版本的Windows 1.0于1985年问世,它是一个具有图形用户界面的系统软件。1987年推出了Windows 2.0版,最明显的变化是采用了相互叠盖的多窗口界面形式。但这一切都没有引起人们的关注。直到1990年推出Windows 3.0成为一个重要的里程碑,它以压倒性的商业成功确定了Windows系统在PC领域的垄断地位。现今流行的Windows窗口界面的基本形式也是从Windows3.0开始基本确定的。1992年主要针对Windows 3.0的缺点推出了Windows 3.1,为程序开发提供了功能强大的窗口控制能力,使Windows和在其环境下运行的应用程序具有了风格统一、操纵灵活、使用简便的用户界面。Windows3.1在内存管理上也取得了突破性进展。它使应用程序可以超过常规内存空间限制,不仅支持16MB内存寻址,而且在80386及以上的硬件配置上通过虚拟存储方式可以支持几倍于实际物理存储器大小的地址空间。Windows 3.1还提供了一定程度的网络支持、多媒体管理、超文本形式的联机帮助设施等,对应用程序的开发有很大影响。 众所周知,Windows在个人计算机领域是普及度很高的操作系统。当计算机的体积不断变小,发展成掌上电脑的形态时,Windows系统自然电延伸到这类便携式产品的领域。然而,掌上电脑在续航能力、显示屏幕、输入界面等方面与普通的PC还是有很大差别的,考虑功耗和用户使用习惯等方面的因素,Windows系统针对手持没备的特点进行了多次调整和优化,先后形成了Windows CE,Windows Mobile,Windows Phone等移动版本的系统。 Windows因其主打个人PC操作系统,而霸占全球操作系统市场份额将尽80%。确实,如果你购买了一台PC,只是为了生活娱乐,亦或是游戏电竞,那么选择Windows是必不可少的。但是,在Windows下,同样能进行相关的开发工作,而且因其高度定制特性,Windows下开发对开发者也是比较友好的,毕竟能够直接用图形界面操作还是非常方便及熟练的。 总结一下,对于广大的开发者来说,其实选择在Linux下开发亦或是选择在Windows下开发其实都是可以的,而且就目前企业中实际生产环境来看,使用Windows和使用Linux的情况都有。但是,基于Linux进行开发,会让你显得更专业点,毕竟小众嘛,使用人群较为固定,毕竟掌握Linux相对掌握Windows还是有点难度的,但是用熟练之后你会发现,Linux真的比Windows好用太多太多了(真香!)
行业相关名词介绍
1.数据结构
数据
- 定义:数据是所有能被输入到计算机,且能被计算机处理的符号的集合。数据是计算机操作对象的总称,也是计算机处理的信息的某种特定的符号表示形式。
- 数据元素:包含元素,节点,元素,是数据(集合)中的一个“个体”,是数据的基本单位
- 数据项:具有独立含义的最小数据单位
- 数据对象:具有相同性质的若干个元素的集合
数据结构定义
- 名词定义:数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系。记为Data_Structure=(D,R),其中D是数据元素的集合,R是该集合中所有元素之间的关系的有限集合。
- 其他定义:
- Sartaj Sahni在他的《数据结构、算法与应用》一书中称:“数据结构是数据对象,以及存在于该对象的实例和组成实例的数据元素之间的各种联系。这些联系可以通过定义相关的函数来给出。”他将数据对象(data object)定义为“一个数据对象是实例或值的集合”。
- Clifford A.Shaffer在《数据结构与算法分析》一书中的定义是:“数据结构是ADT(抽象数据类型Abstract Data Type) 的物理实现。”(意思是抽象数据类型的概念都需要借助数据结构来进行实现)
- Robert L.Kruse在《数据结构与程序设计》一书中,将一个数据结构的设计过程分成抽象层、数据结构层和实现层。其中,抽象层是指抽象数据类型层,它讨论数据的逻辑结构及其运算,数据结构层和实现层讨论一个数据结构的表示和在计算机内的存储细节以及运算的实现。
2.算法
通俗定义
算法是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令 算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。
其他定义1
算法是在具体存储结构上,实现某个抽象运算
其他定义2
算法是对特定求解方法(步骤)的一种描述,是指令的有限序列,其中每一条指令表示一个或多个操作。
3.程序
定义
计算机程序(Computer Program),港、台译做电脑程式。计算机程序是一组计算机能识别和执行的指令,运行于电子计算机上,满足人们某种需求的信息化工具。 它以某些程序设计语言编写,运行于某种目标结构体系上。打个比方,程序就如同以英语(程序设计语言)写作的文章,要让一个懂得英语的人(编译器)同时也会阅读这篇文章的人(结构体系)来阅读、理解、标记这篇文章。一般的,以英语文本为基础的计算机程序要经过编译、链接而成为人难以解读,但可轻易被计算机所解读的数字格式,然后再去运行。 程序是一个指令序列。
程序=数据结构+算法
Pascal之父——Nicklaus Wirth(尼古拉斯·沃斯)的至理名言:程序 = 数据结构 + 算法 这个公式对计算机科学的影响程度足以媲美物理学中的爱因斯坦相对论e = mc^2,即,一个公式说明了程序的本质! 该公式可以继续细化为如下: 问题 –> 数据结构 + 算法 == 程序 –>解决问题 具体含义:程序,就是在数据的某些特定的表示方法和结构的基础上,对抽象算法的具体描述。将松散,无组织的数据,按照某种要求组成一种数据结构,对于设计一个简明,高效,可靠的程序,是大有益处的。程序设计语言提供了实现数据结构和算法的机制。程序设计需要在数据结构和算法设计工作的基础之上才能完成。由程序设计语言描述的算法就是计算机程序。求解问题中,算法就是解决问题的方法,没有算法,程序就成了无本之末,无源之水。算法在程序设计,软件开发,甚至可以在整个计算机科学中的地位都是非常重要的。
4.面向过程
定义
指代一种编程思想,该思想的核心是以过程(事件)为中心,注重解决一个问题的步骤,即每一步要干什么事。
面向过程语言代表
C语言是最典型的面向过程的编程语言。一般地,面向过程的编程语言因其本质的特性,相对来说较难掌握,所以C可以说是最难学习的编程语言之一了。 除了C之外,还有一种编程语言也是支持面向过程的,它就是JavaScript。但是,在JavaScript中也是支持面向对象思想的,只不过JavaScript的面向对象不是那么的“纯粹”,js的面向对象是基于原型而并非传统的面向对象编程语言那样基于类和实例。
5.面向对象
定义
指代一种编程思想,该思想的核心是以对象(功能)为中心,注重解决一个问题的方法,即完成一个功能都有哪些方法可行等。
面向对象语言代表
除了个别的面向过程的编程语言比如C、JavaScript,其他绝大多数高级编程语言都是面向对象的,比如大家比较常见的C++、Java、Python等等。
6.面向切面
定义
在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
7.软件开发工程师
软件开发工程师是从事软件开发相关工作的人员的统称,但其会因所涉及技术的行业及领域不同而有所细致的划分。统一来说,只要是参与各种软件或应用的开发的工作人员,广义上就可以称之为软件开发工程师。
8.前端开发工程师
前端开发工程师是Web前端开发工程师的简称,2007年才真正开始受到重视的一个新兴职业。Web前端开发技术是一个先易后难的过程,主要包括三个要素:HTML、级联样式表和JavaScript。 前端开发工程师不仅要掌握基本的Web前端开发技术,网站性能优化、SEO和服务器端的基础知识,而且要学会运用各种工具进行辅助开发以及理论层面的知识,包括代码的可维护性、组件的易用性、分层语义模板和浏览器分级支持等。
9.数据库
数据库指计算机中的数据管理工具,是存放数据的仓库。它的存储空间很大,可以存放百万条、千万条、上亿条数据。但是数据库并不是随意地将数据进行存放,是有一定的规则的,否则查询的效率会很低。当今世界是一个充满着数据的互联网世界,充斥着大量的数据。即这个互联网世界就是数据世界。数据的来源有很多,比如出行记录、消费记录、浏览的网页、发送的消息等等。除了文本类型的数据,图像、音乐、声音都是数据。
10.框架(函数库)
框架(函数库)是指封装一组常用操作的模块或包的集合。各大编程语言皆具备其原生的语法规范与逻辑。但是在实际生产开发的应用中,大量的功能实现如果采用纯原生编码会大大的增大开发难度或周期,导致开发效率不高。函数库,就是基于各大编程语言的基本语法规范与逻辑,针对某种特定应用场景下常用的或常需要的内容,将其封装成为半成品库,进而在这些独特的应用场景中大量的,反复的使用,进而达到提升开发效率降低成本并提高便利等目的。 Python中有数以千计的函数库,其中包含官方内置好的内置函数库,也有第三方开发者开源的各种函数库,比较具有代表性的,比如内置函数库,有时间模块(专门处理时间操作),数学模块(专门处理数学等相关计算操作),socket模块(网络编程模块)等等,第三方的模块,比如tkinter(图形用户界面)模块,pygame(游戏)模块,pymysql(操作mysql数据库)模块,scrapy(分布式爬虫框架)模块,numpy(科学计算库)模块,sklearn(机器学习算法库)模块等等。
11.爬虫
爬虫,全称网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。 爬虫技术就目前全球范围内结合各个国家法律法规情况来看,其游走在各国的法律边缘,因为爬虫技术大量应用于万维网上的数据的获取。众所周知,数据就是互联网最直观的价值体现,那么爬虫技术在获取数据时数据的合法性就有待商榷。如果爬取了一个免费开源的数据,那么自然不会有什么侵权或违法等说法,但如果爬取了政府乃至国家级机密数据,自然是会惹祸上身了。所以在这里先叮嘱各位朋友,有朝一日学会了爬虫技术,切记切记千万别玩火! 当然了,各个政府机关,亦或是国家级机密网站,对于爬虫技术都是有非常成熟的反爬措施的,对于数据的安全性也是做的非常到位的,如果你真能轻易的黑掉政府或国家的机密网站,甚至还能爬取下来数据,要么你被招进有关单位当做奇才重用,要么就……
12.数据科学
一个跨学科领域,它结合了统计学、信息科学和计算机科学的科学方法、系统和过程,通过结构化或非结构化数据提供对现象的洞察。
13.数据分析
数据分析是指用适当的统计分析方法对收集来的大量数据进行分析,提取有用信息和形成结论而对数据加以详细研究和概括总结的过程。这一过程也是质量管理体系的支持过程。在实用中,数据分析可帮助人们作出判断,以便采取适当行动。 数据分析的数学基础在20世纪早期就已确立,但直到计算机的出现才使得实际操作成为可能,并使得数据分析得以推广。数据分析是数学与计算机科学相结合的产物。
14.科学计算
科学计算是指利用计算机再现、预测和发现客观世界运动规律和演化特征的全过程。科学计算为解决科学和工程中的数学问题利用计算机进行的数值计算。 科学计算即是数值计算,科学计算是指应用计算机处理科学研究和工程技术中所遇到的数学计算。在现代科学和工程技术中,经常会遇到大量复杂的数学计算问题,这些问题用一般的计算工具来解决非常困难,而用计算机来处理却非常容易。 自然科学规律通常用各种类型的数学方程式表达,科学计算的目的就是寻找这些方程式的数值解。这种计算涉及庞大的运算量,简单的计算工具难以胜任。在计算机出现之前,科学研究和工程设计主要依靠实验或试验提供数据,计算仅处于辅助地位。计算机的迅速发展,使越来越多的复杂计算成为可能。利用计算机进行科学计算带来了巨大的经济效益,同时也使科学技术本身发生了根本变化:传统的科学技术只包括理论和试验两个组成部分,使用计算机后,计算已成为同等重要的第三个组成部分。
15.数据可视化
数据可视化主要旨在借助于图形化手段,清晰有效地传达与沟通信息。但是,这并不就意味着数据可视化就一定因为要实现其功能用途而令人感到枯燥乏味,或者是为了看上去绚丽多彩而显得极端复杂。为了有效地传达思想概念,美学形式与功能需要齐头并进,通过直观地传达关键的方面与特征,从而实现对于相当稀疏而又复杂的数据集的深入洞察。然而,设计人员往往并不能很好地把握设计与功能之间的平衡,从而创造出华而不实的数据可视化形式,无法达到其主要目的,也就是传达与沟通信息。 数据可视化与信息图形、信息可视化、科学可视化以及统计图形密切相关。当前,在研究、教学和开发领域,数据可视化乃是一个极为活跃而又关键的方面。“数据可视化”这条术语实现了成熟的科学可视化领域与较年轻的信息可视化领域的统一。
16.AI人工智能
人工智能(Artificial Intelligence),英文缩写为AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。 人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器,该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。人工智能从诞生以来,理论和技术日益成熟,应用领域也不断扩大,可以设想,未来人工智能带来的科技产品,将会是人类智慧的“容器”。人工智能可以对人的意识、思维的信息过程的模拟。人工智能不是人的智能,但能像人那样思考、也可能超过人的智能。 人工智能是一门极富挑战性的科学,从事这项工作的人必须懂得计算机知识,心理学和哲学。人工智能是包括十分广泛的科学,它由不同的领域组成,如机器学习,计算机视觉等等,总的说来,人工智能研究的一个主要目标是使机器能够胜任一些通常需要人类智能才能完成的复杂工作。但不同的时代、不同的人对这种“复杂工作”的理解是不同的。 2017年12月,人工智能入选“2017年度中国媒体十大流行语”。 人工智能的定义可以分为两部分,即“人工”和“智能”。“人工”比较好理解,争议性也不大。有时我们会要考虑什么是人力所能及制造的,或者人自身的智能程度有没有高到可以创造人工智能的地步,等等。但总的来说,“人工系统”就是通常意义下的人工系统。 关于什么是“智能”,就问题多多了。这涉及到其它诸如意识(CONSCIOUSNESS)、自我(SELF)、思维(MIND)(包括无意识的思维(UNCONSCIOUS_MIND))等等问题。人唯一了解的智能是人本身的智能,这是普遍认同的观点。但是我们对我们自身智能的理解都非常有限,对构成人的智能的必要元素也了解有限,所以就很难定义什么是“人工”制造的“智能”了。因此人工智能的研究往往涉及对人的智能本身的研究。其它关于动物或其它人造系统的智能也普遍被认为是人工智能相关的研究课题。 人工智能在计算机领域内,得到了愈加广泛的重视。并在机器人,经济政治决策,控制系统,仿真系统中得到应用。 尼尔逊教授对人工智能下了这样一个定义:“人工智能是关于知识的学科――怎样表示知识以及怎样获得知识并使用知识的科学。”而另一个美国麻省理工学院的温斯顿教授认为:“人工智能就是研究如何使计算机去做过去只有人才能做的智能工作。”这些说法反映了人工智能学科的基本思想和基本内容。即人工智能是研究人类智能活动的规律,构造具有一定智能的人工系统,研究如何让计算机去完成以往需要人的智力才能胜任的工作,也就是研究如何应用计算机的软硬件来模拟人类某些智能行为的基本理论、方法和技术。 人工智能是计算机学科的一个分支,二十世纪七十年代以来被称为世界三大尖端技术之一(空间技术、能源技术、人工智能)。也被认为是二十一世纪三大尖端技术(基因工程、纳米科学、人工智能)之一。这是因为近三十年来它获得了迅速的发展,在很多学科领域都获得了广泛应用,并取得了丰硕的成果,人工智能已逐步成为一个独立的分支,无论在理论和实践上都已自成一个系统。 人工智能是研究使计算机来模拟人的某些思维过程和智能行为(如学习、推理、思考、规划等)的学科,主要包括计算机实现智能的原理、制造类似于人脑智能的计算机,使计算机能实现更高层次的应用。人工智能将涉及到计算机科学、心理学、哲学和语言学等学科。可以说几乎是自然科学和社会科学的所有学科,其范围已远远超出了计算机科学的范畴,人工智能与思维科学的关系是实践和理论的关系,人工智能是处于思维科学的技术应用层次,是它的一个应用分支。从思维观点看,人工智能不仅限于逻辑思维,要考虑形象思维、灵感思维才能促进人工智能的突破性的发展,数学常被认为是多种学科的基础科学,数学也进入语言、思维领域,人工智能学科也必须借用数学工具,数学不仅在标准逻辑、模糊数学等范围发挥作用,数学进入人工智能学科,它们将互相促进而更快地发展。
17.机器学习
机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。 它是人工智能的核心,是使计算机具有智能的根本途径。 机器学习是一门多学科交叉专业,涵盖概率论知识,统计学知识,近似理论知识和复杂算法知识,使用计算机作为工具并致力于真实实时的模拟人类学习方式, 并将现有内容进行知识结构划分来有效提高学习效率。 机器学习有下面几种定义: (1)机器学习是一门人工智能的科学,该领域的主要研究对象是人工智能,特别是如何在经验学习中改善具体算法的性能。 (2)机器学习是对能通过经验自动改进的计算机算法的研究。 (3)机器学习是用数据或以往的经验,以此优化计算机程序的性能标准。
18.深度学习
深度学习(DL, Deep Learning)是机器学习(ML, Machine Learning)领域中一个新的研究方向,它被引入机器学习使其更接近于最初的目标——人工智能(AI, Artificial Intelligence)。 深度学习是学习样本数据的内在规律和表示层次,这些学习过程中获得的信息对诸如文字,图像和声音等数据的解释有很大的帮助。它的最终目标是让机器能够像人一样具有分析学习能力,能够识别文字、图像和声音等数据。 深度学习是一个复杂的机器学习算法,在语音和图像识别方面取得的效果,远远超过先前相关技术。 深度学习在搜索技术,数据挖掘,机器学习,机器翻译,自然语言处理,多媒体学习,语音,推荐和个性化技术,以及其他相关领域都取得了很多成果。深度学习使机器模仿视听和思考等人类的活动,解决了很多复杂的模式识别难题,使得人工智能相关技术取得了很大进步。 深度学习是一类模式分析方法的统称,就具体研究内容而言,主要涉及三类方法: (1)基于卷积运算的神经网络系统,即卷积神经网络(CNN)。 (2)基于多层神经元的自编码神经网络,包括自编码( Auto encoder)以及近年来受到广泛关注的稀疏编码两类( Sparse Coding)。 (3)以多层自编码神经网络的方式进行预训练,进而结合鉴别信息进一步优化神经网络权值的深度置信网络(DBN)。 通过多层处理,逐渐将初始的“低层”特征表示转化为“高层”特征表示后,用“简单模型”即可完成复杂的分类等学习任务。由此可将深度学习理解为进行“特征学习”(feature learning)或“表示学习”(representation learning)。 以往在机器学习用于现实任务时,描述样本的特征通常需由人类专家来设计,这成为“特征工程”(feature engineering)。众所周知,特征的好坏对泛化性能有至关重要的影响,人类专家设计出好特征也并非易事;特征学习(表征学习)则通过机器学习技术自身来产生好特征,这使机器学习向“全自动数据分析”又前进了一步。 近年来,研究人员也逐渐将这几类方法结合起来,如对原本是以有监督学习为基础的卷积神经网络结合自编码神经网络进行无监督的预训练,进而利用鉴别信息微调网络参数形成的卷积深度置信网络。与传统的学习方法相比,深度学习方法预设了更多的模型参数,因此模型训练难度更大,根据统计学习的一般规律知道,模型参数越多,需要参与训练的数据量也越大。 20世纪八九十年代由于计算机计算能力有限和相关技术的限制,可用于分析的数据量太小,深度学习在模式分析中并没有表现出优异的识别性能。自从2006年, Hinton等提出快速计算受限玻耳兹曼机(RBM)网络权值及偏差的CD-K算法以后,RBM就成了增加神经网络深度的有力工具,导致后面使用广泛的DBN(由 Hinton等开发并已被微软等公司用于语音识别中)等深度网络的出现。与此同时,稀疏编码等由于能自动从数据中提取特征也被应用于深度学习中。基于局部数据区域的卷积神经网络方法今年来也被大量研究。
19.自然语言处理NLP
自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。自然语言处理是一门融语言学、计算机科学、数学于一体的科学。因此,这一领域的研究将涉及自然语言,即人们日常使用的语言,所以它与语言学的研究有着密切的联系,但又有重要的区别。自然语言处理并不是一般地研究自然语言,而在于研制能有效地实现自然语言通信的计算机系统,特别是其中的软件系统。因而它是计算机科学的一部分。 自然语言处理(NLP)是计算机科学,人工智能,语言学关注计算机和人类(自然)语言之间的相互作用的领域。 语言是人类区别其他动物的本质特性。在所有生物中,只有人类才具有语言能力。人类的多种智能都与语言有着密切的关系。人类的逻辑思维以语言为形式,人类的绝大部分知识也是以语言文字的形式记载和流传下来的。因而,它也是人工智能的一个重要,甚至核心部分。 用自然语言与计算机进行通信,这是人们长期以来所追求的。因为它既有明显的实际意义,同时也有重要的理论意义:人们可以用自己最习惯的语言来使用计算机,而无需再花大量的时间和精力去学习不很自然和习惯的各种计算机语言;人们也可通过它进一步了解人类的语言能力和智能的机制。 实现人机间自然语言通信意味着要使计算机既能理解自然语言文本的意义,也能以自然语言文本来表达给定的意图、思想等。前者称为自然语言理解,后者称为自然语言生成。因此,自然语言处理大体包括了自然语言理解和自然语言生成两个部分。历史上对自然语言理解研究得较多,而对自然语言生成研究得较少。但这种状况已有所改变。 无论实现自然语言理解,还是自然语言生成,都远不如人们原来想象的那么简单,而是十分困难的。从现有的理论和技术现状看,通用的、高质量的自然语言处理系统,仍然是较长期的努力目标,但是针对一定应用,具有相当自然语言处理能力的实用系统已经出现,有些已商品化,甚至开始产业化。典型的例子有:多语种数据库和专家系统的自然语言接口、各种机器翻译系统、全文信息检索系统、自动文摘系统等。 自然语言处理,即实现人机间自然语言通信,或实现自然语言理解和自然语言生成是十分困难的。造成困难的根本原因是自然语言文本和对话的各个层次上广泛存在的各种各样的歧义性或多义性(ambiguity)。 一个中文文本从形式上看是由汉字(包括标点符号等)组成的一个字符串。由字可组成词,由词可组成词组,由词组可组成句子,进而由一些句子组成段、节、章、篇。无论在上述的各种层次:字(符)、词、词组、句子、段,……还是在下一层次向上一层次转变中都存在着歧义和多义现象,即形式上一样的一段字符串,在不同的场景或不同的语境下,可以理解成不同的词串、词组串等,并有不同的意义。一般情况下,它们中的大多数都是可以根据相应的语境和场景的规定而得到解决的。也就是说,从总体上说,并不存在歧义。这也就是我们平时并不感到自然语言歧义,和能用自然语言进行正确交流的原因。但是一方面,我们也看到,为了消解歧义,是需要极其大量的知识和进行推理的。如何将这些知识较完整地加以收集和整理出来;又如何找到合适的形式,将它们存入计算机系统中去;以及如何有效地利用它们来消除歧义,都是工作量极大且十分困难的工作。这不是少数人短时期内可以完成的,还有待长期的、系统的工作。 以上说的是,一个中文文本或一个汉字(含标点符号等)串可能有多个含义。它是自然语言理解中的主要困难和障碍。反过来,一个相同或相近的意义同样可以用多个中文文本或多个汉字串来表示。 因此,自然语言的形式(字符串)与其意义之间是一种多对多的关系。其实这也正是自然语言的魅力所在。但从计算机处理的角度看,我们必须消除歧义,而且有人认为它正是自然语言理解中的中心问题,即要把带有潜在歧义的自然语言输入转换成某种无歧义的计算机内部表示。 歧义现象的广泛存在使得消除它们需要大量的知识和推理,这就给基于语言学的方法、基于知识的方法带来了巨大的困难,因而以这些方法为主流的自然语言处理研究几十年来一方面在理论和方法方面取得了很多成就,但在能处理大规模真实文本的系统研制方面,成绩并不显著。研制的一些系统大多数是小规模的、研究性的演示系统。 目前存在的问题有两个方面:一方面,迄今为止的语法都限于分析一个孤立的句子,上下文关系和谈话环境对本句的约束和影响还缺乏系统的研究,因此分析歧义、词语省略、代词所指、同一句话在不同场合或由不同的人说出来所具有的不同含义等问题,尚无明确规律可循,需要加强语用学的研究才能逐步解决。另一方面,人理解一个句子不是单凭语法,还运用了大量的有关知识,包括生活知识和专门知识,这些知识无法全部贮存在计算机里。因此一个书面理解系统只能建立在有限的词汇、句型和特定的主题范围内;计算机的贮存量和运转速度大大提高之后,才有可能适当扩大范围. 以上存在的问题成为自然语言理解在机器翻译应用中的主要难题,这也就是当今机器翻译系统的译文质量离理想目标仍相差甚远的原因之一;而译文质量是机译系统成败的关键。中国数学家、语言学家周海中教授曾在经典论文《机器翻译五十年》中指出:要提高机译的质量,首先要解决的是语言本身问题而不是程序设计问题;单靠若干程序来做机译系统,肯定是无法提高机译质量的;另外在人类尚未明了大脑是如何进行语言的模糊识别和逻辑判断的情况下,机译要想达到“信、达、雅”的程度是不可能的。
20.图像处理
21世纪是一个充满信息的时代,图像作为人类感知世界的视觉基础,是人类获取信息、表达信息和传递信息的重要手段。数字图像处理,即用计算机对图像进行处理,其发展历史并不长。数字图像处理技术源于20世纪20年代,当时通过海底电缆从英国伦敦到美国纽约传输了一幅照片,采用了数字压缩技术。首先数字图像处理技术可以帮助人们更客观、准确地认识世界,人的视觉系统可以帮助人类从外界获取3/4以上的信息,而图像、图形又是所有视觉信息的载体,尽管人眼的鉴别力很高,可以识别上千种颜色,但很多情况下,图像对于人眼来说是模糊的甚至是不可见的,通过图象增强技术,可以使模糊甚至不可见的图像变得清晰明亮。 在计算机中,按照颜色和灰度的多少可以将图像分为二值图像、灰度图像、索引图像和真彩色RGB图像四种基本类型。大多数图像处理软件都支持这四种类型的图像。 中国物联网校企联盟认为图像处理将会是物联网产业发展的重要支柱之一,它的具体应用是指纹识别技术。
21.分词技术
分词技术就是搜索引擎针对用户提交查询的关键词串进行的查询处理后根据用户的关键词串用各种匹配方法进行分词的一种技术。 我们要理解分词技术先要理解一个概念。那就是查询处理,当用户向搜索引擎提交查询后,搜索引擎接收到用户的信息要做一系列的处理。步骤如下所示: 1.首先是到数据库里面索引相关的信息,这就是查询处理。 那么查询处理又是如何工作的呢?很简单,把用户提交的字符串没有超过3个的中文字,就会直接到数据库索引词汇。超过4个中文字的,首先用分隔符比如空格,标点符号,将查询串分割成若干子查询串。 举个例子。“什么是百度分词技术” 我们就会把这个词分割成“ 什么是,百度,分词技术。”这种分词方法叫做反向匹配法。 2.然后再看用户提供的这个词有没有重复词汇 如果有的话,会丢弃掉,默认为一个词汇。接下来检查用户提交的字符串,有没有字母和数字。如果有的话,就把字母和数字认为一个词。这就是搜索引擎的查询处理。
22.大数据时代
最早提出“大数据”时代到来的是全球知名咨询公司麦肯锡,麦肯锡称:“数据,已经渗透到当今每一个行业和业务职能领域,成为重要的生产因素。人们对于海量数据的挖掘和运用,预示着新一波生产率增长和消费者盈余浪潮的到来。” “大数据”在物理学、生物学、环境生态学等领域以及军事、金融、通讯等行业存在已有时日,却因为近年来互联网和信息行业的发展而引起人们关注。


