1. 程式人生 > >深度學習之人工神經網路學習

深度學習之人工神經網路學習

人工神經網路就是把這樣的人工神經元互聯成一個網路:一個神經元的輸出作為另一個神經元的輸入。神經網路可以有多種多樣的拓撲結構。其中最簡單的就是「多層全連線前向神經網路」。它的輸入連線到網路第一層的每個神經元。前一層的每個神經元的輸出連線到下一層每個神經元的輸入。最後一層神經元的輸出就是整個神經網路的輸出。如下圖,是一個三層神經網路。它接受 10 個輸入,也就是一個 10 元向量。第一層和第二層各有 12 個神經元。最後一層有 6 個神經元。就是說這個神經網路輸出一個 6 元向量。

 整個神經網路的計算可以用矩陣式給出。我們給出人工神經網路單層的式子。每層的神經元個數不一樣,輸入/輸出維度也就不一樣,計算式中的矩陣和向量的行列數也就不一樣,但形式是一致的。假設我們考慮的這一層是第 i 層。它接受 m 個輸入,擁有 n 個神經元(n 個輸出),那麼這一層的計算如下式所示:

 上標 i 表示第 i 層。是輸出向量,n 元,因為第 i 層有 n 個神經元。第 i 層的輸入,即第 i-1 層的輸出,是 m 元向量。權值矩陣 W 是 n x m 矩陣:n 個神經元,每個神經元有 m 個權值。W 乘以第 i-1 層輸出的 m 向量,得到一個 n 向量,加上 n 元偏置向量 b,再對結果的每一個元素施以啟用函式 f,最終得到第 i 層的 n 元輸出向量。可以看出整個神經網路其實就是一個向量到向量的函式。想要得到有用的神經網路,我們需要使用訓練集,將訓練集的輸入送給神經網路,然後計算輸出與正確輸出的(向量)差的模平方(自己與自己內積),再把全部n個樣本的差的模平方求平均,得到e:

e 稱為均方誤差 mse。e 越小則神經網路的輸出與正確輸出越接近。神經網路的行為就與想要的行為越接近。目標是使 e 變小。在這裡 e 可以看做是全體權值和偏置值的一個函式。這就成為了一個無約束優化問題。如果能找到一個全域性最小點,e 值在可接受的範圍內,就可以認為這個神經網路訓練好了。它能夠很好地擬合目標函式。這裡待優化的函式也可以是 mse 外的其他函式,統稱 Cost Function,都可以用 e 表示。

經典的神經網路的訓練演算法是反向傳播演算法(Back Propagation, BP)。BP 演算法屬於優化理論中的梯度下降法(Gradient Descend)。將誤差 e 作為全部權值和全部偏置值的函式。演算法的目的是在自變數空間內找到 e 的全域性極小點。

首先隨機初始化全體權值和全體偏置值,之後在自變數空間中沿誤差函式 e 在該點的梯度方向的反方向(該方向上方向導數最小,函式值下降最快)前進一個步長。步長稱為學習速率(Learning Rate, LR)。如此反覆迭代,最終(至少是期望)解運動到誤差曲面的全域性最小點。

對於一個稍複雜的神經網路,e 對權值和偏置值的函式將是一個非常複雜的函式。求梯度需要計算該函式對每一個權值和偏置值的偏導數。所幸的是,每一個權值或偏置值的偏導數公式不會因為這個權值或偏置值距離輸出層越遠而越複雜。計算過程中有一箇中間量,每層的權值和偏置值的偏導數都可根據後一層的以統一形式計算出來。每層再把計算過程中產生的傳遞給前一層。這就是「反向傳播」名稱的由來——沿著反向向前傳。這與計算網路輸出時,計算結果向後傳相反。如此可逐層計算出全部權值和偏置值的偏導數,得到梯度。正是反向傳播能夠讓我們訓練神經網路「深處」的引數,這就是「Deep Learning」的含義。

梯度下降法有很多變體。通過調整學習速率 LR 可以提高收斂速度;通過增加衝量可以避免解陷入區域性最優點。還可以每一次不計算全部樣本的 e,而是隨機取一部分樣本,根據它們的 e 更新權值。這樣可以減少計算量。梯度下降是基於誤差函式的一階性質。還有其他方法基於二階性質進行優化,比如共軛法、牛頓法等等。優化作為一門應用數學學科,是機器學習的一個重要理論基礎,在理論和實現上均有眾多結論和方法。