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

人工智能教程(四):概率論入門

人工智能
在本系列的第四篇文章中,我們將開始學(xué)習(xí) TensorFlow,這是一個非常強(qiáng)大的人工智能和機(jī)器學(xué)習(xí)庫。

在本系列的 上一篇文章 中,我們進(jìn)一步討論了矩陣和線性代數(shù),并學(xué)習(xí)了用 JupyterLab 來運(yùn)行 Python 代碼。我們也會簡要介紹一些其它有用的庫。稍后,我們將討論概率、理論以及代碼。和往常一樣,我們先討論一些能拓寬我們對人工智能的理解的話題。

到目前為止,我們只是從技術(shù)方面討論人工智能。隨著越來越多的人工智能產(chǎn)品投入使用,現(xiàn)在是時候分析人工智能的社會影響了。想象一個找工作的場景,如果你的求職申請由人來處理,在申請被拒絕時,你可以從他們那里得到反饋,比如被拒的理由。如果你的求職申請由人工智能程序處理,當(dāng)你的申請被拒絕時,你不能要求該人工智能軟件系統(tǒng)提供反饋。在這種情況下,你甚至不能確定你的申請被拒絕是否確實(shí)是僅基于事實(shí)的決定。這明確地告訴我們,從長遠(yuǎn)來看,我們需要的不僅僅是魔法般的結(jié)果,還需要人工智能具有 責(zé)任accountability 和 保證guarantee。(LCTT 譯注:責(zé)任主要指確保系統(tǒng)的決策過程是透明的、可解釋的,并且對系統(tǒng)的行為負(fù)責(zé)。保證是指對于系統(tǒng)性能指標(biāo)和行為的一種承諾或者預(yù)期。)目前有很多試圖回答這些問題的研究。

人工智能的應(yīng)用也會引發(fā)許多道德和倫理上的問題。我們不必等到強(qiáng)人工智能(也被稱為 通用人工智能artificial general intelligence

同樣的場景下,如果汽車是由人工智能軟件在駕駛會發(fā)生什么呢?既然你是汽車的主人,那么人工智能軟件理應(yīng)把你的安全放在首位,它甚至全不顧其他乘客的安全。很容易看出,如果世界上所有的汽車都由這樣的軟件控制的話將導(dǎo)致徹底的混亂?,F(xiàn)在,如果進(jìn)一步假設(shè)乘坐自動駕駛汽車的乘客身患絕癥。那么對于一個數(shù)學(xué)機(jī)器來說,為了行人犧牲乘客是合乎邏輯的。但對于我們這些有血有肉的人卻不見得如此。你可以花點(diǎn)時間思考一下其它場景,注重邏輯的機(jī)器和熱血的人類都會做出什么樣的決策。

有很多書籍和文章在討論人工智能全面運(yùn)作后的政治、社會和倫理方面的問題。但對于我們這些普通人和計(jì)算機(jī)工程師來說,讀所有的書都是不必要的。然而,由于人工智能的社會意義如此重要,我們也不能輕易擱置這個問題。為了了解人工智能的社會政治方面,我建議你通過幾部電影來理解人工智能(強(qiáng)人工智能)如何影響我們所有人。斯坦利·庫布里克Stanley Kubrick的杰作《2001:太空漫游2001: A Space Odyssey》是最早描繪超級智能生物如何俯視我們?nèi)祟惖碾娪爸?。這部電影中人工智能認(rèn)為人類是世界最大的威脅,并決定毀滅人類。事實(shí)上,有相當(dāng)多的電影都在探索這種情節(jié)。由偉大的藝術(shù)大師史蒂文·斯皮爾伯格Steven Spielberg親自執(zhí)導(dǎo)的《人工智能Artificial Intelligence》,探討了人工智能機(jī)器如何與人類互動。另一部名為《機(jī)械姬Ex Machina》的電影詳細(xì)闡述了這一思路,講述了具有人工智能的機(jī)器。在我看來這些都是了解人工智能的影響必看的電影。

最后思考一下,試想如果馬路上的汽車使用來自制造商的不同的自動駕駛規(guī)則和人工智能,這將導(dǎo)致徹底的混亂。

TensorFlow 入門

TensorFlow 是由 谷歌大腦Google Brain 團(tuán)隊(duì)開發(fā)的一個自由開源的庫,使用 Apache 2.0 許可證。TensorFlow 是開發(fā)人工智能和機(jī)器學(xué)習(xí)程序的重量級的庫。除了 Python 之外,TensorFlow 還提供 C++、Java、JavaScript 等編程語言的接口。在我們進(jìn)一步討論之前,有必要解釋一下 張量tensor

