訓練神經網絡
現在我們將學習如何訓練一個神經網絡。還將學習Python深度學習中的反向傳播算法和反向傳遞。
我們必須找到神經網絡權重的最優值來獲得所需的輸出。要訓練神經網絡,我們使用迭代梯度下降法,最初從權重的隨機初始化開始。 在隨機初始化之後,我們利用前向傳播過程對數據的一些子集進行預測,計算相應的成本函數C,並且將每個權重w更新與dC/dw成比例的量,即成本函數w.r.t
的導數。 重量。 比例常數被稱爲學習率。
使用反向傳播算法可以有效計算梯度。對於向後傳播或向後傳播的關鍵觀察,由於分化鏈的規則,神經網絡中每個神經元的梯度可以利用神經元的梯度來計算,它具有向外的邊緣。因此,我們向後計算梯度,即首先計算輸出層的梯度,然後計算最頂層的隱藏層,其次是前面的隱藏層,等等,結束於輸入層。
反向傳播算法主要使用計算圖的思想來實現,其中每個神經元被擴展到計算圖中的許多節點,並執行簡單的數學運算,如加法,乘法。計算圖在邊上沒有任何權重;所有的權重被分配給節點,所以權重成爲它們自己的節點。然後向後傳播算法在計算圖上運行。當計算完成,只有權重節點的梯度才需要更新。其餘的漸變可以被丟棄。
梯度下降優化技術
一種常用的優化功能根據它們造成的誤差來調整權重,稱爲「梯度下降」。
坡度是坡度的另一個名稱,斜坡在xy
圖上表示兩個變量如何相互關聯:坡度上升,距離隨時間變化的變化等。在這種情況下,坡度爲 網絡誤差與單一重量之間的比率; 即錯誤如何隨着重量的變化而變化。
更準確地說,我們想要找出哪個重量產生的誤差最小。 我們希望找到正確表示輸入數據中包含的信號的權重,並將它們轉換爲正確的分類。
隨着神經網絡的學習,它會緩慢調整許多權重,以便它們可以正確地將信號映射到意義。 網絡誤差與這些權重中的每一個之間的比率是導數dE/dw,其計算權重中的輕微變化引起誤差的輕微變化的程度。
每個權重只是涉及許多變換的深層網絡中的一個因素; 權重的信號經過幾層的激活和求和,所以我們使用微積分的鏈式規則通過網絡激活和輸出進行工作。這導致我們討論權重,以及它與整體誤差的關係。
給定兩個變量,錯誤和權重,由第三個變量激活,通過權重傳遞。 我們可以通過首先計算激活變化如何影響誤差變化以及體重變化如何影響激活變化來計算體重變化如何影響誤差變化。
深度學習的基本思想就是:根據產生的錯誤調整模型的權重,直到不能再減少錯誤爲止。
如果梯度值小,則深網絡緩慢,如果值很高,則深度網絡快。 培訓中的任何不準確都會導致不準確的結果。 將網絡從輸出端訓練回輸入端的過程稱爲反向傳播或反向支撐。 我們知道前向傳播從輸入開始並繼續前進。 後退道具反向/相反計算從右到左的漸變。
每次我們計算一個梯度時,都會使用之前所有的梯度。
讓我們從輸出層的節點開始。 邊緣使用該節點處的漸變。 當我們回到隱藏層時,它變得更加複雜。 0
和1
之間的兩個數字的乘積給一個較小的數字。 漸變值越來越小,因此後支柱需要花費大量時間進行訓練並且精確度受到影響。
深度學習算法面臨的挑戰
淺層神經網絡和深度神經網絡都有一定的挑戰,如過度擬合和計算時間。 DNN受到過度擬合的影響,因爲使用了附加的抽象層,這使得他們可以在訓練數據中建立罕見的依賴關係。
在訓練過程中應用正常化方法,例如輟學,早期停止,數據增強,轉移學習,以打擊過度擬合。在訓練期間,剔除正規化從隱藏層中隨機省略單元,這有助於避免罕見的依賴性。 DNN考慮了幾個訓練參數,例如大小,即層數和每層單元的數量,學習速率和初始權重。由於時間和計算資源的高成本,尋找最佳參數並不總是實用的。批處理等幾個黑客可以加速計算。 GPU的巨大處理能力顯着地幫助了訓練過程,因爲所需的矩陣和向量計算在GPU上得到了很好的執行。
丟失(Dropout)
丟失(Dropout)是神經網絡流行的正規化技術。 深度神經網絡特別容易過度擬合。
現在讓我們看看丟失是什麼以及它是如何工作的。
用深度學習的先驅Geoffrey Hinton的話來說,「如果你有一個深層的神經網絡,而且不是過度擬合,那麼你應該使用一個更大的神經網絡並使用丟失」。
丟失是一種技術,在梯度下降的每次迭代中,我們丟棄一組隨機選擇的節點。 這意味着我們會隨機忽略一些節點,就好像它們不存在一樣。
每個神經元以概率q保持並以概率1-q
隨機丟棄。 對於神經網絡中的每個層,值q可能不同。 隱藏層的值爲0.5
,輸入層的值爲0,適用於各種任務。
在評估和預測期間,不使用丟失。 每個神經元的輸出都乘以q,以便到下一層的輸入具有相同的期望值。
丟失(Dropout)背後的想法如下 - 在一個沒有丟失(Dropout)正規化的神經網絡中,神經元在彼此之間形成互相依賴,導致過度擬合。
實施訣竅
通過將隨機選擇的神經元的輸出保持爲0
,在TensorFlow和Pytorch等庫中實現丟失。也就是說,雖然神經元存在,但其輸出被覆蓋爲0
。
早期停止
我們使用稱爲梯度下降的迭代算法訓練神經網絡。
早期停止的想法很直觀。 當錯誤開始增加時,我們停止訓練。 在這裏,錯誤的意思是在驗證數據上測量的錯誤,這是用於調整超參數的訓練數據的一部分。 在這種情況下,超參數就是停止標準。
數據增強
我們增加數據量的過程,或者通過使用現有數據並對其應用一些變換來增加數據量。 所使用的確切轉換取決於我們打算實現的任務。 此外,幫助神經網絡的轉換依賴於其架構。
例如,在諸如對象分類等許多計算機視覺任務中,有效的數據增強技術正在添加新的數據點,這些數據點是裁剪或原始數據的轉換版本。
當計算機接受圖像作爲輸入時,它將採用一組像素值,比如說整個圖像左移15像素。 我們在不同的方向上應用了許多不同的移位,導致數據集增大了原始數據集大小的數倍。
轉移學習
採用預先訓練的模型並用我們自己的數據集「模擬」模型的過程稱爲轉移學習。 有幾種方法可以做到這一點。下面介紹幾種方法 -
- 在大型數據集上訓練預先訓練的模型。 然後,刪除網絡的最後一層,並用隨機權重的新層替換它。
- 然後,凍結所有其他層的權重並正常訓練網絡。 這裏凍結圖層不會改變梯度下降或優化期間的權重。
這背後的概念是,預先訓練的模型將作爲一個特徵提取器,只有最後一層將在當前任務上進行訓練。