在本系列的第一篇文章中,我们讨论了人工智能、机器学习、深度学习、数据科学等领域的关联和区别。我们还就整个系列将使用的编程语言、工具等做出了一些艰难的选择。最后,我们还介绍了一点矩阵的知识。在本文中,我们将深入地讨论人工智能的核心——矩阵。不过在此之前,我们先来了解一下人工智能的历史
我们为什么需要了解人工智能的历史呢?历史上曾出现过多次人工智能热潮,但在很多情况下,对人工智能潜力的巨大期望都未能达成。了解人工智能的历史,有助于让我们看清这次人工智浪潮是会创造奇迹,抑或只是另一个即将破灭的泡沫。
我们对人工智能的起源是从何时开始的呢?是在发明数字计算机之后吗?还是更早呢?我相信对于追求一个无所不知的存在可以追溯到文明之初。比如古希腊神话中的德尔菲就是一位能够回答任何问题的先知。从远古时代开始,对于超越人类智慧的创造性机器的探索同样吸引着我们。历史上曾经有过几次制造国际象棋机器的失败尝试。其中就有臭名昭著的机械特克,它并不是真正的机器人,而是由一位藏在内部的棋手操控的。约翰·纳皮尔发明的对数,布莱斯·帕斯卡的计算器,查尔斯·巴贝奇的分析机都在人工智能的发展历程中起到了关键作用
那么,人工智能发展至今有哪些里程碑呢?前面已经提到,数字计算机的发明是人工智能研究历程中最重要的事件。与可扩展性依赖于功率需求的机电设备不同,数字设备受益于技术进步,比如从真空管到晶体管到集成电路再到如今的超大规模集成技术。
人工智能发展的另一个重要里程碑是阿兰·图灵首次对人工智能进行理论分析。他提出了著名的图灵测试
20世纪50年代末,约翰·麦卡锡(John McCarthy)
到了 70 年代和 80 年代,算法在这一时期发挥了主要作用。在这段时间,许多新的高效算法被提出。20 世纪 60 年代末高德纳·克努特Donald Knuth(我强烈建议你了解一下他,在计算机科学界,他相当于数学界的高斯或欧拉)著名的《计算机程序设计艺术The Art of Computer Programming》第一卷的出版标志着算法时代的开始。在这些年中,开发了许多通用算法和图算法。此外,基于人工神经网络的编程也在此时兴起。尽管早在 20 世纪 40 年代,沃伦·S.·麦卡洛克Warren S. McCulloch和沃尔特·皮茨Walter Pitts
在数字时代,人工智能至少有两次前景光明的机会,但这两次机会都没有达到预期。现在的人工智能浪潮是否与之相似呢?这个问题很难回答。然而,我个人认为,这次人工智能将产生巨大的影响(LCTT 译注:本文发表于2022年6月,ChatGTP 在半年后推出)。我为什么会有这样的预测呢?首先,现在高性能计算设备的价格便宜且易得。在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 显示了为什么应该仔细识别矩阵的大小、维数和阶数。定义数组时的微小差异可能导致其大小、维数和阶数的不同。因此,程序员在定义矩阵时应该格外注意这些细节。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:数组的大小、维数和阶数现在我们来做一些基本的矩阵运算。图 5 显示了如何将矩阵 A 和 B 相加。NumPy 提供了两种方法将矩阵相加,add
函数和 +
运算符。请注意,只有阶数相同的矩阵才能相加。例如,两个 4 × 3 矩阵可以相加,而一个 3 × 4 矩阵和一个 2 × 3 矩阵不能相加。然而,由于编程不同于数学,NumPy 在实际上并不遵循这一规则。图 5 还展示了将矩阵 A 和 D 相加。记住,这种矩阵加法在数学上是非法的。一种叫做 广播broadcasting
重新表达:图五:矩阵求和
🎜🎜重新表达:图五:矩阵求和🎜A.shape == B.shape
当然除了矩阵加法外还有其它矩阵运算。图 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]]])
到目前为止,我们都是通过键盘输入矩阵的。如果我们需要从文件或数据集中读取大型矩阵并处理,那该怎么办呢?这时我们就要用到另一个强大的 Python 库了——Pandas。我们以读取一个小的 CSV (逗号分隔值comma-separated value)文件为例。图 8 展示了如何读取 cricket.csv
文件,并将其中的前三行打印到终端上。在本系列的后续文章中将会介绍 Pandas 的更多特性。
图 8:用 Pandas 读取 CSV 文件
图 8:用 Pandas 读取 CSV 文件
需要进行改写的内容是:矩阵的秩
图 9:求矩阵的秩
本次的内容就到此结束了。在下一篇文章中,我们将扩充工具库,以便它们可用于开发人工智能和机器学习程序。我们还将更详细地讨论 神经网络neural network、监督学习supervised learning、无监督学习unsupervised learning
以上是探索人工智能历史与矩阵:人工智能教程(二)的详细内容。更多信息请关注PHP中文网其他相关文章!