首先,我們要在 JupyterLab 中安裝 TensorFlow。TensorFlow 有 GPU 版本和 CPU 版本兩種安裝類型可以選擇。這主要取決于你的系統(tǒng)是否有合適的 GPU。GPU 是一種利用并行處理來加快圖像處理速度的電路。它被廣泛用在游戲和設(shè)計(jì)領(lǐng)域,在開發(fā)人工智能和機(jī)器學(xué)習(xí)程序時也是必不可少的硬件。但一個不太好的消息是 TensorFlow 只兼容英偉達(dá)的 GPU。此外,你需要在系統(tǒng)中安裝一個稱為 CUDA(計(jì)算統(tǒng)一設(shè)備架構(gòu)compute unified device architecture)的并行計(jì)算平臺。如果你的系統(tǒng)滿足這些要求,那么在 JupyterLab 上執(zhí)行命令 pip install tensorflow-gpu 來安裝 GPU 版本的 TensorFlow。如果你系統(tǒng)的 GPU 配置無法滿足要求,當(dāng)你嘗試使用 TensorFlow 時,會得到如下錯誤消息:“CUDA_ERROR_NO_DEVICE: no CUDA-capable device is detected”。此時使用 pip uninstall tensorflow-gpu 卸載 GPU 版本的 TensorFlow。然后執(zhí)行命令 pip install tensorflow 安裝 CPU 版本的 TensorFlow?,F(xiàn)在 TensorFlow 就準(zhǔn)備就緒了。請注意,目前我們將討論限制在 CPU 和 TensorFlow 上。

圖 1:第一個使用 TensorFlow 的 Python 腳本圖 1:第一個使用 TensorFlow 的 Python 腳本

現(xiàn)在,讓我們運(yùn)行第一個由 TensorFlow 驅(qū)動的 Python 代碼。圖 1 顯示了一個簡單的 Python 腳本及其在 JupyterLab 上執(zhí)行時的輸出。前兩行代碼將庫 NumPy 和 TensorFlow 導(dǎo)入到 Python 腳本中。順便一提,如果你想在 Jupyter Notebook 單元中顯示行號,單擊菜單 “查看View > 顯示行號Show Line Numbers”。第 3 行使用 NumPy 創(chuàng)建了一個名為 arr 的數(shù)組,其中包含三個元素。第 4 行代碼將數(shù)組 arr 的每個元素乘 3,將結(jié)果存儲在一個名為 ten 的變量中。第 5 行和第 6 行分別打印變量 arr 和 ten 的類型。從代碼的輸出中可以看到,arr 和 ten 的類型是不同的。第 7 行打印變量 ten 的值。注意,ten 的形狀與數(shù)組 arr 的形狀是相同的。 數(shù)據(jù)類型 int64 在本例中用于表示整數(shù)。這使得本例中 NumPy 和 TensorFlow 數(shù)據(jù)類型之間的無縫轉(zhuǎn)換成為可能。

TensorFlow 支持很多操作和運(yùn)算。隨著處理的數(shù)據(jù)量的增加,這些操作會變得越來越復(fù)雜。TensorFlow 支持常見的算術(shù)運(yùn)算,比如乘法、減法、除法、冪運(yùn)算、模運(yùn)算等。如果參與運(yùn)算的是列表或元組,TensorFlow 會逐元素執(zhí)行該操作。

圖 2:TensorFlow 中的逐元素操作圖 2:TensorFlow 中的逐元素操作

TensorFlow 還支持邏輯運(yùn)算、關(guān)系運(yùn)算和位運(yùn)算。這里的操作也是按元素執(zhí)行的。圖 2 顯示了執(zhí)行這些按元素操作的 Python 腳本。第 1 行代碼從列表創(chuàng)建一個張量,并將其存儲在變量 t1 中。TensorFlow 的函數(shù) constant() 用于從 Python 對象(如列表、元組等)創(chuàng)建張量。類似地,第 2 行創(chuàng)建了另一個張量 t2。第 3 行和第 4 行都是執(zhí)行逐元素求冪并打印輸出。從圖 2 中可以清楚地看出,該求冪的結(jié)果是相同的。第 5 行代碼比較張量 t1 和 t2 的元素并打印結(jié)果。輸出中的 [True True False] 分別是對應(yīng) 3>2、4>3 和 2>6 的結(jié)果。第 6 行的輸出與之類似。

