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

圖片

目錄

前言

更多矩陣的知識

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 終端。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/167900.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/167900.shtml
英文地址,請注明出處:http://en.pswp.cn/news/167900.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

vue打包上傳服務器的總結筆記

經歷了3個小時教訓,還是自己總結一下吧,致未來傻x的自己。 第一步,打開b站。搜索【vue打包】找到一個視頻教程 前端Vue項目打包部署實戰教程_嗶哩嗶哩_bilibili 這步是在看不懂下面操作的情況下用的 第一步:找到nginx的配置文件…

需求變更導致估算不精準 6大措施

需求變更可能導致估算不精準、項目成本增加、進度延遲等問題,如果不能準確地估算項目,往往會造成資源浪費和開發效率的降低,因此亟需解決因需求變更導致地估算不精準的問題。 一般來說,主要是從以下6個方面入手解決: 1…

【maven】【IDEA】idea中使用maven編譯項目,報錯java: 錯誤: 找不到符號 【2】

idea中使用maven編譯項目,報錯java: 錯誤: 找不到符號 錯誤狀況展示: 如果報這種錯,是因為項目中真的找不到報錯的方法或者枚舉 字段之類的,但實際是 : 點擊 File Path

OSG粒子系統與陰影-霧效模擬(1)

虛擬現實中有很多效果,如雨效、雪效、霧效等,這些都可以通過粒子系統來實現。一個真實的粒子系統的模式能使三維場景達到更好的效果。 本章對OSG粒子系統的使用以及生成自定義粒子系統的方法進行了詳細介紹最后還附帶說明了陰影的使用方法。在實時的場景…

(HAL庫版)freeRTOS移植STMF103

正點原子關于freeRTOS的教程是比較好的,可惜移植的是標準庫,但是我學的是Hal庫,因為開發速度更快,從最后那個修改SYSTEM文件夾的地方開始替換為下面的內容就可以了 5.修改Systick中斷、SVC中斷、PendSV中斷 將SVC中斷、P…

pairplot

Python可視化 | Seaborn5分鐘入門(七)——pairplot - 知乎 (zhihu.com) Seaborn是基于matplotlib的Python可視化庫。它提供了一個高級界面來繪制有吸引力的統計圖形。Seaborn其實是在matplotlib的基礎上進行了更高級的API封裝,從而使得作圖更加容易,不需…

紅黑樹詳解

紅黑樹的概念與性質 前置知識 在學習紅黑樹之前,最好有二叉查找樹和AVL樹的基礎,因為紅黑樹本質就是一種特殊的二叉查找樹,而紅黑樹的操作中需要用到AVL樹中旋轉的相關知識。至于二叉查找樹和AVL樹,可以參考如下兩篇博客&#xf…

oracle安裝的肘腋之疾小合集

#臨時空間指定 export TMP/tmp export TMPDIR/tmp #圖形化顯示框不全 java問題,使用系統自帶的jre ./runInstaller -jreLoc/usr/local/jdk1.7.0_80/ #ins30131 Failed to access the temporary location 給/tmp/CVU*加x權限 #linux桌面太小 xrandr -s 1440x900_60…

Matplotlib圖形注釋_Python數據分析與可視化

Matplotlib圖形注釋 添加注釋文字、坐標變換 有的時候單單使用圖形無法完整清晰的表達我們的信息,我們還需要進行文字進行注釋,所以matplotlib提供了文字、箭頭等注釋可以突出圖形中重點信息。 添加注釋 為了使我們的可視化圖形讓人更加容易理解&#…

vue中父組件直接調用子組件方法

vue2 中&#xff0c;父組件如何調用子組件的方法 在Vue 2中&#xff0c;父組件可以通過使用ref屬性來引用子組件的實例&#xff0c;然后通過該實例調用子組件的方法。 首先&#xff0c;在父組件的模板中&#xff0c;給子組件添加一個ref屬性&#xff1a; <template>&l…

在工業生產環境下,服務器沒有互聯網,如何通過代理自己的電腦上互聯網?

