閱讀295 返回首頁    go 阿裏雲 go 技術社區[雲棲]


數學菜鳥的AI學習攻略 | 數學符號輕鬆入門


0?wx_fmt=png

你是否跟我一樣,自幼恨透數學。

現在,我終於發現了我對數學絕緣的最主要原因:我的老師從來不去回答最重要的問題:我為什麼要學數學?學數學有什麼用

他們隻是在黑板上寫下一大堆方程,並讓我記下來。 

現在,如果你對AI這個激動人心的領域感興趣,那麼它將是回答這個問題最好的答案!那就是,我想要寫一個更好的圖像識別程序,或者一個可以理解自然語言的交互界麵!也許甚至想有一天寫出自己的算法?

如果你想從閱讀 arXiv(https://arxiv.org/list/cs.AI/recent) 上的幾篇論文開啟自學AI之路?那麼首先,你需要知道怎樣理解這些有意思的數學小符號。

也許,學習數學符號最重要的原因,就是它可以讓你用一種非常簡潔的方式來表達一個複雜的想法。

沒有它,解釋每個方程,都需要花上很多頁的篇幅。

而這篇文章要告訴你的是,學習這些符號不像你想象的那麼難。

讓很多人對數學失去信息的第二個原因是,很多解釋寫得太可怕了。

事實上,大部分人並不擅長解釋東西。人們一般要定義一個數學術語,會使用更多的數學術語。這就造成了不理解的一個無限循環。好比定義“大象”這個詞,說,“大象就是大象一類的東西。”

這篇文章會將數學符號和現實世界關聯起來,並使用你已知的東西來類比。這樣你可以腳踏實地地學習。

0?wx_fmt=png

但是,這篇文章無法覆蓋到你讀一篇論文需要的所有數學符號。所以你會需要一本超級凝練的數學符號指南,Edward R. Scheinerman的Mathematical Notation: A Guide for Engineers and Scientists 。(它是我數學菜鳥的AI學習攻略 文章的一個後繼補充,但它是我使用最頻繁的一本書。它現在滿是高亮和折頁。隨著數學知識的不斷擴充,我一遍又一遍地回頭翻閱這本書。)

讓我們開始吧。


首先,什麼是算法?

它真的隻是解決一個特定的問題的一係列步驟。無論你是否意識到,你都在使用算法。如果你需要給孩子們打包午飯,送他們上學,取走幹洗的衣服,然後去上班,你已經無意識地構造了一係列步驟,從廚房到辦公室。這就是一個算法。

如果你的老板同時給你安排了六項工作,你需要找到在一天內完成它們的最好的方式。你需要選擇哪些事先做,哪些事後做,哪些事一起做等等。這就是一個算法。

這個概念為什麼很重要呢?因為一個方程也不過是解決問題的一係列步驟而已。

我們從一些簡單的符號開始,寫一些方程。數學就是對事物的翻譯。我們有一個輸入和一個輸出。我們將一些東西代入到我們方程的變量中,遍曆所有的步驟,然後得到輸出。計算機也是同樣的道理。

目前,神經網絡背後的大部分黑魔法來自於數學的三個分支:

  • 線性代數

  • 集論

  • 微積分

集合是什麼?它就是一堆東西。一般使用花括號{ }或方括號括起來。(搞數學的家夥對所有東西都很難在最佳符號表達上達成一致。)

0?wx_fmt=png


一個集合

還記得我們在第4部分看到的張量?那就是一個集合。

0?wx_fmt=png

一個集合通常由大寫字母表示,例如A、B、V或W。隻要你前後一致,字母本身是什麼並不重要。

但是,一些特定的大寫字母和符號被保留下來,用來表示重要的、常用的數字集,例如:

∅ = 空集(集合裏什麼都沒有)。這個符號是一個希臘字母,“phi”。數學裏常常會用到希臘字母。此處可以查閱大小寫希臘字母的寫法https://en.wikipedia.org/wiki/Greek_letters_used_in_mathematics,_science,_and_engineering)。

R =所有實數。(幾乎所有存在的數都是實數,包括整數、分數、超越數如Pi (π)(3.14159265…)。但是不包括虛數,一種為了求無解方程的解而構造的數,也不包括無窮)

Z =所有整數。(除了分數之外的數字,比如-1,-2, 0, 1, 2, 3)

大部分保留字母表可以在趣味數學https://www.mathsisfun.com/sets/number-types.html)裏查到。

所有這些都是集合,其中一部分是子集,也就是他們被更大的一個集合完全包含,就像這樣:

0?wx_fmt=png

去查查看Q和N是什麼意思吧!

在這個例子中,我們可以說,Z(整數集)是R(實數集)的子集。

我們可以這麼寫:

A是B的子集(A包含於B):相反的,B是A的超集(B包含A)

0?wx_fmt=png0?wx_fmt=png

我為什麼要在乎一個集合B是不是包含了A的全部內容呢?好問題。

假如有一個集合,包括了所有生活在美國的人,有他們的年齡、地址等等信息。現在假設有另一個集合,包括了心髒病發病率更高的人。那麼這兩個集合重合的地方,可以告訴我們哪個地區的人更可能患有心髒病。

每個集合裏都有元素。元素是什麼?就是大集合的一部分。我們再看一下我們的張量。

0?wx_fmt=png我們將集合中的元素記作小寫斜體字母,例如x.我們用一個看起來很奇怪的E一樣的符號(其實不是E),來表示一個元素是集合的一部分。我們可以這麼寫:

0?wx_fmt=png

這表示x是集合A中的一個元素。

我們也可以說x不是集合A中的一個元素:

0?wx_fmt=png

你越能理解這些符號,你就越能在頭腦中通過這些字符串來溝通。當你看到上麵這個,你可以說,“x不是集合A中的元素。”你越能明確地講出符號的含義,你就越能理解它們。

當然,寫出一個集合的所有元素是不現實的,我們可以使用一種特殊的方式來寫出一個元素的序列。假如我們有一個數字序列,以1為步長遞增。我們可以這樣寫:

x = {1,2,3,4…n}

這些點表示這個序列到n結束,n代表“序列的末尾”。所以如果n = 10,這個集合包括從1到10的數字範圍。如果n = 100,這個集合包括從1到100的數字範圍。


瘋狂的方程

當我們將集合轉化為線性代數的時候,它們就十分有意思了。你已經認識了一些代數符號比如加號+,減號-。現在我們看兩個新的符號和一個方程。首先是符號:

Σ = 一係列數字的和

Π = 一係列數字的積

和是什麼?是序列中所有數字做加法。比如我們有一個向量集A(記住向量是一行或一列數字)包括: {1,2,3,4,5}.

序列的和為:

1 + 2 + 3 + 4 + 5 = 15

積是所有數字做乘法。所以對於同樣的集合A我們有:

1 x 2 x 3 x 4 x 5 =120

我們可以將序列的和精簡地寫作:

0?wx_fmt=png

那麼我們怎樣理解它呢?簡單,看這個。

0?wx_fmt=png

我們從底部的j開始,j是一個變量。然後將j代入到右邊的表達式中。最後,我們將序列的結束數字寫在頂部。看一個例子:

0?wx_fmt=png

如果你是一個程序員,你會立刻認出這是一個循環!

我們給這個方程寫一個Python函數:

def sum_x_range(x):
    j = 1
    output = []   # 創建一個空list
    for k in range(0,5):  # 開始循環
         z = x**j      # 計算x的j次方
         j = j + 1     # j增加1,知道到達n,也就是5

         output.append[z]   # 將z添加到list中
    return sum(output)  # 返回list中所有數字的和

print (sum_x_range(2))   # 令x=2,調用方程

原諒我糟糕的Python風格,但是我希望代碼清晰,而不是簡潔。

**符號表示x的j次冪。方程輸入參數x,我令它為2。從0到5循環,取x的1,2,3,4, 5次冪,然後將這些數字添加到一個列表中。它得出列表數字之和為:62。


走進矩陣

記住,2D張量也被稱為矩陣。它基本上是一個表格,有行和列。首先,你需要知道如何引用矩陣的不同部分。 這張圖講得很清楚:

0?wx_fmt=png

首先我們有矩陣A。用大寫字母表示。

矩陣有m行和n列,所以我們叫它m X n 矩陣,用小寫斜體字母表示。

行是水平的,也就是從左到右。 (不要被圖中箭頭迷惑,箭頭指向的i和j不是行的方向,行是水平的!)

列是垂直的,也就是從上到下。

在這個例子中我們有一個4 x 5 矩陣,(也就是2D張量),因為我們有4行5列。

每個方格是矩陣中的一個元素。元素的位置使用小寫斜體a和行序號i和列序號j來表示。

所以第1行第2列的4,用a1,2表示。第2行第1列的3,用a2,1表示。

我們不會講解所有的矩陣數學運算,我們選擇其中一種來小試牛刀。

點乘在神經網絡中是一種非常常用的運算,所以一起看看它。


點,點,點

點乘是我們用一個矩陣乘以另一個矩陣的方法。

點乘的符號表示,你應該猜到了,是一個點。

a . b

這是兩個標量(也就是單獨的數)的點乘。標量也是我們的矩陣裏的獨立的元素。

我們將同樣大小和形狀的矩陣對應的元素相乘,再把所有的乘積作和。

那麼一個向量和另一個向量乘積的公式是什麼樣的呢?

0?wx_fmt=png

深吸一口氣。你成功了!

我們現在認識了所有的符號。

這是兩個等長向量的乘積公式。記住在數學菜鳥的AI學習攻略第四部分-張量表示(有貓) 中講到,一個向量就是一行或者一列數字。我們的矩陣的每一行或者每一列都是一個向量。

首先我們用矩陣A的第一個元素乘以矩陣B的第一個元素。然後我們用元素A2 乘以元素B2.我們對於每一個元素做相同的操作,直到達到末尾,“n”。然後對它們作和。

讓我們看一下這個操作的圖示。

0?wx_fmt=png

現在我們可以把這些數字代入我們的公式。

0?wx_fmt=png

這裏是輸出矩陣下一個數字的例子

0?wx_fmt=png

0?wx_fmt=png

這是我們處理完所有運算得到的最終結果:

0?wx_fmt=png

這些例子來自於神奇的趣味數學網站(Math is Fun website)。這個網站裏有大量超讚的例子,完全無法超越。

我增加了一些公式,以助於你的理解。因為他們一般都會跳過這些,因為一般這些步驟並不會令人感到困惑。但是你現在再也不會困惑了。

原文發布時間為:2017-04-05

本文來自雲棲社區合作夥伴“大數據文摘”,了解相關信息可以關注“BigDataDigest”微信公眾號


最後更新:2017-05-19 14:05:26

  上一篇:go  《Spring Boot官方指南》(二)入門(一)
  下一篇:go  命令行的生活是如此的 F**K