微分方程真的能結合深度神經網路?真的能用來理解深度神經網路、推導神經網路架構、構建深度生成模型?本文將從鄂維南、董彬和陳天琦等研究者的工作中,窺探微分方程與深度學習聯袂前行的路徑。
近日,北京智源人工智慧研究院開展了第一次論壇,其以「人工智慧的數理基礎」這一重大研究方向為主題,從數學、統計和計算等角度討論了智慧系統應該怎樣融合數學系統。
在論壇中,北京大學董彬副教授、林偉研究院和張志華教授等研究者從基礎出發介紹了「數學」眼中的機器學習是什麼樣的。而這些數理基礎,正好是構建可計算、可泛化、可解釋和穩健 ML 系統所必需的。
在眾多演講中,我們發現董彬老師介紹的微分方程非常有吸引力,它對於探索新的深度學習架構、構建更高效能的深度學習模型非常有幫助。因此在這篇文章中,我們重點關注微分方程在深度學習中的應用,看起來,它們確實是天生一對的組合。
微分方程與深度學習
深度學習還能與微分方程相結合?是的,這是一個很有意思的領域,近來也有非常多的研究成果,包括 NeurIPS 2018 的最佳論文。那麼什麼是微分方程,它結合深度學習又有什麼用呢?
按照維基百科的描述:「微分方程是一種數學方程,用來描述某一類函式與其導數之間的關係」,因此一個方程如果同時包含函式及其導數,那麼就可以稱為微分方程。例如,f'(x) = 2x 就是一個常微分方程,我們可以「看出來」其通解為 f(x)=x^2 +C,其中 C 表示任意常數。
不過深度學習一般也就會用到概率論、線性代數和最優化等基礎數學,似乎與微分方程沒什麼關係?其實並不然,如果我們探索網路架構到底與數學的哪些概念是相關的,那麼會發現深度神經網路可以理解為一種微分方程。即,深度神經網路架構,就是離散化的微分方程。
因此如果能找到了微分方程與深度網路之間的關係,那麼兩個領域之間的研究成果就能互相借鑑,也就能找到更高效的深度模型。
此外,深度學習的模型設計缺少系統指導,大多數深度學習模型都缺少可解釋性,這也限制了它的應用。如果加上了微分方程,那麼網路架構就是數值微分方程,網路訓練就是最優控制,神經網路的設計也就能有理論指導了。
如上圖所示,比較受關注的是神經網路架構與數值微分方程之間的關係,這個領域早期比較有影響的就是北大、普林斯頓教授鄂維南老師的研究,它首次將殘差網路理解為微分方程。北大董彬等研究者在 ICML 2018 中進一步表明 ResNet、PolyNet、FractalNet 和 RevNet 等網路都可以理解為微分方程的不同數值離散方式。
此外,在 NeurIPS 2018 的最佳論文中,陳天琦等研究者提出神經常微分方程,在近似常數級的記憶體成本上,ODENet 能實現高效的影像分類和生成任務。在 ICLR 2019 中,陳天琦等研究者進一步將微分方程應用到流模型中,從而獲得記憶體效率更高的生成模型。
正如董彬老師所言,通過結合微分方程,我們可以從數學角度出發設計網路架構,並分析它們的泛化效能和可解釋性。在這篇文章中,我們希望從基本概念到應用,介紹該領域的一些新想法。
數學老師眼中的 ResNet
鄂維南院士是一位主要關注數學領域的研究者,也是北京大學和普林斯頓大學的教授。在 17 年的《Communications in Mathematics and Statistics》中,鄂維南發表了一篇文章,他討論了使用連續動力學系統建模高維非線性函式的想法,即微分方程與深度學習之間的關係。
以下是該工作的地址:
論文:A Proposal on Machine Learning via Dynamical Systems
論文地址:https://link.springer.com/article/10.1007/s40304-017-0103-z
在這篇「Proposal」中,鄂老師表示深度神經網路可以理解為離散的動力學系統。離散的動力學系統很難分析,但連續的動力學系統在數學上更易於分析,因此它可作為深度神經網路的數學基礎。此外,因為有很多種方式離散化動力學系統,所以我們也許能構建更多有意思的模型。例如,動力學系統可以選擇自適應的時間步大小,這對應於選擇自適應的神經網路層級。
這一篇文章提出了非常多的新洞見,尤其是結合常微分方程與深度殘差網路的新視角。下面讓我們看看在數學家的眼中,殘差網路到底該怎樣推導。
離散動態系統:ResNet
因為 DNN 可以視為離散的動力學系統,那麼每一步最基礎的動力學過程即線性變換加上非線性啟用函式,這是最簡單的非線性離散動力學系統之一。具體而言對於深度殘差網路,我們可以用離散動態系統描述為:
其中 Z_l 和 Z_l+1 為第 l 層的輸入與輸出,y_l 為第 l 層的輔助變數,h 和 g 為一些對映,它們可以是線性的,也可以是非線性的。對於深度神經網路,如果 g 和 h 是恆等對映,訓練會非常順暢,那麼為什麼會這樣呢?為什麼 g 和 h 是恆等對映就能減輕梯度爆炸或消失問題?
實際上,如果令 G 為 g 的逆向對映(inverse map),我們可以將上述動力學系統寫為:
為了有一個穩定的訓練過程,即梯度不爆炸、不消失,上述方程右邊的梯度需要接近於恆等對映。也就是說,梯度由後向前傳時,它在量上需要保持穩定。鄂老師表示若令 h 和 g 都為恆等對映,∇G∇h 就逼近恆等對映(F 為較小隨機擾動),梯度的傳遞就非常平穩。
其實若 h 和 g 為恆等對映,那麼方程 2.3 就可以寫為:
這難道不就是標準的殘差連線嗎?它不就是如下動態系統的離散化嗎?
這裡 t 相當於層級 l 的連續化,如果 l 趨向於無窮小,那麼按照導數的定義,z_l+1 與 z_l 兩層之間的差就趨向於 z 對 t 的導數。所以,可以說殘差網路其實就是連續變換的尤拉離散化,它是一個特例。
如果從導數定義的角度來看方程 2.7,當 t 的變化趨向於無窮小時,隱藏狀態的變化 dz 可以通過神經網路建模。當 t 從初始一點點變化到終止,那麼 z(t) 的改變最終就代表著前向傳播結果。
從節選的幾步推導,我們可以看到,ResNet 能天然理解為動力學系統,能用微分方程天然表示。但是所有的,或大多數深度神經網路都能這樣理解嗎?董彬老師做了進一步的研究,他們將這一觀點推廣到了更多的深度神經網路。
其它深度卷積網路又怎樣?
北京大學董彬副教授等研究者做了進一步探討,即 ResNet 與微分方程的這種關係是特例還是一般化的聯絡。如果數值 ODE 和網路構架的聯絡建立起來了,董彬老師表示我們就可以從數值 ODE 反推出一些有用的神經網路構架。因為 ODE 已經發展了幾十年,有豐富的研究成果可以參考,反推的新架構可能取得更好的效果。
在 ICML 2018 的一項研究中,董彬等研究者表示很多高效的卷積神經網路都能解釋為微分方程,並基於微分方程的線性多步解法提出新的線性多步架構,這種結構能提升 ImageNet 等的影像分類任務的效能。
論文:Beyond Finite Layer Neural Networks: Bridging Deep Architectures and Numerical Differential Equations
微分方程的解法即網路架構
這裡展示了其它卷積網路與微分方程之間的關係,它們在影像識別等任務上都非常有效。如下所示為 ResNet 及其它三種卷積網路架構。
圖源:arXiv: 1710.10121
其中 PolyNet 為每個殘差模組引入了 PolyInception 模組,從而加強模組的表達能力。PolyInception 模組是 Inception 單元的「多項式」組合,它會以並行或序列的方式整合多條計算路徑。FractalNet 以自相似性為基準設計架構,它會重複引用簡單的擴充套件規則,從而生成結構為截斷分形(fractal)的深度網路。最後的 RevNet 是一種可逆網路,它不需要在前饋傳播中儲存中間啟用值。
在下表中,董彬老師總結了不同卷積網路對應的微分方程數值解法。其中 ResNet 和 ResNeXt 可視為步長為 1 的前向尤拉離散化,其它卷積網路也對應著不同的離散化方式。
圖源:arXiv: 1710.10121
PolyNet
這裡我們先看看 PolyNet 怎樣搭上微分方程這班車。PolyNet 主要希望提供多樣性的架構,因此 PolyInception 除了常規殘差模組的一階路徑,還新增了另一條二階路徑。具體而言,PolyInception 模組可以表示為:
其中 I 表示恆等對映,「·」表示作用於,即 F·x 表示非線性變換 F 作用於 x。我們可以看到,PolyInception 多了一個二階的複合函式,也就是說,如果 F 表示某種 Inception 模組,那麼二階的路徑會穿過串聯的兩個 Inception 模組。在 PolyNet 原論文中,作者展示了可能的 PolyInception 結構:
圖源:arXiv: 1611.05725
如上所示,a 和 b 是等價的,F 和 G 表示是否共享引數。董彬老師表示,PolyNet 可以解釋為時間步為 1 的反向尤拉方法,實際上前向傳播就是在解一個反向尤拉。
不過本身反向尤拉要求解一個非常巨大的非線性方程組的逆,這樣無法求解就只能用多項式去逼近解。也就是說,上式的求逆又可以寫為:
因此,PolyNet 可以視為採用反向尤拉策略解常微分方程 u_t = f(u) 的逼近方法。如果這樣理解,那麼它暗示著允許更大的時間步大小,因此這表示我們可以採用更少的殘差模組就能構建更好的效果。這正好解釋了,為什麼 PolyNet 能增加殘差模組寬度而降低層級深度,從而實現更好的分類準確度。
此外,從微分方程的角度來說,反向尤拉法要比正向尤拉法有更好的穩定性。這也能從側面說明為什麼在相近引數和計算量下,PolyNet 能實現更好的效果。
FractalNet 與 RevNet
FractalNet 與 RevNet 也都有對應的微分方程「解法」,研究者發現 FractalNet 的巨集觀架構能解釋為數值分析中著名的 Runge-Kutta 方法。例如對於複合次數小於等於 2 的 FractalNet,每一個模組都可以表示為:
其中 f_1 和 f_2 分別表示不同的 Fractal,如果我們看看二階的 Runge-Kutta 方法,我們就會發現他們的表示式非常相似:
另外的 RevNet 也是一樣,因為它是一種可逆的深度網路,所以它有從 X 到 Y 和 Y 到 X 的過程。如果它們分別對應著前向尤拉方法,那麼就表示兩條簡單的動態系統就能描述整個神經網路。此外值得注意的是,雖然深度學習中很少有可逆的雙向網路,但是在微分方程中,動態系統的正反向都是可行的。
最後,董彬老師還根據數值微分方程提出了一種新的結構:Linear Multi-step Architecture。他表明加上這種結構,殘差網路只需要一半的引數量就能達到相同的訓練效果,這表示新結構使卷積網路的訓練更高效與穩定,希望瞭解的讀者可查閱董老師的原論文。
神經化的微分方程
微分方程除了為深度網路提供理論解釋,並啟發架構創新,它還能做一些更炫酷的工作嗎?多倫多大學陳天琦等研究者表示,既然殘差連線就是常微分方程(ODE)的離散化,那麼常規神經網路的前向傳播過程豈不就是微分方程給定初值解末值的過程?如果我們用業界成熟的微分方程求解器(ODESolve)解某個 ODE,這不就能代替前傳和反傳麼?
在他們的研究 ODENet 中,研究者使用神經網路引數化隱藏狀態的導數,而不是如往常那樣直接引數化隱藏狀態。這裡引數化隱藏狀態的導數就類似構建了連續性的層級與引數,而不再是離散的層級。因此引數也是一個連續的空間,我們不需要再分層傳播梯度與更新引數。
簡而言之,ODENet 中的神經網路建模可以表示為下式:
其中 f 表示的是神經網路,h 表示的是隱藏狀態。相比而言,常規卷積網路可表示為 h(t+1) = f(h(t), θ)。
如果引數化的是隱藏狀態的變化,神經微分方程在前向傳播過程中不儲存任何中間結果,因此它只需要近似常數級的記憶體成本。
論文:Neural Ordinary Differential Equations
新穎的前傳與反傳
其實 ResNet 只不過是簡單的尤拉離散化,而近百年來,數學家構建了很多現代 ODE 求解方法。這些新方法不僅能保證收斂到真實解,同時還能控制誤差水平。
ODENet 就採用了一種適應性 ODESolver 代替前向傳播過程,它不像尤拉法移動固定的步長,相反它會根據給定的誤差容忍度選擇適當的步長逼近真實解。
如下圖所示,左邊的殘差網路定義有限轉換的離散序列,它從 0 到 1 再到 5 是離散的層級數,且在每一層通過啟用函式做一次非線性轉換。此外,黑色的評估位置可以視為神經元,它會對輸入做一次轉換以修正傳遞的值。而右側的 ODE 網路定義了一個向量場,隱藏狀態會有一個連續的轉換,黑色的評估點也會根據誤差容忍度自動調整。
圖源:arXiv: 1806.07366
所以 ResNet 採用的是固定的步長 1,適應性 ODESolver 可以自動估計不同的步長,它的自由度和誤差控制都更強一些。
對於新穎的前向傳播,我們可以通過兩段虛擬碼瞭解它與常規方法的不同之處。如下是 ResNet 的簡要虛擬碼,定義 f 為卷積層、T 為殘差塊的數量:
def f(h, t, θ):
return nnet(h, θ_t)
def resnet(h):
for t in [1:T]:
h = h + f(h, t, θ)
return h
如下展示的是整個 ODEnet 的虛擬碼,f 表示的也是神經網路層級。不過它不需要層層堆疊離散的層級,只要通過 ODESolver 求出終止時刻 t_1 的 h 就行了,整個 ODESolver 就是一個黑箱過程。
def f(h, t, θ):
return nnet([h, t], θ)
def ODEnet(h, θ):
return ODESolver(f, h, t_0, t_1, θ)
所以不同之處在於 ODESlover 代替了整個前傳過程,這樣豈不是無法進行反向傳播了?為了「繞過」前向傳播中的 ODESolver,陳天琦等研究者採用了一種名為 adjoint method 的梯度計算方法。也就是說,模型在反傳中通過第二個增廣 ODESolver 算出梯度,其可以逼近按計算路徑從前向 ODESolver 傳遞迴的梯度,因此可用於進一步的引數更新。
總之,通過一系列推導,反向傳播在不知道中間啟用值的情況下,直接求一個微分方程就行了。我們並不需要一層層反向傳遞梯度,就能直接獲得更新引數的梯度。ODENet 的反向傳播過程如下虛擬碼所示:
def f_and_a([z, a], t):
return[f, -a*df/da, -a*df/dθ]
[z0, dL/dx, dL/dθ] =
ODESolver([z(t1), dL/dz(t), 0], f_and_a, t1, t0)
其中 f_and_a 為增廣狀態的動力學過程,用於求解微分方程。ODESlover 求出來的 dL/dθ 就可以直接用來更新神經網路的權重。
ODENet 採用了一種非常新穎的前向與反向傳播過程,它和常規的神經網路訓練完全不一樣。它的優勢也體現在這種差異上,因為反向傳播不需要保留前傳的中間計算結果,所以只需要常數級的記憶體要求。
微分方程也能搭生成模型
在 ODENet 中,研究者也展示了將微分方程應用到生成模型的前景。因此在 ICLR 2019 中,陳天琦等研究者進一步研究了微分方程如何用於流模型。
論文:FFJORD: Free-form Continuous Dynamics for Scalable Reversible Generative Models
目前,最流行的生成模型 GAN 通過生成器與判別器的博弈,從而逼近真實資料的概率密度函式 p(x)。但流模型希望通過一系列可逆轉換,明確地學習到資料分佈 p(x)。因此,流模型會通過可逆神經網路將資料點從一個簡單分佈對映到複雜分佈。
但基於似然度訓練常規流模型需要限制它們的架構,從而使雅可比行列式的計算成本足夠小。例如流模型 Real NVP 或 Glow 等,它們對矩陣維度進行分割或使用秩為 1 的權重矩陣進行限制。
ODENet 使用常微分方程定義了一種從隱變數到資料的對映,它可以使用相對低成本的跡運算計算雅可比行列式。後面提出的 FFJORD 進一步發揚了這種觀點,它將跡估計和前向傳播都定義為了常微分方程,並使用 ODESolver 直接求解。直觀而言,FFJORD 的抽象過程可如下圖所示:
圖源:arXiv: 1810.01367
如上圖所示,對於微分方程而言,我們知道初始的隨機分佈 z(t_0),並系統通過 ODESolver 解出真實影像分佈 z(t_1)。如果知道了 z(t_1),那麼從中取樣就能生成真實影像。
最後,這些方向與成果都表明,微分方程真的可以和深度神經網路相結合。也許以後,微分方程乃至其它數理基礎,都能幫助我們構建更魯棒和可解釋性的機器學習系統。