自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

人工智能教程(一):基礎(chǔ)知識

人工智能
如果你是關(guān)注計算機領(lǐng)域最新趨勢的學生或從業(yè)者,你應(yīng)該聽說過人工智能、數(shù)據(jù)科學、機器學習、深度學習等術(shù)語。作為人工智能系列文章的第一篇,本文將解釋這些術(shù)語,并搭建一個幫助初學者入門的簡易教學平臺。

如今,計算機科學領(lǐng)域的學生和從業(yè)者絕對有必要了解人工智能artificial intelligence、數(shù)據(jù)科學data science、機器學習machine learning、深度學習deep learning方面的基本知識。但是應(yīng)該從哪里開始呢?

為了找到答案,我瀏覽了大量人工智能的教材和教程。它們有的從大量數(shù)學理論開始,有的用編程語言無關(guān)的方式(不要求你了解某一門特定的編程語言)講解,有的假設(shè)你是線性代數(shù)、概率論和統(tǒng)計學專家。在很大程度上,它們都很有用。但它們都沒有回答最重要的問題:真正的初學者應(yīng)該從哪里開始學習人工智能?

開始學習人工智能的方式多種多樣,但是我對它們各有擔憂。涉及太多的數(shù)學會讓人分心,但如果數(shù)學介紹得太少就好像駕駛員不知道汽車引擎在哪里一樣。對于未來的人工智能工程師和數(shù)據(jù)科學家來說,從進階概念開始講解是最有效率的方式,因為他們精通線性代數(shù)、概率論和統(tǒng)計學。如果從基礎(chǔ)知識開始,然后在中間某個地方結(jié)束也可以,只要學員想要在這里結(jié)束學習??紤]到所有這些事實,我認為初學者的人工智能教程應(yīng)該從基礎(chǔ)知識開始,并以一個實際的人工智能項目結(jié)束。這個項目可能很小,但是在相同任務(wù)上它將會超越任何傳統(tǒng)項目。

本系列將從最基礎(chǔ)的知識講到中等水平內(nèi)容。除了討論人工智能,我還希望對相關(guān)的話題進行一些澄清,因為人們對人工智能、機器學習、數(shù)據(jù)科學等術(shù)語有很多困惑。人工智能程序是必要的,因為我們每天會產(chǎn)生海量的數(shù)據(jù)。根據(jù)互聯(lián)網(wǎng)上查詢到的結(jié)果,我們每天大約會產(chǎn)生 2.5x1018 字節(jié)的數(shù)據(jù)。但是,這些數(shù)據(jù)中的大多數(shù)與我們完全無關(guān),包括大量沒有價值的 YouTube 視頻,不經(jīng)思考就發(fā)送的電子郵件,瑣碎的新聞報道等等。然而,這片浩瀚的數(shù)據(jù)海洋中同樣蘊含著無價的寶貴知識。傳統(tǒng)軟件無法完成處理這些數(shù)據(jù)的艱巨任務(wù)。人工智能是少數(shù)能夠應(yīng)對這種信息過載的技術(shù)之一。

當談到到人工智能時,我們還需要區(qū)分事實和假象。我記得幾年前聽一位人工智能專家的演講。他講述了一個人工智能圖像識別系統(tǒng),它能近乎絕對準確地分辨西伯利亞雪橇犬和西伯利亞雪狼的圖像。在互聯(lián)網(wǎng)上搜索一下,你會看到這兩種動物有多么相似。如果這個系統(tǒng)確實那么準確,它將是人工智能的奇跡。可惜的是,事實并非如此。該圖像識別系統(tǒng)只是對圖像的背景進行了分類。西伯利亞雪橇犬是家養(yǎng)動物,它的圖像背景中幾乎總會有一些矩形或圓形的物體。而西伯利亞雪狼是野生動物,它所在的背景中有雪。這些例子導致近年來人們對人工智能提出了準確性擔保要求。

確實,最近幾年人工智能展現(xiàn)了一些真正的力量。舉個簡單例子就是 YouTube、Amazon 等網(wǎng)站的推薦系統(tǒng)。很多時候我驚訝于它們的推薦結(jié)果,就好像它們會讀心術(shù)一樣。然而不論這些推薦的質(zhì)量如何,“人工智能到底是好是壞?”都是一個很熱門話題。我認為,一個像《終結(jié)者》中機器有意識地攻擊人類的未來還遙遙無期。然而,前面那句話中的“有意識地”一詞非常重要。目前的人工智能系統(tǒng)可能發(fā)生故障,并且意外地傷害到人類。但是,許多號稱具有人工智能能力的系統(tǒng)實際上只是包含大量分支和循環(huán)的常規(guī)軟件。因此目前可以安全地說,我們還沒有在日常生活中看到人工智能的真正威力。不論是好的影響(如治愈癌癥),還是壞的影響(合成的世界領(lǐng)導人視頻導致的暴動和戰(zhàn)爭),我們都只能拭目以待了。就個人而言,我相信人工智能是一種福祉,并將大大提高未來幾代人的生活質(zhì)量。

