人工智能教程(二):人工智能的历史以及再探矩阵

图片

目录

前言

更多矩阵的知识

Pandas

矩阵的秩


前言

在上一章中,我们讨论了人工智能、机器学习、深度学习、数据科学等领域的关联和区别。我们还就整个系列将使用的编程语言、工具等做出了一些艰难的选择。最后,我们还介绍了一点矩阵的知识。在本文中,我们将深入地讨论人工智能的核心——矩阵。不过在此之前,我们先来了解一下人工智能的历史。

我们为什么需要了解人工智能的历史呢?历史上曾出现过多次人工智能热潮,但在很多情况下,对人工智能潜力的巨大期望都未能达成。了解人工智能的历史,有助于让我们看清这次人工智浪潮是会创造奇迹,抑或只是另一个即将破灭的泡沫。

我们对人工智能的最寻起源于何时呢?是在发明数字计算机之后吗?还是更早呢?我相信对一个无所不知的存在的追求可以追溯到文明之初。比如古希腊神话中的 德尔菲(Delphi) 就是这样一位能回答任何问题的先知。从远古时代起,对于超越人类智慧的创造性机器的探索同样吸引着我们 。历史上有过几次制造国际象棋机器的失败的尝试。其中就有臭名昭著的机械特克(Mechanical Turk),它并不是真正的机器人,而是由一位藏在内部的棋手操控的。约翰·纳皮尔(John Napier) 发明的对数、布莱斯·帕斯卡(Blaise Pascal) 的计算器、查尔斯·巴贝奇(Charles Babbage) 的差分机等,这些都是人工智能研究的前身。回顾人类历史,你会发现更多真实或虚构的时刻,人们想要获得超越人脑的智能。如果不考虑以上这些历史成就,对真正人工智能的探索起始于数字计算机的发明。

那么,人工智能发展至今有哪些里程碑呢?前面已经提到,数字计算机的发明是人工智能研究历程中最重要的事件。与可扩展性依赖于功率需求的机电设备不同,数字设备受益于技术进步,比如从真空管到晶体管到集成电路再到如今的超大规模集成技术。

人工智能发展的另一个里程碑是 阿兰·图灵(Alan Turing) 首次对人工智能的理论分析。他提出的 图灵测试(Turing test) 是最早的人工智能测试方法之一。现在图灵测试可能已经不太适用了,但它是定义人工智能的最初尝试之一。图灵测试可以简单描述如下:假设有一台能够与人类对话的机器,如果它能在对话中让人无法分辨它是人还是机器,那么就可以认为这台机器具有智能。如今的聊天机器人非常强大,使我们很容易看出图灵测试无法识别出真正的人工智能。但在 20 世纪 50 年代初,这确实为理解人工智能提供了一个理论框架。

20 世纪 50 年代末,约翰·麦卡锡(John McCarthy) 发明了 Lisp 编程语言。它是最早的高级编程语言之一。在此之前,计算机编程用的是机器语言和汇编语言(众所周知地难用)。有了强大的机器和编程语言,计算机科学家中的乐观主义和梦想家顺理成章地开始用它们来创造人工智能。20 世纪 60 年代初,对人工智能机器的期望达到了顶峰。当然计算机科学领域取得了很大发展,但人工智能的奇迹发生了吗?很遗憾,并没有。20 世纪 60 年代见证了第一次人工智能热潮的兴起和破灭。然而计算机科学以无与伦比的速度继续发展着。

到了 70 年代和 80 年代,算法在这一时期发挥了主要作用。在这段时间,许多新的高效算法被提出。20 世纪 60 年代末高德纳·克努特(Donald Knuth)(我强烈建议你了解一下他,在计算机科学界,他相当于数学界的高斯或欧拉)著名的《计算机程序设计艺术(The Art of Computer Programming)》第一卷的出版标志着算法时代的开始。在这些年中,开发了许多通用算法和图算法。此外,基于人工神经网络的编程也在此时兴起。尽管早在 20 世纪 40 年代,沃伦·S.·麦卡洛克(Warren S. McCulloch)和沃尔特·皮茨(Walter Pitts) 就率先提出了人工神经网络,但直到几十年后它才成为主流技术。今天,深度学习几乎完全是基于人工神经网络的。算法领域的这种发展导致了 20 世纪 80 年代人工智能研究的复苏。然而,这一次,通信和算力的限制阻碍了人工智能的发展,使其未能达到人们野心勃勃的预期。然后是 90 年代、千禧年,直到今天。又一次,我们对人工智能的积极影响充满了热情和希望。

