如前所見,我們首個神經網路的各層這樣來轉化資料:
output = relu(dot(w, input) + b)
在此, w 和 b 是張量,是層的屬性。它們被叫做層的權重或者可訓練的引數。權重 w 是核心屬性,b 是偏置屬性。權重包含的資訊,用於網路訓練資料的學習。
起初,權重矩陣填充的是些微小的隨機數,叫做隨機初始化。當然,在 w 和 b 是隨機數時,不能指望這時的 relu( dot( w, input ) + b ) 產生有用的東西。所產生的只是訓練的起點。接下來,根據反饋訊號,逐漸調整權重。這一逐漸調整的過程,叫做訓練。訓練,正是機器學習的基本內容。
訓練是個反覆迴圈的過程,按以下步驟進行:
輸入一批訓練樣本 x 和相對應的目標 y。
針對 x 執行網路(這一步叫做「前進」),以獲得**目標 y_pred。
測算 y_pred 和 y 之間的差值,算出這批資料的網路損失。
更新網路權重,使得這批資料的網路損失有所減小。
最終得到的是訓練資料損失很小的網路,**的目標 y_pred 和預期的目標 y 之間的差值很小。這時的網路已經「學會」把輸入資料,與正確的目標關聯起來。
上面的第1、2、3步足夠簡單。難點是第4步,更新網路權重。如果給出單獨的權重係數,你如何計算它是變大還是變小,並且變化值是多少?
網路的各種運算操作可以微分化。據此,解決上述問題比較好的辦法,是對網路係數相關損失的梯度變化進行運算。你可以往梯度變化相反方向改變系數值,以此減少損失。
張量的導數:梯度
梯度是張量運算的導數。若函式的輸入是多維張量,則函式導數概念的泛化產生出梯度概念。
設想有輸入的向量 x,矩陣 w,目標 y 和損失函式。
你可用 w 計算**目標 y_pred ,計算 y_pred 與期待目標 y 之間的差值(損失):
y_pred = dot(w, x)
loss_value = loss(y_pred, y)
如果輸入的 x 和 y 固定不變,可把「損失」看作 w 函式的對映:
loss_value = f(w)
假設 w 的當前值是 w0,則 w0 的函式 f 的導數是張量的梯度 ( f )( w0 ) 。
w 與 w0 形狀相同。
每個係數的梯度 ( f )( w0 )[ i, j ] 表示 loss_value 改變的大小和方向。當你改變 w0 [ i, j ] 時,可以看到這些。
張量的梯度 ( f )( w0 ) 是當 w = w0 時函式 f( w ) 的梯度。
如前所見,單個係數的函式 f( x) 的導數,可看作曲線 f 的斜率。與此相似,可把梯度 ( f )( w0 ) 看作函式 f( w ) 在w0處的曲率。
隨機梯度下降
可導函式,理論上能分析發現它的極小值,導數為 0 的那個點位。因此,你必須找到導數趨於 0 的那些點位,並確定其中那乙個的函式值最小。
這一理論用於神經網路,意味著從若干權重的組合中,發現最小的損失函式。梯度方程式 ( f )( w ) = 0 可解此題。
梯度方程式,是 n 個變數構成的多項式。n 是網路係數的個數。
當 n = 2 或 n = 3 時,或可使用梯度方程式;但實際的神經網路引數從不少於數千個,甚至經常達到幾千萬個,梯度方程式難以招架對付。
你可以使用本節開頭的「四步演算法」:根據隨機批量資料當前產生的誤差,一點一點地修改引數。因為你所用的是可微分函式,可以計算它的梯度,以較高效率實現第 4 步演算法。如果你朝著梯度相反方向更新權重,損失會一點點地逐次減少:
輸入一批訓練樣本 x 及其相應的目標 y 。
針對 x 執行網路,以得到預期值 y_pred 。
算出這批資料的損失值,即 y_pred 和 y 之間的差距。
算出網路反向傳播的引數的損失梯度。
朝著梯度相反方向少量移動引數值。例如, w -= step * gradient ,把損失減少一點。
在此,step 合理取值很重要。如果它的值太小,迭代次數太多,甚至因某個極小值卡住。如果它的值太大,也不能達到減少損失的目的。
聽它爹說他孩兒 Keras 學習筆記 4 1
這是 deep learning with python 第 3 章的學習筆記。本章內容包括 你已經知道,神經網路的訓練涉及如下東西 層 深度學習的建築構件 層是神經網路的基本資料結構。層是資料處理模組,層的輸入和輸出是乙個或多個張量。有些層沒有狀態表示,但更多常見的層有個狀態表示 層的權重。權重包...
聽它爹說他孩兒 Keras 學習筆記 4 2
keras 擁有以下重要功能 keras 擁有超過 200,000 的使用者,其中大公司有 google,netflix,uber,cern,yelp,square 等。keras 也是 開搞 kaggle 的流行框架。用 keras 進行開發 keras 開發的流程是這樣的 定義訓練用的資料 輸入...
聽它爹說他孩兒 Keras 學習筆記 5 2
減小網路尺寸 防止過度擬合最簡單的辦法是減小網路尺寸,即減少模型可學習引數的數目。決定模型引數多少的,是層的數目和每層單元的數目。模型的引數越多,儲存容量越大,表示訓練樣本及其目標影射關係的詞典效能越好。例如,具有 500,000 二值引數的模型,可以輕鬆學會 mnist 訓練集全部數字的分類。要永...