什么是人工智能?

在我們進一步探討之前,讓我們試著理解人工智能(AI)、機器學習(ML)、深度學習(DL)、數(shù)據(jù)科學(DS)等之間的聯(lián)系和區(qū)別。這些術(shù)語經(jīng)常被誤用為同義詞。圖 1 表示了人工智能、機器學習、深度學習和數(shù)據(jù)科學之間的關(guān)系。當然這不是唯一的劃分方式,你可能會看到其它的劃分圖。但在我看來,圖 1 是最貼切的,它能夠最大程度地概括這些領(lǐng)域之間關(guān)系。

圖 1:人工智能體系結(jié)構(gòu)和數(shù)據(jù)科學圖 1:人工智能體系結(jié)構(gòu)和數(shù)據(jù)科學

在本系列的第一篇文章中,我不會對每個術(shù)語定義進行精確的定義。我認為在現(xiàn)階段,精確地定義它們是適得其反的,是浪費時間。但在后續(xù)的文章中,我們將重新討論這些術(shù)語并正式定義它們。目前我們可以暫時把人工智能看作是可以在某種程度上模仿人類智能的程序。那人類智能又是指什么呢?

想象一下你的人工智能程序是一個一歲大的嬰兒。這個寶寶會通過聽周圍人說話來學習母語。他/她將很快學會識別形狀,顏色,物體等,沒有任何困難。此外,他/她將能夠?qū)χ車说那榫w做出反應(yīng)。例如,任何一個三歲的嬰兒都知道如何用甜言蜜語讓父母給他/她巧克力和棒棒糖。同樣,人工智能程序也將能夠感知并適應(yīng)環(huán)境,就像嬰兒一樣。然而,這種真正的人工智能只能在遙遠的未來實現(xiàn)。

圖 1 顯示機器學習是人工智能的真子集,它也是實現(xiàn)人工智能系統(tǒng)的技術(shù)之一。機器學習是使用大量數(shù)據(jù)來訓練程序的技術(shù),以便有效地執(zhí)行必要的任務(wù)。它的準確性隨著訓練集的增大而增加。請注意,還有其它技術(shù)用于開發(fā)人工智能系統(tǒng),如基于布爾邏輯的系統(tǒng),基于模糊邏輯的系統(tǒng),基于遺傳編程的系統(tǒng)等。然而,如今機器學習是實現(xiàn)人工智能系統(tǒng)的最主流的技術(shù)。圖 1 還顯示深度學習是機器學習的真子集,它只是眾多機器學習技術(shù)中的一種。但目前實際上大多數(shù)嚴肅的機器學習技術(shù)都用到了深度學習。在這一點上,我甚至避免嘗試定義深度學習。請記住,深度學習涉及到使用大型人工神經(jīng)網(wǎng)絡(luò)。

那數(shù)據(jù)科學(圖 1 中的紅圈)是做什么的呢?數(shù)據(jù)科學是計算機科學/數(shù)學領(lǐng)域中的一門處理和解讀大規(guī)模數(shù)據(jù)的學科。我說的“大”,有多大呢?早在 2010 年,F(xiàn)acebook 等一些企業(yè)巨頭就聲稱它們的服務(wù)器可以處理幾 Pb 的數(shù)據(jù)。當我們說大數(shù)據(jù)時,通常指的是 Tb 或 Pb 級的數(shù)據(jù)規(guī)模,而不是 Gb 級的。許多數(shù)據(jù)科學應(yīng)用涉及人工智能、機器學習和深度學習技術(shù)的使用。因此,當我們討論人工智能時,很難不提到數(shù)據(jù)科學。數(shù)據(jù)科學也使用很多傳統(tǒng)的編程和數(shù)據(jù)庫管理技術(shù),比如使用 Apache Hadoop 進行大數(shù)據(jù)分析。

本系列的討論將主要集中在人工智能和機器學習上,并涉及數(shù)據(jù)科學。

教學環(huán)境搭建

