神經網路訓練
現在我們將學習如何訓練神經網路。我們還將學習Python深度學習中的反向傳播演算法和反向傳播過程。
我們必須找到神經網路權重的最佳值以獲得期望的輸出。為了訓練神經網路,我們使用迭代梯度下降法。我們最初使用權重的隨機初始化開始。隨機初始化後,我們在資料的某個子集上進行前向傳播過程進行預測,計算相應的代價函式C,並透過與dC/dw成比例的量更新每個權重w,即代價函式相對於權重的導數。比例常數稱為學習率。
可以使用反向傳播演算法有效地計算梯度。反向傳播或反向傳播的關鍵觀察結果是,由於微分的鏈式法則,神經網路中每個神經元的梯度可以使用其具有輸出邊的神經元的梯度來計算。因此,我們反向計算梯度,即首先計算輸出層的梯度,然後計算最頂層的隱藏層,然後計算前面的隱藏層,依此類推,直到輸入層。
反向傳播演算法主要使用計算圖的概念來實現,其中每個神經元都擴充套件到計算圖中的許多節點,並執行簡單的數學運算,如加法、乘法。計算圖的邊上沒有任何權重;所有權重都分配給節點,因此權重成為它們自己的節點。然後在計算圖上執行反向傳播演算法。計算完成後,只需要權重節點的梯度進行更新。其餘的梯度可以丟棄。
梯度下降最佳化技術
一個常用的最佳化函式根據權重造成的誤差調整權重,稱為“梯度下降”。
梯度是斜率的另一種說法,而斜率在x-y圖上表示兩個變數之間的關係:上升量除以執行量,距離變化除以時間變化等。在這種情況下,斜率是網路誤差與單個權重之間的比率;即,當權重變化時,誤差如何變化。
更準確地說,我們想要找到哪個權重產生最小的誤差。我們想要找到正確表示輸入資料中包含的訊號並將其轉換為正確分類的權重。
隨著神經網路的學習,它會緩慢地調整許多權重,以便它們能夠正確地將訊號對映到含義。網路誤差與這些權重中的每一個之間的比率是一個導數dE/dw,它計算權重的微小變化導致誤差的微小變化的程度。
每個權重只是深度網路中的一個因素,它涉及許多轉換;權重的訊號透過啟用並跨多個層進行求和,因此我們使用微積分的鏈式法則來回溯網路啟用和輸出。這將我們引向相關的權重及其與整體誤差的關係。
假設誤差和權重這兩個變數由第三個變數啟用(權重透過它傳遞)來調解。我們可以透過首先計算啟用變化如何影響誤差變化以及權重變化如何影響啟用變化來計算權重變化如何影響誤差變化。
深度學習的基本思想就是這樣:根據模型產生的誤差調整模型的權重,直到無法再減少誤差為止。
如果梯度值較小,深度網路訓練緩慢;如果梯度值較高,則訓練速度快。訓練中的任何不準確都會導致輸出不準確。從輸出到輸入訓練網路的過程稱為反向傳播或反向傳播。我們知道前向傳播從輸入開始並向前工作。反向傳播則相反,從右到左計算梯度。
每次計算梯度時,我們都會使用所有之前的梯度。
讓我們從輸出層的一個節點開始。邊使用該節點處的梯度。當我們回到隱藏層時,它會變得更復雜。0到1之間兩個數的乘積會得到一個更小的數。梯度值不斷變小,結果反向傳播需要大量時間來訓練,並且精度會下降。
深度學習演算法的挑戰
淺層神經網路和深度神經網路都面臨一些挑戰,例如過擬合和計算時間。由於使用了額外的抽象層,DNN容易受到過擬合的影響,這些層允許它們對訓練資料中的罕見依賴關係進行建模。
在訓練過程中應用正則化方法,例如dropout、提前停止、資料增強、遷移學習來對抗過擬合。Dropout正則化在訓練期間隨機省略隱藏層中的單元,這有助於避免罕見的依賴關係。DNN考慮幾個訓練引數,例如大小(即層數和每層單元數)、學習率和初始權重。由於時間和計算資源成本高昂,找到最佳引數並不總是可行的。批次處理等一些技巧可以加快計算速度。GPU強大的處理能力極大地幫助了訓練過程,因為所需的矩陣和向量計算在GPU上執行得很好。
Dropout
Dropout是一種流行的神經網路正則化技術。深度神經網路特別容易過擬合。
現在讓我們看看什麼是dropout以及它是如何工作的。
用深度學習先驅之一Geoffrey Hinton的話來說,“如果你有一個深度神經網路,它沒有過擬合,你可能應該使用更大的網路並使用dropout”。
Dropout是一種技術,在梯度下降的每次迭代中,我們都會丟棄一組隨機選擇的節點。這意味著我們隨機忽略一些節點,就好像它們不存在一樣。
每個神經元以q的機率保留,並以1-q的機率隨機丟棄。q值對於神經網路中的每一層可能不同。對於隱藏層為0.5,對於輸入層為0的值在各種任務上效果良好。
在評估和預測過程中,不使用dropout。每個神經元的輸出乘以q,以便下一層的輸入具有相同的期望值。
Dropout背後的思想如下:在沒有dropout正則化的神經網路中,神經元之間會發展出相互依賴關係,從而導致過擬合。
實現技巧
在TensorFlow和Pytorch等庫中實現Dropout的方法是將隨機選擇的神經元的輸出保持為0。也就是說,儘管神經元存在,但其輸出被覆蓋為0。
提前停止
我們使用稱為梯度下降的迭代演算法來訓練神經網路。
提前停止背後的想法很簡單:當誤差開始增加時,我們停止訓練。在這裡,誤差指的是在驗證資料上測量的誤差,驗證資料是用於調整超引數的訓練資料的一部分。在這種情況下,超引數是停止標準。
資料增強
我們增加現有資料量或透過使用現有資料並對其應用一些轉換來增強它的過程。使用的確切轉換取決於我們打算實現的任務。此外,幫助神經網路的轉換取決於其架構。
例如,在許多計算機視覺任務(如目標分類)中,一種有效的資料增強技術是新增新的資料點,這些資料點是原始資料的裁剪或平移版本。
當計算機接受影像作為輸入時,它會接收畫素值陣列。假設整個影像向左移動了15個畫素。我們在不同的方向上應用許多不同的位移,從而產生一個比原始資料集大許多倍的增強資料集。
遷移學習
採用預訓練模型並使用我們自己的資料集“微調”模型的過程稱為遷移學習。有幾種方法可以做到這一點。下面描述了一些方法:
我們在大型資料集上訓練預訓練模型。然後,我們移除網路的最後一層,並用一個具有隨機權重的新層替換它。
然後,我們凍結所有其他層的權重並正常訓練網路。這裡的凍結層是指在梯度下降或最佳化過程中不改變權重。
這背後的概念是預訓練模型將充當特徵提取器,只有最後一層將在當前任務上進行訓練。