服務器主機是CentOS7操作系統.&#xff0c;服務器的局域網是10.0.6.x網段。我的筆記本的以太網口的局域網ip是也是10.0.6.x&#xff0c;由于這個10.0.6.x的整個局域網是沒有撥號上網的所有無法訪問互聯網。 但是&#xff0c;如果筆記本臉上wifi&#xff0c;wifi的網段是192.168…

長度最小的子數組

給定一個含有 n 個正整數的數組和一個正整數 target 。 找出該數組中滿足其總和大于等于 target 的長度最小的 連續子數組 [numsl, numsl1, …, numsr-1, numsr] &#xff0c;并返回其長度。如果不存在符合條件的子數組&#xff0c;返回 0 。 示例 1&#xff1a; 輸入&#x…

MySQL 有多個普通索引時會取哪一個索引?

我們都知道MySQL在查詢時底層會進行索引的優化&#xff0c;假設有兩個普通索引&#xff0c;且where 后面也根據這兩個普通索引查詢數據&#xff0c;那么執行查詢語句時會使用到那個索引&#xff1f; 為了方便演示&#xff0c;新建users表&#xff0c;新建idx_name、idx_city這兩…

前端vue導出PPT,使用pptxgen.js

前言 公司新需求需要導出ppt給業務用&#xff0c;查閱資料后發現也挺簡單的&#xff0c;記錄一下。 如有不懂的可以留言&#xff01;&#xff01;&#xff01; 1.安裝包 npm install pptxgenjs --save2.引入包 在需要使用的文件中引入 import Pptxgenfrom "pptxgenjs&…

Oracle研學-介紹及安裝

一 ORACLE數據庫特點: 支持多用戶&#xff0c;大事務量的事務處理數據安全性和完整性控制支持分布式數據處理可移植性(跨平臺&#xff0c;linux轉Windows) 二 ORACLE體系結構 數據庫&#xff1a;oracle是一個全局數據庫&#xff0c;一個數據庫可以有多個實例&#xff0c;每個…

nodejs+vue+python+PHP+微信小程序-留學信息查詢系統的設計與實現-安卓-計算機畢業設計

1、用戶模塊&#xff1a; 1&#xff09;登錄&#xff1a;用戶注冊登錄賬號。 2&#xff09;留學查詢模塊&#xff1a;查詢學校的入學申請條件、申請日期、政策變動等。 3&#xff09;院校排名&#xff1a;查詢國外各院校的實力排名。 4&#xff09;測試功能&#xff1a;通過入學…

Spring Boot WebSocket 客戶端

介紹 WebSocket 是一種在單個 TCP 連接上進行全雙工通信的協議&#xff0c;它可以提供實時的、雙向的數據傳輸。Spring Boot 提供了對 WebSocket 的支持&#xff0c;我們可以使用 Spring Boot WebSocket 客戶端來連接到 WebSocket 服務器&#xff0c;并進行實時通信。 本文將…

python-選擇排序

選擇排序是一種簡單直觀的排序算法&#xff0c;它的基本思想是每一輪選擇未排序部分的最小元素&#xff0c;然后將其放到已排序部分的末尾。這個過程持續進行&#xff0c;直到整個數組排序完成。(重點&#xff1a;通過位置找元素) 以下是選擇排序的詳細步驟和 Python 實現&…

HarmonyOS應用開發實戰—登錄頁面【ArkTS】

文章目錄 本頁面實戰效果預覽圖一.HarmonyOS應用開發1.1HarmonyOS 詳解1.2 ArkTS詳解二.HarmonyOS應用開發實戰—登錄頁面【ArkTS】2.1 ArkTS頁面源碼2.2 代碼解析2.3 心得本頁面實戰效果預覽圖 一.HarmonyOS應用開發 1.1HarmonyOS 詳解 HarmonyOS(鴻蒙操作系統)是華為公司…

小程序首頁白屏優化,并舉例說明

小程序首頁白屏優化 小程序首頁白屏優化是指在用戶進入小程序首頁時&#xff0c;能夠盡快展示內容&#xff0c;避免出現長時間的白屏加載狀態&#xff0c;提升用戶體驗。以下是一些常見的小程序首頁白屏優化方法&#xff1a; 減少首屏請求&#xff1a;盡量減少首頁需要請求的資…