在表明了本系列文章的主題后,現(xiàn)在說說本教程的前置條件。你需要一臺 Linux 電腦(當然 Windows 或 macOS 機器也可以,只是在一些安裝步驟上可能需要額外的協(xié)助),并了解基本的數(shù)學和計算機編程知識。我希望在細心地閱讀本系列文章后,你會感受到人工智能的強大。

用編程語言無關(guān)的方式來學習人工智能是可能的,但本系列將基于一門編程語言并涉及大量的編程。在決定使用哪一門編程語言之前,我們先來回顧一下人工智能、機器學習、深度學習和數(shù)據(jù)科學領(lǐng)域流行的編程語言。Lisp 是一種函數(shù)式編程語言,它是最早用于開發(fā)人工智能程序的語言之一。Prolog 是一種邏輯編程語言,在 20 世紀 70 年代也被用于同樣的目的。我們將在接下來的介紹人工智能歷史的文章中更詳細地介紹 Lisp 和 Prolog。

如今,Java、C、C++、Scala、Haskell、MATLAB、R、Julia 等編程語言也被用于開發(fā)人工智能程序。Python 在人工智能程序開發(fā)中被廣泛使用,這使我們選擇它作為本教程的編程語言。但我必須聲明,從這里開始做的選擇(更確切地說,是我替你做的選擇),主要考慮的因素是易用性、受歡迎程度、(在少數(shù)情況下)我自己對該軟件/技術(shù)的適應(yīng)和熟悉程度、對本教程效率的提升。但同時,我也鼓勵你嘗試其它的編程語言、軟件和工具。也許從長遠來看,它們對你來說可能是更好的選擇。

現(xiàn)在我們需要立即做出另一個選擇:使用 Python 2 還是 Python 3?考慮到本系列有許多年輕的讀者,他們還有漫長的職業(yè)生涯,我將選擇使用 Python 3。在 Ubuntu 系統(tǒng)終端中執(zhí)行命令 sudo apt install python3 安裝最新版本的 Python 3(你的系統(tǒng)中可能已經(jīng)安裝了 Python 3)。在其它 Linux 發(fā)行版、Windows 和 macOS 機器上安裝 Python 3 也非常容易。執(zhí)行下面的命令查看安裝的 Python 3 的版本:

python3 --version
Python 3.8.10

在后續(xù)的教程中,我們需要安裝許多 Python 包,所以需要一個包管理器。目前主流的包管理器有 pip、Conda 和 Mamba 等。我選擇 pip 作為包在本教程的管理器。它相對簡單,也是推薦的 Python 安裝工具。我認為 Conda 和 Mamba 是比 pip 更強大的工具,你可以嘗試一下它們。運行命令 sudo apt install python3-pip 將在 Ubuntu 系統(tǒng)中安裝 pip。pip、Conda 和 Mamba 是跨平臺軟件,它們可以安裝在 Linux、Windows 和 macOS 系統(tǒng)上。運行命令 pip3 --version 查看系統(tǒng)中安裝的 pip 版本,如下所示:

pip 20.0.2 from /usr/lib/python3/dist-packages/pip (python 3.8)

現(xiàn)在我們需要一個 Python 集成開發(fā)環(huán)境(IDE)。IDE 能幫助程序員更容易地編寫、編譯、調(diào)試和執(zhí)行代碼。PyCharm、IDLE、Spyder 等都是流行的 Python IDE。然而,由于我們的主要目的是開發(fā)人工智能和數(shù)據(jù)科學程序,這里考慮另外兩個強有力的競爭者 —— JupyterLab 和谷歌 Colab。嚴格地說,它們不僅僅是 IDE;它們是非常強大的基于網(wǎng)絡(luò)的交互式開發(fā)環(huán)境。兩者都可以在網(wǎng)絡(luò)瀏覽器上工作,并提供強大的功能。JupyterLab 是由非營利組織 Project Jupyter 支持的免費開源軟件。谷歌 Colab 遵循 免費增值freemium

可以使用命令 pip3 install JupyterLab 在本地安裝 JupyterLab。執(zhí)行命令 jupyter-lab 將在系統(tǒng)的默認網(wǎng)絡(luò)瀏覽器中運行 JupyterLab。Project Jupyter 還提供一個更老的類似系統(tǒng),稱為Jupyter Notebook??梢酝ㄟ^ pip3 install Notebook 命令在本地安裝 Jupyter Notebook,用Jupyter Notebook 運行它。但 Jupyter Notebook 的功能不如 JupyterLab 強大,且官方宣布它最終會被 JupyterLab 取代。在本教程中,我們將在合適的階段使用 JupyterLab。但在開始階段,我們將使用 Linux 終端來運行 Python 程序,因此急需的是包管理器 pip。

