在本系列的第一篇文章中,我們討論了人工智慧、機器學習、深度學習、資料科學等領域的關聯和差異。我們也為整個系列將使用的程式語言、工具等做出了一些艱難的選擇。最後,我們也介紹了一點矩陣的知識。在本文中,我們將深入討論人工智慧的核心——矩陣。不過在此之前,我們先來了解一下人工智慧的歷史
我們為什麼需要了解人工智慧的歷史呢?歷史上曾出現過多次人工智慧熱潮,但在許多情況下,對人工智慧潛力的巨大期望都未能達成。了解人工智慧的歷史,有助於讓我們看清這次人工智浪潮是會創造奇蹟,抑或只是另一個即將破滅的泡沫。
我們對人工智慧的起源是從何時開始的呢?是在發明數位計算機之後嗎?還是更早呢?我相信對於追求一個無所不知的存在可以追溯到文明之初。例如古希臘神話中的德爾菲就是一位能夠回答任何問題的先知。從遠古時代開始,對於超越人類智慧的創意機器的探索同樣吸引著我們。歷史上曾經有過幾次製造西洋棋機器的失敗嘗試。其中就有臭名昭著的機械特克,它並不是真正的機器人,而是由一位藏在內部的棋手操控的。約翰·納皮爾發明的對數,布萊斯·帕斯卡的計算器,查爾斯·巴貝奇的分析機都在人工智慧的發展歷程中起到了關鍵作用
那麼,人工智慧發展至今有哪些里程碑呢?前面已經提到,數位計算機的發明是人工智慧研究歷程中最重要的事件。與可擴展性依賴功率需求的機電設備不同,數位設備受益於技術進步,例如從真空管到電晶體到積體電路再到如今的超大規模整合技術。
人工智慧發展的另一個重要里程碑是阿蘭圖靈首次對人工智慧進行理論分析。他提出了著名的圖靈測試
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(Google的子公司)就擁有超過1萬個資料集。網路每天產生的大量數據使得訓練演算法變得更加容易。第三,高速的網路連線使得與大型機構合作更加容易。在21世紀的頭10年,電腦科學家之間的合作還很困難。然而,現在網路的速度已經使得與GoogleColab、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
重新表達:圖五:矩陣求和
重新表達:圖五:矩陣求和
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]]])
到目前为止,我们都是通过键盘输入矩阵的。如果我们需要从文件或数据集中读取大型矩阵并处理,那该怎么办呢?这时我们就要用到另一个强大的 Python 库了——Pandas。我们以读取一个小的 CSV (逗号分隔值comma-separated value)文件为例。图 8 展示了如何读取 cricket.csv
文件,并将其中的前三行打印到终端上。在本系列的后续文章中将会介绍 Pandas 的更多特性。
图 8:用 Pandas 读取 CSV 文件
图 8:用 Pandas 读取 CSV 文件
需要进行改写的内容是:矩阵的秩
圖 9:求矩陣的秩
本次的內容就到此結束了。在下一篇文章中,我們將擴充工具庫,以便它們可用於開發人工智慧和機器學習程式。我們也將更詳細地討論 神經網路neural network、監督學習supervised learning、無監督學習unsupervised learning
以上是探索人工智慧歷史與矩陣:人工智慧教學(二)的詳細內容。更多資訊請關注PHP中文網其他相關文章!