曲線 神經網路 神經網路的數學基礎 8(完結)

2021-10-14 21:08:04 字數 3002 閱讀 4529

詳細內容請閱讀《deep learning with python中文翻譯為:《python深度學習[美] 弗朗索瓦·肖萊 著 張亮 譯

1、隨機梯度下降

給定乙個可微函式,理論上可以用解析法找到它的最小值:函式的最小值是導數為0 的點,因此你只需找到所有導數為0 的點,然後計算函式在其中哪個點具有最小值。將這一方法應用於神經網路,就是用解析法求出最小損失函式對應的所有權重值。可以通過對方程gradient(f)(w) = 0 求解w 來實現這一方法。這是包含n 個變數的多項式方程,其中n 是網路中係數的個數。n=2 或n=3 時可以對這樣的方程求解,但對於實際的神經網路是無法求解的,因為引數的個數不會少於幾千個,而且經常有上千萬個。

下面按照如下的5步進行處理:

(1) 抽取訓練樣本x 和對應目標y 組成的資料批量。

(2) 在x 上執行網路,得到**值y_pred。

(3) 計算網路在這批資料上的損失,用於衡量y_pred 和y 之間的距離。

(4) 計算損失相對於網路引數的梯度[一次反向傳播(backward pass)]。

(5) 將引數沿著梯度的反方向移動一點,比如w-=step * gradient,從而使這批資料上的損失減小一點。

總結:基於當前在隨機資料批量上的損失,一點一點地對引數進行調節。由於處理的是乙個可微函式,你可以計算出它的梯度,從而有效地實現第四步。沿著梯度的反方向更新權重,損失每次都會變小一點。

剛剛描述的方法叫作小批量隨機梯度下降(mini-batch stochastic gradient descent,又稱為小批量sgd)。術語隨機(stochastic)是指每批資料都是隨機抽取的(stochastic 是random在科學上的同義詞)。下圖給出了一維的情況,網路只有乙個引數,並且只有乙個訓練樣本。

如你所見,直觀上來看,為step 因子選取合適的值是很重要的。如果取值太小,則沿著曲線的下降需要很多次迭代,而且可能會陷入區域性極小點。如果取值太大,則更新權重值之後可能會出現在曲線上完全隨機的位置。注意,小批量sgd 演算法的乙個變體是每次迭代時只抽取乙個樣本和目標,而不是抽取一批資料。這叫作真sgd(有別於小批量sgd)。還有另一種極端,每一次迭代都在所有資料上執行,這叫作批量sgd。這樣做的話,每次更新都更加準確,但計算代價也高得多。這兩個極端之間的有效折中則是選擇合理的批量大小。

上圖描述的是一維引數空間中的梯度下降,但在實踐中需要在高維空間中使用梯度下降。神經網路的每乙個權重引數都是空間中的乙個自由維度,網路中可能包含數萬個甚至上百萬個引數維度。為了讓你對損失曲面有更直觀的認識,你還可以將梯度下降沿著二維損失曲面視覺化,如下圖所示。但你不可能將神經網路的實際訓練過程視覺化,因為你無法用人類可以理解的方式來視覺化1 000 000 維空間。因此最好記住,在這些低維表示中形成的直覺在實踐中不一定總是準確的。這在歷史上一直是深度學習研究的問題**。

此外,sgd 還有多種變體,其區別在於計算下一次權重更新時還要考慮上一次權重更新,而不是僅僅考慮當前梯度值,比如帶動量的sgd、adagrad、rmsprop 等變體。這些變體被稱為優化方法(optimization method)或優化器(optimizer)。其中動量的概念尤其值得關注,它在許多變體中都有應用。動量解決了sgd 的兩個問題:收斂速度和區域性極小點。下圖給出了損失作為網路引數的函式的曲線。

如你所見,在某個引數值附近,有乙個區域性極小點(local minimum):在這個點附近,向左移動和向右移動都會導致損失值增大。如果使用小學習率的sgd 進行優化,那麼優化過程可能會陷入區域性極小點,導致無法找到全域性最小點。

使用動量方法可以避免這樣的問題,這一方法的靈感**於物理學。有一種有用的思維影象,就是將優化過程想象成乙個小球從損失函式曲線上滾下來。如果小球的動量足夠大,那麼它不會卡在峽谷裡,最終會到達全域性最小點。動量方法的實現過程是每一步都移動小球,不僅要考慮當前的斜率值(當前的加速度),還要考慮當前的速度(來自於之前的加速度)。這在實踐中的是指,更新引數w 不僅要考慮當前的梯度值,還要考慮上一次的引數更新,其簡單實現如下所示。其中,velocity(速度的意思)。

2、鏈式求導:反向傳播演算法

在前面的演算法中,我們假設函式是可微的,因此可以明確計算其導數。在實踐中,神經網路函式包含許多連線在一起的張量運算,每個運算都有簡單的、已知的導數。例如,下面這個網路f包含3 個張量運算a、b 和c,還有3個權重矩陣w1、w2 和w3。

f(w1, w2, w3) = a(w1, b(w2, c(w3)))

根據微積分的知識,這種函式鏈可以利用下面這個恒等式進行求導,它稱為鏈式法則(chain rule):(f(g(x)))' = f'(g(x)) * g'(x)。將鏈式法則應用於神經網路梯度值的計算,得到的演算法叫作反向傳播(backpropagation,有時也叫反式微分,reverse-mode differentiation)。反向傳播從最終損失值開始,從最頂層反向作用至最底層,利用鏈式法則計算每個引數對損失值的貢獻大小。

現在以及未來數年,人們將使用能夠進行符號微分(symbolic differentiation)的現代框架來實現神經網路,比如tensorflow。也就是說,給定乙個運算鏈,並且已知每個運算的導數,這些框架就可以利用鏈式法則來計算這個運算鏈的梯度函式,將網路引數值對映為梯度值。對於這樣的函式,反向傳播就簡化為呼叫這個梯度函式。由於符號微分的出現,你無須手動實現反向傳播演算法。

神經網路的數學基礎系列(1-8)結束。謝謝。

神經網路基礎與人工神經網路

神經網路方面的研究很早就已出現,今天 神經網路 已是乙個相當大的 多學科交叉的學科領域。神經網路中最基本的成分是神經元模型。上圖中每個圓圈都是乙個神經元,每條線表示神經元之間的連線。我們可以看到,上面的神經元被分成了多層,層與層之間的神經元有連線,而層內之間的神經元沒有連線。為了理解神經網路,我們應...

神經網路基礎 迴圈神經網路RNN

在處理序列問題 如語言識別等 上,使用迴圈神經網路 recurrent neural networks,rnn 是很自然的方式 所謂迴圈神經網路,其實就是把上一時刻的資訊作為當前時刻輸入的一部分,從而實現資訊的傳遞 本文將先介紹基礎版rnn,並說明基礎版的問題,然後介紹改進版的迴圈神經網路lstm ...

神經網路 卷積神經網路

這篇卷積神經網路是前面介紹的多層神經網路的進一步深入,它將深度學習的思想引入到了神經網路當中,通過卷積運算來由淺入深的提取影象的不同層次的特徵,而利用神經網路的訓練過程讓整個網路自動調節卷積核的引數,從而無監督的產生了最適合的分類特徵。這個概括可能有點抽象,我盡量在下面描述細緻一些,但如果要更深入了...