软件架构设计师教程 第11章 11.2 人工智能技术概述 笔记

11.2 人工智能技术概述 ★★★☆☆

11.2.1 人工智能的概念

人工智能 (Artificial Intelligence,AI) 是利用数字计算机或者数字计算机控制的机器模拟、延伸和扩展人的智能,感知环境、获取知识并使用知识获得最佳结果的理论、方法、技术及应用系统。

根据人工智能是否能真正实现推理、思考和解决问题,可以将人工智能分为弱人工智能和强人工智能。

1.弱人工智能

弱人工智能是指不能真正实现推理和解决问题的智能机器,不会有自主意识。

2.强人工智能

强人工智能是指真正能思维的智能机器,并且认为这样的机器是有知觉的和有自我意识的,这类机器可分为类人和非类人。

11.2.2 人工智能的发展历程

省略

11.2.3 人工智能关键技术

1.自然语言处理 (Natural Language Processing,NLP)

主要包括 机器翻译(利用计算机实现从一种自然语言到另外一种自然语言的翻译)、语义理解(利用计算 机理解文本篇章内容,并回答相关问题)和问答系统(让计算机像人类一样用自然语言与人交 流)等。

2.计算机视觉 (Computer Vision)

使用计算机模仿人类视觉系统的科学,提取、处理、 理解和分析图像

3.知识图谱 (Knowledge Graph)

知识图谱本质上是结构化的语义知识库,是一种由节点和边组成的图数据结构,以符号形 式描述物理世界中的概念及其相互关系。

4.人机交互 (Human-Computer Interaction,HCl)

人机交互主要研究人和计算机之间的信息交换,包括人到计算机和计算机到人的两部分信 息交换,是人工智能领域的重要的外围技术。

5.虚拟现实或增强现实(Virtual Reality /Augmented Reality,VR/AR)

虚拟现实或增强现实是以计算机为核心的新型视听技术。

6.机器学习

机器学习 (Machine Learning,ML) 是人工智能的核心研究领域之一

机器学习是以数据为基础,通过研究样本数据寻找规律,并根据所得规律对未来数据进行预测。

1)机器学习定义

广义上来说,机器学习指专门研究计算机怎么模拟或实现人类的学习行为以获取新的知识 或技能的学科,使计算机重新组织已有的组织结构并不断改善自身的性能。更加精确地说, 一个机器学习的程序就是可以从经验数据 E 中对任务T 进行学习的算法,它在任务 T 上的性能度 量P 会随着对于经验数据E 的学习而变得更好。

2)机器学习分类

首先,按照学习模式的不同,机器学习可分为监督学习、无监督学习、半监督学习、强化学习。其中,监督学习需要提供标注的样本集,无监督学习不需要提供标注的样本集,半监督学习需要提供少量标注的样本,而强化学习需要反馈机制。

(1)监督学习。

监督学习是利用已标记的有限训练数据集,通过某种学习策略/方法建立一个模型,从而 实现对新数据/实例的标记(分类)/映射。监督学习在自然语言处理、 信息检索、文本挖掘、手写体辨识、垃圾邮件侦测等领域获得了广泛应用。最典型的监督学习算法包括回归和分类等。

(2)无监督学习。

无监督学习是利用无标记的有限数据描述隐藏在未标记数据中的结构/规律。便于压缩数据存储、减少计算量、提升算法速 度,可以避免正负样本偏移引起的分类错误问题。无监督学习主要用于经济预测、异常检测、 数据挖掘、图像处理、模式识别等领域。无监督学习常见算法包括Apriori 算法、 KMeans 算法、随机森林、主成分分析等。

(3)半监督学习。

半监督学习介于监督学习与无监督学习之间,可以利用少量的标注样本和大量的未标识样 本进行训练和分类,从而达到减少标注代价、提高学习能力的目的。半监督学习的应用场景包括分类和回归,算法包括一些常用监督学习算法的延伸,这些算法首先试图对未标识数据进行建模,在此基础上再对标识的数据进行预测。例如,图论推理算法或者拉普拉斯支持向量机等。