圖 3:TensorFlow 矩陣乘法圖 3:TensorFlow 矩陣乘法

圖 3 展示了 TensorFlow 處理矩陣的例子。第 1 行和第 3 行分別構(gòu)造兩個矩陣 x 和 y,第 2 行和第 4 行分別打印矩陣 x 和 y的形狀。代碼的輸出顯示 x 的形狀為 (3,3)y 的形狀為 (3,)。從本系列前面介紹的矩陣知識,我們知道這兩個矩陣是不能相乘的。

因此,在第 5 行中將矩陣 y 增加了一個維度。在第 6 行,再次打印矩陣 y 的形狀,輸出結(jié)果為 (3,1)?,F(xiàn)在矩陣 x 和 y 可以相乘了。第 7 行中,將矩陣相乘并打印輸出。注意,類似的操作也可以在張量上執(zhí)行,即使張量的維數(shù)很高,TensorFlow 也可以很好地?cái)U(kuò)展。在本系列的后續(xù)文章中,我們將更多地了解 TensorFlow 支持的數(shù)據(jù)類型和其他復(fù)雜操作。

既然介紹了 TensorFlow,我想我也應(yīng)該提一下 Keras。它為 TensorFlow 提供 Python 接口。在后續(xù)的文章中,我們將專門介紹 Keras。

我們?nèi)绾卫梅怯ミ_(dá) GPU 的能力呢?有許多功能強(qiáng)大的軟件包可以做到這一點(diǎn)。比如 PyOpenCL,一個在 Python 中編寫并行程序的框架。它讓我們可以使用 OpenCL(開放計(jì)算語言open computing language)。OpenCL 可以與 AMD、Arm、英偉達(dá)等廠商的 GPU 進(jìn)行交互。當(dāng)然還有其他選擇,比如 Numba。它是一種JIT 編譯器,可用在代碼執(zhí)行期間將 Python 代碼編譯為機(jī)器碼。如果 GPU 可用,Numba 允許代碼使用的 GPU 能力。圖 4 是展示了使用 Numba 的 Python 代碼。

我們可以看到函數(shù) fun() 具有允許并行化的特征。從圖 4 中可以看到,代碼在不使用和使用 Numba 的情況下的答案是相同的。但是我們可以看到所花費(fèi)的執(zhí)行時間是不同的。當(dāng)使用 Numba 并行化代碼時,只花費(fèi)了不到一半的時間。此外隨著問題規(guī)模的增加,并行化和非并行化版本所花費(fèi)的時間之間的差距也將增加。

圖 4:使用 Numba 進(jìn)行并行化圖 4:使用 Numba 進(jìn)行并行化

SymPy 入門

SymPy 是一個用于符號計(jì)算的 Python 庫。通過圖 5 中的例子,讓我們試著理解什么是符號計(jì)算。它使用 SymPy 提供的函數(shù) Integral()來求積分。圖 5 也顯示了這個符號計(jì)算的輸出。注意,SciPy 提供的 integrate() 函數(shù)返回?cái)?shù)值計(jì)算結(jié)果,而 SymPy 的 Integral() 函數(shù)能提供精確的符號結(jié)果表達(dá)式。人工智能和機(jī)器學(xué)習(xí)程序開發(fā)中會用到一些統(tǒng)計(jì)學(xué)操作,SymPy 在執(zhí)行這些操作時非常有用。

圖 5:符號計(jì)算的例子圖 5:符號計(jì)算的例子

在本系列的下一篇文章中,我們將討論 Theano。Theano 是一個 Python 庫和優(yōu)化編譯器,用于計(jì)算數(shù)學(xué)表達(dá)式。

概率論入門

現(xiàn)在是概率論出場的時候了,它是人工智能和機(jī)器學(xué)習(xí)的另一個重要話題。對概率論的詳細(xì)討論超出了本系列的范圍。我強(qiáng)烈建議在繼續(xù)閱讀之前,先通過維基百科上關(guān)于“概率”、“貝葉斯定理”和“標(biāo)準(zhǔn)差”的文章了解一些重要的術(shù)語和概念,如概率、獨(dú)立事件、互斥事件、條件概率、貝葉斯定理、均值、標(biāo)準(zhǔn)差等。學(xué)習(xí)完這些后,你將能夠輕松理解后面關(guān)于概率的討論。