我你们可以看到,在数字时代,人工智能至少有两次前景光明的机会。但这两次人工智能都没有达到它的预期。现在的人工智能浪潮也与此类似吗?当然这个问题很难回答。但我个人认为,这一次人工智能将产生巨大的影响(LCTT 译注:本文发表于 2022 年 6 月,半年后,ChatGTP 才推出)。是什么让我做出这样的预测呢?第一,现在的高性能计算设备价格低廉且容易获得。在 20 世纪 60 年代或 80 年代,只有几台如此强大的计算设备,而现在我们有数百万甚至数十亿台这样的机器。第二,现在有大量数据可用来训练人工智能和机器学习程序。想象一下,90 年代从事数字图像处理的人工智能工程师,能有多少数字图像来训练算法呢?也许是几千或者几万张吧。现在单单数据科学平台 Kaggle(谷歌的子公司)就拥有超过 1 万个数据集。互联网上每天产生的大量数据使训练算法变得容易得多。第三,高速的互联网连接使得与大型机构协作变得更加容易。21 世纪的头 10 年,计算机科学家之间的合作还很困难。如今互联网的速度已经使谷歌 Colab、Kaggle、Project jupiter 等人工智能项目的协作成为现实。由于这三个因素,我相信这一次人工智能将永远存在,并会出现许多优秀的应用。

更多矩阵的知识

图片

                                                          图 1:矩阵 A、B、C、D

在大致了解了人工智能的历史后,现在是时候回到矩阵与向量这一主题上了。在上一篇文章中,我已经对它们做了简要介绍。这一次,我们将更深入矩阵的世界。首先看图 1 和 图 2,其中显示了从 A 到 H 共 8 个矩阵。为什么人工智能和机器学习教程中需要这么多矩阵呢?首先,正如前一篇文章中提到的,矩阵是线性代数的核心,而线性代数即使不是机器学习的大脑,也是机器学习的核心。其次,在接下来的讨论中,它们每一个都有特定的用途。

图片

                                                         图 2:矩阵 E、F、G、H

让我们看看矩阵是如何表示的,以及如何获取它们的详细信息。图 3 展示了怎么用 NumPy 表示矩阵 A。虽然矩阵和数组并不完全等价,但实践中我们经常将它们作为同义词来使用。

图片

                                                   图 3:用 NumPy 表示矩阵 A

我强烈建议你仔细学习如何使用 NumPy 的 array 函数创建矩阵。虽然 NumPy 也提供了 matrix 函数来创建二维数组和矩阵。但是它将在未来被废弃,所以不再建议使用了。在图 3 还显示了矩阵 A 的一些详细信息。A.size 告诉我们数组中元素的个数。在我们的例子中,它是 9。代码 A.nidm 表示数组的 维数(dimension)。很容易看出矩阵 A 是二维的。A.shape 表示矩阵 A 的阶数(order),矩阵的阶数是矩阵的行数和列数。虽然我不会进一步解释,但使用 NumPy 库时需要注意矩阵的大小、维度和阶数。图 4 显示了为什么应该仔细识别矩阵的大小、维数和阶数。定义数组时的微小差异可能导致其大小、维数和阶数的不同。因此,程序员在定义矩阵时应该格外注意这些细节。

图片

                                                  图 4:数组的大小、维数和阶数

现在我们来做一些基本的矩阵运算。图 5 显示了如何将矩阵 A 和 B 相加。NumPy 提供了两种方法将矩阵相加,add 函数和 + 运算符。请注意,只有阶数相同的矩阵才能相加。例如,两个 4 × 3 矩阵可以相加,而一个 3 × 4 矩阵和一个 2 × 3 矩阵不能相加。然而,由于编程不同于数学,NumPy 在实际上并不遵循这一规则。图 5 还展示了将矩阵 A 和 D 相加。记住,这种矩阵加法在数学上是非法的。一种叫做 广播(broadcasting) 的机制决定了不同阶数的矩阵应该如何相加。我们现在不会讨论广播的细节,但如果你熟悉 C 或 C++,可以暂时将其理解为变量的类型转换。因此,如果你想确保执行正真数学意义上的矩阵加法,需要保证以下测试为真:

图片

                                                            图 5:矩阵相加

A.shape == B.shape

广播机制也不是万能的,如果你尝试把矩阵 D 和 H 相加,会产生一个运算错误。

当然除了矩阵加法外还有其它矩阵运算。图 6 展示了矩阵减法和矩阵乘法。它们同样有两种形式,矩阵减法可以由 subtract 函数或减法运算符 - 来实现,矩阵乘法可以由 matmul 函数或矩阵乘法运算符 @ 来实现。图 6 还展示了 逐元素乘法(element-wise multiplication) 运算符 * 的使用。请注意,只有 NumPy 的 matmul 函数和 @ 运算符执行的是数学意义上的矩阵乘法。在处理矩阵时要小心使用 * 运算符。