(4)强化学习。

强化学习可以学习从环境状态到行为的映射,使得智能体选择的行为能够获得环境的最大奖赏,最终目标是使外部环境对学习系统在某种意义下的评价最佳。目前,强化学习在机器人控制、无人驾驶、 工业控制等领域获得成功应用。强化学习的常见算法包括Q-Leamning、 时间差学习等。

按照学习方法的不同,机器学习可分为传统机器学习和深度学习。区别在于,传统机器学习的领域特征需要手动完成,且需要大量领域专业知识;

深度学习不需要人工特征提取,但需要大量的训练数据集以及强大的 GPU服务器来提供算力。

(1)传统机器学习。

传统机器学习从一些观测(训练)样本出发,试图发现不能通过原理分析获得的规律,实 现对未来数据行为或趋势的准确预测。传统机器学习的相关算法包括逻辑回归、隐马尔科夫方 法、支持向量机方法、 K 近邻方法、三层人工神经网络方法、 Adaboost算法、贝叶斯方法以及决策树方法等。传统机器学习平衡了学习结果的有效性与学习模型的可解释性,为解决有限样 本的学习问题提供了一种框架。传统机器学习方法在自然语言处理、语音识别、图像识别、信 息检索等许多计算机领域获得了广泛应用。

(2)深度学习。

深度学习是一种基于多层神经网络并以海量数据作为输入规则的自学习方法,依靠提供给 它的大量实际行为数据(训练数据集),进行参数和规则调整。深度学习算法网络的隐藏层数量 多,算法复杂,更注重特征学习的重要性。典型的深度学习算法 包括卷积神经网络 (CNN)、 循环神经网络 (RNN) 等。

机器学习的常见算法还包括迁移学习、主动学习和演化学习

(1)迁移学习。

迁移学习是指当在某些领域无法取得足够多的数据进行模型训练时,利用另一领域数据获得的关系进行的学习。迁移学习把已训练好的模型参数迁移到新的模型指导新模型训练, 更有效的学习底层规则、减少数据量。迁移学习主要在变量有限的小规模应用中使用,如基于传感器网络的定位、文字分类和图像分类等。未来迁移学习将被广泛应用于解决更有挑战性的问题,如视频分类、社交网络分析、逻辑推理等。

(2)主动学习。

主动学习通过一定的算法查询最有用的未标记样本,并交由专家进行标记,然后用查询到 的样本训练分类模型来提高模型的精度。主动学习能够选择性地获取知识,通过较少的训练样 本获得高性能的模型,最常用的策略是通过不确定性准则和差异性准则选取有效的样本。

(3)演化学习。

演化学习基于演化算法提供的优化工具设计机器学习算法,针对机器学习任务中存在大量的复杂优化问题,应用于分类、聚类、规则发现、特征选择等机器学习与数据挖掘问题中。演化算法通常维护一个解的集合,并通过启发式算子来从现有的解产生新解,并通过挑选更好的 解进入下一次循环,不断提高解的质量。演化算法包括粒子群优化算法、多目标演化算法等。

