上班第一周,老板說組里終于來了個懂數(shù)學(xué)的,我們有個東西一直搞不明白,論文里用到好多數(shù)學(xué),誰都看不下去。論文在arXiv上可以找到:
https://arxiv.org/abs/1711.10455
https://arxiv.org/abs/1804.00746
本文簡單介紹一下基本的范疇論(category theory),后續(xù)準備在下一篇文章中聊一聊17年11月的論文:自動微分(automatic differentiation,AD)可以實現(xiàn)為范疇論中的函子(functor)。再下一篇聊18年4月的那篇:梯度遞降(gradient descent,GD)和反向傳播(back propagation,BP)也可以實現(xiàn)為函子。
對深度學(xué)習(xí)稍有了解的朋友會知道,GD和BP是訓(xùn)練神經(jīng)網(wǎng)絡(luò)的最核心的算法,因此可以說深度學(xué)習(xí)的整個方法論(或者更廣泛地說機器學(xué)習(xí)的整套理論)可以用范疇論給出描述,而且這些描述也有一些比較好的結(jié)構(gòu)和性質(zhì),可以期待范疇論中的一些結(jié)論會給機器學(xué)習(xí)提供新的方法和觀點。
書歸正傳,簡單說一下范疇論。所謂范疇,包括范疇的對象(objects)、對象之間的態(tài)射(morphisms)和態(tài)射與態(tài)射的復(fù)合運算(composition)。一個容易理解的例子是:把每個集合看作一個對象,兩個集合之間的映射看作態(tài)射,態(tài)射的復(fù)合就是通常意義下映射的復(fù)合,這個范疇我們記作Sets。
范疇的公理化定義除了上述數(shù)據(jù)之外,還有這些數(shù)據(jù)所需滿足的公理:其一稱為恒等公理,即每個對象都有個自己到自己的恒等態(tài)射(identity morphism),而且恒等態(tài)射與任何態(tài)射的復(fù)合依舊得到原態(tài)射;其二是態(tài)射之間的復(fù)合滿足結(jié)合律(associativity)。
對上面的例子Sets,恒等態(tài)射就是每個集合里的恒等映射,即f(x)=x。對其他一些范疇,態(tài)射可以不是映射,對象可能也不是集合,對象里面沒有元素,那恒等也就無從說起。之所以用恒等態(tài)射這個名字,是因為范疇論從最開始就是樸素集合論的一個推廣,可以說數(shù)學(xué)家們第一個考慮的范疇就是Sets,很多術(shù)語也由此繼承而來。Sets中的結(jié)合律即普通映射的結(jié)合律,這個結(jié)果不平凡,但是在集合論中是經(jīng)典結(jié)果,有興趣的讀者可以自行證明或查閱。
其他一些常見的范疇包括:Groups—對象是所有群、態(tài)射是群同態(tài),Vect—對象是所有線性空間、態(tài)射是線性變換(即矩陣),以上兩個例子中的復(fù)合依舊是映射的復(fù)合。
到這里可能會讓讀者覺得范疇論只是把集合論里的東西打包而已,事實上雖然最常見的范疇是Sets的各種子范疇,但是也有很多跟大家的直覺不大一樣的范疇,下面舉個例子(以后打算寫篇文章介紹UMAP,是最新出現(xiàn)的用來對數(shù)據(jù)進行降維的算法,其中的數(shù)學(xué)原理用到拓撲上的單形simplex,會用到下面這個范疇)。
任何一個偏序集可以看作一個范疇。所謂偏序集(poset,或者partially ordered set),就是集合里的元素之間可能存在序關(guān)系。序關(guān)系可以看作是廣義的大小關(guān)系,滿足自反性(即任何x都滿足x<=x)反對稱性(即如果x<=y且y<=x則x=y)和傳遞性(即如果x<=y且y<=z則x<=z)。所謂偏序就是說并不是集合中任意兩個元素都可以比大小,一個例子是集合都包含關(guān)系,兩個集合可能一個包含另一個,也可能互不包含。與偏序相對應(yīng)的是良序,即任何兩個元素都可以比大小,比如實數(shù)集。偏序集看作范疇,其中都對象即集合里的元素,態(tài)射就是偏序關(guān)系,態(tài)射的復(fù)合對應(yīng)傳遞性,恒等態(tài)射對應(yīng)自反性,結(jié)合律是容易驗證的。
至此我們介紹里范疇的定義,某種意義上說,范疇可以看作集合的升級版(把元素升級為對象,而且對象和對象之間要有聯(lián)系),那么集合論中的映射(map,數(shù)集之間的映射稱為函數(shù)——function,大家可能對這個名詞更熟悉一些)在范疇論中的對應(yīng)是什么呢?答案是函子(functor)。兩個范疇之間的函子在兩個范疇中的對象之間建立聯(lián)系,同時在態(tài)射之間也建立聯(lián)系,并且這種聯(lián)系保持范疇中的態(tài)射復(fù)合、恒等態(tài)射等結(jié)構(gòu),一個簡單的示意圖如下:

圖中兩個方框及其中的花體字母表示兩個范疇,范疇中大寫字母表示對象,小寫字母是態(tài)射,兩個范疇之間的粗箭頭表示函子,細箭頭表示函子在不同層次上定義的映射。進一步解釋一下上面說的函子對范疇結(jié)構(gòu)的保持:函子把恒等態(tài)射映到恒等態(tài)射,另外我們先對兩個態(tài)射進行復(fù)合運算再進行函子作用,和先分別進行函子作用再到另一個范疇中做復(fù)合運算,得到的結(jié)果是一樣的。
最簡單的函子的例子,就是將Sets的子范疇映到Sets,例如將Groups映到Sets,忽略對象上的群結(jié)構(gòu),只將其看作集合,因此這一類函子叫做遺忘函子(forgetful functors)。一個稍微復(fù)雜點的例子如下圖所示。

花體S即上述Sets范疇,函子P把一個集合映A到它的冪集P(A)即A的所有子集組成的集合。對圖中對態(tài)射(即A到B的一個映射)f 而言,P(f)是P(A)到P(B)之間對一個態(tài)射,將A的一個子集映到該子集中所有元素在 f 下的像組成的集合,注意該集合一定是B的一個子集,所以是P(B)中的元素??梢宰C明P把恒等映射映到恒等映射,也保持映射間的復(fù)合運算,具體證明感興趣的讀者可自行完成,也是關(guān)于集合論的一個不錯的練習(xí)。
以上介紹了范疇論中的入門知識,有這些知識,我們可以介紹1711.10455這篇論文,其中將微分構(gòu)造成了函子。這些我們下一篇文章將會細說。