图片

                                                         图 6:更多矩阵运算

对于一个 m x n 阶和一个 p x q 阶的矩阵,当且仅当 n 等于 p 时它们才可以相乘,相乘的结果是一个 m x q 阶矩的阵。图 7 显示了更多矩阵相乘的示例。注意 E@A 是可行的,而 A@E 会导致错误。请仔细阅读对比 D@G 和 G@D 的示例。使用 shape 属性,确定这 8 个矩阵中哪些可以相乘。虽然根据严格的数学定义,矩阵是二维的,但我们将要处理更高维的数组。作为例子,下面的代码创建一个名为 T 的三维数组。

图片

                                                图 7:更多矩阵乘法的例子

T = np.array([[[11,22], [33,44]], [[55,66], [77,88]]])

Pandas

到目前为止,我们都是通过键盘输入矩阵的。如果我们需要从文件或数据集中读取大型矩阵并处理,那该怎么办呢?这时我们就要用到另一个强大的 Python 库了——Pandas。我们以读取一个小的 CSV (逗号分隔值(comma-separated value))文件为例。图 8 展示了如何读取 cricket.csv 文件,并将其中的前三行打印到终端上。在本系列的后续文章中将会介绍 Pandas 的更多特性。

图片

                                                图 8:用 Pandas 读取 CSV 文件

矩阵的秩

矩阵的 秩(Rank) 是由它的行(列)张成的向量空间的维数。如果你还记得大学线性代数的内容的话,你一定对维数、向量空间和张成还有印象,那么你也应该能理解矩阵的秩的含义了。但如果你不熟悉这些术语,那么可以简单地将矩阵的秩理解为矩阵中包含的信息量。当然,这又是一种未来方便理解而过度简化的说法。图 9 显示了如何用 NumPy 求矩阵的秩。矩阵 A 的秩为 3,因为它的任何一行都不能从其它行中得到。矩阵 B 的秩为 1,因为第二行和第三行可以由第一行分别乘以 2 和 3 得到。矩阵 C 只有一个非零行,因此秩为 1。同样的,其它矩阵的秩也不难理解。矩阵的秩与我们的主题关系密切,我们会在后续文章中再提到它。

图片

                                                             图 9:求矩阵的秩

本次的内容就到此结束了。在下一篇文章中,我们将扩充工具库,以便它们可用于开发人工智能和机器学习程序。我们还将更详细地讨论 神经网络(neural network)、监督学习(supervised learning)、无监督学习(unsupervised learning) 等术语。此外,从下一篇文章开始,我们将使用 JupyterLab 代替 Linux 终端。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/187498.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

机器学习第14天:KNN近邻算法

☁️主页 Nowl 🔥专栏《机器学习实战》 《机器学习》 📑君子坐而论道,少年起而行之 文章目录 介绍 实例 回归任务 缺点 实例 分类任务 如何选择最佳参数 结语 介绍 KNN算法的核心思想是:当我们要判断一个数据为哪一类时…

CMD - ping

文章目录 前言参数 前言 ping 命令主要测试到达指定 IP 或主机的连通性. 参数 -t: ping 指定的计算机直到中断 -a: 将地址解析为主机名 -n count: 要发送的回显请求数

教师编制缩减是为什么

老师们有没有注意到一个趋势?那就是教师编制正在逐步缩减。不知道你们发现没有,我最近在研究教育领域的新闻,发现这两年教师编制缩减的消息越来越多。这是为什么呢?今天就来跟大家聊一聊。 原因一:资金压力 第一个原因…

【华为OD题库-038】支持优先级的对列-java

题目 实现一个支持优先级的队列,高优先级先出队列,同优先级时先进先出。 如果两个输入数据和优先级都相同,则后一个数据不入队列被丢弃。 队列存储的数据内容是一个 整数。 输入描述 一组待存入队列的数据(包含内容和优先级)。 输出描述 队列…

ubuntu 使用webrtc_ros 编译linux webrtc库

ubuntu 使用webrtc_ros 编译linux webrtc库 webrtc_ros 使用WebRTC流式传输ROS图像主题 该节点提供了一个WebRTC对等方,可以将其配置为流ROS图像主题并接收发布到ROS图像主题的流。 该节点托管一个提供简单测试页面的Web服务器,并提供可用于创建和配置W…

基于springboot实现学生成绩管理系统项目【项目源码+论文说明】

基于springboot实现学生成绩管理系统演示 摘要 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生&am…

【从浅识到熟知Linux】基本指令之基本权限

