回覆列表
  • 1 # 機器之心Pro

    在機器學習中,你永遠都繞不過數學符號。

    通常,只要有一個代數項或一個方程符號看不懂,你就完全看不懂整個過程是怎麼回事了。這種境況非常令人沮喪,尤其是對於那些正在成長中的機器學習初學者來說更是如此。

    如果你能瞭解一些基本的數學符號以及相關的小技巧,那你就在看懂機器學習方法的論文或書籍描述上前進了一大步。

    在本教程中,你將學到機器學習技術描述中遇到的基本數學符號。

    在學完整個教程後,你會知道:

    算術符號,包括若干種乘法、指數、平方根以及對數

    數列和集合符號,包括索引、求和以及集合關係

    5 種當你看不明白數學符號的時候可以採用的應急方法

    讓我們開始學習吧!

    機器學習中的基本數學符號

    教程概覽

    本教程分為 7 個部分,分別是:

    1. 看不懂數學符號的沮喪

    2. 算術符號

    3. 希臘字母

    4. 數列符號

    5. 集合符號

    6. 其他符號

    7. 更多幫助資源

    看不懂數學符號的沮喪

    你在閱讀機器學習演算法的相關內容時會遇到一些數學符號。舉例來說,這些符號可能會被用來:

    描述一個演算法

    描述資料的預處理

    描述結果

    描述測試工具

    描述含義

    你可能在論文、教科書、博文以及其他地方看到這些描述。相關代數項常常會給出完整定義,但你還是會看到不少陌生的數學符號。我曾多次深受其苦,簡直太令人感到挫敗了!

    在本教程中,你會複習到一些幫助你看懂機器學習方法描述的基本數學符號。

    算術符號

    在本節中,我們將重溫一些基礎算數中你不太熟悉的符號,以及畢業之後一些可能遺忘的概念。

    簡單算術

    算術的基本符號你已很熟悉。例如:

    加法:1 + 1 = 2

    減法:2 – 1 = 1

    乘法:2 x 2 = 4

    除法:2 / 2 = 1

    大多數的數學運算都有一個對應的逆運算,進行相反的運算過程;比如,減法是加法的逆運算,而除法是乘法的逆運算。

    代數

    我們常希望用更抽象的方式來描述運算過程,以將其與具體的資料或運算區分開來。因此代數的運用隨處可見:也就是用大寫和/或小寫字母來代表一個項,或者一個數學符號體系中的概念。用希臘字母來代替英文字母也是很常見的用法。數學中的每一個領域都可能有一些保留字母,這些字母都會代表一個特定的東西。儘管如此,代數中的項總應在描述中被定義一下,如果作者沒有去定義,那是他的問題,不是你的錯。

    乘法符號

    乘法是一個常見的符號,有幾種記法。一般是用一個小小的「ⅹ」或者星號「*」來代表乘法:

    c = a x b

    c = a * b

    你有時也會看到用一個點來代表乘法,比如:

    c = a . b

    這個式子其實和下式是一樣的意思:

    c = a x b

    或者你可能會看到運算子被省略,先前被定義的代數項之間沒有符號也沒有空格,比如:

    c = ab

    這還是一樣的意思。

    指數和平方根

    指數就是一個數字的冪次。這個符號寫作正常大小的原數(底數)以及一個上標數(指數),例如:

    2^3

    這個表示式的計算結果就是 3 個 2 連乘,或者說是 2 的立方:

    2 x 2 x 2 = 8

    求一個數的冪,就預設是求它的平方。

    2^2 = 2 x 2 = 4

    平方運算的效果可以用開方來逆轉。開方在數學中是在被開方的數字上面加一個開方符號,這裡簡單起見,直接用「sqrt()」函式來表示了。

    sqrt(4) = 2

    式中,我們知道了指數的結果 4,以及指數的次數 2,我們想算出指數的底數。事實上,開方運算可以是任意次指數的逆運算,只是開方符號預設次數為 2,相當於在開方符號的前面有一個下標的 2。我們當然可以試著寫出立方的逆運算,也就是開立方符號:

    2^3 = 8

    3 sqrt(8) = 2

    對數和 e

    當我們求 10 的整數次冪的時候,我們常稱之為數量級。

    10^2 = 10 x 10 or 100

    對這個運算求逆的另一方法是求這個運算結果(100)以 10 為底數的對數;用符號來表達的話就寫作 log10()。

    log10(100) = 2

    這裡,我們已知指數的結果和底數,而要求指數的次數。這讓我們在數量級上輕鬆地縮放。除此之外,由於計算機中使用二進位制數學,求以 2 為底數的對數也是常用的運算。例如:

    2^6 = 64

    log2(64) = 6

    還有一個非常常見的對數是以自然底數 e 為底數的。符號 e 是一個專有符號,代表一個特殊的數字或者說一個稱為尤拉數的常數。尤拉數是一個無限不迴圈小數,可以追溯到無窮的精度。

    e = 2.71828...

    求 e 的冪被稱為自然指數函式:

    e^2 = 7.38905...

    求自然對數的運算就是這個運算的逆運算,記作 ln():

    ln(7.38905...) = 2

    忽略更多數學細節,自然指數和自然對數在數學中非常有用,因為它們能用來抽象地描述某一系統的持續增長,比如說複利這樣的指數級增長體系。

    希臘字母

    希臘字母在數學中用來代表變數、常數、函式以及其他的概念。比如說,在統計學中我們用小寫的希臘字母 mu 來代表平均值,而小寫的希臘字母 sigma 表示標準差。線上性迴歸中,我們用小寫字母 beta 來代表係數,諸如此類。學會所有希臘字母的大小寫以及怎麼念會帶來極大的幫助。

    希臘字母表。

    維基百科詞條「數學、科學及工程中的希臘字母」是個非常有用的使用指南(https://en.wikipedia.org/wiki/Greek_letters_used_in_mathematics,_science,_and_engineering),因為上面列出來了在數學和科學不同領域內每一個希臘字母的常見用法。

    數列符號

    機器學習中的符號常用來描述數列運算。一個數列可以是一列資料,或者代數項。

    索引

    讀懂數列符號的關鍵是要弄明白數列中的索引符號。一般來說符號中會明確數列的起點和終點,比如從 1 到 n,這裡的 n 是數列的長度。在數列中的項都會用一個諸如 i、j、k 的下標來作為索引,就像陣列的符號一樣。比如說,a_i 就是數列 a 中的第 i 個元素。如果數列是二維的,那就需要用到 2 個索引;比如:b_{i,j} 就是數列 b 的第 i 行, 第 j 列的元素。

    數列運算

    我們也可以對一個數列進行數學運算。有兩類運算時常被用到,所以有專門的簡寫運算子來表示它們:累加和累乘。

    數列累加

    對一個數列的累加用大寫的希臘符號 sigma 來表示,而累加的內容則用變數名來表示,同時在 sigma 符號的下面明確開始的索引(如 i=1),在 sigma 符號的上面明確結束的索引(如 n)。

    Sigma i = 1, n a_i

    這就是數列 a 的第一個元素到第 n 個元素的累加。

    數列累乘

    數列的累乘是用大寫的希臘字母 pi 來表示的。而對累乘範圍的描述方式與數列累加類似,開始的索引寫在符號下面,結束的索引在符號上面。

    Pi i = 1, n a_i

    這就是數列 a 的第一個元素到第 n 個元素的累乘。

    集合符號

    一個集合就是一組互不相同的元素的整體。在定義機器學習中的一些代數項的時候我們可能會遇到集合符號。

    數字集合

    你最常見的集合是數字集合,比如說有的代數項會定義在整數集或實數集內。這些常見的數字集合包括:

    所以自然數的集合: N

    所有整數的集合: Z

    所有實數的集合: R

    當然還有很多其他的數字集合,你可以參考維基百科中的「特殊集合」詞條。我們在定義代數項的時候常指的是實值或者實數,而不是浮點數。浮點數在計算機運算中實際上是離散的數字。

    集合關係

    在定義代數項的時候常會看到集合關係符號,集合關係符號看起來就像是一個大寫的「E」一樣。

    1 a E R

    這表示定義 a 屬於 R 集,或者說 a 屬於實數集。同樣,也有許多集合運算子;常見的兩個集合運算子包括:

    並集, 就是把兩個集合的元素都包含進來:A U B

    交集,就是隻包括同時出現在兩個集合中的元素:A ^ B

    更多相關內容可以參考維基百科中的「集合」詞條:https://en.wikipedia.org/wiki/Set_(mathematics)。

    其他符號

    本節中我會列出一些較常見的其他符號。一種常見的情況是我們會先抽象地定義一個方法,然後用單獨的符號來重新定義一個具體的實現。比如,如果我們在估計一個變數 x,可以在 x 上加一些符號來代表這些估計,比如:

    x-bar(x 上方有一橫)

    x-prime(x 右上角有一小撇)

    x-hat(x 上方有一折線)

    同一個符號在諸如數學的子領域或不同物件的語境下可能含義不同。比如說,|x|就是個很容易令人不解的符號,在不同的情況下可以指:

    |x|: x 的絕對值.

    |x|: 向量 x 的長度.

    |x|: 集合 x 的勢.

    本教程只提及了基礎的數學符號。有很多數學的子學科與機器學習更相關,需要更詳細地複習一下。包括:

    線性代數

    統計學

    機率論

    微積分

    可能還有一些多變數分析和資訊理論的內容。

    5 個在數學符號方面尋求幫助的小建議

    本部分將列示一些當你被機器學習中的數學符號折磨時可以用到的小建議。

    考慮一下作者

    你在閱讀的論文或者書籍總有一個作者。這個作者可能犯錯,可能有疏忽,也可能是因為他們自己也不明白自己在寫什麼,才讓你如此迷惑。從符號的限制中逃離片刻,然後想想作者的目的。他們到底想把什麼講清楚?也許你甚至可以用電子郵件、Twitter、Facebook、領英等方式來聯絡作者讓他幫你解釋清楚。你放心,大多數學者都希望其他人能夠理解並好好利用他們的研究成果。

    上維基百科查一查

    維基百科上有符號列表,可以幫助你縮小符號含義的可能範圍。我建議你從這兩個詞條開始:

    「數學符號表」(https://en.wikipedia.org/wiki/List_of_mathematical_symbols)

    「數學、科學和工程中的希臘字母」(https://en.wikipedia.org/wiki/Greek_letters_used_in_mathematics,_science,_and_engineering)

    用程式碼簡述出來

    數學運算不過就是對資料進行函式處理。把你讀到的任何東西都用變數、for-迴圈等寫成虛擬碼展示出來。這個過程中你可能打算使用某個指令碼語言來處理自己隨意寫出來的陣列,或者甚至一張 Excel 表格的資料。

    當你閱讀並理解了文章中的技術改進,那你隨之寫出來的核心程式碼才會取得更好的結果,最終經過不斷的改進,你就會寫出一個小小的原型機,可以自己玩耍了!我一度不相信這個方法行得通,直到看到一個學者僅用幾行 MATLAB 程式碼和隨意編寫的資料就寫出了一篇非常複雜的論文的核心程式碼。這令我大吃一驚,因為我以前一直堅信機器學習的系統必須完整地編寫出來並且使用真實資料才能執行,所以要學習任何一篇文章只有找到原始的程式碼和資料這一條路可走。但是我真的錯了。不過話說回來,那個學者真的是個天才。

    現在我一直都在用這種方法學習機器學習,不過我是用 Python 寫出新學到的技巧的核心程式碼。

    換條路試試

    有一個我在搞懂新技術時常用的小技巧,即找到所有引用了包含該技術的論文的其他論文,看看其他人如何演繹、解釋這個新技術時常能夠解除我在讀原始描述產生的誤解。不過這個辦法不總是有效,反而會更加迷惑,引入了更多令人誤解的方法和新符號。但是總體來說,這個辦法還是有效的。

    在網上向大神請教

    說實話,有很多線上論壇裡的人們很願意向別人解釋數學。你可以在螢幕上截張困擾你的符號圖,寫清楚出處和連結,然後連同你的困惑一起釋出在問答網站上。推薦以下兩個入門網站:

    https://math.stackexchange.com/

    https://stats.stackexchange.com/

    推薦閱讀

    如果你想進一步深入瞭解,這一部分會告訴你更多相關資源。

    Section 0.1. Reading Mathematics, Vector Calculus, Linear Algebra, and Differential Forms, 2009:http://www.math.cornell.edu/~hubbard/readingmath.pdf

    The Language and Grammar of Mathematics, Timothy Gowers:http://assets.press.princeton.edu/chapters/gowers/gowers_I_2.pdf

    Understanding Mathematics, a guide, Peter Alfeld:https://math.stackexchange.com/

    總結

    在本教程中,你瞭解了在閱讀機器學習相關技術時可能會遇到的基礎數學符號。具體來說,你學到了:

    算數符號,包括各種乘法、指數、平方根以及對數。

    數列和集合符號,包括索引、累加以及集合關係。

    5 個當你在理解數學符號遇到困難時可以幫到你的小技巧。

  • 中秋節和大豐收的關聯?
  • 一汽大眾探歌怎麼樣?