我們從概率分布開始講起。根據(jù)維基百科的說法,“概率分布是一個數(shù)學(xué)函數(shù),它能給出一個實(shí)驗(yàn)中不同的可能結(jié)果發(fā)生的概率”。現(xiàn)在,讓我們試著理解什么是概率分布函數(shù)。最著名的概率分布函數(shù)是正態(tài)分布,通常也稱為高斯分布(以偉大的數(shù)學(xué)家高斯的名字命名)。正態(tài)分布函數(shù)的圖像是一條鐘形曲線。圖 6 是一個鐘形曲線的例子。鐘形曲線的確切形狀取決于均值和標(biāo)準(zhǔn)差。讓我們試著通過分析一種自然現(xiàn)象來理解鐘形曲線。從網(wǎng)上可以查到,中國男性的平均身高約為1.7米。在我們周圍的到多數(shù)男性的身高都非常接近這個數(shù)字。你看到一個身高低于1.4米或高于2米的男人的可能性很小。如果記錄 100 萬人的身高,然后以橫軸為身高,縱軸為該身高的人數(shù),繪制統(tǒng)計(jì)結(jié)果,你會發(fā)現(xiàn)繪制出的圖像近似為鐘形曲線,其中只有一些輕微的傾斜和彎曲。因此,正態(tài)分布很容易地捕捉到自然現(xiàn)象的概率特征。

圖 6:鐘形曲線(圖像來源:維基百科)圖 6:鐘形曲線(圖像來源:維基百科)

現(xiàn)在,我們來看一個使用正態(tài)分布的例子。圖 7 的代碼中我們使用 NumPy 的正態(tài)分布的函數(shù) normal(),然后使用 Matplotlib 進(jìn)行繪圖。從第 3 行我們可以看到樣本大小為 1000。第 4 行繪制一個包含 1000 個 桶bin 的直方圖。但是圖 7 的鐘形曲線與圖 6 中看到的鐘形曲線相差很大。究其原因是我們的樣本數(shù)量只有 1000。樣本量應(yīng)該足夠大才能獲得更清晰的圖像。將第 3 行代碼替換為 sample = normal(size=100000000),行并再次執(zhí)行程序。圖 8 顯示了一條更好的鐘形曲線。這一次,我們的樣本大小為 100,000,000,鐘形曲線與圖 6 所示非常相似。正態(tài)分布和鐘形曲線只是開始。在下一篇文章中,我們將討論可以概括其他事件和自然現(xiàn)象的概率分布函數(shù)。下一次,我們還將更正式地討論這個主題。

圖 7:繪制鐘形曲線圖 7:繪制鐘形曲線

本篇的內(nèi)容就到此結(jié)束了。在下一篇文章中,我們將繼續(xù)探索概率和統(tǒng)計(jì)中的一些概念。我們還將安裝和使用 Anaconda,這是一個用于科學(xué)計(jì)算的 Python 發(fā)行版,對于開發(fā)人工智能、機(jī)器學(xué)習(xí)和數(shù)據(jù)科學(xué)程序特別有用。如前所述,我們還將熟悉另一個名為 Theano 的 Python 庫,它在人工智能和機(jī)器學(xué)習(xí)領(lǐng)域被大量使用。

圖 8:更好的鐘形曲線圖 8:更好的鐘形曲線

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

2024-01-02 19:20:37

人工智能Anaconda

2017-09-20 13:13:30

貝葉斯定理概率分布

2018-08-17 15:17:56

人工智能層次極端

2018-06-27 14:23:38

機(jī)器學(xué)習(xí)人工智能入門方法

2023-11-20 16:23:32

人工智能矩陣

2020-03-02 19:28:03

人工智能AI

2017-07-26 16:26:47

數(shù)據(jù)中心人工智能技術(shù)

2022-09-03 13:38:15

人工智能AI

2023-10-30 08:00:24

2013-03-13 14:47:05

2022-10-19 07:04:12

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

2022-06-20 11:05:58

通用人工智能機(jī)器人

2021-05-11 11:26:18

人工智能自然語言機(jī)器人

2023-05-04 14:56:03

2023-12-25 22:27:38

2018-05-09 15:22:08

人工智能程序設(shè)計(jì)數(shù)學(xué)

2014-11-05 09:21:13

人工智能

2021-11-05 09:56:36

人工智能AI指數(shù)

2023-10-17 10:20:23

2015-10-10 09:34:52

人工智能機(jī)器學(xué)習(xí)
點(diǎn)贊
收藏

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