Anaconda 是一個非常流行的 Python 和 R 編程語言發(fā)行版,它主要用于機器學習和數(shù)據(jù)科學領(lǐng)域。作為未來的人工智能工程師和數(shù)據(jù)科學家,熟悉使用 Anaconda 也是一個不錯的選擇。

現(xiàn)在我們需要確定最重要的一點 —— 本教程的風格。有大量人工智能開發(fā)相關(guān)的 Python 庫,比如 NumPy、SciPy、Pandas、Matplotlib、Seaborn、TensorFlow、Keras、Scikit-learn 和 PyTorch。許多關(guān)于人工智能、機器學習和數(shù)據(jù)科學的教材和教程都是基于對其中一個或多個庫的完整講解。盡管對特定包的功能進行這樣的覆蓋講解是一種高效的方式,但我的教程是更面向數(shù)學的。我們將首先討論開發(fā)人工智能程序所需的數(shù)學概念,然后再介紹需要的 Python 基礎(chǔ)知識和 Python 庫。我們會為了探索實現(xiàn)這些數(shù)學概念所需的特性而不斷回顧這些 Python 庫。有時我也會要求你自己學習一些 Python 和數(shù)學的基本概念。

在完成這些準備工作之后,如果我們就在這里結(jié)束,任何代碼或數(shù)學概念都不講,那將是一種罪過。因此,我們將繼續(xù)學習人工智能和機器學習中最重要的數(shù)學概念:向量和矩陣。

向量和矩陣

矩陣是按行和列排列的數(shù)字、符號或數(shù)學表達式構(gòu)成的矩形陣列。圖 2 顯示了一個 2 × 3 矩陣,它有 2 行和 3 列。如果你熟悉編程,在許多流行的編程語言中這個矩陣可以表示為一個二維數(shù)組。只有一行的矩陣稱為行向量,只有一列的矩陣稱為列向量。 

 就是一個行向量。

圖 2:一個: A 2 × 3 的矩陣圖 2:一個: A 2 × 3 的矩陣

為什么矩陣和向量在人工智能和機器學習中如此重要呢?人工智能和機器學習中廣泛使用線性代數(shù),而矩陣和向量是線性代數(shù)的核心。幾個世紀以來,數(shù)學家們一直在研究矩陣和向量的性質(zhì)和應(yīng)用。高斯、歐拉、萊布尼茨、凱利、克萊姆和漢密爾頓等數(shù)學家在線性代數(shù)和矩陣論領(lǐng)域都有以他們的名字命名的定理。多年來,線性代數(shù)中發(fā)展出了許多分析矩陣和向量性質(zhì)的技術(shù)。

復雜的數(shù)據(jù)通??梢院苋菀子孟蛄炕蚓仃噥肀硎尽Ee一個簡單的例子,從一個人的醫(yī)療記錄中,可以得到詳細的年齡、身高(厘米)、體重(公斤)、收縮壓、舒張壓和空腹血糖(毫克/分升)。這些信息可以很容易用行向量來表示, 

 。人工智能和機器學習的第一個挑戰(zhàn)來了:如果醫(yī)療記錄有十億條怎么辦?即使動用成千上萬的專業(yè)人員從中手動提取數(shù)據(jù),這項任務(wù)也是無法完成的。因此,人工智能和機器學習利用程序來提取數(shù)據(jù)。

人工智能和機器學習的第二個挑戰(zhàn)是數(shù)據(jù)解讀。這是一個廣闊的領(lǐng)域,有許多技術(shù)值得探索。我將在后續(xù)文章中介紹相關(guān)內(nèi)容。人工智能和機器學習應(yīng)用除了面臨數(shù)學/計算方面的挑戰(zhàn)外,還面臨硬件方面的挑戰(zhàn)。隨著處理的數(shù)據(jù)量的增加,數(shù)據(jù)存儲、處理器速度、功耗等也成為人工智能應(yīng)用面臨的重要挑戰(zhàn)。但現(xiàn)在讓我們先拋開這些挑戰(zhàn),動手編寫第一行人工智能代碼。

我們將編寫一個簡單的 Python 腳本,用來將兩個向量相加。我們將用到名為 NumPy 的 Python 庫,它支持多維矩陣(數(shù)組)的數(shù)學運算。用命令 pip3 install numpy 為 Python 3 安裝 NumPy 包。如果你使用的是 JupyterLab、谷歌 Colab 或 Anaconda,那么 NumPy 應(yīng)該已經(jīng)被預安裝了。但是為了演示,在本系列的前幾篇文章中,我們都將在 Linux 終端上操作。在 Linux 終端上執(zhí)行命令  python3 進入 Python 控制臺。在這個控制臺中可以逐行執(zhí)行 Python 代碼。圖 3 展示了在控制臺中逐行運行 Python 代碼,將兩個向量相加,并輸出結(jié)果。

