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