訓練神經網路


現在我們將學習如何訓練一個神經網路。還將學習Python深度學習中的反向傳播演算法和反向傳遞。

我們必須找到神經網路權重的最優值來獲得所需的輸出。要訓練神經網路,我們使用疊代梯度下降法,最初從權重的隨機初始化開始。 在隨機初始化之後,我們利用前向傳播過程對資料的一些子集進行預測,計算相應的成本函式C,並且將每個權重w更新與dC/dw成比例的量,即成本函式w.r.t的導數。 重量。 比例常數被稱為學習率。

使用反向傳播演算法可以有效計算梯度。對於向後傳播或向後傳播的關鍵觀察,由於分化鏈的規則,神經網路中每個神經元的梯度可以利用神經元的梯度來計算,它具有向外的邊緣。因此,我們向後計算梯度,即首先計算輸出層的梯度,然後計算最頂層的隱藏層,其次是前面的隱藏層,等等,結束於輸入層。

反向傳播演算法主要使用計算圖的思想來實現,其中每個神經元被擴充套件到計算圖中的許多節點,並執行簡單的數學運算,如加法,乘法。計算圖在邊上沒有任何權重;所有的權重被分配給節點,所以權重成為它們自己的節點。然後向後傳播演算法在計算圖上執行。當計算完成,只有權重節點的梯度才需要更新。其餘的漸變可以被丟棄。

梯度下降優化技術

一種常用的優化功能根據它們造成的誤差來調整權重,稱為「梯度下降」。

坡度是坡度的另一個名稱,斜坡在xy圖上表示兩個變數如何相互關聯:坡度上升,距離隨時間變化的變化等。在這種情況下,坡度為 網路誤差與單一重量之間的比率; 即錯誤如何隨著重量的變化而變化。

更準確地說,我們想要找出哪個重量產生的誤差最小。 我們希望找到正確表示輸入資料中包含的信號的權重,並將它們轉換為正確的分類。

隨著神經網路的學習,它會緩慢調整許多權重,以便它們可以正確地將信號對映到意義。 網路誤差與這些權重中的每一個之間的比率是導數dE/dw,其計算權重中的輕微變化引起誤差的輕微變化的程度。

每個權重只是涉及許多變換的深層網路中的一個因素; 權重的信號經過幾層的啟用和求和,所以我們使用微積分的鏈式規則通過網路啟用和輸出進行工作。這導致我們討論權重,以及它與整體誤差的關係。

給定兩個變數,錯誤和權重,由第三個變數啟用,通過權重傳遞。 我們可以通過首先計算啟用變化如何影響誤差變化以及體重變化如何影響啟用變化來計算體重變化如何影響誤差變化。

深度學習的基本思想就是:根據產生的錯誤調整模型的權重,直到不能再減少錯誤為止。

如果梯度值小,則深網路緩慢,如果值很高,則深度網路快。 培訓中的任何不準確都會導致不準確的結果。 將網路從輸出端訓練回輸入端的過程稱為反向傳播或反向支撐。 我們知道前向傳播從輸入開始並繼續前進。 後退道具反向/相反計算從右到左的漸變。

每次我們計算一個梯度時,都會使用之前所有的梯度。

讓我們從輸出層的節點開始。 邊緣使用該節點處的漸變。 當我們回到隱藏層時,它變得更加複雜。 01之間的兩個數位的乘積給一個較小的數位。 漸變值越來越小,因此後支柱需要花費大量時間進行訓練並且精確度受到影響。

深度學習演算法面臨的挑戰

淺層神經網路和深度神經網路都有一定的挑戰,如過度擬合和計算時間。 DNN受到過度擬合的影響,因為使用了附加的抽象層,這使得他們可以在訓練資料中建立罕見的依賴關係。

在訓練過程中應用正常化方法,例如輟學,早期停止,資料增強,轉移學習,以打擊過度擬合。在訓練期間,剔除正規化從隱藏層中隨機省略單元,這有助於避免罕見的依賴性。 DNN考慮了幾個訓練引數,例如大小,即層數和每層單元的數量,學習速率和初始權重。由於時間和計算資源的高成本,尋找最佳引數並不總是實用的。批次處理等幾個駭客可以加速計算。 GPU的巨大處理能力顯著地幫助了訓練過程,因為所需的矩陣和向量計算在GPU上得到了很好的執行。

丟失(Dropout)

丟失(Dropout)是神經網路流行的正規化技術。 深度神經網路特別容易過度擬合。

現在讓我們看看丟失是什麼以及它是如何工作的。

用深度學習的先驅Geoffrey Hinton的話來說,「如果你有一個深層的神經網路,而且不是過度擬合,那麼你應該使用一個更大的神經網路並使用丟失」。

丟失是一種技術,在梯度下降的每次疊代中,我們丟棄一組隨機選擇的節點。 這意味著我們會隨機忽略一些節點,就好像它們不存在一樣。

每個神經元以概率q保持並以概率1-q隨機丟棄。 對於神經網路中的每個層,值q可能不同。 隱藏層的值為0.5,輸入層的值為0,適用於各種任務。

在評估和預測期間,不使用丟失。 每個神經元的輸出都乘以q,以便到下一層的輸入具有相同的期望值。

丟失(Dropout)背後的想法如下 - 在一個沒有丟失(Dropout)正規化的神經網路中,神經元在彼此之間形成互相依賴,導致過度擬合。

實施訣竅
通過將隨機選擇的神經元的輸出保持為0,在TensorFlow和Pytorch等庫中實現丟失。也就是說,雖然神經元存在,但其輸出被覆蓋為0

早期停止

我們使用稱為梯度下降的疊代演算法訓練神經網路。

早期停止的想法很直觀。 當錯誤開始增加時,我們停止訓練。 在這裡,錯誤的意思是在驗證資料上測量的錯誤,這是用於調整超引數的訓練資料的一部分。 在這種情況下,超引數就是停止標準。

資料增強

我們增加資料量的過程,或者通過使用現有資料並對其應用一些變換來增加資料量。 所使用的確切轉換取決於我們打算實現的任務。 此外,幫助神經網路的轉換依賴於其架構。

例如,在諸如物件分類等許多計算機視覺任務中,有效的資料增強技術正在新增新的資料點,這些資料點是裁剪或原始資料的轉換版本。

當計算機接受影象作為輸入時,它將採用一組畫素值,比如說整個影象左移15畫素。 我們在不同的方向上應用了許多不同的移位,導致資料集增大了原始資料集大小的數倍。

轉移學習

採用預先訓練的模型並用我們自己的資料集「模擬」模型的過程稱為轉移學習。 有幾種方法可以做到這一點。下面介紹幾種方法 -

  • 在大型資料集上訓練預先訓練的模型。 然後,刪除網路的最後一層,並用隨機權重的新層替換它。
  • 然後,凍結所有其他層的權重並正常訓練網路。 這裡凍結圖層不會改變梯度下降或優化期間的權重。

這背後的概念是,預先訓練的模型將作為一個特徵提取器,只有最後一層將在當前任務上進行訓練。