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