### 回答1: 11.2题要求我们实现一个简单的Java类,该类可以将一个字符串中的所有单词首字母大写,并返回处理后的字符串。 我们可以先定义一个名为StringUtils的类,其中包含一个名为capitalize的静态方法,该方法接受一个字符串参数,返回处理后的字符串。 在capitalize方法中,我们可以使用Java的正则表达式来匹配字符串中的单词,并将每个单词的首字母转换为大写。具体实现可以参考以下代码: ``` import java.util.regex.Matcher; import java.util.regex.Pattern; public class StringUtils { public static String capitalize(String str) { Pattern pattern = Pattern.compile("\\b\\w"); Matcher matcher = pattern.matcher(str); StringBuffer sb = new StringBuffer(); while (matcher.find()) { matcher.appendReplacement(sb, matcher.group().toUpperCase()); } matcher.appendTail(sb); return sb.toString(); } } ``` 在上述代码中,我们首先使用Pattern.compile方法创建一个正则表达式模式,该模式可以匹配字符串中的单词首字母。然后使用Matcher类的find方法来查找字符串中的匹配项,并使用appendReplacement方法将每个匹配项替换为大写字母。最后使用appendTail方法将剩余的字符串添加到结果中,并返回处理后的字符串。 使用该类的示例代码如下: ``` public class Main { public static void main(String[] args) { String str = "hello world"; String result = StringUtils.capitalize(str); System.out.println(result); // 输出 "Hello World" } } ``` 在上述示例代码中,我们首先定义一个字符串变量str,然后调用StringUtils类的capitalize方法将字符串中的单词首字母大写,并将结果保存到result变量中。最后输出result变量的值,即可看到处理后的字符串。 ### 回答2: 本题主要是要求对Java的网络编程结构和Java提供的网络编程接口进行概述和总结,并且深入探讨Java Socket类的使用。 Java的网络编程结构包含两个主要部分:网络协议和Java网络编程API。Java提供了丰富的类库和接口,用于实现各种网络协议及传输层协议(TCP/IP),包括Socket、ServerSocket、DatagramSocket等类。它们都继承自java.net包中的抽象类,实现了一系列的方法和属性,实现了数据传输的功能。 Java提供了Socket类来实现客户端和服务器之间的数据传输。Socket类是一个封装了传输层的TCP/IP协议的类,它提供了Socket的各种操作方法和Socket的各种配置选项。Socket类的构造函数有两种方式:一种是提供ip地址和端口号,另一种是提供已经获取该服务器地址的InetAddress对象和端口号。在Socket类中,可以通过getInputStream()和getOutputStream()方法获取数据传输的输入和输出流。 Socket类不仅可以用于客户端的请求,还可以用于服务端的监听和响应。因此,Java提供了ServerSocket类来实现服务端的Socket创建。ServerSocket类监听指定端口号上的客户端请求,并且收到请求后会调用accept()方法,创建一个新的Socket连接来处理请求。ServerSocket类的accept()方法在没有请求时会一直阻塞等待。这样就可以实现无限循环监听客户端请求。 当Java Socket传输数据时,通常要使用一些协议,比如HTTP协议、SMTP协议和FTP协议等。Java提供了很多类和接口来处理这些协议,比如java.net.URL类、java.net.URLUpdate类、java.net.URLConnection类等。这些类和接口都可以方便地完成网络通信所需要的各种操作。 总之,Java网络编程是非常重要的,可以实现各种通信方式,并且提供了许多工具和接口可供使用。Socket类是Java网络编程中最重要的类之一,它可以实现客户端和服务器之间的数据传输,而ServerSocket类可以实现服务端的Socket创建和连接处理。无论是何种情况,Java网络编程都是非常重要的一部分。 ### 回答3: 本题主要是关于Java线程的控制和同步问题。在11.2题中,我们需要编写一个程序来模拟生产者/消费者模型。其中生产者生产苹果,消费者消费苹果,一共有10个苹果,生产者只有在框案上还有空位可以放苹果的时候才能生产,消费者只有在框案上还有苹果的时候才能消费。 首先,需要定义一个线程安全的框子类,其中包含框案的状态(装有多少苹果)和状态的读写接口(取苹果,放苹果)方法。这里可以使用synchronized关键字来解决同步问题,确保每个方法在运行时只能被单个线程访问。 接着,需要定义一个生产者线程类和一个消费者线程类,分别使用while循环进行苹果的生产和消费,直到达到预定数量为止。在每次生产和消费之后,需要使用wait()方法来将线程挂起,直到框子上有苹果或空位,防止线程死循环或浪费资源。 最后,在main函数中创建框子对象和生产者、消费者线程对象,并启动生产者线程和消费着线程,等待线程结束即可。 总之,Java线程的控制和同步需要仔细考虑,尤其是在多线程环境中,要避免竞态条件和资源冲突等问题,保证线程安全。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值