圖 3:兩個向量求和的 Python 代碼圖 3:兩個向量求和的 Python 代碼

首先,讓我們試著逐行理解這些代碼。由于本教程假定的編程經(jīng)驗很少,所以我將代碼行標記為【基本】或【AI】。標記為【基本】的行是經(jīng)典 Python 代碼,標記為【AI】的行是用于開發(fā)人工智能程序的代碼。通過區(qū)分基本和進階的 Python 代碼,我希望具有基本知識和中級編程技能的程序員都能夠高效地使用本教程。

import numpy as np         #【基本】
a = np.array([11, 22, 33]) #【AI】
b = np.array([44, 55, 66]) #【AI】
c = np.add(a, b)           #【AI】
print(c)                   #【基本】

import numpy as np 導入 numpy 庫并將其命名為 np。Python 中的 import 語句類似于在 C/C++ 用 #include 來包含頭文件,或者在 Java 中用import 來使用包。

a = np.array([11, 22, 33]) 和 b = np.array([44, 55, 66])  分別創(chuàng)建了名為 a 和 b 的一維數(shù)組(為了便于理解,目前假設(shè)向量等價于一維數(shù)組)。

c = np.add(a, b) 將向量 a 和b 相加,并將結(jié)果存儲在名為 c 的向量中。當然,用 a,bc 作為變量名是一種糟糕的編程實踐,但數(shù)學家傾向于將向量命名為 、 、  等。如果你完全沒有 Python 編程經(jīng)驗,請自行了解 Python 變量的相關(guān)知識。

print(c) 在終端上打印對象的值,即向量 [55 77 99]。你可以暫時這樣理解向量相加, c = [55=11+44 77=22+55 99=33+66]。如果你想正式地了解向量和矩陣是如何相加的,但手頭又沒有相關(guān)的教材,我建議閱讀維基百科上關(guān)于矩陣加法的文章。在網(wǎng)上搜索一下就會發(fā)現(xiàn),用經(jīng)典的 C/C++ 或 Java 程序來實現(xiàn)向量相加需要更多的代碼。這說明 Python 很適合處理向量和矩陣。當我們執(zhí)行越來越復雜的向量運算時,Python 的強大將進一步顯現(xiàn)。

在我們結(jié)束本文之前,我要做兩個聲明。第一,上面討論的示例只處理了兩個行向量(確切地說是 1 x 3 的矩陣)的相加,但真正的機器學習應(yīng)用可能要處理 1000000 X 1000000 的矩陣。但不用擔心,通過練習和耐心,我們將能夠處理這些問題。第二,本文中給出許多定義包含了粗略的簡化和不充分的描述。但如前面所說,在本系列結(jié)束之前,我將給這些模糊的術(shù)語下一個正式的定義。

現(xiàn)在我們該結(jié)束這篇文章了。我希望所有人都安裝文中提到的必要軟件,并運行本文中的代碼。在下一篇文章中,我們將首先討論人工智能的歷史、范疇和未來,然后深入探討線性代數(shù)的支柱——矩陣論。

責任編輯:龐桂玉 來源: Linux中國
相關(guān)推薦

2022-10-19 07:04:12

?人工智能云服務(wù)Alaas

2019-09-10 13:38:56

人工智能無人駕駛機器人

2022-03-21 13:59:36

云計算云遷移技術(shù)

2023-11-20 16:23:32

人工智能矩陣

2024-08-01 11:23:11

2020-11-16 16:38:30

人工智能AI

2021-10-09 21:00:15

人工智能AI

2020-12-18 11:59:21

人工智能知識圖譜

2022-12-09 07:13:20

2023-11-29 11:46:56

人工智能AI

2020-04-06 14:57:34

人工智能技術(shù)互聯(lián)網(wǎng)

2025-04-07 01:45:00

人工智能業(yè)務(wù)攻擊者

2022-06-20 11:05:58

通用人工智能機器人

2012-04-09 11:36:11

2021-03-01 08:03:16

前端開發(fā)技術(shù)熱點

2021-11-05 09:56:36

人工智能AI指數(shù)

2018-08-17 15:17:56

人工智能層次極端

2023-12-19 13:13:16

人工智能

2023-10-17 10:20:23

2015-10-10 09:34:52

人工智能機器學習
點贊
收藏

51CTO技術(shù)棧公眾號