數(shù)學(xué)菜鳥的AI學(xué)習(xí)攻略:數(shù)學(xué)符號輕松入門
編譯 | Molly 寒小陽
自學(xué)AI的過程中,我們非常需要理解這些數(shù)學(xué)符號。它可以讓你用一種非常簡潔的方式來表達(dá)一個復(fù)雜的想法。 |
你是否跟我一樣,自幼恨透數(shù)學(xué)。
現(xiàn)在,我終于發(fā)現(xiàn)了我對數(shù)學(xué)絕緣的最主要原因:我的老師從來不去回答最重要的問題:我為什么要學(xué)數(shù)學(xué)?學(xué)數(shù)學(xué)有什么用?
他們只是在黑板上寫下一大堆方程,并讓我記下來。
現(xiàn)在,如果你對AI這個激動人心的領(lǐng)域感興趣,那么它將是回答這個問題***的答案!那就是,我想要寫一個更好的圖像識別程序,或者一個可以理解自然語言的交互界面!也許甚至想有一天寫出自己的算法?
如果你想從閱讀 arXiv(https://arxiv.org/list/cs.AI/recent) 上的幾篇論文開啟自學(xué)AI之路?那么首先,你需要知道怎樣理解這些有意思的數(shù)學(xué)小符號。
也許,學(xué)習(xí)數(shù)學(xué)符號最重要的原因,就是它可以讓你用一種非常簡潔的方式來表達(dá)一個復(fù)雜的想法。
沒有它,解釋每個方程,都需要花上很多頁的篇幅。
而這篇文章要告訴你的是,學(xué)習(xí)這些符號不像你想象的那么難。
讓很多人對數(shù)學(xué)失去信息的第二個原因是,很多解釋寫得太可怕了。
事實(shí)上,大部分人并不擅長解釋東西。人們一般要定義一個數(shù)學(xué)術(shù)語,會使用更多的數(shù)學(xué)術(shù)語。這就造成了不理解的一個***循環(huán)。好比定義“大象”這個詞,說,“大象就是大象一類的東西。”
這篇文章會將數(shù)學(xué)符號和現(xiàn)實(shí)世界關(guān)聯(lián)起來,并使用你已知的東西來類比。這樣你可以腳踏實(shí)地地學(xué)習(xí)。
但是,這篇文章無法覆蓋到你讀一篇論文需要的所有數(shù)學(xué)符號。所以你會需要一本超級凝練的數(shù)學(xué)符號指南,Edward R. Scheinerman的Mathematical Notation: A Guide for Engineers and Scientists 。(它是我數(shù)學(xué)菜鳥的AI學(xué)習(xí)攻略 文章的一個后繼補(bǔ)充,但它是我使用最頻繁的一本書。它現(xiàn)在滿是高亮和折頁。隨著數(shù)學(xué)知識的不斷擴(kuò)充,我一遍又一遍地回頭翻閱這本書。)
讓我們開始吧。
首先,什么是算法?
它真的只是解決一個特定的問題的一系列步驟。無論你是否意識到,你都在使用算法。如果你需要給孩子們打包午飯,送他們上學(xué),取走干洗的衣服,然后去上班,你已經(jīng)無意識地構(gòu)造了一系列步驟,從廚房到辦公室。這就是一個算法。
如果你的老板同時給你安排了六項工作,你需要找到在一天內(nèi)完成它們的***的方式。你需要選擇哪些事先做,哪些事后做,哪些事一起做等等。這就是一個算法。
這個概念為什么很重要呢?因為一個方程也不過是解決問題的一系列步驟而已。
我們從一些簡單的符號開始,寫一些方程。數(shù)學(xué)就是對事物的翻譯。我們有一個輸入和一個輸出。我們將一些東西代入到我們方程的變量中,遍歷所有的步驟,然后得到輸出。計算機(jī)也是同樣的道理。
目前,神經(jīng)網(wǎng)絡(luò)背后的大部分黑魔法來自于數(shù)學(xué)的三個分支:
- 線性代數(shù)
- 集論
- 微積分
集合是什么?它就是一堆東西。一般使用花括號{ }或方括號括起來。(搞數(shù)學(xué)的家伙對所有東西都很難在***符號表達(dá)上達(dá)成一致。)
一個集合
還記得我們在第4部分看到的張量?那就是一個集合。
一個集合通常由大寫字母表示,例如A、B、V或W。只要你前后一致,字母本身是什么并不重要。
但是,一些特定的大寫字母和符號被保留下來,用來表示重要的、常用的數(shù)字集,例如:
- ∅ = 空集(集合里什么都沒有)。這個符號是一個希臘字母,“phi”。數(shù)學(xué)里常常會用到希臘字母。此處可以查閱大小寫希臘字母的寫法(https://en.wikipedia.org/wiki/Greek_letters_used_in_mathematics,_science,_and_engineering)。
- R =所有實(shí)數(shù)。(幾乎所有存在的數(shù)都是實(shí)數(shù),包括整數(shù)、分?jǐn)?shù)、超越數(shù)如Pi (π)(3.14159265…)。但是不包括虛數(shù),一種為了求無解方程的解而構(gòu)造的數(shù),也不包括無窮)
- Z =所有整數(shù)。(除了分?jǐn)?shù)之外的數(shù)字,比如-1,-2, 0, 1, 2, 3)
大部分保留字母表可以在趣味數(shù)學(xué)(http://www.mathsisfun.com/sets/number-types.html)里查到。
所有這些都是集合,其中一部分是子集,也就是他們被更大的一個集合完全包含,就像這樣:
去查查看Q和N是什么意思吧!
在這個例子中,我們可以說,Z(整數(shù)集)是R(實(shí)數(shù)集)的子集。
我們可以這么寫:
A是B的子集(A包含于B):相反的,B是A的超集(B包含A)
我為什么要在乎一個集合B是不是包含了A的全部內(nèi)容呢?好問題。
假如有一個集合,包括了所有生活在美國的人,有他們的年齡、地址等等信息?,F(xiàn)在假設(shè)有另一個集合,包括了心臟病發(fā)病率更高的人。那么這兩個集合重合的地方,可以告訴我們哪個地區(qū)的人更可能患有心臟病。
每個集合里都有元素。元素是什么?就是大集合的一部分。我們再看一下我們的張量。
我們將集合中的元素記作小寫斜體字母,例如x.我們用一個看起來很奇怪的E一樣的符號(其實(shí)不是E),來表示一個元素是集合的一部分。我們可以這么寫:
這表示x是集合A中的一個元素。
我們也可以說x不是集合A中的一個元素:
你越能理解這些符號,你就越能在頭腦中通過這些字符串來溝通。當(dāng)你看到上面這個,你可以說,“x不是集合A中的元素。”你越能明確地講出符號的含義,你就越能理解它們。
當(dāng)然,寫出一個集合的所有元素是不現(xiàn)實(shí)的,我們可以使用一種特殊的方式來寫出一個元素的序列。假如我們有一個數(shù)字序列,以1為步長遞增。我們可以這樣寫:
x = {1,2,3,4…n}
這些點(diǎn)表示這個序列到n結(jié)束,n代表“序列的末尾”。所以如果n = 10,這個集合包括從1到10的數(shù)字范圍。如果n = 100,這個集合包括從1到100的數(shù)字范圍。
瘋狂的方程
當(dāng)我們將集合轉(zhuǎn)化為線性代數(shù)的時候,它們就十分有意思了。你已經(jīng)認(rèn)識了一些代數(shù)符號比如加號+,減號-。現(xiàn)在我們看兩個新的符號和一個方程。首先是符號:
- Σ = 一系列數(shù)字的和
- Π = 一系列數(shù)字的積
和是什么?是序列中所有數(shù)字做加法。比如我們有一個向量集A(記住向量是一行或一列數(shù)字)包括: {1,2,3,4,5}.
序列的和為:
- 1 + 2 + 3 + 4 + 5 = 15
積是所有數(shù)字做乘法。所以對于同樣的集合A我們有:
- 1 x 2 x 3 x 4 x 5 =120
我們可以將序列的和精簡地寫作:
那么我們怎樣理解它呢?簡單,看這個。
我們從底部的j開始,j是一個變量。然后將j代入到右邊的表達(dá)式中。***,我們將序列的結(jié)束數(shù)字寫在頂部。看一個例子:
如果你是一個程序員,你會立刻認(rèn)出這是一個循環(huán)!
我們給這個方程寫一個Python函數(shù):
- def sum_x_range(x):
- j = 1
- output = [] # 創(chuàng)建一個空list
- for k in range(0,5): # 開始循環(huán)
- z = x**j # 計算x的j次方
- jj = j + 1 # j增加1,知道到達(dá)n,也就是5
- output.append[z] # 將z添加到list中
- return sum(output) # 返回list中所有數(shù)字的和
- print (sum_x_range(2)) # 令x=2,調(diào)用方程
原諒我糟糕的Python風(fēng)格,但是我希望代碼清晰,而不是簡潔。
**符號表示x的j次冪。方程輸入?yún)?shù)x,我令它為2。從0到5循環(huán),取x的1,2,3,4, 5次冪,然后將這些數(shù)字添加到一個列表中。它得出列表數(shù)字之和為:62。
走進(jìn)矩陣
記住,2D張量也被稱為矩陣。它基本上是一個表格,有行和列。首先,你需要知道如何引用矩陣的不同部分。 這張圖講得很清楚:
首先我們有矩陣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表示。
我們不會講解所有的矩陣數(shù)學(xué)運(yùn)算,我們選擇其中一種來小試牛刀。
點(diǎn)乘在神經(jīng)網(wǎng)絡(luò)中是一種非常常用的運(yùn)算,所以一起看看它。
點(diǎn),點(diǎn),點(diǎn)
點(diǎn)乘是我們用一個矩陣乘以另一個矩陣的方法。
點(diǎn)乘的符號表示,你應(yīng)該猜到了,是一個點(diǎn)。
- a . b
這是兩個標(biāo)量(也就是單獨(dú)的數(shù))的點(diǎn)乘。標(biāo)量也是我們的矩陣?yán)锏莫?dú)立的元素。
我們將同樣大小和形狀的矩陣對應(yīng)的元素相乘,再把所有的乘積作和。
那么一個向量和另一個向量乘積的公式是什么樣的呢?
深吸一口氣。你成功了!
我們現(xiàn)在認(rèn)識了所有的符號。
這是兩個等長向量的乘積公式。記住在數(shù)學(xué)菜鳥的AI學(xué)習(xí)攻略第四部分-張量表示(有貓) 中講到,一個向量就是一行或者一列數(shù)字。我們的矩陣的每一行或者每一列都是一個向量。
首先我們用矩陣A的***個元素乘以矩陣B的***個元素。然后我們用元素A2 乘以元素B2.我們對于每一個元素做相同的操作,直到達(dá)到末尾,“n”。然后對它們作和。
讓我們看一下這個操作的圖示。
現(xiàn)在我們可以把這些數(shù)字代入我們的公式。
這里是輸出矩陣下一個數(shù)字的例子
這是我們處理完所有運(yùn)算得到的最終結(jié)果:
這些例子來自于神奇的趣味數(shù)學(xué)網(wǎng)站(Math is Fun website)。這個網(wǎng)站里有大量超贊的例子,完全無法超越。
我增加了一些公式,以助于你的理解。因為他們一般都會跳過這些,因為一般這些步驟并不會令人感到困惑。但是你現(xiàn)在再也不會困惑了。
勝在學(xué)習(xí)策略
我想用一些可以幫你快速學(xué)習(xí)的策略來結(jié)束這篇文章。
我是一個自學(xué)者,也就是我一般自己給自己講解。當(dāng)我可以放慢腳步,可以自己探索時,我可以學(xué)得更好。我會犯一些錯誤。我上一篇文章就是一個很好的例子,我不得不修正一部分。但是錯誤也是一件好事!
錯誤是過程中的一部分。你沒有辦法避免錯誤,只能擁抱它。你犯錯了,你會進(jìn)步。沒有犯錯,就沒有進(jìn)步。就是這么簡單。
工程界有一個老段子。
如果你想知道正確答案,不用請人幫忙。只要將錯誤答案發(fā)出來,你就可以看看多少工程師跳出來指正你!
工程師絕不允許錯誤答案存在!
這是一個老段子,但是常常很管用。
另一件重要的事情是,如果你沒有讀我在數(shù)學(xué)菜鳥的AI攻略的一部分推薦的文章的話,或者你沒有微積分、代數(shù)和幾何背景的話,你可能讀不了數(shù)學(xué)符號書(Mathematical Notation book) 。你需要懂得一個術(shù)語的背景知識。但是我建議你買一本,它可以在你讀其他書的時候,作為一個參考指南。
另外,建議放慢腳步。這又不是比賽!半途而廢等于沒有分。如果你跳過了一些你不懂的術(shù)語,你將來還是不得不回頭來看。
所以停下來,花一點(diǎn)時間搞明白所有你不懂的符號。這很緩慢,甚至令人沮喪。但是當(dāng)你建立越來越多的知識體系,你會越來越快。你會發(fā)現(xiàn)你已經(jīng)理解了一些術(shù)語,而此前你從未想象自己可以理解它。
另外,你可能需要從多個地方來查詢。需要面對的事實(shí)是,大部分人都不是好老師。他們可能理解了一篇材料,但是并不意味著他們可以給其他人講清楚。教學(xué)是一門藝術(shù)。這就是為什么趣味數(shù)學(xué)網(wǎng)站比維基百科好。維基百科確實(shí)很“正確”,但是也很枯燥,有時候還令人費(fèi)解。等你學(xué)到更多的時候,也許你可以將維基百科改得更好。
將這些忠告記在心里,你的AI學(xué)習(xí)之旅就不會誤入歧途!
來源:
https://hackernoon.com/learning-ai-if-you-suck-at-math-p6-math-notation-made-easy-1277d76a1fe5#.1doldcnhr
【本文是51CTO專欄機(jī)構(gòu)大數(shù)據(jù)文摘的原創(chuàng)譯文,微信公眾號“大數(shù)據(jù)文摘( id: BigDataDigest)”】