🎈归属专栏:从浅学到熟知Linux 🚗个人主页:Jammingpro 🐟每日一句:用博客整理整理之前学过的知识,是个不错的选择。 文章前言:本文介绍Linux中的基本权限及相关指令用法并给出示例和…

互联网+智慧工地系统源码

智慧工地以施工现场风险预知和联动预控为目标,将智能AI、传感技术、人像识别、监控、虚拟现实、物联网、5G、大数据、互联网等新一代科技信息技术植入到建筑、机械、人员穿戴设施、场地进出关口等各类设备中,实现工程管理与工程施工现场的整合&#xff0…

快速压缩:迅速减小PDF文件大小的步骤与技巧

虽然png图片格式是一种无损压缩格式,但是png图片的内存大小也是比较大的,而且兼容性上也没有jpg图片好,许多平台推荐的也都是jpg格式,所以当我们需要把png转jpg格式的时候,就需要用到图片格式转换器,今天推…

JAVA创建线程方式有几种

方式1:继承Thread类 步骤: 创建一个继承于Thread类的子类重写Thread的run()方法创建当前Thread子类的对象通过实例对象调用start()方法,启动线程----》JAVA虚拟机会调用run()方法 实现: public class TestMyThread {public sta…

怎样禁止邮件发送涉密信息

数字化时代,电子邮件已成为人们生活和工作中不可或缺的通讯工具。然而,随着互联网的普及,涉密信息的泄露风险也随之增加。为了保护敏感数据,禁止邮件发送涉密信息显得尤为重要。以下是一些建议,帮助你实现这一目标。 1…

buuctf web [极客大挑战 2019]PHP

提示有备份,dirsearch扫描网站备份 GitHub - maurosoria/dirsearch: Web path scanner下载.zip格式文件 解压到python目录下 在上图位置cmd打开窗口 输入python setup.py install安装dirseach 安装好后输入命令使用dirseach python dirseach.py -u http://44296191-973d-448…

在CentOS 7.9上搭建高性能的FastDFS+Nginx文件服务器集群并实现外部远程访问

文章目录 引言第一部分:FastDFS介绍与安装1.1 FastDFS简介1.2 FastDFS安装1.2.1 安装Tracker Server1.2.2 安装Storage Server 1.3 FastDFS配置1.3.1 配置Tracker Server1.3.2 配置Storage Server1.3.3 启动FastDFS服务 第二部分:Nginx配置2.1 Nginx安装…

【深度学习】因果推断与机器学习的高级实践 | 数学建模

文章目录 因果推断因果推断的前世今生(1)潜在结果框架(Potential Outcome Framework)(2)结构因果模型(Structual Causal Model,SCM) 身处人工智能爆发式增长时代的机器学…

uniapp实现多时间段设置

功能说明&#xff1a; 1 点击新增时间&#xff0c;出现一个默认时间段模板&#xff0c;不能提交 2 点击“新增时间文本”&#xff0c;弹出弹窗&#xff0c;选择时间&#xff0c;不允许开始时间和结束时间同时为00:00&#xff0c; <view class"item_cont"> …

python排序算法_归并排序

什么是归并排序&#xff1a; 归并排序是一种基于分治法的排序算法。它的基本思想是将待排序的序列分成若干个子序列&#xff0c;分别进行排序&#xff0c;然后再将已排序的子序列合并成一个有序的序列。 基本思想&#xff1a; 归并排序是用分治思想&#xff0c;分治模式在每一…

ubuntu22.04 安装 jupyterlab

JupyterLab Install JupyterLab with pip: pip install jupyterlabNote: If you install JupyterLab with conda or mamba, we recommend using the conda-forge channel. Once installed, launch JupyterLab with: jupyter lab

基于人工兔算法优化概率神经网络PNN的分类预测 - 附代码

基于人工兔算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于人工兔算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于人工兔优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神经网络…

CDN的认识与绕过

CDN的认识与绕过 什么是CDN CDN的全称是Content Delivery Network&#xff0c;即内容分发网络。它依靠部署在各地的边缘服务器&#xff0c;通过中心平台的负载均衡、内容分发、调度等功能模块&#xff0c;使用户就近获取所需内容&#xff0c;降低网络拥塞&#xff0c;提高用户…

万字解析设计模式之策略模式、命令模式

一、策略模式 1.1概述 先看下面的图片&#xff0c;我们去旅游选择出行模式有很多种&#xff0c;可以骑自行车、可以坐汽车、可以坐火车、可以坐飞机。 策略模式&#xff08;Strategy Pattern&#xff09;是一个行为型设计模式&#xff0c;它定义了一组算法家族&#xff0c;分…