向量的內積
a、 b 的內積 a · b 的定義如下所示:
注:當 a、 b 有一個為 0 或兩者都為 0 時,內積定義為 0。
柯西 - 施瓦茨不等式
根據內積的定義式,我們可以推導出下式:
證明:
根據余弦函數的性質,對任意的 θ,有 - 1 ≤ cosθ ≤ 1,兩邊同時乘以 | a || b |,有:
利用定義式 (2),我們可以得到式 (3),證畢。
當兩個向量a、b大小固定時,有下面三種情況:
根據柯西 - 施瓦茨不等式 (3),可以得出以下事實:
①當兩個向量方向相反時,內積取得最小值。【梯度下降法的基本原理】
②當兩個向量不平行時,內積取平行時的中間值。
③當兩個向量方向相同時,內積取得最大值。
向量的一般化
向量的方便之處在於,二維以及三維空間中的性質可以照搬到任意維空間中。神經網絡雖然要處理數萬維的空間,但是二維以及三維空間的向量性質可以直接利用。出於該原因,向量被充分應用在后述的梯度下降法中。
將二維以及三維空間中的向量公式推廣到任意的 n 維空間:
張量
導數的定義
函數 y =f (x) 的導函數 f '(x) 的定義如下所示:
注:希臘字母 ∆ 讀作 delta,對應拉丁字母 D。此外,帶有 '(prime)符號的函數或變量表示導函數。
已知函數 f (x),求導函數 f '(x),稱為對函數 f (x) 求導。當式 (1) 的值存在時,稱函數可導。
導函數的含義如下圖所示。作出函數 f (x) 的圖像, f '(x) 表示圖像切線的斜率。因此,具有光滑圖像的函數是可導的。
導數符號
函數 y = f (x) 的導函數用 f '(x) 表示,但也存在不同的表示方法,例如可以用如下的分數形式來表示:
導數的性質
式 (3) 稱為導數的線性性。
分數函數的導數和 Sigmoid 函數的導數
當函數是分數形式時,求導時可以使用下面的分數函數的求導公式:
Sigmoid 函數 σ(x) 是神經網絡中最有名的激活函數之一,其定義如下所示:
在后述的梯度下降法中,需要對這個函數求導。求導時使用下式會十分方便。
證明:
將 \(1+e^{-x }\)帶入式(4)的 f(x),在利用導數公式:\((e^{-x })^{'} = -e^{-x}\),可得
證畢!
最小值的條件
因為存在下面的函數:
偏導數
關於某個特定變量的導數就稱為偏導數( partial derivative)
例如,讓我們來考慮有兩個變量 x、 y 的函數 z = f (x, y)。只看變量 x,將 y 看作常數來求導,以此求得的導數稱為“關於 x 的偏導數”,用下面的符號來表示:
關於 y 的偏導數也是同樣的:
舉例:
多變量函數的最小值條件
光滑的單變量函數 y = f (x) 在點 x 處取得最小值的必要條件是導函數在該點取值 0 ,這個事實對於多變量函數同樣適用。例如對於有兩個變量的函數,可以如下表示:
鏈式法則
單變量函數的鏈式法則
已知單變量函數 y = f (u),當 u 表示為單變量函數 u = g(x) 時,復合函數 f (g(x)) 的導函數可以如下簡單地求出來:
這個公式稱為單變量函數的復合函數求導公式,也稱為鏈式法則。
多變量函數的鏈式法則
變量 z 為 u、 v 的函數,如果 u、 v 分別為 x、 y 的函數,則 z 為 x、 y的函數,此時下式( 多變量函數的鏈式法則)成立:
梯度下降法的基礎
單變量函數的近似公式
首先我們來考察單變量函數 y = f(x)。如果 x 作微小的變化,那么函數值 y 將會怎樣變化呢?答案就在導函數的定義式中:
在這個定義式中, ∆x 為“無限小的值”,不過若將它替換為“微小的值”,也不會造成很大的誤差。因而,下式近似成立:
注意:\(≒\) 表示近似於
將上式變形,可以得到以下單變量函數的近似公式:
舉例:
當 \(f(x) = e^x\) 時, x = 0 附近的近似公式為:
取x=0,重新\(\bigtriangleup x\)將替換為x,可得:
其幾何意義如下:
多變量函數的近似公式
近似公式的向量表示
三個變量的函數的近似公式 (4) 可以表示為如下兩個向量的內積∇z ⋅∆ x 的形式:
梯度下降法的含義與公式
梯度下降法的思路
已知函數 z = f(x, y),怎樣求使函數取得最小值的 x、 y 呢?最有名的方法就是利用“使函數 z = f (x, y) 取得最小值的 x、 y 滿足以下關系”這個事實:
這是因為,在函數取最小值的點處,就像葡萄酒杯的底部那樣,與函數相切的平面變得水平。
近似公式和內積的關系
函數 z = f(x, y) 中,當 x 改變 ∆x, y 改變 ∆y 時,我們來考察函數 f(x, y) 的值的變化 ∆z。
根據近似公式,以下關系式成立:
\(\bigtriangleup z=\frac{\partial f(x,y) }{\partial x} \bigtriangleup x+\frac{\partial f(x,y) }{\partial y} \bigtriangleup y\) 的右邊可以表示為如下兩個向量的內積形式:
請大家注意這個內積的關系,這就是梯度下降法的出發點。
我們來考察兩個固定大小的非零向量 a、 b。當 b 的方向與 a 相反時,內積 a · b 取最小值:
換句話說,當向量 b 滿足以下條件式時,可以使得內積 a · b 取最小值:
內積的這個性質就是梯度下降法的數學基礎。
根據上面我們可以知道,從點 (x, y) 向點 (x + ∆x, y + ∆y) 移動時,當滿足以下關系式時,函數 z = f (x, y) 減小得最快。這個關系式就是二變量函數的梯度下降法的基本式:
如果從點 (x, y)向點(x + ∆x, y + ∆y)移動就可以從圖像上點 (x, y) 的位置最快速地下坡。
右邊的向量 \((\frac{\partial f(x,y) }{\partial x},\frac{\partial f(x,y) }{\partial y} )\) 稱為函數 f (x, y) 在點 (x, y) 處的梯度( gradient)。這個名稱來自於它給出了最陡的坡度方向。
將梯度下降法推廣到三個變量以上的情況
當函數 f 由 n 個自變量 x1, x2, …, xn 構成時,梯度下降法的基本式可以像下面這樣進行推廣:
哈密頓算子\(\bigtriangledown\)
在實際的神經網絡中,主要處理由成千上萬個變量構成的函數的最小值。在這種情況下,像式上面 (7) 那樣的表示往往就顯得十分冗長。因此我們來考慮更簡潔的表示方法。
在數學的世界中,有一個被稱為向量分析的領域,其中有一個經常用到的符號 ∇ 。 ∇ 稱為哈密頓算子,其定義如下所示:
利用這個符號,式 (7) 可以如下表示:
其中,左邊的向量 (∆x1, ∆x2, …, ∆xn) 稱為位移向量,記為 ∆x。
利用這個位移向量,梯度下降法的基本式 (7) 可以更簡潔地表示:
η 可以看作人移動時的“步長”,根據 η 的值,可以確定下一步移動到哪個點。
如果步長較大,那么可能會到達最小值點,也可能會直接跨過了最小值點(左圖)。
而如果步長較小,則可能會滯留在極小值點(右圖)。
在神經網絡的世界中, η 稱為學習率。遺憾的是,它的確定方法沒有明確的標准,只能通過反復試驗來尋找恰當的值。
\(f(x_0+x_1)= x_0^{2}+x_1^{2}\)的梯度呈現為有向向量(箭頭)。觀察下圖,
我們發現梯度指向函數\(f(x_0+x_1)\)的“最低處”(最小值),就像指南針一樣,所有的箭頭都指向同一點。其次,我們發現離“最低處”越遠,箭頭越大。
實際上,梯度會指向各點處的函數值降低的方向。更嚴格地講,梯度指示的方向是各點處的函數值減小最多的方向
在復雜的函數中,梯度指示的方向基本上都不是函數值最小處。
函數的極小值、最小值以及被稱為鞍點(saddle point) 的地方,梯度為0。
極小值是局部最小值,也就是限定在某個范圍內的最小值。
鞍點是從某個方向上看是極大值,從另一個方向上看則是極小值的點。
雖然梯度法是要尋找梯度為0的地方,但是那個地方不一定就是最小值(也有可能是極小值或者鞍點)。
此外,當函數很復雜且呈扁平狀時,學習可能會進入一個(幾乎)平坦的地區,陷入被稱為“學習高原”的無法前進的停滯期。
參考:
[1]深度學習的數學/(日)涌井良幸,(日)涌井貞美著;楊瑞龍譯.--北京:人民郵電出版社,2019.5
[2]深度學習入門:基於Python的理論與實現/(日)齋藤康毅著;陸宇傑譯.--北京:人民郵電出版社,2018.7